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

嵌入式Linux

开发平台:

Unix_Linux

  1. /* $Id: pci_common.c,v 1.27.2.2 2002/02/01 00:56:44 davem Exp $
  2.  * pci_common.c: PCI controller common support.
  3.  *
  4.  * Copyright (C) 1999 David S. Miller (davem@redhat.com)
  5.  */
  6. #include <linux/string.h>
  7. #include <linux/slab.h>
  8. #include <linux/init.h>
  9. #include <asm/pbm.h>
  10. /* Fix self device of BUS and hook it into BUS->self.
  11.  * The pci_scan_bus does not do this for the host bridge.
  12.  */
  13. void __init pci_fixup_host_bridge_self(struct pci_bus *pbus)
  14. {
  15. struct list_head *walk = &pbus->devices;
  16. walk = walk->next;
  17. while (walk != &pbus->devices) {
  18. struct pci_dev *pdev = pci_dev_b(walk);
  19. if (pdev->class >> 8 == PCI_CLASS_BRIDGE_HOST) {
  20. pbus->self = pdev;
  21. return;
  22. }
  23. walk = walk->next;
  24. }
  25. prom_printf("PCI: Critical error, cannot find host bridge PDEV.n");
  26. prom_halt();
  27. }
  28. /* Find the OBP PROM device tree node for a PCI device.
  29.  * Return zero if not found.
  30.  */
  31. static int __init find_device_prom_node(struct pci_pbm_info *pbm,
  32. struct pci_dev *pdev,
  33. int bus_prom_node,
  34. struct linux_prom_pci_registers *pregs,
  35. int *nregs)
  36. {
  37. int node;
  38. /*
  39.  * Return the PBM's PROM node in case we are it's PCI device,
  40.  * as the PBM's reg property is different to standard PCI reg
  41.  * properties. We would delete this device entry otherwise,
  42.  * which confuses XFree86's device probing...
  43.  */
  44. if ((pdev->bus->number == pbm->pci_bus->number) && (pdev->devfn == 0) &&
  45.     (pdev->vendor == PCI_VENDOR_ID_SUN) &&
  46.     (pdev->device == PCI_DEVICE_ID_SUN_PBM ||
  47.      pdev->device == PCI_DEVICE_ID_SUN_SCHIZO ||
  48.      pdev->device == PCI_DEVICE_ID_SUN_SABRE ||
  49.      pdev->device == PCI_DEVICE_ID_SUN_HUMMINGBIRD)) {
  50. *nregs = 0;
  51. return bus_prom_node;
  52. }
  53. node = prom_getchild(bus_prom_node);
  54. while (node != 0) {
  55. int err = prom_getproperty(node, "reg",
  56.    (char *)pregs,
  57.    sizeof(*pregs) * PROMREG_MAX);
  58. if (err == 0 || err == -1)
  59. goto do_next_sibling;
  60. if (((pregs[0].phys_hi >> 8) & 0xff) == pdev->devfn) {
  61. *nregs = err / sizeof(*pregs);
  62. return node;
  63. }
  64. do_next_sibling:
  65. node = prom_getsibling(node);
  66. }
  67. return 0;
  68. }
  69. /* Remove a PCI device from the device trees, then
  70.  * free it up.  Note that this must run before
  71.  * the device's resources are registered because we
  72.  * do not handle unregistering them here.
  73.  */
  74. static void pci_device_delete(struct pci_dev *pdev)
  75. {
  76. list_del(&pdev->global_list);
  77. list_del(&pdev->bus_list);
  78. /* Ok, all references are gone, free it up. */
  79. kfree(pdev);
  80. }
  81. /* Older versions of OBP on PCI systems encode 64-bit MEM
  82.  * space assignments incorrectly, this fixes them up.  We also
  83.  * take the opportunity here to hide other kinds of bogus
  84.  * assignments.
  85.  */
  86. static void __init fixup_obp_assignments(struct pci_dev *pdev,
  87.  struct pcidev_cookie *pcp)
  88. {
  89. int i;
  90. if (pdev->vendor == PCI_VENDOR_ID_AL &&
  91.     (pdev->device == PCI_DEVICE_ID_AL_M7101 ||
  92.      pdev->device == PCI_DEVICE_ID_AL_M1533)) {
  93. int i;
  94. /* Zap all of the normal resources, they are
  95.  * meaningless and generate bogus resource collision
  96.  * messages.  This is OpenBoot's ill-fated attempt to
  97.  * represent the implicit resources that these devices
  98.  * have.
  99.  */
  100. pcp->num_prom_assignments = 0;
  101. for (i = 0; i < 6; i++) {
  102. pdev->resource[i].start =
  103. pdev->resource[i].end =
  104. pdev->resource[i].flags = 0;
  105. }
  106. pdev->resource[PCI_ROM_RESOURCE].start =
  107. pdev->resource[PCI_ROM_RESOURCE].end =
  108. pdev->resource[PCI_ROM_RESOURCE].flags = 0;
  109. return;
  110. }
  111. for (i = 0; i < pcp->num_prom_assignments; i++) {
  112. struct linux_prom_pci_registers *ap;
  113. int space;
  114. ap = &pcp->prom_assignments[i];
  115. space = ap->phys_hi >> 24;
  116. if ((space & 0x3) == 2 &&
  117.     (space & 0x4) != 0) {
  118. ap->phys_hi &= ~(0x7 << 24);
  119. ap->phys_hi |= 0x3 << 24;
  120. }
  121. }
  122. }
  123. /* Fill in the PCI device cookie sysdata for the given
  124.  * PCI device.  This cookie is the means by which one
  125.  * can get to OBP and PCI controller specific information
  126.  * for a PCI device.
  127.  */
  128. static void __init pdev_cookie_fillin(struct pci_pbm_info *pbm,
  129.       struct pci_dev *pdev,
  130.       int bus_prom_node)
  131. {
  132. struct linux_prom_pci_registers pregs[PROMREG_MAX];
  133. struct pcidev_cookie *pcp;
  134. int device_prom_node, nregs, err;
  135. device_prom_node = find_device_prom_node(pbm, pdev, bus_prom_node,
  136.  pregs, &nregs);
  137. if (device_prom_node == 0) {
  138. /* If it is not in the OBP device tree then
  139.  * there must be a damn good reason for it.
  140.  *
  141.  * So what we do is delete the device from the
  142.  * PCI device tree completely.  This scenerio
  143.  * is seen, for example, on CP1500 for the
  144.  * second EBUS/HappyMeal pair if the external
  145.  * connector for it is not present.
  146.  */
  147. pci_device_delete(pdev);
  148. return;
  149. }
  150. pcp = kmalloc(sizeof(*pcp), GFP_ATOMIC);
  151. if (pcp == NULL) {
  152. prom_printf("PCI_COOKIE: Fatal malloc error, aborting...n");
  153. prom_halt();
  154. }
  155. pcp->pbm = pbm;
  156. pcp->prom_node = device_prom_node;
  157. memcpy(pcp->prom_regs, pregs, sizeof(pcp->prom_regs));
  158. pcp->num_prom_regs = nregs;
  159. err = prom_getproperty(device_prom_node, "name",
  160.        pcp->prom_name, sizeof(pcp->prom_name));
  161. if (err > 0)
  162. pcp->prom_name[err] = 0;
  163. else
  164. pcp->prom_name[0] = 0;
  165. err = prom_getproperty(device_prom_node,
  166.        "assigned-addresses",
  167.        (char *)pcp->prom_assignments,
  168.        sizeof(pcp->prom_assignments));
  169. if (err == 0 || err == -1)
  170. pcp->num_prom_assignments = 0;
  171. else
  172. pcp->num_prom_assignments =
  173. (err / sizeof(pcp->prom_assignments[0]));
  174. if (strcmp(pcp->prom_name, "ebus") == 0) {
  175. struct linux_prom_ebus_ranges erng[PROM_PCIRNG_MAX];
  176. int iter;
  177. /* EBUS is special... */
  178. err = prom_getproperty(device_prom_node, "ranges",
  179.        (char *)&erng[0], sizeof(erng));
  180. if (err == 0 || err == -1) {
  181. prom_printf("EBUS: Fatal error, no range propertyn");
  182. prom_halt();
  183. }
  184. err = (err / sizeof(erng[0]));
  185. for(iter = 0; iter < err; iter++) {
  186. struct linux_prom_ebus_ranges *ep = &erng[iter];
  187. struct linux_prom_pci_registers *ap;
  188. ap = &pcp->prom_assignments[iter];
  189. ap->phys_hi = ep->parent_phys_hi;
  190. ap->phys_mid = ep->parent_phys_mid;
  191. ap->phys_lo = ep->parent_phys_lo;
  192. ap->size_hi = 0;
  193. ap->size_lo = ep->size;
  194. }
  195. pcp->num_prom_assignments = err;
  196. }
  197. fixup_obp_assignments(pdev, pcp);
  198. pdev->sysdata = pcp;
  199. }
  200. void __init pci_fill_in_pbm_cookies(struct pci_bus *pbus,
  201.     struct pci_pbm_info *pbm,
  202.     int prom_node)
  203. {
  204. struct list_head *walk = &pbus->devices;
  205. /* This loop is coded like this because the cookie
  206.  * fillin routine can delete devices from the tree.
  207.  */
  208. walk = walk->next;
  209. while (walk != &pbus->devices) {
  210. struct pci_dev *pdev = pci_dev_b(walk);
  211. struct list_head *walk_next = walk->next;
  212. pdev_cookie_fillin(pbm, pdev, prom_node);
  213. walk = walk_next;
  214. }
  215. walk = &pbus->children;
  216. walk = walk->next;
  217. while (walk != &pbus->children) {
  218. struct pci_bus *this_pbus = pci_bus_b(walk);
  219. struct pcidev_cookie *pcp = this_pbus->self->sysdata;
  220. struct list_head *walk_next = walk->next;
  221. pci_fill_in_pbm_cookies(this_pbus, pbm, pcp->prom_node);
  222. walk = walk_next;
  223. }
  224. }
  225. static void __init bad_assignment(struct pci_dev *pdev,
  226.   struct linux_prom_pci_registers *ap,
  227.   struct resource *res,
  228.   int do_prom_halt)
  229. {
  230. prom_printf("PCI: Bogus PROM assignment. BUS[%02x] DEVFN[%x]n",
  231.     pdev->bus->number, pdev->devfn);
  232. if (ap)
  233. prom_printf("PCI: phys[%08x:%08x:%08x] size[%08x:%08x]n",
  234.     ap->phys_hi, ap->phys_mid, ap->phys_lo,
  235.     ap->size_hi, ap->size_lo);
  236. if (res)
  237. prom_printf("PCI: RES[%016lx-->%016lx:(%lx)]n",
  238.     res->start, res->end, res->flags);
  239. prom_printf("Please email this information to davem@redhat.comn");
  240. if (do_prom_halt)
  241. prom_halt();
  242. }
  243. static struct resource *
  244. __init get_root_resource(struct linux_prom_pci_registers *ap,
  245.  struct pci_pbm_info *pbm)
  246. {
  247. int space = (ap->phys_hi >> 24) & 3;
  248. switch (space) {
  249. case 0:
  250. /* Configuration space, silently ignore it. */
  251. return NULL;
  252. case 1:
  253. /* 16-bit IO space */
  254. return &pbm->io_space;
  255. case 2:
  256. /* 32-bit MEM space */
  257. return &pbm->mem_space;
  258. case 3:
  259. /* 64-bit MEM space, these are allocated out of
  260.  * the 32-bit mem_space range for the PBM, ie.
  261.  * we just zero out the upper 32-bits.
  262.  */
  263. return &pbm->mem_space;
  264. default:
  265. printk("PCI: What is resource space %x? "
  266.        "Tell davem@redhat.com about it!n", space);
  267. return NULL;
  268. };
  269. }
  270. static struct resource *
  271. __init get_device_resource(struct linux_prom_pci_registers *ap,
  272.    struct pci_dev *pdev)
  273. {
  274. struct resource *res;
  275. int breg = (ap->phys_hi & 0xff);
  276. int space = (ap->phys_hi >> 24) & 3;
  277. switch (breg) {
  278. case  PCI_ROM_ADDRESS:
  279. /* It had better be MEM space. */
  280. if (space != 2)
  281. bad_assignment(pdev, ap, NULL, 0);
  282. res = &pdev->resource[PCI_ROM_RESOURCE];
  283. break;
  284. case PCI_BASE_ADDRESS_0:
  285. case PCI_BASE_ADDRESS_1:
  286. case PCI_BASE_ADDRESS_2:
  287. case PCI_BASE_ADDRESS_3:
  288. case PCI_BASE_ADDRESS_4:
  289. case PCI_BASE_ADDRESS_5:
  290. res = &pdev->resource[(breg - PCI_BASE_ADDRESS_0) / 4];
  291. break;
  292. default:
  293. bad_assignment(pdev, ap, NULL, 0);
  294. res = NULL;
  295. break;
  296. };
  297. return res;
  298. }
  299. static int __init pdev_resource_collisions_expected(struct pci_dev *pdev)
  300. {
  301. if (pdev->vendor != PCI_VENDOR_ID_SUN)
  302. return 0;
  303. if (pdev->device == PCI_DEVICE_ID_SUN_RIO_EBUS ||
  304.     pdev->device == PCI_DEVICE_ID_SUN_RIO_1394 ||
  305.     pdev->device == PCI_DEVICE_ID_SUN_RIO_USB)
  306. return 1;
  307. return 0;
  308. }
  309. static void __init pdev_record_assignments(struct pci_pbm_info *pbm,
  310.    struct pci_dev *pdev)
  311. {
  312. struct pcidev_cookie *pcp = pdev->sysdata;
  313. int i;
  314. for (i = 0; i < pcp->num_prom_assignments; i++) {
  315. struct linux_prom_pci_registers *ap;
  316. struct resource *root, *res;
  317. /* The format of this property is specified in
  318.  * the PCI Bus Binding to IEEE1275-1994.
  319.  */
  320. ap = &pcp->prom_assignments[i];
  321. root = get_root_resource(ap, pbm);
  322. res = get_device_resource(ap, pdev);
  323. if (root == NULL || res == NULL ||
  324.     res->flags == 0)
  325. continue;
  326. /* Ok we know which resource this PROM assignment is
  327.  * for, sanity check it.
  328.  */
  329. if ((res->start & 0xffffffffUL) != ap->phys_lo)
  330. bad_assignment(pdev, ap, res, 1);
  331. /* If it is a 64-bit MEM space assignment, verify that
  332.  * the resource is too and that the upper 32-bits match.
  333.  */
  334. if (((ap->phys_hi >> 24) & 3) == 3) {
  335. if (((res->flags & IORESOURCE_MEM) == 0) ||
  336.     ((res->flags & PCI_BASE_ADDRESS_MEM_TYPE_MASK)
  337.      != PCI_BASE_ADDRESS_MEM_TYPE_64))
  338. bad_assignment(pdev, ap, res, 1);
  339. if ((res->start >> 32) != ap->phys_mid)
  340. bad_assignment(pdev, ap, res, 1);
  341. /* PBM cannot generate cpu initiated PIOs
  342.  * to the full 64-bit space.  Therefore the
  343.  * upper 32-bits better be zero.  If it is
  344.  * not, just skip it and we will assign it
  345.  * properly ourselves.
  346.  */
  347. if ((res->start >> 32) != 0UL) {
  348. printk(KERN_ERR "PCI: OBP assigns out of range MEM address "
  349.        "%016lx for region %ld on device %sn",
  350.        res->start, (res - &pdev->resource[0]), pdev->name);
  351. continue;
  352. }
  353. }
  354. /* Adjust the resource into the physical address space
  355.  * of this PBM.
  356.  */
  357. pbm->parent->resource_adjust(pdev, res, root);
  358. if (request_resource(root, res) < 0) {
  359. /* OK, there is some conflict.  But this is fine
  360.  * since we'll reassign it in the fixup pass.
  361.  *
  362.  * We notify the user that OBP made an error if it
  363.  * is a case we don't expect.
  364.  */
  365. if (!pdev_resource_collisions_expected(pdev)) {
  366. printk(KERN_ERR "PCI: Address space collision on region %ld "
  367.        "[%016lx:%016lx] of device %sn",
  368.        (res - &pdev->resource[0]),
  369.        res->start, res->end,
  370.        pdev->name);
  371. }
  372. }
  373. }
  374. }
  375. void __init pci_record_assignments(struct pci_pbm_info *pbm,
  376.    struct pci_bus *pbus)
  377. {
  378. struct list_head *walk = &pbus->devices;
  379. for (walk = walk->next; walk != &pbus->devices; walk = walk->next)
  380. pdev_record_assignments(pbm, pci_dev_b(walk));
  381. walk = &pbus->children;
  382. for (walk = walk->next; walk != &pbus->children; walk = walk->next)
  383. pci_record_assignments(pbm, pci_bus_b(walk));
  384. }
  385. /* Return non-zero if PDEV has implicit I/O resources even
  386.  * though it may not have an I/O base address register
  387.  * active.
  388.  */
  389. static int __init has_implicit_io(struct pci_dev *pdev)
  390. {
  391. int class = pdev->class >> 8;
  392. if (class == PCI_CLASS_NOT_DEFINED ||
  393.     class == PCI_CLASS_NOT_DEFINED_VGA ||
  394.     class == PCI_CLASS_STORAGE_IDE ||
  395.     (pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY)
  396. return 1;
  397. return 0;
  398. }
  399. static void __init pdev_assign_unassigned(struct pci_pbm_info *pbm,
  400.   struct pci_dev *pdev)
  401. {
  402. u32 reg;
  403. u16 cmd;
  404. int i, io_seen, mem_seen;
  405. io_seen = mem_seen = 0;
  406. for (i = 0; i < PCI_NUM_RESOURCES; i++) {
  407. struct resource *root, *res;
  408. unsigned long size, min, max, align;
  409. res = &pdev->resource[i];
  410. if (res->flags & IORESOURCE_IO)
  411. io_seen++;
  412. else if (res->flags & IORESOURCE_MEM)
  413. mem_seen++;
  414. /* If it is already assigned or the resource does
  415.  * not exist, there is nothing to do.
  416.  */
  417. if (res->parent != NULL || res->flags == 0UL)
  418. continue;
  419. /* Determine the root we allocate from. */
  420. if (res->flags & IORESOURCE_IO) {
  421. root = &pbm->io_space;
  422. min = root->start + 0x400UL;
  423. max = root->end;
  424. } else {
  425. root = &pbm->mem_space;
  426. min = root->start;
  427. max = min + 0x80000000UL;
  428. }
  429. size = res->end - res->start;
  430. align = size + 1;
  431. if (allocate_resource(root, res, size + 1, min, max, align, NULL, NULL) < 0) {
  432. /* uh oh */
  433. prom_printf("PCI: Failed to allocate resource %d for %sn",
  434.     i, pdev->name);
  435. prom_halt();
  436. }
  437. /* Update PCI config space. */
  438. pbm->parent->base_address_update(pdev, i);
  439. }
  440. /* Special case, disable the ROM.  Several devices
  441.  * act funny (ie. do not respond to memory space writes)
  442.  * when it is left enabled.  A good example are Qlogic,ISP
  443.  * adapters.
  444.  */
  445. pci_read_config_dword(pdev, PCI_ROM_ADDRESS, &reg);
  446. reg &= ~PCI_ROM_ADDRESS_ENABLE;
  447. pci_write_config_dword(pdev, PCI_ROM_ADDRESS, reg);
  448. /* If we saw I/O or MEM resources, enable appropriate
  449.  * bits in PCI command register.
  450.  */
  451. if (io_seen || mem_seen) {
  452. pci_read_config_word(pdev, PCI_COMMAND, &cmd);
  453. if (io_seen || has_implicit_io(pdev))
  454. cmd |= PCI_COMMAND_IO;
  455. if (mem_seen)
  456. cmd |= PCI_COMMAND_MEMORY;
  457. pci_write_config_word(pdev, PCI_COMMAND, cmd);
  458. }
  459. /* If this is a PCI bridge or an IDE controller,
  460.  * enable bus mastering.  In the former case also
  461.  * set the cache line size correctly.
  462.  */
  463. if (((pdev->class >> 8) == PCI_CLASS_BRIDGE_PCI) ||
  464.     (((pdev->class >> 8) == PCI_CLASS_STORAGE_IDE) &&
  465.      ((pdev->class & 0x80) != 0))) {
  466. pci_read_config_word(pdev, PCI_COMMAND, &cmd);
  467. cmd |= PCI_COMMAND_MASTER;
  468. pci_write_config_word(pdev, PCI_COMMAND, cmd);
  469. if ((pdev->class >> 8) == PCI_CLASS_BRIDGE_PCI)
  470. pci_write_config_byte(pdev,
  471.       PCI_CACHE_LINE_SIZE,
  472.       (64 / sizeof(u32)));
  473. }
  474. }
  475. void __init pci_assign_unassigned(struct pci_pbm_info *pbm,
  476.   struct pci_bus *pbus)
  477. {
  478. struct list_head *walk = &pbus->devices;
  479. for (walk = walk->next; walk != &pbus->devices; walk = walk->next)
  480. pdev_assign_unassigned(pbm, pci_dev_b(walk));
  481. walk = &pbus->children;
  482. for (walk = walk->next; walk != &pbus->children; walk = walk->next)
  483. pci_assign_unassigned(pbm, pci_bus_b(walk));
  484. }
  485. static int __init pci_intmap_match(struct pci_dev *pdev, unsigned int *interrupt)
  486. {
  487. struct linux_prom_pci_intmap bridge_local_intmap[PROM_PCIIMAP_MAX], *intmap;
  488. struct linux_prom_pci_intmask bridge_local_intmask, *intmask;
  489. struct pcidev_cookie *dev_pcp = pdev->sysdata;
  490. struct pci_pbm_info *pbm = dev_pcp->pbm;
  491. struct linux_prom_pci_registers *pregs = dev_pcp->prom_regs;
  492. unsigned int hi, mid, lo, irq;
  493. int i, num_intmap;
  494. if (pbm->num_pbm_intmap == 0)
  495. return 0;
  496. intmap = &pbm->pbm_intmap[0];
  497. intmask = &pbm->pbm_intmask;
  498. num_intmap = pbm->num_pbm_intmap;
  499. /* If we are underneath a PCI bridge, use PROM register
  500.  * property of the parent bridge which is closest to
  501.  * the PBM.
  502.  */
  503. if (pdev->bus->number != pbm->pci_first_busno) {
  504. struct pcidev_cookie *bus_pcp;
  505. struct pci_dev *pwalk;
  506. int offset, plen;
  507. pwalk = pdev->bus->self;
  508. while (pwalk->bus &&
  509.        pwalk->bus->number != pbm->pci_first_busno)
  510. pwalk = pwalk->bus->self;
  511. bus_pcp = pwalk->sysdata;
  512. /* But if the PCI bridge has it's own interrupt map
  513.  * and mask properties, use that and the device regs.
  514.  */
  515. plen = prom_getproperty(bus_pcp->prom_node, "interrupt-map",
  516. (char *) &bridge_local_intmap[0],
  517. sizeof(bridge_local_intmap));
  518. if (plen != -1) {
  519. intmap = &bridge_local_intmap[0];
  520. num_intmap = plen / sizeof(struct linux_prom_pci_intmap);
  521. plen = prom_getproperty(bus_pcp->prom_node, "interrupt-map-mask",
  522. (char *) &bridge_local_intmask,
  523. sizeof(bridge_local_intmask));
  524. if (plen == -1) {
  525. prom_printf("pbm_intmap_match: Bridge has intmap but "
  526.     "no intmask.n");
  527. prom_halt();
  528. }
  529. goto check_intmap;
  530. }
  531. pregs = bus_pcp->prom_regs;
  532. offset = prom_getint(dev_pcp->prom_node,
  533.      "fcode-rom-offset");
  534. /* Did PROM know better and assign an interrupt other
  535.  * than #INTA to the device? - We test here for presence of
  536.  * FCODE on the card, in this case we assume PROM has set
  537.  * correct 'interrupts' property, unless it is quadhme.
  538.  */
  539. if (offset == -1 ||
  540.     !strcmp(dev_pcp->prom_name, "SUNW,qfe") ||
  541.     !strcmp(dev_pcp->prom_name, "qfe")) {
  542. /*
  543.  * No, use low slot number bits of child as IRQ line.
  544.  */
  545. *interrupt = ((*interrupt - 1 + PCI_SLOT(pdev->devfn)) & 3) + 1;
  546. }
  547. }
  548. check_intmap:
  549. hi   = pregs->phys_hi & intmask->phys_hi;
  550. mid  = pregs->phys_mid & intmask->phys_mid;
  551. lo   = pregs->phys_lo & intmask->phys_lo;
  552. irq  = *interrupt & intmask->interrupt;
  553. for (i = 0; i < num_intmap; i++) {
  554. if (intmap[i].phys_hi  == hi &&
  555.     intmap[i].phys_mid == mid &&
  556.     intmap[i].phys_lo  == lo &&
  557.     intmap[i].interrupt == irq) {
  558. *interrupt = intmap[i].cinterrupt;
  559. return 1;
  560. }
  561. }
  562. prom_printf("pbm_intmap_match: bus %02x, devfn %02x: ",
  563.     pdev->bus->number, pdev->devfn);
  564. prom_printf("IRQ [%08x.%08x.%08x.%08x] not found in interrupt-mapn",
  565.     pregs->phys_hi, pregs->phys_mid, pregs->phys_lo, *interrupt);
  566. prom_printf("Please email this information to davem@redhat.comn");
  567. prom_halt();
  568. }
  569. static void __init pdev_fixup_irq(struct pci_dev *pdev)
  570. {
  571. struct pcidev_cookie *pcp = pdev->sysdata;
  572. struct pci_pbm_info *pbm = pcp->pbm;
  573. struct pci_controller_info *p = pbm->parent;
  574. unsigned int portid = p->portid;
  575. unsigned int prom_irq;
  576. int prom_node = pcp->prom_node;
  577. int err;
  578. /* If this is an empty EBUS device, sometimes OBP fails to
  579.  * give it a valid fully specified interrupts property.
  580.  * The EBUS hooked up to SunHME on PCI I/O boards of
  581.  * Ex000 systems is one such case.
  582.  *
  583.  * The interrupt is not important so just ignore it.
  584.  */
  585. if (pdev->vendor == PCI_VENDOR_ID_SUN &&
  586.     pdev->device == PCI_DEVICE_ID_SUN_EBUS &&
  587.     !prom_getchild(prom_node)) {
  588. pdev->irq = 0;
  589. return;
  590. }
  591. err = prom_getproperty(prom_node, "interrupts",
  592.        (char *)&prom_irq, sizeof(prom_irq));
  593. if (err == 0 || err == -1) {
  594. pdev->irq = 0;
  595. return;
  596. }
  597. /* Fully specified already? */
  598. if (((prom_irq & PCI_IRQ_IGN) >> 6) == portid) {
  599. pdev->irq = p->irq_build(pbm, pdev, prom_irq);
  600. goto have_irq;
  601. }
  602. /* An onboard device? (bit 5 set) */
  603. if ((prom_irq & PCI_IRQ_INO) & 0x20) {
  604. pdev->irq = p->irq_build(pbm, pdev, (portid << 6 | prom_irq));
  605. goto have_irq;
  606. }
  607. /* Can we find a matching entry in the interrupt-map? */
  608. if (pci_intmap_match(pdev, &prom_irq)) {
  609. pdev->irq = p->irq_build(pbm, pdev, (portid << 6) | prom_irq);
  610. goto have_irq;
  611. }
  612. /* Ok, we have to do it the hard way. */
  613. {
  614. unsigned int bus, slot, line;
  615. bus = (pbm == &pbm->parent->pbm_B) ? (1 << 4) : 0;
  616. /* If we have a legal interrupt property, use it as
  617.  * the IRQ line.
  618.  */
  619. if (prom_irq > 0 && prom_irq < 5) {
  620. line = ((prom_irq - 1) & 3);
  621. } else {
  622. u8 pci_irq_line;
  623. /* Else just directly consult PCI config space. */
  624. pci_read_config_byte(pdev, PCI_INTERRUPT_PIN, &pci_irq_line);
  625. line = ((pci_irq_line - 1) & 3);
  626. }
  627. /* Now figure out the slot.
  628.  *
  629.  * Basically, device number zero on the top-level bus is
  630.  * always the PCI host controller.  Slot 0 is then device 1.
  631.  * PBM A supports two external slots (0 and 1), and PBM B
  632.  * supports 4 external slots (0, 1, 2, and 3).  On-board PCI
  633.  * devices are wired to device numbers outside of these
  634.  * ranges. -DaveM
  635.    */
  636. if (pdev->bus->number == pbm->pci_first_busno) {
  637. slot = (pdev->devfn >> 3) - pbm->pci_first_slot;
  638. } else {
  639. /* Underneath a bridge, use slot number of parent
  640.  * bridge.
  641.  */
  642. slot = (pdev->bus->self->devfn >> 3) - pbm->pci_first_slot;
  643. }
  644. slot = slot << 2;
  645. pdev->irq = p->irq_build(pbm, pdev,
  646.  ((portid << 6) & PCI_IRQ_IGN) |
  647.  (bus | slot | line));
  648. }
  649. have_irq:
  650. pci_write_config_byte(pdev, PCI_INTERRUPT_LINE,
  651.       pdev->irq & PCI_IRQ_INO);
  652. }
  653. void __init pci_fixup_irq(struct pci_pbm_info *pbm,
  654.   struct pci_bus *pbus)
  655. {
  656. struct list_head *walk = &pbus->devices;
  657. for (walk = walk->next; walk != &pbus->devices; walk = walk->next)
  658. pdev_fixup_irq(pci_dev_b(walk));
  659. walk = &pbus->children;
  660. for (walk = walk->next; walk != &pbus->children; walk = walk->next)
  661. pci_fixup_irq(pbm, pci_bus_b(walk));
  662. }
  663. static void pdev_setup_busmastering(struct pci_dev *pdev, int is_66mhz)
  664. {
  665. u16 cmd;
  666. u8 hdr_type, min_gnt, ltimer;
  667. pci_read_config_word(pdev, PCI_COMMAND, &cmd);
  668. cmd |= PCI_COMMAND_MASTER;
  669. pci_write_config_word(pdev, PCI_COMMAND, cmd);
  670. /* Read it back, if the mastering bit did not
  671.  * get set, the device does not support bus
  672.  * mastering so we have nothing to do here.
  673.  */
  674. pci_read_config_word(pdev, PCI_COMMAND, &cmd);
  675. if ((cmd & PCI_COMMAND_MASTER) == 0)
  676. return;
  677. /* Set correct cache line size, 64-byte on all
  678.  * Sparc64 PCI systems.  Note that the value is
  679.  * measured in 32-bit words.
  680.  */
  681. pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE,
  682.       64 / sizeof(u32));
  683. pci_read_config_byte(pdev, PCI_HEADER_TYPE, &hdr_type);
  684. hdr_type &= ~0x80;
  685. if (hdr_type != PCI_HEADER_TYPE_NORMAL)
  686. return;
  687. /* If the latency timer is already programmed with a non-zero
  688.  * value, assume whoever set it (OBP or whoever) knows what
  689.  * they are doing.
  690.  */
  691. pci_read_config_byte(pdev, PCI_LATENCY_TIMER, &ltimer);
  692. if (ltimer != 0)
  693. return;
  694. /* XXX Since I'm tipping off the min grant value to
  695.  * XXX choose a suitable latency timer value, I also
  696.  * XXX considered making use of the max latency value
  697.  * XXX as well.  Unfortunately I've seen too many bogusly
  698.  * XXX low settings for it to the point where it lacks
  699.  * XXX any usefulness.  In one case, an ethernet card
  700.  * XXX claimed a min grant of 10 and a max latency of 5.
  701.  * XXX Now, if I had two such cards on the same bus I
  702.  * XXX could not set the desired burst period (calculated
  703.  * XXX from min grant) without violating the max latency
  704.  * XXX bound.  Duh...
  705.  * XXX
  706.  * XXX I blame dumb PC bios implementors for stuff like
  707.  * XXX this, most of them don't even try to do something
  708.  * XXX sensible with latency timer values and just set some
  709.  * XXX default value (usually 32) into every device.
  710.  */
  711. pci_read_config_byte(pdev, PCI_MIN_GNT, &min_gnt);
  712. if (min_gnt == 0) {
  713. /* If no min_gnt setting then use a default
  714.  * value.
  715.  */
  716. if (is_66mhz)
  717. ltimer = 16;
  718. else
  719. ltimer = 32;
  720. } else {
  721. int shift_factor;
  722. if (is_66mhz)
  723. shift_factor = 2;
  724. else
  725. shift_factor = 3;
  726. /* Use a default value when the min_gnt value
  727.  * is erroneously high.
  728.  */
  729. if (((unsigned int) min_gnt << shift_factor) > 512 ||
  730.     ((min_gnt << shift_factor) & 0xff) == 0) {
  731. ltimer = 8 << shift_factor;
  732. } else {
  733. ltimer = min_gnt << shift_factor;
  734. }
  735. }
  736. pci_write_config_byte(pdev, PCI_LATENCY_TIMER, ltimer);
  737. }
  738. void pci_determine_66mhz_disposition(struct pci_pbm_info *pbm,
  739.      struct pci_bus *pbus)
  740. {
  741. struct list_head *walk;
  742. int all_are_66mhz;
  743. u16 status;
  744. if (pbm->is_66mhz_capable == 0) {
  745. all_are_66mhz = 0;
  746. goto out;
  747. }
  748. walk = &pbus->devices;
  749. all_are_66mhz = 1;
  750. for (walk = walk->next; walk != &pbus->devices; walk = walk->next) {
  751. struct pci_dev *pdev = pci_dev_b(walk);
  752. pci_read_config_word(pdev, PCI_STATUS, &status);
  753. if (!(status & PCI_STATUS_66MHZ)) {
  754. all_are_66mhz = 0;
  755. break;
  756. }
  757. }
  758. out:
  759. pbm->all_devs_66mhz = all_are_66mhz;
  760. printk("PCI%d(PBM%c): Bus running at %dMHzn",
  761.        pbm->parent->index,
  762.        (pbm == &pbm->parent->pbm_A) ? 'A' : 'B',
  763.        (all_are_66mhz ? 66 : 33));
  764. }
  765. void pci_setup_busmastering(struct pci_pbm_info *pbm,
  766.     struct pci_bus *pbus)
  767. {
  768. struct list_head *walk = &pbus->devices;
  769. int is_66mhz;
  770. is_66mhz = pbm->is_66mhz_capable && pbm->all_devs_66mhz;
  771. for (walk = walk->next; walk != &pbus->devices; walk = walk->next)
  772. pdev_setup_busmastering(pci_dev_b(walk), is_66mhz);
  773. walk = &pbus->children;
  774. for (walk = walk->next; walk != &pbus->children; walk = walk->next)
  775. pci_setup_busmastering(pbm, pci_bus_b(walk));
  776. }
  777. void pci_register_legacy_regions(struct resource *io_res,
  778.  struct resource *mem_res)
  779. {
  780. struct resource *p;
  781. /* VGA Video RAM. */
  782. p = kmalloc(sizeof(*p), GFP_KERNEL);
  783. if (!p)
  784. return;
  785. memset(p, 0, sizeof(*p));
  786. p->name = "Video RAM area";
  787. p->start = mem_res->start + 0xa0000UL;
  788. p->end = p->start + 0x1ffffUL;
  789. p->flags = IORESOURCE_BUSY;
  790. request_resource(mem_res, p);
  791. p = kmalloc(sizeof(*p), GFP_KERNEL);
  792. if (!p)
  793. return;
  794. memset(p, 0, sizeof(*p));
  795. p->name = "System ROM";
  796. p->start = mem_res->start + 0xf0000UL;
  797. p->end = p->start + 0xffffUL;
  798. p->flags = IORESOURCE_BUSY;
  799. request_resource(mem_res, p);
  800. p = kmalloc(sizeof(*p), GFP_KERNEL);
  801. if (!p)
  802. return;
  803. memset(p, 0, sizeof(*p));
  804. p->name = "Video ROM";
  805. p->start = mem_res->start + 0xc0000UL;
  806. p->end = p->start + 0x7fffUL;
  807. p->flags = IORESOURCE_BUSY;
  808. request_resource(mem_res, p);
  809. }
  810. /* Generic helper routines for PCI error reporting. */
  811. void pci_scan_for_target_abort(struct pci_controller_info *p,
  812.        struct pci_pbm_info *pbm,
  813.        struct pci_bus *pbus)
  814. {
  815. struct list_head *walk = &pbus->devices;
  816. for (walk = walk->next; walk != &pbus->devices; walk = walk->next) {
  817. struct pci_dev *pdev = pci_dev_b(walk);
  818. u16 status, error_bits;
  819. pci_read_config_word(pdev, PCI_STATUS, &status);
  820. error_bits =
  821. (status & (PCI_STATUS_SIG_TARGET_ABORT |
  822.    PCI_STATUS_REC_TARGET_ABORT));
  823. if (error_bits) {
  824. pci_write_config_word(pdev, PCI_STATUS, error_bits);
  825. printk("PCI%d(PBM%c): Device [%s] saw Target Abort [%016x]n",
  826.        p->index, ((pbm == &p->pbm_A) ? 'A' : 'B'),
  827.        pdev->name, status);
  828. }
  829. }
  830. walk = &pbus->children;
  831. for (walk = walk->next; walk != &pbus->children; walk = walk->next)
  832. pci_scan_for_target_abort(p, pbm, pci_bus_b(walk));
  833. }
  834. void pci_scan_for_master_abort(struct pci_controller_info *p,
  835.        struct pci_pbm_info *pbm,
  836.        struct pci_bus *pbus)
  837. {
  838. struct list_head *walk = &pbus->devices;
  839. for (walk = walk->next; walk != &pbus->devices; walk = walk->next) {
  840. struct pci_dev *pdev = pci_dev_b(walk);
  841. u16 status, error_bits;
  842. pci_read_config_word(pdev, PCI_STATUS, &status);
  843. error_bits =
  844. (status & (PCI_STATUS_REC_MASTER_ABORT));
  845. if (error_bits) {
  846. pci_write_config_word(pdev, PCI_STATUS, error_bits);
  847. printk("PCI%d(PBM%c): Device [%s] received Master Abort [%016x]n",
  848.        p->index, ((pbm == &p->pbm_A) ? 'A' : 'B'),
  849.        pdev->name, status);
  850. }
  851. }
  852. walk = &pbus->children;
  853. for (walk = walk->next; walk != &pbus->children; walk = walk->next)
  854. pci_scan_for_master_abort(p, pbm, pci_bus_b(walk));
  855. }
  856. void pci_scan_for_parity_error(struct pci_controller_info *p,
  857.        struct pci_pbm_info *pbm,
  858.        struct pci_bus *pbus)
  859. {
  860. struct list_head *walk = &pbus->devices;
  861. for (walk = walk->next; walk != &pbus->devices; walk = walk->next) {
  862. struct pci_dev *pdev = pci_dev_b(walk);
  863. u16 status, error_bits;
  864. pci_read_config_word(pdev, PCI_STATUS, &status);
  865. error_bits =
  866. (status & (PCI_STATUS_PARITY |
  867.    PCI_STATUS_DETECTED_PARITY));
  868. if (error_bits) {
  869. pci_write_config_word(pdev, PCI_STATUS, error_bits);
  870. printk("PCI%d(PBM%c): Device [%s] saw Parity Error [%016x]n",
  871.        p->index, ((pbm == &p->pbm_A) ? 'A' : 'B'),
  872.        pdev->name, status);
  873. }
  874. }
  875. walk = &pbus->children;
  876. for (walk = walk->next; walk != &pbus->children; walk = walk->next)
  877. pci_scan_for_parity_error(p, pbm, pci_bus_b(walk));
  878. }