pci.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:33k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * BK Id: SCCS/s.pci.c 1.40 01/25/02 15:15:24 benh
  3.  */
  4. /*
  5.  * Common pmac/prep/chrp pci routines. -- Cort
  6.  */
  7. #include <linux/config.h>
  8. #include <linux/kernel.h>
  9. #include <linux/pci.h>
  10. #include <linux/delay.h>
  11. #include <linux/string.h>
  12. #include <linux/init.h>
  13. #include <linux/capability.h>
  14. #include <linux/sched.h>
  15. #include <linux/errno.h>
  16. #include <linux/bootmem.h>
  17. #include <asm/processor.h>
  18. #include <asm/io.h>
  19. #include <asm/prom.h>
  20. #include <asm/sections.h>
  21. #include <asm/pci-bridge.h>
  22. #include <asm/residual.h>
  23. #include <asm/byteorder.h>
  24. #include <asm/irq.h>
  25. #include <asm/gg2.h>
  26. #include <asm/uaccess.h>
  27. #include "pci.h"
  28. #define DEBUG
  29. #ifdef DEBUG
  30. #define DBG(x...) printk(x)
  31. #else
  32. #define DBG(x...)
  33. #endif
  34. unsigned long isa_io_base     = 0;
  35. unsigned long isa_mem_base    = 0;
  36. unsigned long pci_dram_offset = 0;
  37. void pcibios_make_OF_bus_map(void);
  38. static void pcibios_fixup_resources(struct pci_dev* dev);
  39. static void fixup_broken_pcnet32(struct pci_dev* dev);
  40. static void fixup_rev1_53c810(struct pci_dev* dev);
  41. #ifdef CONFIG_ALL_PPC
  42. static void pcibios_fixup_cardbus(struct pci_dev* dev);
  43. static u8* pci_to_OF_bus_map;
  44. #endif
  45. /* By default, we don't re-assign bus numbers. We do this only on
  46.  * some pmacs
  47.  */
  48. int pci_assign_all_busses;
  49. struct pci_controller* hose_head;
  50. struct pci_controller** hose_tail = &hose_head;
  51. static int pci_bus_count;
  52. struct pci_fixup pcibios_fixups[] = {
  53. { PCI_FIXUP_HEADER, PCI_VENDOR_ID_TRIDENT, PCI_ANY_ID, fixup_broken_pcnet32 },
  54. { PCI_FIXUP_HEADER, PCI_VENDOR_ID_NCR, PCI_DEVICE_ID_NCR_53C810, fixup_rev1_53c810 },
  55. { PCI_FIXUP_HEADER, PCI_ANY_ID, PCI_ANY_ID, pcibios_fixup_resources },
  56. #ifdef CONFIG_ALL_PPC
  57. /* We should add per-machine fixup support in xxx_setup.c or xxx_pci.c */
  58. { PCI_FIXUP_FINAL, PCI_VENDOR_ID_TI, PCI_ANY_ID, pcibios_fixup_cardbus }, 
  59. #endif /* CONFIG_ALL_PPC */
  60.   { 0 }
  61. };
  62. static void
  63. fixup_rev1_53c810(struct pci_dev* dev)
  64. {
  65. /* rev 1 ncr53c810 chips don't set the class at all which means
  66.  * they don't get their resources remapped. Fix that here.
  67.  */
  68. if ((dev->class == PCI_CLASS_NOT_DEFINED)) {
  69. printk("NCR 53c810 rev 1 detected, setting PCI class.n");
  70. dev->class = PCI_CLASS_STORAGE_SCSI;
  71. }
  72. }
  73. static void
  74. fixup_broken_pcnet32(struct pci_dev* dev)
  75. {
  76. if ((dev->class>>8 == PCI_CLASS_NETWORK_ETHERNET)) {
  77. dev->vendor = PCI_VENDOR_ID_AMD;
  78. pci_write_config_word(dev, PCI_VENDOR_ID, PCI_VENDOR_ID_AMD);
  79. pci_name_device(dev);
  80. }
  81. }
  82. void
  83. pcibios_update_resource(struct pci_dev *dev, struct resource *root,
  84.      struct resource *res, int resource)
  85. {
  86. u32 new, check;
  87. int reg;
  88. struct pci_controller* hose = dev->sysdata;
  89. unsigned long io_offset;
  90. new = res->start;
  91. if (hose && res->flags & IORESOURCE_IO) {
  92. io_offset = (unsigned long)hose->io_base_virt - isa_io_base;
  93. new -= io_offset;
  94. }
  95. if (hose && res->flags & IORESOURCE_MEM)
  96. new -= hose->pci_mem_offset;
  97. new |= (res->flags & PCI_REGION_FLAG_MASK);
  98. if (resource < 6) {
  99. reg = PCI_BASE_ADDRESS_0 + 4*resource;
  100. } else if (resource == PCI_ROM_RESOURCE) {
  101. res->flags |= PCI_ROM_ADDRESS_ENABLE;
  102. reg = dev->rom_base_reg;
  103. } else {
  104. /* Somebody might have asked allocation of a non-standard resource */
  105. return;
  106. }
  107. pci_write_config_dword(dev, reg, new);
  108. pci_read_config_dword(dev, reg, &check);
  109. if ((new ^ check) & ((new & PCI_BASE_ADDRESS_SPACE_IO) ? PCI_BASE_ADDRESS_IO_MASK : PCI_BASE_ADDRESS_MEM_MASK)) {
  110. printk(KERN_ERR "PCI: Error while updating region "
  111.        "%s/%d (%08x != %08x)n", dev->slot_name, resource,
  112.        new, check);
  113. }
  114. }
  115. static void
  116. pcibios_fixup_resources(struct pci_dev *dev)
  117. {
  118. struct pci_controller* hose = (struct pci_controller *)dev->sysdata;
  119. int i;
  120. unsigned long offset;
  121. if (!hose) {
  122. printk(KERN_ERR "No hose for PCI dev %s!n", dev->slot_name);
  123. return;
  124. }
  125. for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
  126. struct resource *res = dev->resource + i;
  127. if (!res->start || !res->flags)
  128. continue;
  129. if (res->end == 0xffffffff) {
  130. DBG("PCI:%s Resource %d [%08lx-%08lx] is unassignedn",
  131.     dev->slot_name, i, res->start, res->end);
  132. res->end -= res->start;
  133. res->start = 0;
  134. continue;
  135. }
  136. offset = 0;
  137. if (res->flags & IORESOURCE_MEM) {
  138. offset = hose->pci_mem_offset;
  139. } else if (res->flags & IORESOURCE_IO) {
  140. offset = (unsigned long) hose->io_base_virt
  141. - isa_io_base;
  142. }
  143. if (offset != 0) {
  144. res->start += offset;
  145. res->end += offset;
  146. #ifdef DEBUG
  147. printk("Fixup res %d (%lx) of dev %s: %lx -> %lxn",
  148.        i, res->flags, dev->slot_name,
  149.        res->start - offset, res->start);
  150. #endif
  151. }
  152. }
  153. }
  154. #ifdef CONFIG_ALL_PPC
  155. static void
  156. pcibios_fixup_cardbus(struct pci_dev* dev)
  157. {
  158. if (_machine != _MACH_Pmac)
  159. return;
  160. /*
  161.  * Fix the interrupt routing on the TI1211 chip on the 1999
  162.  * G3 powerbook, which doesn't get initialized properly by OF.
  163.  * Same problem with the 1410 of the new titanium pbook which
  164.  * has the same register.
  165.  */
  166. if (dev->vendor == PCI_VENDOR_ID_TI
  167.     && (dev->device == PCI_DEVICE_ID_TI_1211 ||
  168.         dev->device == PCI_DEVICE_ID_TI_1410)) {
  169. u8 val;
  170. /* 0x8c == TI122X_IRQMUX, 2 says to route the INTA
  171.    signal out the MFUNC0 pin */
  172. if (pci_read_config_byte(dev, 0x8c, &val) == 0)
  173. pci_write_config_byte(dev, 0x8c, (val & ~0x0f) | 2);
  174. /* Disable ISA interrupt mode */
  175. if (pci_read_config_byte(dev, 0x92, &val) == 0)
  176. pci_write_config_byte(dev, 0x92, val & ~0x06);
  177. }
  178. }
  179. #endif /* CONFIG_ALL_PPC */
  180. /*
  181.  * We need to avoid collisions with `mirrored' VGA ports
  182.  * and other strange ISA hardware, so we always want the
  183.  * addresses to be allocated in the 0x000-0x0ff region
  184.  * modulo 0x400.
  185.  *
  186.  * Why? Because some silly external IO cards only decode
  187.  * the low 10 bits of the IO address. The 0x00-0xff region
  188.  * is reserved for motherboard devices that decode all 16
  189.  * bits, so it's ok to allocate at, say, 0x2800-0x28ff,
  190.  * but we want to try to avoid allocating at 0x2900-0x2bff
  191.  * which might have be mirrored at 0x0100-0x03ff..
  192.  */
  193. void
  194. pcibios_align_resource(void *data, struct resource *res, unsigned long size)
  195. {
  196. struct pci_dev *dev = data;
  197. if (res->flags & IORESOURCE_IO) {
  198. unsigned long start = res->start;
  199. if (size > 0x100) {
  200. printk(KERN_ERR "PCI: I/O Region %s/%d too large"
  201.        " (%ld bytes)n", dev->slot_name,
  202.        dev->resource - res, size);
  203. }
  204. if (start & 0x300) {
  205. start = (start + 0x3ff) & ~0x3ff;
  206. res->start = start;
  207. }
  208. }
  209. }
  210. /*
  211.  *  Handle resources of PCI devices.  If the world were perfect, we could
  212.  *  just allocate all the resource regions and do nothing more.  It isn't.
  213.  *  On the other hand, we cannot just re-allocate all devices, as it would
  214.  *  require us to know lots of host bridge internals.  So we attempt to
  215.  *  keep as much of the original configuration as possible, but tweak it
  216.  *  when it's found to be wrong.
  217.  *
  218.  *  Known BIOS problems we have to work around:
  219.  * - I/O or memory regions not configured
  220.  * - regions configured, but not enabled in the command register
  221.  * - bogus I/O addresses above 64K used
  222.  * - expansion ROMs left enabled (this may sound harmless, but given
  223.  *   the fact the PCI specs explicitly allow address decoders to be
  224.  *   shared between expansion ROMs and other resource regions, it's
  225.  *   at least dangerous)
  226.  *
  227.  *  Our solution:
  228.  * (1) Allocate resources for all buses behind PCI-to-PCI bridges.
  229.  *     This gives us fixed barriers on where we can allocate.
  230.  * (2) Allocate resources for all enabled devices.  If there is
  231.  *     a collision, just mark the resource as unallocated. Also
  232.  *     disable expansion ROMs during this step.
  233.  * (3) Try to allocate resources for disabled devices.  If the
  234.  *     resources were assigned correctly, everything goes well,
  235.  *     if they weren't, they won't disturb allocation of other
  236.  *     resources.
  237.  * (4) Assign new addresses to resources which were either
  238.  *     not configured at all or misconfigured.  If explicitly
  239.  *     requested by the user, configure expansion ROM address
  240.  *     as well.
  241.  */
  242. static void __init
  243. pcibios_allocate_bus_resources(struct list_head *bus_list)
  244. {
  245. struct list_head *ln;
  246. struct pci_bus *bus;
  247. int i;
  248. struct resource *res, *pr;
  249. /* Depth-First Search on bus tree */
  250. for (ln = bus_list->next; ln != bus_list; ln=ln->next) {
  251. bus = pci_bus_b(ln);
  252. for (i = 0; i < 4; ++i) {
  253. if ((res = bus->resource[i]) == NULL || !res->flags)
  254. continue;
  255. if (bus->parent == NULL)
  256. pr = (res->flags & IORESOURCE_IO)?
  257. &ioport_resource: &iomem_resource;
  258. else {
  259. pr = pci_find_parent_resource(bus->self, res);
  260. if (pr == res) {
  261. /* this happens when the generic PCI
  262.  * code (wrongly) decides that this
  263.  * bridge is transparent  -- paulus
  264.  */
  265. continue;
  266. }
  267. }
  268. if (pr && request_resource(pr, res) == 0)
  269. continue;
  270. printk(KERN_ERR "PCI: Cannot allocate resource region "
  271.        "%d of PCI bridge %dn", i, bus->number);
  272. DBG("PCI: resource is %lx..%lx (%lx), parent %pn",
  273.     res->start, res->end, res->flags, pr);
  274. }
  275. pcibios_allocate_bus_resources(&bus->children);
  276. }
  277. }
  278. static inline void alloc_resource(struct pci_dev *dev, int idx)
  279. {
  280. struct resource *pr, *r = &dev->resource[idx];
  281. DBG("PCI:%s: Resource %d: %08lx-%08lx (f=%lx)n",
  282.     dev->slot_name, idx, r->start, r->end, r->flags);
  283. pr = pci_find_parent_resource(dev, r);
  284. if (!pr || request_resource(pr, r) < 0) {
  285. printk(KERN_ERR "PCI: Cannot allocate resource region %d"
  286.        " of device %sn", idx, dev->slot_name);
  287. if (pr)
  288. DBG("PCI:  parent is %p: %08lx-%08lx (f=%lx)n",
  289.     pr, pr->start, pr->end, pr->flags);
  290. /* We'll assign a new address later */
  291. r->end -= r->start;
  292. r->start = 0;
  293. }
  294. }
  295. static void __init
  296. pcibios_allocate_resources(int pass)
  297. {
  298. struct pci_dev *dev;
  299. int idx, disabled;
  300. u16 command;
  301. struct resource *r;
  302. pci_for_each_dev(dev) {
  303. pci_read_config_word(dev, PCI_COMMAND, &command);
  304. for (idx = 0; idx < 6; idx++) {
  305. r = &dev->resource[idx];
  306. if (r->parent) /* Already allocated */
  307. continue;
  308. if (!r->start) /* Not assigned at all */
  309. continue;
  310. if (r->flags & IORESOURCE_IO)
  311. disabled = !(command & PCI_COMMAND_IO);
  312. else
  313. disabled = !(command & PCI_COMMAND_MEMORY);
  314. if (pass == disabled)
  315. alloc_resource(dev, idx);
  316. }
  317. if (pass)
  318. continue;
  319. r = &dev->resource[PCI_ROM_RESOURCE];
  320. if (r->flags & PCI_ROM_ADDRESS_ENABLE) {
  321. /* Turn the ROM off, leave the resource region, but keep it unregistered. */
  322. u32 reg;
  323. DBG("PCI: Switching off ROM of %sn", dev->slot_name);
  324. r->flags &= ~PCI_ROM_ADDRESS_ENABLE;
  325. pci_read_config_dword(dev, dev->rom_base_reg, &reg);
  326. pci_write_config_dword(dev, dev->rom_base_reg,
  327.        reg & ~PCI_ROM_ADDRESS_ENABLE);
  328. }
  329. }
  330. }
  331. static void __init
  332. pcibios_assign_resources(void)
  333. {
  334. struct pci_dev *dev;
  335. int idx;
  336. struct resource *r;
  337. pci_for_each_dev(dev) {
  338. int class = dev->class >> 8;
  339. /* Don't touch classless devices and host bridges */
  340. if (!class || class == PCI_CLASS_BRIDGE_HOST)
  341. continue;
  342. for (idx = 0; idx < 6; idx++) {
  343. r = &dev->resource[idx];
  344. /*
  345.  * We shall assign a new address to this resource,
  346.  * either because the BIOS (sic) forgot to do so
  347.  * or because we have decided the old address was
  348.  * unusable for some reason.
  349.  */
  350. if (!r->start && r->end &&
  351.     (!ppc_md.pcibios_enable_device_hook ||
  352.      !ppc_md.pcibios_enable_device_hook(dev, 1)))
  353. pci_assign_resource(dev, idx);
  354. }
  355. #if 0 /* don't assign ROMs */
  356. r = &dev->resource[PCI_ROM_RESOURCE];
  357. r->end -= r->start;
  358. r->start = 0;
  359. if (r->end)
  360. pci_assign_resource(dev, PCI_ROM_RESOURCE);
  361. #endif
  362. }
  363. }
  364. int
  365. pcibios_enable_resources(struct pci_dev *dev)
  366. {
  367. u16 cmd, old_cmd;
  368. int idx;
  369. struct resource *r;
  370. pci_read_config_word(dev, PCI_COMMAND, &cmd);
  371. old_cmd = cmd;
  372. for(idx=0; idx<6; idx++) {
  373. r = &dev->resource[idx];
  374. if (!r->start && r->end) {
  375. printk(KERN_ERR "PCI: Device %s not available because of resource collisionsn", dev->slot_name);
  376. return -EINVAL;
  377. }
  378. if (r->flags & IORESOURCE_IO)
  379. cmd |= PCI_COMMAND_IO;
  380. if (r->flags & IORESOURCE_MEM)
  381. cmd |= PCI_COMMAND_MEMORY;
  382. }
  383. if (dev->resource[PCI_ROM_RESOURCE].start)
  384. cmd |= PCI_COMMAND_MEMORY;
  385. if (cmd != old_cmd) {
  386. printk("PCI: Enabling device %s (%04x -> %04x)n", dev->slot_name, old_cmd, cmd);
  387. pci_write_config_word(dev, PCI_COMMAND, cmd);
  388. }
  389. return 0;
  390. }
  391. static int next_controller_index;
  392. struct pci_controller * __init
  393. pcibios_alloc_controller(void)
  394. {
  395. struct pci_controller *hose;
  396. hose = (struct pci_controller *)alloc_bootmem(sizeof(*hose));
  397. memset(hose, 0, sizeof(struct pci_controller));
  398. *hose_tail = hose;
  399. hose_tail = &hose->next;
  400. hose->index = next_controller_index++;
  401. return hose;
  402. }
  403. #ifdef CONFIG_ALL_PPC
  404. /*
  405.  * Functions below are used on OpenFirmware machines.
  406.  */
  407. static void __openfirmware
  408. make_one_node_map(struct device_node* node, u8 pci_bus)
  409. {
  410. int *bus_range;
  411. int len;
  412. if (pci_bus >= pci_bus_count)
  413. return;
  414. bus_range = (int *) get_property(node, "bus-range", &len);
  415. if (bus_range == NULL || len < 2 * sizeof(int)) {
  416. printk(KERN_WARNING "Can't get bus-range for %sn",
  417.        node->full_name);
  418. return;
  419. }
  420. pci_to_OF_bus_map[pci_bus] = bus_range[0];
  421. for (node=node->child; node != 0;node = node->sibling) {
  422. struct pci_dev* dev;
  423. unsigned int *class_code, *reg;
  424. class_code = (unsigned int *) get_property(node, "class-code", 0);
  425. if (!class_code || ((*class_code >> 8) != PCI_CLASS_BRIDGE_PCI &&
  426. (*class_code >> 8) != PCI_CLASS_BRIDGE_CARDBUS))
  427. continue;
  428. reg = (unsigned int *)get_property(node, "reg", 0);
  429. if (!reg)
  430. continue;
  431. dev = pci_find_slot(pci_bus, ((reg[0] >> 8) & 0xff));
  432. if (!dev || !dev->subordinate)
  433. continue;
  434. make_one_node_map(node, dev->subordinate->number);
  435. }
  436. }
  437. void __openfirmware
  438. pcibios_make_OF_bus_map(void)
  439. {
  440. int i;
  441. struct pci_controller* hose;
  442. u8* of_prop_map;
  443. pci_to_OF_bus_map = (u8*)kmalloc(pci_bus_count, GFP_KERNEL);
  444. if (!pci_to_OF_bus_map) {
  445. printk(KERN_ERR "Can't allocate OF bus map !n");
  446. return;
  447. }
  448. /* We fill the bus map with invalid values, that helps
  449.  * debugging.
  450.  */
  451. for (i=0; i<pci_bus_count; i++)
  452. pci_to_OF_bus_map[i] = 0xff;
  453. /* For each hose, we begin searching bridges */
  454. for(hose=hose_head; hose; hose=hose->next) {
  455. struct device_node* node;
  456. node = (struct device_node *)hose->arch_data;
  457. if (!node)
  458. continue;
  459. make_one_node_map(node, hose->first_busno);
  460. }
  461. of_prop_map = get_property(find_path_device("/"), "pci-OF-bus-map", 0);
  462. if (of_prop_map)
  463. memcpy(of_prop_map, pci_to_OF_bus_map, pci_bus_count);
  464. #ifdef DEBUG
  465. printk("PCI->OF bus map:n");
  466. for (i=0; i<pci_bus_count; i++) {
  467. if (pci_to_OF_bus_map[i] == 0xff)
  468. continue;
  469. printk("%d -> %dn", i, pci_to_OF_bus_map[i]);
  470. }
  471. #endif
  472. }
  473. typedef int (*pci_OF_scan_iterator)(struct device_node* node, void* data);
  474. static struct device_node* __openfirmware
  475. scan_OF_pci_childs(struct device_node* node, pci_OF_scan_iterator filter, void* data)
  476. {
  477. struct device_node* sub_node;
  478. for (; node != 0;node = node->sibling) {
  479. unsigned int *class_code;
  480. if (filter(node, data))
  481. return node;
  482. /* For PCI<->PCI bridges or CardBus bridges, we go down
  483.  * Note: some OFs create a parent node "multifunc-device" as
  484.  * a fake root for all functions of a multi-function device,
  485.  * we go down them as well.
  486.  */
  487. class_code = (unsigned int *) get_property(node, "class-code", 0);
  488. if ((!class_code || ((*class_code >> 8) != PCI_CLASS_BRIDGE_PCI &&
  489. (*class_code >> 8) != PCI_CLASS_BRIDGE_CARDBUS)) &&
  490. strcmp(node->name, "multifunc-device"))
  491. continue;
  492. sub_node = scan_OF_pci_childs(node->child, filter, data);
  493. if (sub_node)
  494. return sub_node;
  495. }
  496. return NULL;
  497. }
  498. static int
  499. scan_OF_pci_childs_iterator(struct device_node* node, void* data)
  500. {
  501. unsigned int *reg;
  502. u8* fdata = (u8*)data;
  503. reg = (unsigned int *) get_property(node, "reg", 0);
  504. if (reg && ((reg[0] >> 8) & 0xff) == fdata[1]
  505. && ((reg[0] >> 16) & 0xff) == fdata[0])
  506. return 1;
  507. return 0;
  508. }
  509. static struct device_node* __openfirmware
  510. scan_OF_childs_for_device(struct device_node* node, u8 bus, u8 dev_fn)
  511. {
  512. u8 filter_data[2] = {bus, dev_fn};
  513. return scan_OF_pci_childs(node, scan_OF_pci_childs_iterator, filter_data);
  514. }
  515. /* 
  516.  * Scans the OF tree for a device node matching a PCI device
  517.  */
  518. struct device_node*
  519. pci_device_to_OF_node(struct pci_dev *dev)
  520. {
  521. struct pci_controller *hose;
  522. struct device_node *node;
  523. int bus;
  524. if (!have_of)
  525. return NULL;
  526. /* Lookup the hose */
  527. bus = dev->bus->number;
  528. hose = pci_bus_to_hose(bus);
  529. if (!hose)
  530. return NULL;
  531. /* Check it has an OF node associated */
  532. node = (struct device_node *) hose->arch_data;
  533. if (!node)
  534. return NULL;
  535. /* Fixup bus number according to what OF think it is. */
  536. if (pci_to_OF_bus_map)
  537. bus = pci_to_OF_bus_map[bus];
  538. if (bus == 0xff)
  539. return NULL;
  540. /* Now, lookup childs of the hose */
  541. return scan_OF_childs_for_device(node->child, bus, dev->devfn);
  542. }
  543. /* This routine is meant to be used early during boot, when the
  544.  * PCI bus numbers have not yet been assigned, and you need to
  545.  * issue PCI config cycles to an OF device.
  546.  * It could also be used to "fix" RTAS config cycles if you want
  547.  * to set pci_assign_all_busses to 1 and still use RTAS for PCI
  548.  * config cycles.
  549.  */
  550. struct pci_controller*
  551. pci_find_hose_for_OF_device(struct device_node* node)
  552. {
  553. if (!have_of)
  554. return NULL;
  555. while(node) {
  556. struct pci_controller* hose;
  557. for (hose=hose_head;hose;hose=hose->next)
  558. if (hose->arch_data == node)
  559. return hose;
  560. node=node->parent;
  561. }
  562. return NULL;
  563. }
  564. static int __openfirmware
  565. find_OF_pci_device_filter(struct device_node* node, void* data)
  566. {
  567. return ((void *)node == data);
  568. }
  569. /* 
  570.  * Returns the PCI device matching a given OF node
  571.  */
  572. int
  573. pci_device_from_OF_node(struct device_node* node, u8* bus, u8* devfn)
  574. {
  575. unsigned int *reg;
  576. struct pci_controller* hose;
  577. struct pci_dev* dev;
  578. if (!have_of)
  579. return -ENODEV;
  580. /* Make sure it's really a PCI device */
  581. hose = pci_find_hose_for_OF_device(node);
  582. if (!hose || !hose->arch_data)
  583. return -ENODEV;
  584. if (!scan_OF_pci_childs(((struct device_node*)hose->arch_data)->child,
  585. find_OF_pci_device_filter, (void *)node))
  586. return -ENODEV;
  587. reg = (unsigned int *) get_property(node, "reg", 0);
  588. if (!reg)
  589. return -ENODEV;
  590. *bus = (reg[0] >> 16) & 0xff;
  591. *devfn = ((reg[0] >> 8) & 0xff);
  592. /* Ok, here we need some tweak. If we have already renumbered
  593.  * all busses, we can't rely on the OF bus number any more.
  594.  * the pci_to_OF_bus_map is not enough as several PCI busses
  595.  * may match the same OF bus number.
  596.  */
  597. if (!pci_to_OF_bus_map)
  598. return 0;
  599. pci_for_each_dev(dev) {
  600. if (pci_to_OF_bus_map[dev->bus->number] != *bus)
  601. continue;
  602. if (dev->devfn != *devfn)
  603. continue;
  604. *bus = dev->bus->number;
  605. return 0;
  606. }
  607. return -ENODEV;
  608. }
  609. void __init
  610. pci_process_bridge_OF_ranges(struct pci_controller *hose,
  611.    struct device_node *dev, int primary)
  612. {
  613. unsigned int *ranges, *prev;
  614. int rlen = 0;
  615. int memno = 0;
  616. struct resource *res;
  617. int np, na = prom_n_addr_cells(dev);
  618. np = na + 5;
  619. /* First we try to merge ranges to fix a problem with some pmacs
  620.  * that can have more than 3 ranges, fortunately using contiguous
  621.  * addresses -- BenH
  622.  */
  623. ranges = (unsigned int *) get_property(dev, "ranges", &rlen);
  624. prev = NULL;
  625. while ((rlen -= np * sizeof(unsigned int)) >= 0) {
  626. if (prev) {
  627. if (prev[0] == ranges[0] && prev[1] == ranges[1] &&
  628. (prev[2] + prev[na+4]) == ranges[2] &&
  629. (prev[na+2] + prev[na+4]) == ranges[na+2]) {
  630. prev[na+4] += ranges[na+4];
  631. ranges[0] = 0;
  632. ranges += np;
  633. continue;
  634. }
  635. }
  636. prev = ranges;
  637. ranges += np;
  638. }
  639. /*
  640.  * The ranges property is laid out as an array of elements,
  641.  * each of which comprises:
  642.  *   cells 0 - 2: a PCI address
  643.  *   cells 3 or 3+4: a CPU physical address
  644.  * (size depending on dev->n_addr_cells)
  645.  *   cells 4+5 or 5+6: the size of the range
  646.  */
  647. rlen = 0;
  648. hose->io_base_phys = 0;
  649. ranges = (unsigned int *) get_property(dev, "ranges", &rlen);
  650. while ((rlen -= np * sizeof(unsigned int)) >= 0) {
  651. res = NULL;
  652. switch (ranges[0] >> 24) {
  653. case 1: /* I/O space */
  654. if (ranges[2] != 0)
  655. break;
  656. hose->io_base_phys = ranges[na+2];
  657. hose->io_base_virt = ioremap(ranges[na+2], ranges[na+4]);
  658. if (primary)
  659. isa_io_base = (unsigned long) hose->io_base_virt;
  660. res = &hose->io_resource;
  661. res->flags = IORESOURCE_IO;
  662. res->start = ranges[2];
  663. break;
  664. case 2: /* memory space */
  665. memno = 0;
  666. if (ranges[1] == 0 && ranges[2] == 0
  667.     && ranges[na+4] <= (16 << 20)) {
  668. /* 1st 16MB, i.e. ISA memory area */
  669. if (primary)
  670. isa_mem_base = ranges[na+2];
  671. memno = 1;
  672. }
  673. while (memno < 3 && hose->mem_resources[memno].flags)
  674. ++memno;
  675. if (memno == 0)
  676. hose->pci_mem_offset = ranges[na+2] - ranges[2];
  677. if (memno < 3) {
  678. res = &hose->mem_resources[memno];
  679. res->flags = IORESOURCE_MEM;
  680. res->start = ranges[na+2];
  681. }
  682. break;
  683. }
  684. if (res != NULL) {
  685. res->name = dev->full_name;
  686. res->end = res->start + ranges[na+4] - 1;
  687. res->parent = NULL;
  688. res->sibling = NULL;
  689. res->child = NULL;
  690. }
  691. ranges += np;
  692. }
  693. }
  694. #endif /* CONFIG_ALL_PPC */
  695. void __init
  696. pcibios_init(void)
  697. {
  698. struct pci_controller *hose;
  699. struct pci_bus *bus;
  700. int next_busno;
  701. printk(KERN_INFO "PCI: Probing PCI hardwaren");
  702. /* Scan all of the recorded PCI controllers.  */
  703. for (next_busno = 0, hose = hose_head; hose; hose = hose->next) {
  704. if (pci_assign_all_busses)
  705. hose->first_busno = next_busno;
  706. hose->last_busno = 0xff;
  707. bus = pci_scan_bus(hose->first_busno, hose->ops, hose);
  708. hose->last_busno = bus->subordinate;
  709. if (pci_assign_all_busses || next_busno <= hose->last_busno)
  710. next_busno = hose->last_busno+1;
  711. }
  712. pci_bus_count = next_busno;
  713. /* OpenFirmware based machines need a map of OF bus
  714.  * numbers vs. kernel bus numbers since we may have to
  715.  * remap them.
  716.  */
  717. if (pci_assign_all_busses && have_of)
  718. pcibios_make_OF_bus_map();
  719. /* Call machine dependant fixup */
  720. if (ppc_md.pcibios_fixup)
  721. ppc_md.pcibios_fixup();
  722. /* Allocate and assign resources */
  723. pcibios_allocate_bus_resources(&pci_root_buses);
  724. pcibios_allocate_resources(0);
  725. pcibios_allocate_resources(1);
  726. pcibios_assign_resources();
  727. /* Call machine dependent post-init code */
  728. if (ppc_md.pcibios_after_init)
  729. ppc_md.pcibios_after_init();
  730. }
  731. int __init
  732. pcibios_assign_all_busses(void)
  733. {
  734. return pci_assign_all_busses;
  735. }
  736. void __init
  737. pcibios_fixup_pbus_ranges(struct pci_bus * bus, struct pbus_set_ranges_data * ranges)
  738. {
  739. ranges->io_start -= bus->resource[0]->start;
  740. ranges->io_end -= bus->resource[0]->start;
  741. ranges->mem_start -= bus->resource[1]->start;
  742. ranges->mem_end -= bus->resource[1]->start;
  743. }
  744. unsigned long resource_fixup(struct pci_dev * dev, struct resource * res,
  745.      unsigned long start, unsigned long size)
  746. {
  747. return start;
  748. }
  749. void __init pcibios_fixup_bus(struct pci_bus *bus)
  750. {
  751. struct pci_controller *hose = (struct pci_controller *) bus->sysdata;
  752. unsigned long io_offset;
  753. struct resource *res;
  754. int i;
  755. io_offset = (unsigned long)hose->io_base_virt - isa_io_base;
  756. if (bus->parent == NULL) {
  757. /* This is a host bridge - fill in its resources */
  758. hose->bus = bus;
  759. bus->resource[0] = res = &hose->io_resource;
  760. if (!res->flags) {
  761. if (io_offset)
  762. printk(KERN_ERR "I/O resource not set for host"
  763.        " bridge %dn", hose->index);
  764. res->start = 0;
  765. res->end = IO_SPACE_LIMIT;
  766. res->flags = IORESOURCE_IO;
  767. }
  768. res->start += io_offset;
  769. res->end += io_offset;
  770. for (i = 0; i < 3; ++i) {
  771. res = &hose->mem_resources[i];
  772. if (!res->flags) {
  773. if (i > 0)
  774. continue;
  775. printk(KERN_ERR "Memory resource not set for "
  776.        "host bridge %dn", hose->index);
  777. res->start = hose->pci_mem_offset;
  778. res->end = ~0U;
  779. res->flags = IORESOURCE_MEM;
  780. }
  781. bus->resource[i+1] = res;
  782. }
  783. } else {
  784. /* This is a subordinate bridge */
  785. pci_read_bridge_bases(bus);
  786. for (i = 0; i < 4; ++i) {
  787. if ((res = bus->resource[i]) == NULL)
  788. continue;
  789. if (!res->flags)
  790. continue;
  791. if (io_offset && (res->flags & IORESOURCE_IO)) {
  792. res->start += io_offset;
  793. res->end += io_offset;
  794. } else if (hose->pci_mem_offset
  795.    && (res->flags & IORESOURCE_MEM)) {
  796. res->start += hose->pci_mem_offset;
  797. res->end += hose->pci_mem_offset;
  798. }
  799. }
  800. }
  801. if (ppc_md.pcibios_fixup_bus)
  802. ppc_md.pcibios_fixup_bus(bus);
  803. }
  804. char __init *pcibios_setup(char *str)
  805. {
  806. return str;
  807. }
  808. /* the next one is stolen from the alpha port... */
  809. void __init
  810. pcibios_update_irq(struct pci_dev *dev, int irq)
  811. {
  812. pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq);
  813. /* XXX FIXME - update OF device tree node interrupt property */
  814. }
  815. int pcibios_enable_device(struct pci_dev *dev)
  816. {
  817. u16 cmd, old_cmd;
  818. int idx;
  819. struct resource *r;
  820. if (ppc_md.pcibios_enable_device_hook)
  821. if (ppc_md.pcibios_enable_device_hook(dev, 0))
  822. return -EINVAL;
  823. pci_read_config_word(dev, PCI_COMMAND, &cmd);
  824. old_cmd = cmd;
  825. for (idx=0; idx<6; idx++) {
  826. r = &dev->resource[idx];
  827. if (!r->start && r->end) {
  828. printk(KERN_ERR "PCI: Device %s not available because of resource collisionsn", dev->slot_name);
  829. return -EINVAL;
  830. }
  831. if (r->flags & IORESOURCE_IO)
  832. cmd |= PCI_COMMAND_IO;
  833. if (r->flags & IORESOURCE_MEM)
  834. cmd |= PCI_COMMAND_MEMORY;
  835. }
  836. if (cmd != old_cmd) {
  837. printk("PCI: Enabling device %s (%04x -> %04x)n",
  838.        dev->slot_name, old_cmd, cmd);
  839. pci_write_config_word(dev, PCI_COMMAND, cmd);
  840. }
  841. return 0;
  842. }
  843. struct pci_controller*
  844. pci_bus_to_hose(int bus)
  845. {
  846. struct pci_controller* hose = hose_head;
  847. for (; hose; hose = hose->next)
  848. if (bus >= hose->first_busno && bus <= hose->last_busno)
  849. return hose;
  850. return NULL;
  851. }
  852. void*
  853. pci_bus_io_base(unsigned int bus)
  854. {
  855. struct pci_controller *hose;
  856. hose = pci_bus_to_hose(bus);
  857. if (!hose)
  858. return NULL;
  859. return hose->io_base_virt;
  860. }
  861. unsigned long
  862. pci_bus_io_base_phys(unsigned int bus)
  863. {
  864. struct pci_controller *hose;
  865. hose = pci_bus_to_hose(bus);
  866. if (!hose)
  867. return 0;
  868. return hose->io_base_phys;
  869. }
  870. unsigned long
  871. pci_bus_mem_base_phys(unsigned int bus)
  872. {
  873. struct pci_controller *hose;
  874. hose = pci_bus_to_hose(bus);
  875. if (!hose)
  876. return 0;
  877. return hose->pci_mem_offset;
  878. }
  879. unsigned long
  880. pci_resource_to_bus(struct pci_dev *pdev, struct resource *res)
  881. {
  882. /* Hack alert again ! See comments in chrp_pci.c
  883.  */
  884. struct pci_controller* hose =
  885. (struct pci_controller *)pdev->sysdata;
  886. if (hose && res->flags & IORESOURCE_MEM)
  887. return res->start - hose->pci_mem_offset;
  888. /* We may want to do something with IOs here... */
  889. return res->start;
  890. }
  891. /*
  892.  * Return the index of the PCI controller for device pdev.
  893.  */
  894. int pci_controller_num(struct pci_dev *dev)
  895. {
  896. struct pci_controller *hose = (struct pci_controller *) dev->sysdata;
  897. return hose->index;
  898. }
  899. /*
  900.  * Platform support for /proc/bus/pci/X/Y mmap()s,
  901.  * modelled on the sparc64 implementation by Dave Miller.
  902.  *  -- paulus.
  903.  */
  904. /*
  905.  * Adjust vm_pgoff of VMA such that it is the physical page offset
  906.  * corresponding to the 32-bit pci bus offset for DEV requested by the user.
  907.  *
  908.  * Basically, the user finds the base address for his device which he wishes
  909.  * to mmap.  They read the 32-bit value from the config space base register,
  910.  * add whatever PAGE_SIZE multiple offset they wish, and feed this into the
  911.  * offset parameter of mmap on /proc/bus/pci/XXX for that device.
  912.  *
  913.  * Returns negative error code on failure, zero on success.
  914.  */
  915. static __inline__ int
  916. __pci_mmap_make_offset(struct pci_dev *dev, struct vm_area_struct *vma,
  917.        enum pci_mmap_state mmap_state)
  918. {
  919. struct pci_controller *hose = (struct pci_controller *) dev->sysdata;
  920. unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
  921. unsigned long io_offset = 0;
  922. int i, res_bit;
  923. if (hose == 0)
  924. return -EINVAL; /* should never happen */
  925. /* If memory, add on the PCI bridge address offset */
  926. if (mmap_state == pci_mmap_mem) {
  927. offset += hose->pci_mem_offset;
  928. res_bit = IORESOURCE_MEM;
  929. } else {
  930. io_offset = (unsigned long)hose->io_base_virt - isa_io_base;
  931. offset += io_offset;
  932. res_bit = IORESOURCE_IO;
  933. }
  934. /*
  935.  * Check that the offset requested corresponds to one of the
  936.  * resources of the device.
  937.  */
  938. for (i = 0; i <= PCI_ROM_RESOURCE; i++) {
  939. struct resource *rp = &dev->resource[i];
  940. int flags = rp->flags;
  941. /* treat ROM as memory (should be already) */
  942. if (i == PCI_ROM_RESOURCE)
  943. flags |= IORESOURCE_MEM;
  944. /* Active and same type? */
  945. if ((flags & res_bit) == 0)
  946. continue;
  947. /* In the range of this resource? */
  948. if (offset < (rp->start & PAGE_MASK) || offset > rp->end)
  949. continue;
  950. /* found it! construct the final physical address */
  951. if (mmap_state == pci_mmap_io)
  952. offset += hose->io_base_phys - io_offset;
  953. vma->vm_pgoff = offset >> PAGE_SHIFT;
  954. return 0;
  955. }
  956. return -EINVAL;
  957. }
  958. /*
  959.  * Set vm_flags of VMA, as appropriate for this architecture, for a pci device
  960.  * mapping.
  961.  */
  962. static __inline__ void
  963. __pci_mmap_set_flags(struct pci_dev *dev, struct vm_area_struct *vma,
  964.      enum pci_mmap_state mmap_state)
  965. {
  966. vma->vm_flags |= VM_SHM | VM_LOCKED | VM_IO;
  967. }
  968. /*
  969.  * Set vm_page_prot of VMA, as appropriate for this architecture, for a pci
  970.  * device mapping.
  971.  */
  972. static __inline__ void
  973. __pci_mmap_set_pgprot(struct pci_dev *dev, struct vm_area_struct *vma,
  974.       enum pci_mmap_state mmap_state, int write_combine)
  975. {
  976. int prot = pgprot_val(vma->vm_page_prot);
  977. /* XXX would be nice to have a way to ask for write-through */
  978. prot |= _PAGE_NO_CACHE;
  979. if (!write_combine)
  980. prot |= _PAGE_GUARDED;
  981. vma->vm_page_prot = __pgprot(prot);
  982. }
  983. /*
  984.  * Perform the actual remap of the pages for a PCI device mapping, as
  985.  * appropriate for this architecture.  The region in the process to map
  986.  * is described by vm_start and vm_end members of VMA, the base physical
  987.  * address is found in vm_pgoff.
  988.  * The pci device structure is provided so that architectures may make mapping
  989.  * decisions on a per-device or per-bus basis.
  990.  *
  991.  * Returns a negative error code on failure, zero on success.
  992.  */
  993. int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
  994. enum pci_mmap_state mmap_state,
  995. int write_combine)
  996. {
  997. int ret;
  998. ret = __pci_mmap_make_offset(dev, vma, mmap_state);
  999. if (ret < 0)
  1000. return ret;
  1001. __pci_mmap_set_flags(dev, vma, mmap_state);
  1002. __pci_mmap_set_pgprot(dev, vma, mmap_state, write_combine);
  1003. ret = remap_page_range(vma->vm_start, vma->vm_pgoff << PAGE_SHIFT,
  1004.        vma->vm_end - vma->vm_start, vma->vm_page_prot);
  1005. return ret;
  1006. }
  1007. /* Obsolete functions. Should be removed once the symbios driver
  1008.  * is fixed
  1009.  */
  1010. unsigned long
  1011. phys_to_bus(unsigned long pa)
  1012. {
  1013. struct pci_controller *hose;
  1014. int i;
  1015. for (hose = hose_head; hose; hose = hose->next) {
  1016. for (i = 0; i < 3; ++i) {
  1017. if (pa >= hose->mem_resources[i].start
  1018.     && pa <= hose->mem_resources[i].end) {
  1019. /*
  1020.  * XXX the hose->pci_mem_offset really
  1021.  * only applies to mem_resources[0].
  1022.  * We need a way to store an offset for
  1023.  * the others.  -- paulus
  1024.  */
  1025. if (i == 0)
  1026. pa -= hose->pci_mem_offset;
  1027. return pa;
  1028. }
  1029. }
  1030. }
  1031. /* hmmm, didn't find it */
  1032. return 0;
  1033. }
  1034. unsigned long
  1035. pci_phys_to_bus(unsigned long pa, int busnr)
  1036. {
  1037. struct pci_controller* hose = pci_bus_to_hose(busnr);
  1038. if (!hose)
  1039. return pa;
  1040. return pa - hose->pci_mem_offset;
  1041. }
  1042. unsigned long
  1043. pci_bus_to_phys(unsigned int ba, int busnr)
  1044. {
  1045. struct pci_controller* hose = pci_bus_to_hose(busnr);
  1046. if (!hose)
  1047. return ba;
  1048. return ba + hose->pci_mem_offset;
  1049. }
  1050. /* Provide information on locations of various I/O regions in physical
  1051.  * memory.  Do this on a per-card basis so that we choose the right
  1052.  * root bridge.
  1053.  * Note that the returned IO or memory base is a physical address
  1054.  */
  1055. long
  1056. sys_pciconfig_iobase(long which, unsigned long bus, unsigned long devfn)
  1057. {
  1058. struct pci_controller* hose = pci_bus_to_hose(bus);
  1059. long result = -EOPNOTSUPP;
  1060. if (!hose)
  1061. return -ENODEV;
  1062. switch (which) {
  1063. case IOBASE_BRIDGE_NUMBER:
  1064. return (long)hose->first_busno;
  1065. case IOBASE_MEMORY:
  1066. return (long)hose->pci_mem_offset;
  1067. case IOBASE_IO:
  1068. return (long)hose->io_base_phys;
  1069. case IOBASE_ISA_IO:
  1070. return (long)isa_io_base;
  1071. case IOBASE_ISA_MEM:
  1072. return (long)isa_mem_base;
  1073. }
  1074. return result;
  1075. }
  1076. /*
  1077.  * Null PCI config access functions, for the case when we can't
  1078.  * find a hose.
  1079.  */
  1080. #define NULL_PCI_OP(rw, size, type)
  1081. static int
  1082. null_##rw##_config_##size(struct pci_dev *dev, int offset, type val)
  1083. {
  1084. return PCIBIOS_DEVICE_NOT_FOUND;    
  1085. }
  1086. NULL_PCI_OP(read, byte, u8 *)
  1087. NULL_PCI_OP(read, word, u16 *)
  1088. NULL_PCI_OP(read, dword, u32 *)
  1089. NULL_PCI_OP(write, byte, u8)
  1090. NULL_PCI_OP(write, word, u16)
  1091. NULL_PCI_OP(write, dword, u32)
  1092. static struct pci_ops null_pci_ops =
  1093. {
  1094. null_read_config_byte,
  1095. null_read_config_word,
  1096. null_read_config_dword,
  1097. null_write_config_byte,
  1098. null_write_config_word,
  1099. null_write_config_dword
  1100. };
  1101. /*
  1102.  * These functions are used early on before PCI scanning is done
  1103.  * and all of the pci_dev and pci_bus structures have been created.
  1104.  */
  1105. static struct pci_dev *
  1106. fake_pci_dev(struct pci_controller *hose, int busnr, int devfn)
  1107. {
  1108. static struct pci_dev dev;
  1109. static struct pci_bus bus;
  1110. if (hose == 0) {
  1111. hose = pci_bus_to_hose(busnr);
  1112. if (hose == 0)
  1113. printk(KERN_ERR "Can't find hose for PCI bus %d!n", busnr);
  1114. }
  1115. dev.bus = &bus;
  1116. dev.sysdata = hose;
  1117. dev.devfn = devfn;
  1118. bus.number = busnr;
  1119. bus.ops = hose? hose->ops: &null_pci_ops;
  1120. return &dev;
  1121. }
  1122. #define EARLY_PCI_OP(rw, size, type)
  1123. int early_##rw##_config_##size(struct pci_controller *hose, int bus,
  1124.        int devfn, int offset, type value)
  1125. {
  1126. return pci_##rw##_config_##size(fake_pci_dev(hose, bus, devfn),
  1127. offset, value);
  1128. }
  1129. EARLY_PCI_OP(read, byte, u8 *)
  1130. EARLY_PCI_OP(read, word, u16 *)
  1131. EARLY_PCI_OP(read, dword, u32 *)
  1132. EARLY_PCI_OP(write, byte, u8)
  1133. EARLY_PCI_OP(write, word, u16)
  1134. EARLY_PCI_OP(write, dword, u32)