pci_sabre.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:50k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* $Id: pci_sabre.c,v 1.41.2.1 2002/03/03 10:31:56 davem Exp $
  2.  * pci_sabre.c: Sabre specific PCI controller support.
  3.  *
  4.  * Copyright (C) 1997, 1998, 1999 David S. Miller (davem@caipfs.rutgers.edu)
  5.  * Copyright (C) 1998, 1999 Eddie C. Dost   (ecd@skynet.be)
  6.  * Copyright (C) 1999 Jakub Jelinek   (jakub@redhat.com)
  7.  */
  8. #include <linux/kernel.h>
  9. #include <linux/types.h>
  10. #include <linux/pci.h>
  11. #include <linux/init.h>
  12. #include <linux/slab.h>
  13. #include <asm/apb.h>
  14. #include <asm/pbm.h>
  15. #include <asm/iommu.h>
  16. #include <asm/irq.h>
  17. #include <asm/smp.h>
  18. #include "pci_impl.h"
  19. #include "iommu_common.h"
  20. /* All SABRE registers are 64-bits.  The following accessor
  21.  * routines are how they are accessed.  The REG parameter
  22.  * is a physical address.
  23.  */
  24. #define sabre_read(__reg) 
  25. ({ u64 __ret; 
  26. __asm__ __volatile__("ldxa [%1] %2, %0" 
  27.      : "=r" (__ret) 
  28.      : "r" (__reg), "i" (ASI_PHYS_BYPASS_EC_E) 
  29.      : "memory"); 
  30. __ret; 
  31. })
  32. #define sabre_write(__reg, __val) 
  33. __asm__ __volatile__("stxa %0, [%1] %2" 
  34.      : /* no outputs */ 
  35.      : "r" (__val), "r" (__reg), 
  36.        "i" (ASI_PHYS_BYPASS_EC_E) 
  37.      : "memory")
  38. /* SABRE PCI controller register offsets and definitions. */
  39. #define SABRE_UE_AFSR 0x0030UL
  40. #define  SABRE_UEAFSR_PDRD  0x4000000000000000UL /* Primary PCI DMA Read */
  41. #define  SABRE_UEAFSR_PDWR  0x2000000000000000UL /* Primary PCI DMA Write */
  42. #define  SABRE_UEAFSR_SDRD  0x0800000000000000UL /* Secondary PCI DMA Read */
  43. #define  SABRE_UEAFSR_SDWR  0x0400000000000000UL /* Secondary PCI DMA Write */
  44. #define  SABRE_UEAFSR_SDTE  0x0200000000000000UL /* Secondary DMA Translation Error */
  45. #define  SABRE_UEAFSR_PDTE  0x0100000000000000UL /* Primary DMA Translation Error */
  46. #define  SABRE_UEAFSR_BMSK  0x0000ffff00000000UL /* Bytemask */
  47. #define  SABRE_UEAFSR_OFF  0x00000000e0000000UL /* Offset (AFAR bits [5:3] */
  48. #define  SABRE_UEAFSR_BLK  0x0000000000800000UL /* Was block operation */
  49. #define SABRE_UECE_AFAR 0x0038UL
  50. #define SABRE_CE_AFSR 0x0040UL
  51. #define  SABRE_CEAFSR_PDRD  0x4000000000000000UL /* Primary PCI DMA Read */
  52. #define  SABRE_CEAFSR_PDWR  0x2000000000000000UL /* Primary PCI DMA Write */
  53. #define  SABRE_CEAFSR_SDRD  0x0800000000000000UL /* Secondary PCI DMA Read */
  54. #define  SABRE_CEAFSR_SDWR  0x0400000000000000UL /* Secondary PCI DMA Write */
  55. #define  SABRE_CEAFSR_ESYND  0x00ff000000000000UL /* ECC Syndrome */
  56. #define  SABRE_CEAFSR_BMSK  0x0000ffff00000000UL /* Bytemask */
  57. #define  SABRE_CEAFSR_OFF  0x00000000e0000000UL /* Offset */
  58. #define  SABRE_CEAFSR_BLK  0x0000000000800000UL /* Was block operation */
  59. #define SABRE_UECE_AFAR_ALIAS 0x0048UL /* Aliases to 0x0038 */
  60. #define SABRE_IOMMU_CONTROL 0x0200UL
  61. #define  SABRE_IOMMUCTRL_ERRSTS  0x0000000006000000UL /* Error status bits */
  62. #define  SABRE_IOMMUCTRL_ERR  0x0000000001000000UL /* Error present in IOTLB */
  63. #define  SABRE_IOMMUCTRL_LCKEN  0x0000000000800000UL /* IOTLB lock enable */
  64. #define  SABRE_IOMMUCTRL_LCKPTR  0x0000000000780000UL /* IOTLB lock pointer */
  65. #define  SABRE_IOMMUCTRL_TSBSZ  0x0000000000070000UL /* TSB Size */
  66. #define  SABRE_IOMMU_TSBSZ_1K   0x0000000000000000
  67. #define  SABRE_IOMMU_TSBSZ_2K   0x0000000000010000
  68. #define  SABRE_IOMMU_TSBSZ_4K   0x0000000000020000
  69. #define  SABRE_IOMMU_TSBSZ_8K   0x0000000000030000
  70. #define  SABRE_IOMMU_TSBSZ_16K  0x0000000000040000
  71. #define  SABRE_IOMMU_TSBSZ_32K  0x0000000000050000
  72. #define  SABRE_IOMMU_TSBSZ_64K  0x0000000000060000
  73. #define  SABRE_IOMMU_TSBSZ_128K 0x0000000000070000
  74. #define  SABRE_IOMMUCTRL_TBWSZ  0x0000000000000004UL /* TSB assumed page size */
  75. #define  SABRE_IOMMUCTRL_DENAB  0x0000000000000002UL /* Diagnostic Mode Enable */
  76. #define  SABRE_IOMMUCTRL_ENAB  0x0000000000000001UL /* IOMMU Enable */
  77. #define SABRE_IOMMU_TSBBASE 0x0208UL
  78. #define SABRE_IOMMU_FLUSH 0x0210UL
  79. #define SABRE_IMAP_A_SLOT0 0x0c00UL
  80. #define SABRE_IMAP_B_SLOT0 0x0c20UL
  81. #define SABRE_IMAP_SCSI 0x1000UL
  82. #define SABRE_IMAP_ETH 0x1008UL
  83. #define SABRE_IMAP_BPP 0x1010UL
  84. #define SABRE_IMAP_AU_REC 0x1018UL
  85. #define SABRE_IMAP_AU_PLAY 0x1020UL
  86. #define SABRE_IMAP_PFAIL 0x1028UL
  87. #define SABRE_IMAP_KMS 0x1030UL
  88. #define SABRE_IMAP_FLPY 0x1038UL
  89. #define SABRE_IMAP_SHW 0x1040UL
  90. #define SABRE_IMAP_KBD 0x1048UL
  91. #define SABRE_IMAP_MS 0x1050UL
  92. #define SABRE_IMAP_SER 0x1058UL
  93. #define SABRE_IMAP_UE 0x1070UL
  94. #define SABRE_IMAP_CE 0x1078UL
  95. #define SABRE_IMAP_PCIERR 0x1080UL
  96. #define SABRE_IMAP_GFX 0x1098UL
  97. #define SABRE_IMAP_EUPA 0x10a0UL
  98. #define SABRE_ICLR_A_SLOT0 0x1400UL
  99. #define SABRE_ICLR_B_SLOT0 0x1480UL
  100. #define SABRE_ICLR_SCSI 0x1800UL
  101. #define SABRE_ICLR_ETH 0x1808UL
  102. #define SABRE_ICLR_BPP 0x1810UL
  103. #define SABRE_ICLR_AU_REC 0x1818UL
  104. #define SABRE_ICLR_AU_PLAY 0x1820UL
  105. #define SABRE_ICLR_PFAIL 0x1828UL
  106. #define SABRE_ICLR_KMS 0x1830UL
  107. #define SABRE_ICLR_FLPY 0x1838UL
  108. #define SABRE_ICLR_SHW 0x1840UL
  109. #define SABRE_ICLR_KBD 0x1848UL
  110. #define SABRE_ICLR_MS 0x1850UL
  111. #define SABRE_ICLR_SER 0x1858UL
  112. #define SABRE_ICLR_UE 0x1870UL
  113. #define SABRE_ICLR_CE 0x1878UL
  114. #define SABRE_ICLR_PCIERR 0x1880UL
  115. #define SABRE_WRSYNC 0x1c20UL
  116. #define SABRE_PCICTRL 0x2000UL
  117. #define  SABRE_PCICTRL_MRLEN  0x0000001000000000UL /* Use MemoryReadLine for block loads/stores */
  118. #define  SABRE_PCICTRL_SERR  0x0000000400000000UL /* Set when SERR asserted on PCI bus */
  119. #define  SABRE_PCICTRL_ARBPARK  0x0000000000200000UL /* Bus Parking 0=Ultra-IIi 1=prev-bus-owner */
  120. #define  SABRE_PCICTRL_CPUPRIO  0x0000000000100000UL /* Ultra-IIi granted every other bus cycle */
  121. #define  SABRE_PCICTRL_ARBPRIO  0x00000000000f0000UL /* Slot which is granted every other bus cycle */
  122. #define  SABRE_PCICTRL_ERREN  0x0000000000000100UL /* PCI Error Interrupt Enable */
  123. #define  SABRE_PCICTRL_RTRYWE  0x0000000000000080UL /* DMA Flow Control 0=wait-if-possible 1=retry */
  124. #define  SABRE_PCICTRL_AEN  0x000000000000000fUL /* Slot PCI arbitration enables */
  125. #define SABRE_PIOAFSR 0x2010UL
  126. #define  SABRE_PIOAFSR_PMA  0x8000000000000000UL /* Primary Master Abort */
  127. #define  SABRE_PIOAFSR_PTA  0x4000000000000000UL /* Primary Target Abort */
  128. #define  SABRE_PIOAFSR_PRTRY  0x2000000000000000UL /* Primary Excessive Retries */
  129. #define  SABRE_PIOAFSR_PPERR  0x1000000000000000UL /* Primary Parity Error */
  130. #define  SABRE_PIOAFSR_SMA  0x0800000000000000UL /* Secondary Master Abort */
  131. #define  SABRE_PIOAFSR_STA  0x0400000000000000UL /* Secondary Target Abort */
  132. #define  SABRE_PIOAFSR_SRTRY  0x0200000000000000UL /* Secondary Excessive Retries */
  133. #define  SABRE_PIOAFSR_SPERR  0x0100000000000000UL /* Secondary Parity Error */
  134. #define  SABRE_PIOAFSR_BMSK  0x0000ffff00000000UL /* Byte Mask */
  135. #define  SABRE_PIOAFSR_BLK  0x0000000080000000UL /* Was Block Operation */
  136. #define SABRE_PIOAFAR 0x2018UL
  137. #define SABRE_PCIDIAG 0x2020UL
  138. #define  SABRE_PCIDIAG_DRTRY  0x0000000000000040UL /* Disable PIO Retry Limit */
  139. #define  SABRE_PCIDIAG_IPAPAR  0x0000000000000008UL /* Invert PIO Address Parity */
  140. #define  SABRE_PCIDIAG_IPDPAR  0x0000000000000004UL /* Invert PIO Data Parity */
  141. #define  SABRE_PCIDIAG_IDDPAR  0x0000000000000002UL /* Invert DMA Data Parity */
  142. #define  SABRE_PCIDIAG_ELPBK  0x0000000000000001UL /* Loopback Enable - not supported */
  143. #define SABRE_PCITASR 0x2028UL
  144. #define  SABRE_PCITASR_EF  0x0000000000000080UL /* Respond to 0xe0000000-0xffffffff */
  145. #define  SABRE_PCITASR_CD  0x0000000000000040UL /* Respond to 0xc0000000-0xdfffffff */
  146. #define  SABRE_PCITASR_AB  0x0000000000000020UL /* Respond to 0xa0000000-0xbfffffff */
  147. #define  SABRE_PCITASR_89  0x0000000000000010UL /* Respond to 0x80000000-0x9fffffff */
  148. #define  SABRE_PCITASR_67  0x0000000000000008UL /* Respond to 0x60000000-0x7fffffff */
  149. #define  SABRE_PCITASR_45  0x0000000000000004UL /* Respond to 0x40000000-0x5fffffff */
  150. #define  SABRE_PCITASR_23  0x0000000000000002UL /* Respond to 0x20000000-0x3fffffff */
  151. #define  SABRE_PCITASR_01  0x0000000000000001UL /* Respond to 0x00000000-0x1fffffff */
  152. #define SABRE_PIOBUF_DIAG 0x5000UL
  153. #define SABRE_DMABUF_DIAGLO 0x5100UL
  154. #define SABRE_DMABUF_DIAGHI 0x51c0UL
  155. #define SABRE_IMAP_GFX_ALIAS 0x6000UL /* Aliases to 0x1098 */
  156. #define SABRE_IMAP_EUPA_ALIAS 0x8000UL /* Aliases to 0x10a0 */
  157. #define SABRE_IOMMU_VADIAG 0xa400UL
  158. #define SABRE_IOMMU_TCDIAG 0xa408UL
  159. #define SABRE_IOMMU_TAG 0xa580UL
  160. #define  SABRE_IOMMUTAG_ERRSTS  0x0000000001800000UL /* Error status bits */
  161. #define  SABRE_IOMMUTAG_ERR  0x0000000000400000UL /* Error present */
  162. #define  SABRE_IOMMUTAG_WRITE  0x0000000000200000UL /* Page is writable */
  163. #define  SABRE_IOMMUTAG_STREAM  0x0000000000100000UL /* Streamable bit - unused */
  164. #define  SABRE_IOMMUTAG_SIZE  0x0000000000080000UL /* 0=8k 1=16k */
  165. #define  SABRE_IOMMUTAG_VPN  0x000000000007ffffUL /* Virtual Page Number [31:13] */
  166. #define SABRE_IOMMU_DATA 0xa600UL
  167. #define SABRE_IOMMUDATA_VALID  0x0000000040000000UL /* Valid */
  168. #define SABRE_IOMMUDATA_USED  0x0000000020000000UL /* Used (for LRU algorithm) */
  169. #define SABRE_IOMMUDATA_CACHE  0x0000000010000000UL /* Cacheable */
  170. #define SABRE_IOMMUDATA_PPN  0x00000000001fffffUL /* Physical Page Number [33:13] */
  171. #define SABRE_PCI_IRQSTATE 0xa800UL
  172. #define SABRE_OBIO_IRQSTATE 0xa808UL
  173. #define SABRE_FFBCFG 0xf000UL
  174. #define  SABRE_FFBCFG_SPRQS  0x000000000f000000 /* Slave P_RQST queue size */
  175. #define  SABRE_FFBCFG_ONEREAD  0x0000000000004000 /* Slave supports one outstanding read */
  176. #define SABRE_MCCTRL0 0xf010UL
  177. #define  SABRE_MCCTRL0_RENAB  0x0000000080000000 /* Refresh Enable */
  178. #define  SABRE_MCCTRL0_EENAB  0x0000000010000000 /* Enable all ECC functions */
  179. #define  SABRE_MCCTRL0_11BIT  0x0000000000001000 /* Enable 11-bit column addressing */
  180. #define  SABRE_MCCTRL0_DPP  0x0000000000000f00 /* DIMM Pair Present Bits */
  181. #define  SABRE_MCCTRL0_RINTVL  0x00000000000000ff /* Refresh Interval */
  182. #define SABRE_MCCTRL1 0xf018UL
  183. #define  SABRE_MCCTRL1_AMDC  0x0000000038000000 /* Advance Memdata Clock */
  184. #define  SABRE_MCCTRL1_ARDC  0x0000000007000000 /* Advance DRAM Read Data Clock */
  185. #define  SABRE_MCCTRL1_CSR  0x0000000000e00000 /* CAS to RAS delay for CBR refresh */
  186. #define  SABRE_MCCTRL1_CASRW  0x00000000001c0000 /* CAS length for read/write */
  187. #define  SABRE_MCCTRL1_RCD  0x0000000000038000 /* RAS to CAS delay */
  188. #define  SABRE_MCCTRL1_CP  0x0000000000007000 /* CAS Precharge */
  189. #define  SABRE_MCCTRL1_RP  0x0000000000000e00 /* RAS Precharge */
  190. #define  SABRE_MCCTRL1_RAS  0x00000000000001c0 /* Length of RAS for refresh */
  191. #define  SABRE_MCCTRL1_CASRW2  0x0000000000000038 /* Must be same as CASRW */
  192. #define  SABRE_MCCTRL1_RSC  0x0000000000000007 /* RAS after CAS hold time */
  193. #define SABRE_RESETCTRL 0xf020UL
  194. #define SABRE_CONFIGSPACE 0x001000000UL
  195. #define SABRE_IOSPACE 0x002000000UL
  196. #define SABRE_IOSPACE_SIZE 0x000ffffffUL
  197. #define SABRE_MEMSPACE 0x100000000UL
  198. #define SABRE_MEMSPACE_SIZE 0x07fffffffUL
  199. /* UltraSparc-IIi Programmer's Manual, page 325, PCI
  200.  * configuration space address format:
  201.  * 
  202.  *  32             24 23 16 15    11 10       8 7   2  1 0
  203.  * ---------------------------------------------------------
  204.  * |0 0 0 0 0 0 0 0 1| bus | device | function | reg | 0 0 |
  205.  * ---------------------------------------------------------
  206.  */
  207. #define SABRE_CONFIG_BASE(PBM)
  208. ((PBM)->config_space | (1UL << 24))
  209. #define SABRE_CONFIG_ENCODE(BUS, DEVFN, REG)
  210. (((unsigned long)(BUS)   << 16) |
  211.  ((unsigned long)(DEVFN) << 8)  |
  212.  ((unsigned long)(REG)))
  213. static int hummingbird_p;
  214. static void *sabre_pci_config_mkaddr(struct pci_pbm_info *pbm,
  215.      unsigned char bus,
  216.      unsigned int devfn,
  217.      int where)
  218. {
  219. if (!pbm)
  220. return NULL;
  221. return (void *)
  222. (SABRE_CONFIG_BASE(pbm) |
  223.  SABRE_CONFIG_ENCODE(bus, devfn, where));
  224. }
  225. static int sabre_out_of_range(unsigned char devfn)
  226. {
  227. if (hummingbird_p)
  228. return 0;
  229. return (((PCI_SLOT(devfn) == 0) && (PCI_FUNC(devfn) > 0)) ||
  230. ((PCI_SLOT(devfn) == 1) && (PCI_FUNC(devfn) > 1)) ||
  231. (PCI_SLOT(devfn) > 1));
  232. }
  233. static int __sabre_out_of_range(struct pci_pbm_info *pbm,
  234. unsigned char bus,
  235. unsigned char devfn)
  236. {
  237. if (hummingbird_p)
  238. return 0;
  239. return ((pbm->parent == 0) ||
  240. ((pbm == &pbm->parent->pbm_B) &&
  241.  (bus == pbm->pci_first_busno) &&
  242.  PCI_SLOT(devfn) > 8) ||
  243. ((pbm == &pbm->parent->pbm_A) &&
  244.  (bus == pbm->pci_first_busno) &&
  245.  PCI_SLOT(devfn) > 8));
  246. }
  247. static int __sabre_read_byte(struct pci_dev *dev, int where, u8 *value)
  248. {
  249. struct pci_pbm_info *pbm = pci_bus2pbm[dev->bus->number];
  250. unsigned char bus = dev->bus->number;
  251. unsigned int devfn = dev->devfn;
  252. u8 *addr;
  253. *value = 0xff;
  254. addr = sabre_pci_config_mkaddr(pbm, bus, devfn, where);
  255. if (!addr)
  256. return PCIBIOS_SUCCESSFUL;
  257. if (__sabre_out_of_range(pbm, bus, devfn))
  258. return PCIBIOS_SUCCESSFUL;
  259. pci_config_read8(addr, value);
  260. return PCIBIOS_SUCCESSFUL;
  261. }
  262. static int __sabre_read_word(struct pci_dev *dev, int where, u16 *value)
  263. {
  264. struct pci_pbm_info *pbm = pci_bus2pbm[dev->bus->number];
  265. unsigned char bus = dev->bus->number;
  266. unsigned int devfn = dev->devfn;
  267. u16 *addr;
  268. *value = 0xffff;
  269. addr = sabre_pci_config_mkaddr(pbm, bus, devfn, where);
  270. if (!addr)
  271. return PCIBIOS_SUCCESSFUL;
  272. if (__sabre_out_of_range(pbm, bus, devfn))
  273. return PCIBIOS_SUCCESSFUL;
  274. if (where & 0x01) {
  275. printk("pcibios_read_config_word: misaligned reg [%x]n",
  276.        where);
  277. return PCIBIOS_SUCCESSFUL;
  278. }
  279. pci_config_read16(addr, value);
  280. return PCIBIOS_SUCCESSFUL;
  281. }
  282. static int __sabre_read_dword(struct pci_dev *dev, int where, u32 *value)
  283. {
  284. struct pci_pbm_info *pbm = pci_bus2pbm[dev->bus->number];
  285. unsigned char bus = dev->bus->number;
  286. unsigned int devfn = dev->devfn;
  287. u32 *addr;
  288. *value = 0xffffffff;
  289. addr = sabre_pci_config_mkaddr(pbm, bus, devfn, where);
  290. if (!addr)
  291. return PCIBIOS_SUCCESSFUL;
  292. if (__sabre_out_of_range(pbm, bus, devfn))
  293. return PCIBIOS_SUCCESSFUL;
  294. if (where & 0x03) {
  295. printk("pcibios_read_config_dword: misaligned reg [%x]n",
  296.        where);
  297. return PCIBIOS_SUCCESSFUL;
  298. }
  299. pci_config_read32(addr, value);
  300. return PCIBIOS_SUCCESSFUL;
  301. }
  302. static int sabre_read_byte(struct pci_dev *dev, int where, u8 *value)
  303. {
  304. if (dev->bus->number)
  305. return __sabre_read_byte(dev, where, value);
  306. if (sabre_out_of_range(dev->devfn)) {
  307. *value = 0xff;
  308. return PCIBIOS_SUCCESSFUL;
  309. }
  310. if (where < 8) {
  311. u16 tmp;
  312. __sabre_read_word(dev, where & ~1, &tmp);
  313. if (where & 1)
  314. *value = tmp >> 8;
  315. else
  316. *value = tmp & 0xff;
  317. return PCIBIOS_SUCCESSFUL;
  318. } else
  319. return __sabre_read_byte(dev, where, value);
  320. }
  321. static int sabre_read_word(struct pci_dev *dev, int where, u16 *value)
  322. {
  323. if (dev->bus->number)
  324. return __sabre_read_word(dev, where, value);
  325. if (sabre_out_of_range(dev->devfn)) {
  326. *value = 0xffff;
  327. return PCIBIOS_SUCCESSFUL;
  328. }
  329. if (where < 8)
  330. return __sabre_read_word(dev, where, value);
  331. else {
  332. u8 tmp;
  333. __sabre_read_byte(dev, where, &tmp);
  334. *value = tmp;
  335. __sabre_read_byte(dev, where + 1, &tmp);
  336. *value |= tmp << 8;
  337. return PCIBIOS_SUCCESSFUL;
  338. }
  339. }
  340. static int sabre_read_dword(struct pci_dev *dev, int where, u32 *value)
  341. {
  342. u16 tmp;
  343. if (dev->bus->number)
  344. return __sabre_read_dword(dev, where, value);
  345. if (sabre_out_of_range(dev->devfn)) {
  346. *value = 0xffffffff;
  347. return PCIBIOS_SUCCESSFUL;
  348. }
  349. sabre_read_word(dev, where, &tmp);
  350. *value = tmp;
  351. sabre_read_word(dev, where + 2, &tmp);
  352. *value |= tmp << 16;
  353. return PCIBIOS_SUCCESSFUL;
  354. }
  355. static int __sabre_write_byte(struct pci_dev *dev, int where, u8 value)
  356. {
  357. struct pci_pbm_info *pbm = pci_bus2pbm[dev->bus->number];
  358. unsigned char bus = dev->bus->number;
  359. unsigned int devfn = dev->devfn;
  360. u8 *addr;
  361. addr = sabre_pci_config_mkaddr(pbm, bus, devfn, where);
  362. if (!addr)
  363. return PCIBIOS_SUCCESSFUL;
  364. if (__sabre_out_of_range(pbm, bus, devfn))
  365. return PCIBIOS_SUCCESSFUL;
  366. pci_config_write8(addr, value);
  367. return PCIBIOS_SUCCESSFUL;
  368. }
  369. static int __sabre_write_word(struct pci_dev *dev, int where, u16 value)
  370. {
  371. struct pci_pbm_info *pbm = pci_bus2pbm[dev->bus->number];
  372. unsigned char bus = dev->bus->number;
  373. unsigned int devfn = dev->devfn;
  374. u16 *addr;
  375. addr = sabre_pci_config_mkaddr(pbm, bus, devfn, where);
  376. if (!addr)
  377. return PCIBIOS_SUCCESSFUL;
  378. if (__sabre_out_of_range(pbm, bus, devfn))
  379. return PCIBIOS_SUCCESSFUL;
  380. if (where & 0x01) {
  381. printk("pcibios_write_config_word: misaligned reg [%x]n",
  382.        where);
  383. return PCIBIOS_SUCCESSFUL;
  384. }
  385. pci_config_write16(addr, value);
  386. return PCIBIOS_SUCCESSFUL;
  387. }
  388. static int __sabre_write_dword(struct pci_dev *dev, int where, u32 value)
  389. {
  390. struct pci_pbm_info *pbm = pci_bus2pbm[dev->bus->number];
  391. unsigned char bus = dev->bus->number;
  392. unsigned int devfn = dev->devfn;
  393. u32 *addr;
  394. addr = sabre_pci_config_mkaddr(pbm, bus, devfn, where);
  395. if (!addr)
  396. return PCIBIOS_SUCCESSFUL;
  397. if (__sabre_out_of_range(pbm, bus, devfn))
  398. return PCIBIOS_SUCCESSFUL;
  399. if (where & 0x03) {
  400. printk("pcibios_write_config_dword: misaligned reg [%x]n",
  401.        where);
  402. return PCIBIOS_SUCCESSFUL;
  403. }
  404. pci_config_write32(addr, value);
  405. return PCIBIOS_SUCCESSFUL;
  406. }
  407. static int sabre_write_byte(struct pci_dev *dev, int where, u8 value)
  408. {
  409. if (dev->bus->number)
  410. return __sabre_write_byte(dev, where, value);
  411. if (sabre_out_of_range(dev->devfn))
  412. return PCIBIOS_SUCCESSFUL;
  413. if (where < 8) {
  414. u16 tmp;
  415. __sabre_read_word(dev, where & ~1, &tmp);
  416. if (where & 1) {
  417. value &= 0x00ff;
  418. value |= tmp << 8;
  419. } else {
  420. value &= 0xff00;
  421. value |= tmp;
  422. }
  423. return __sabre_write_word(dev, where & ~1, tmp);
  424. } else
  425. return __sabre_write_byte(dev, where, value);
  426. }
  427. static int sabre_write_word(struct pci_dev *dev, int where, u16 value)
  428. {
  429. if (dev->bus->number)
  430. return __sabre_write_word(dev, where, value);
  431. if (sabre_out_of_range(dev->devfn))
  432. return PCIBIOS_SUCCESSFUL;
  433. if (where < 8)
  434. return __sabre_write_word(dev, where, value);
  435. else {
  436. __sabre_write_byte(dev, where, value & 0xff);
  437. __sabre_write_byte(dev, where + 1, value >> 8);
  438. return PCIBIOS_SUCCESSFUL;
  439. }
  440. }
  441. static int sabre_write_dword(struct pci_dev *dev, int where, u32 value)
  442. {
  443. if (dev->bus->number)
  444. return __sabre_write_dword(dev, where, value);
  445. if (sabre_out_of_range(dev->devfn))
  446. return PCIBIOS_SUCCESSFUL;
  447. sabre_write_word(dev, where, value & 0xffff);
  448. sabre_write_word(dev, where + 2, value >> 16);
  449. return PCIBIOS_SUCCESSFUL;
  450. }
  451. static struct pci_ops sabre_ops = {
  452. sabre_read_byte,
  453. sabre_read_word,
  454. sabre_read_dword,
  455. sabre_write_byte,
  456. sabre_write_word,
  457. sabre_write_dword
  458. };
  459. static unsigned long sabre_pcislot_imap_offset(unsigned long ino)
  460. {
  461. unsigned int bus =  (ino & 0x10) >> 4;
  462. unsigned int slot = (ino & 0x0c) >> 2;
  463. if (bus == 0)
  464. return SABRE_IMAP_A_SLOT0 + (slot * 8);
  465. else
  466. return SABRE_IMAP_B_SLOT0 + (slot * 8);
  467. }
  468. static unsigned long __onboard_imap_off[] = {
  469. /*0x20*/ SABRE_IMAP_SCSI,
  470. /*0x21*/ SABRE_IMAP_ETH,
  471. /*0x22*/ SABRE_IMAP_BPP,
  472. /*0x23*/ SABRE_IMAP_AU_REC,
  473. /*0x24*/ SABRE_IMAP_AU_PLAY,
  474. /*0x25*/ SABRE_IMAP_PFAIL,
  475. /*0x26*/ SABRE_IMAP_KMS,
  476. /*0x27*/ SABRE_IMAP_FLPY,
  477. /*0x28*/ SABRE_IMAP_SHW,
  478. /*0x29*/ SABRE_IMAP_KBD,
  479. /*0x2a*/ SABRE_IMAP_MS,
  480. /*0x2b*/ SABRE_IMAP_SER,
  481. /*0x2c*/ 0 /* reserved */,
  482. /*0x2d*/ 0 /* reserved */,
  483. /*0x2e*/ SABRE_IMAP_UE,
  484. /*0x2f*/ SABRE_IMAP_CE,
  485. /*0x30*/ SABRE_IMAP_PCIERR,
  486. };
  487. #define SABRE_ONBOARD_IRQ_BASE 0x20
  488. #define SABRE_ONBOARD_IRQ_LAST 0x30
  489. #define sabre_onboard_imap_offset(__ino) 
  490. __onboard_imap_off[(__ino) - SABRE_ONBOARD_IRQ_BASE]
  491. #define sabre_iclr_offset(ino)       
  492. ((ino & 0x20) ? (SABRE_ICLR_SCSI + (((ino) & 0x1f) << 3)) :  
  493. (SABRE_ICLR_A_SLOT0 + (((ino) & 0x1f)<<3)))
  494. /* PCI SABRE INO number to Sparc PIL level. */
  495. static unsigned char sabre_pil_table[] = {
  496. /*0x00*/0, 0, 0, 0, /* PCI A slot 0  Int A, B, C, D */
  497. /*0x04*/0, 0, 0, 0, /* PCI A slot 1  Int A, B, C, D */
  498. /*0x08*/0, 0, 0, 0, /* PCI A slot 2  Int A, B, C, D */
  499. /*0x0c*/0, 0, 0, 0, /* PCI A slot 3  Int A, B, C, D */
  500. /*0x10*/0, 0, 0, 0, /* PCI B slot 0  Int A, B, C, D */
  501. /*0x14*/0, 0, 0, 0, /* PCI B slot 1  Int A, B, C, D */
  502. /*0x18*/0, 0, 0, 0, /* PCI B slot 2  Int A, B, C, D */
  503. /*0x1c*/0, 0, 0, 0, /* PCI B slot 3  Int A, B, C, D */
  504. /*0x20*/4, /* SCSI */
  505. /*0x21*/5, /* Ethernet */
  506. /*0x22*/8, /* Parallel Port */
  507. /*0x23*/13, /* Audio Record */
  508. /*0x24*/14, /* Audio Playback */
  509. /*0x25*/15, /* PowerFail */
  510. /*0x26*/4, /* second SCSI */
  511. /*0x27*/11, /* Floppy */
  512. /*0x28*/4, /* Spare Hardware */
  513. /*0x29*/9, /* Keyboard */
  514. /*0x2a*/4, /* Mouse */
  515. /*0x2b*/12, /* Serial */
  516. /*0x2c*/10, /* Timer 0 */
  517. /*0x2d*/11, /* Timer 1 */
  518. /*0x2e*/15, /* Uncorrectable ECC */
  519. /*0x2f*/15, /* Correctable ECC */
  520. /*0x30*/15, /* PCI Bus A Error */
  521. /*0x31*/15, /* PCI Bus B Error */
  522. /*0x32*/15, /* Power Management */
  523. };
  524. static int __init sabre_ino_to_pil(struct pci_dev *pdev, unsigned int ino)
  525. {
  526. int ret;
  527. if (pdev &&
  528.     pdev->vendor == PCI_VENDOR_ID_SUN &&
  529.     pdev->device == PCI_DEVICE_ID_SUN_RIO_USB)
  530. return 9;
  531. ret = sabre_pil_table[ino];
  532. if (ret == 0 && pdev == NULL) {
  533. ret = 4;
  534. } else if (ret == 0) {
  535. switch ((pdev->class >> 16) & 0xff) {
  536. case PCI_BASE_CLASS_STORAGE:
  537. ret = 4;
  538. break;
  539. case PCI_BASE_CLASS_NETWORK:
  540. ret = 6;
  541. break;
  542. case PCI_BASE_CLASS_DISPLAY:
  543. ret = 9;
  544. break;
  545. case PCI_BASE_CLASS_MULTIMEDIA:
  546. case PCI_BASE_CLASS_MEMORY:
  547. case PCI_BASE_CLASS_BRIDGE:
  548. case PCI_BASE_CLASS_SERIAL:
  549. ret = 10;
  550. break;
  551. default:
  552. ret = 4;
  553. break;
  554. };
  555. }
  556. return ret;
  557. }
  558. static unsigned int __init sabre_irq_build(struct pci_pbm_info *pbm,
  559.    struct pci_dev *pdev,
  560.    unsigned int ino)
  561. {
  562. struct pci_controller_info *p = pbm->parent;
  563. struct ino_bucket *bucket;
  564. unsigned long imap, iclr;
  565. unsigned long imap_off, iclr_off;
  566. int pil, inofixup = 0;
  567. ino &= PCI_IRQ_INO;
  568. if (ino < SABRE_ONBOARD_IRQ_BASE) {
  569. /* PCI slot */
  570. imap_off = sabre_pcislot_imap_offset(ino);
  571. } else {
  572. /* onboard device */
  573. if (ino > SABRE_ONBOARD_IRQ_LAST) {
  574. prom_printf("sabre_irq_build: Wacky INO [%x]n", ino);
  575. prom_halt();
  576. }
  577. imap_off = sabre_onboard_imap_offset(ino);
  578. }
  579. /* Now build the IRQ bucket. */
  580. pil = sabre_ino_to_pil(pdev, ino);
  581. if (PIL_RESERVED(pil))
  582. BUG();
  583. imap = p->controller_regs + imap_off;
  584. imap += 4;
  585. iclr_off = sabre_iclr_offset(ino);
  586. iclr = p->controller_regs + iclr_off;
  587. iclr += 4;
  588. if ((ino & 0x20) == 0)
  589. inofixup = ino & 0x03;
  590. bucket = __bucket(build_irq(pil, inofixup, iclr, imap));
  591. bucket->flags |= IBF_PCI;
  592. if (pdev) {
  593. struct pcidev_cookie *pcp = pdev->sysdata;
  594. /* When a device lives behind a bridge deeper in the
  595.  * PCI bus topology than APB, a special sequence must
  596.  * run to make sure all pending DMA transfers at the
  597.  * time of IRQ delivery are visible in the coherency
  598.  * domain by the cpu.  This sequence is to perform
  599.  * a read on the far side of the non-APB bridge, then
  600.  * perform a read of Sabre's DMA write-sync register.
  601.  *
  602.  * Currently, the PCI_CONFIG register for the device
  603.  * is used for this read from the far side of the bridge.
  604.  */
  605. if (pdev->bus->number != pcp->pbm->pci_first_busno) {
  606. bucket->flags |= IBF_DMA_SYNC;
  607. bucket->synctab_ent = dma_sync_reg_table_entry++;
  608. dma_sync_reg_table[bucket->synctab_ent] =
  609. (unsigned long) sabre_pci_config_mkaddr(
  610. pcp->pbm,
  611. pdev->bus->number, pdev->devfn, PCI_COMMAND);
  612. }
  613. }
  614. return __irq(bucket);
  615. }
  616. /* SABRE error handling support. */
  617. static void sabre_check_iommu_error(struct pci_controller_info *p,
  618.     unsigned long afsr,
  619.     unsigned long afar)
  620. {
  621. struct pci_iommu *iommu = p->pbm_A.iommu;
  622. unsigned long iommu_tag[16];
  623. unsigned long iommu_data[16];
  624. unsigned long flags;
  625. u64 control;
  626. int i;
  627. spin_lock_irqsave(&iommu->lock, flags);
  628. control = sabre_read(iommu->iommu_control);
  629. if (control & SABRE_IOMMUCTRL_ERR) {
  630. char *type_string;
  631. /* Clear the error encountered bit.
  632.  * NOTE: On Sabre this is write 1 to clear,
  633.  *       which is different from Psycho.
  634.  */
  635. sabre_write(iommu->iommu_control, control);
  636. switch((control & SABRE_IOMMUCTRL_ERRSTS) >> 25UL) {
  637. case 1:
  638. type_string = "Invalid Error";
  639. break;
  640. case 3:
  641. type_string = "ECC Error";
  642. break;
  643. default:
  644. type_string = "Unknown";
  645. break;
  646. };
  647. printk("SABRE%d: IOMMU Error, type[%s]n",
  648.        p->index, type_string);
  649. /* Enter diagnostic mode and probe for error'd
  650.  * entries in the IOTLB.
  651.  */
  652. control &= ~(SABRE_IOMMUCTRL_ERRSTS | SABRE_IOMMUCTRL_ERR);
  653. sabre_write(iommu->iommu_control,
  654.     (control | SABRE_IOMMUCTRL_DENAB));
  655. for (i = 0; i < 16; i++) {
  656. unsigned long base = p->controller_regs;
  657. iommu_tag[i] =
  658. sabre_read(base + SABRE_IOMMU_TAG + (i * 8UL));
  659. iommu_data[i] =
  660. sabre_read(base + SABRE_IOMMU_DATA + (i * 8UL));
  661. sabre_write(base + SABRE_IOMMU_TAG + (i * 8UL), 0);
  662. sabre_write(base + SABRE_IOMMU_DATA + (i * 8UL), 0);
  663. }
  664. sabre_write(iommu->iommu_control, control);
  665. for (i = 0; i < 16; i++) {
  666. unsigned long tag, data;
  667. tag = iommu_tag[i];
  668. if (!(tag & SABRE_IOMMUTAG_ERR))
  669. continue;
  670. data = iommu_data[i];
  671. switch((tag & SABRE_IOMMUTAG_ERRSTS) >> 23UL) {
  672. case 1:
  673. type_string = "Invalid Error";
  674. break;
  675. case 3:
  676. type_string = "ECC Error";
  677. break;
  678. default:
  679. type_string = "Unknown";
  680. break;
  681. };
  682. printk("SABRE%d: IOMMU TAG(%d)[RAW(%016lx)error(%s)wr(%d)sz(%dK)vpg(%08lx)]n",
  683.        p->index, i, tag, type_string,
  684.        ((tag & SABRE_IOMMUTAG_WRITE) ? 1 : 0),
  685.        ((tag & SABRE_IOMMUTAG_SIZE) ? 64 : 8),
  686.        ((tag & SABRE_IOMMUTAG_VPN) << IOMMU_PAGE_SHIFT));
  687. printk("SABRE%d: IOMMU DATA(%d)[RAW(%016lx)valid(%d)used(%d)cache(%d)ppg(%016lx)n",
  688.        p->index, i, data,
  689.        ((data & SABRE_IOMMUDATA_VALID) ? 1 : 0),
  690.        ((data & SABRE_IOMMUDATA_USED) ? 1 : 0),
  691.        ((data & SABRE_IOMMUDATA_CACHE) ? 1 : 0),
  692.        ((data & SABRE_IOMMUDATA_PPN) << IOMMU_PAGE_SHIFT));
  693. }
  694. }
  695. spin_unlock_irqrestore(&iommu->lock, flags);
  696. }
  697. static void sabre_ue_intr(int irq, void *dev_id, struct pt_regs *regs)
  698. {
  699. struct pci_controller_info *p = dev_id;
  700. unsigned long afsr_reg = p->controller_regs + SABRE_UE_AFSR;
  701. unsigned long afar_reg = p->controller_regs + SABRE_UECE_AFAR;
  702. unsigned long afsr, afar, error_bits;
  703. int reported;
  704. /* Latch uncorrectable error status. */
  705. afar = sabre_read(afar_reg);
  706. afsr = sabre_read(afsr_reg);
  707. /* Clear the primary/secondary error status bits. */
  708. error_bits = afsr &
  709. (SABRE_UEAFSR_PDRD | SABRE_UEAFSR_PDWR |
  710.  SABRE_UEAFSR_SDRD | SABRE_UEAFSR_SDWR |
  711.  SABRE_UEAFSR_SDTE | SABRE_UEAFSR_PDTE);
  712. if (!error_bits)
  713. return;
  714. sabre_write(afsr_reg, error_bits);
  715. /* Log the error. */
  716. printk("SABRE%d: Uncorrectable Error, primary error type[%s%s]n",
  717.        p->index,
  718.        ((error_bits & SABRE_UEAFSR_PDRD) ?
  719. "DMA Read" :
  720. ((error_bits & SABRE_UEAFSR_PDWR) ?
  721.  "DMA Write" : "???")),
  722.        ((error_bits & SABRE_UEAFSR_PDTE) ?
  723. ":Translation Error" : ""));
  724. printk("SABRE%d: bytemask[%04lx] dword_offset[%lx] was_block(%d)n",
  725.        p->index,
  726.        (afsr & SABRE_UEAFSR_BMSK) >> 32UL,
  727.        (afsr & SABRE_UEAFSR_OFF) >> 29UL,
  728.        ((afsr & SABRE_UEAFSR_BLK) ? 1 : 0));
  729. printk("SABRE%d: UE AFAR [%016lx]n", p->index, afar);
  730. printk("SABRE%d: UE Secondary errors [", p->index);
  731. reported = 0;
  732. if (afsr & SABRE_UEAFSR_SDRD) {
  733. reported++;
  734. printk("(DMA Read)");
  735. }
  736. if (afsr & SABRE_UEAFSR_SDWR) {
  737. reported++;
  738. printk("(DMA Write)");
  739. }
  740. if (afsr & SABRE_UEAFSR_SDTE) {
  741. reported++;
  742. printk("(Translation Error)");
  743. }
  744. if (!reported)
  745. printk("(none)");
  746. printk("]n");
  747. /* Interrogate IOMMU for error status. */
  748. sabre_check_iommu_error(p, afsr, afar);
  749. }
  750. static void sabre_ce_intr(int irq, void *dev_id, struct pt_regs *regs)
  751. {
  752. struct pci_controller_info *p = dev_id;
  753. unsigned long afsr_reg = p->controller_regs + SABRE_CE_AFSR;
  754. unsigned long afar_reg = p->controller_regs + SABRE_UECE_AFAR;
  755. unsigned long afsr, afar, error_bits;
  756. int reported;
  757. /* Latch error status. */
  758. afar = sabre_read(afar_reg);
  759. afsr = sabre_read(afsr_reg);
  760. /* Clear primary/secondary error status bits. */
  761. error_bits = afsr &
  762. (SABRE_CEAFSR_PDRD | SABRE_CEAFSR_PDWR |
  763.  SABRE_CEAFSR_SDRD | SABRE_CEAFSR_SDWR);
  764. if (!error_bits)
  765. return;
  766. sabre_write(afsr_reg, error_bits);
  767. /* Log the error. */
  768. printk("SABRE%d: Correctable Error, primary error type[%s]n",
  769.        p->index,
  770.        ((error_bits & SABRE_CEAFSR_PDRD) ?
  771. "DMA Read" :
  772. ((error_bits & SABRE_CEAFSR_PDWR) ?
  773.  "DMA Write" : "???")));
  774. /* XXX Use syndrome and afar to print out module string just like
  775.  * XXX UDB CE trap handler does... -DaveM
  776.  */
  777. printk("SABRE%d: syndrome[%02lx] bytemask[%04lx] dword_offset[%lx] "
  778.        "was_block(%d)n",
  779.        p->index,
  780.        (afsr & SABRE_CEAFSR_ESYND) >> 48UL,
  781.        (afsr & SABRE_CEAFSR_BMSK) >> 32UL,
  782.        (afsr & SABRE_CEAFSR_OFF) >> 29UL,
  783.        ((afsr & SABRE_CEAFSR_BLK) ? 1 : 0));
  784. printk("SABRE%d: CE AFAR [%016lx]n", p->index, afar);
  785. printk("SABRE%d: CE Secondary errors [", p->index);
  786. reported = 0;
  787. if (afsr & SABRE_CEAFSR_SDRD) {
  788. reported++;
  789. printk("(DMA Read)");
  790. }
  791. if (afsr & SABRE_CEAFSR_SDWR) {
  792. reported++;
  793. printk("(DMA Write)");
  794. }
  795. if (!reported)
  796. printk("(none)");
  797. printk("]n");
  798. }
  799. static void sabre_pcierr_intr(int irq, void *dev_id, struct pt_regs *regs)
  800. {
  801. struct pci_controller_info *p = dev_id;
  802. unsigned long afsr_reg, afar_reg;
  803. unsigned long afsr, afar, error_bits;
  804. int reported;
  805. afsr_reg = p->controller_regs + SABRE_PIOAFSR;
  806. afar_reg = p->controller_regs + SABRE_PIOAFAR;
  807. /* Latch error status. */
  808. afar = sabre_read(afar_reg);
  809. afsr = sabre_read(afsr_reg);
  810. /* Clear primary/secondary error status bits. */
  811. error_bits = afsr &
  812. (SABRE_PIOAFSR_PMA | SABRE_PIOAFSR_PTA |
  813.  SABRE_PIOAFSR_PRTRY | SABRE_PIOAFSR_PPERR |
  814.  SABRE_PIOAFSR_SMA | SABRE_PIOAFSR_STA |
  815.  SABRE_PIOAFSR_SRTRY | SABRE_PIOAFSR_SPERR);
  816. if (!error_bits)
  817. return;
  818. sabre_write(afsr_reg, error_bits);
  819. /* Log the error. */
  820. printk("SABRE%d: PCI Error, primary error type[%s]n",
  821.        p->index,
  822.        (((error_bits & SABRE_PIOAFSR_PMA) ?
  823.  "Master Abort" :
  824.  ((error_bits & SABRE_PIOAFSR_PTA) ?
  825.   "Target Abort" :
  826.   ((error_bits & SABRE_PIOAFSR_PRTRY) ?
  827.    "Excessive Retries" :
  828.    ((error_bits & SABRE_PIOAFSR_PPERR) ?
  829.     "Parity Error" : "???"))))));
  830. printk("SABRE%d: bytemask[%04lx] was_block(%d)n",
  831.        p->index,
  832.        (afsr & SABRE_PIOAFSR_BMSK) >> 32UL,
  833.        (afsr & SABRE_PIOAFSR_BLK) ? 1 : 0);
  834. printk("SABRE%d: PCI AFAR [%016lx]n", p->index, afar);
  835. printk("SABRE%d: PCI Secondary errors [", p->index);
  836. reported = 0;
  837. if (afsr & SABRE_PIOAFSR_SMA) {
  838. reported++;
  839. printk("(Master Abort)");
  840. }
  841. if (afsr & SABRE_PIOAFSR_STA) {
  842. reported++;
  843. printk("(Target Abort)");
  844. }
  845. if (afsr & SABRE_PIOAFSR_SRTRY) {
  846. reported++;
  847. printk("(Excessive Retries)");
  848. }
  849. if (afsr & SABRE_PIOAFSR_SPERR) {
  850. reported++;
  851. printk("(Parity Error)");
  852. }
  853. if (!reported)
  854. printk("(none)");
  855. printk("]n");
  856. /* For the error types shown, scan both PCI buses for devices
  857.  * which have logged that error type.
  858.  */
  859. /* If we see a Target Abort, this could be the result of an
  860.  * IOMMU translation error of some sort.  It is extremely
  861.  * useful to log this information as usually it indicates
  862.  * a bug in the IOMMU support code or a PCI device driver.
  863.  */
  864. if (error_bits & (SABRE_PIOAFSR_PTA | SABRE_PIOAFSR_STA)) {
  865. sabre_check_iommu_error(p, afsr, afar);
  866. pci_scan_for_target_abort(p, &p->pbm_A, p->pbm_A.pci_bus);
  867. pci_scan_for_target_abort(p, &p->pbm_B, p->pbm_B.pci_bus);
  868. }
  869. if (error_bits & (SABRE_PIOAFSR_PMA | SABRE_PIOAFSR_SMA)) {
  870. pci_scan_for_master_abort(p, &p->pbm_A, p->pbm_A.pci_bus);
  871. pci_scan_for_master_abort(p, &p->pbm_B, p->pbm_B.pci_bus);
  872. }
  873. /* For excessive retries, SABRE/PBM will abort the device
  874.  * and there is no way to specifically check for excessive
  875.  * retries in the config space status registers.  So what
  876.  * we hope is that we'll catch it via the master/target
  877.  * abort events.
  878.  */
  879. if (error_bits & (SABRE_PIOAFSR_PPERR | SABRE_PIOAFSR_SPERR)) {
  880. pci_scan_for_parity_error(p, &p->pbm_A, p->pbm_A.pci_bus);
  881. pci_scan_for_parity_error(p, &p->pbm_B, p->pbm_B.pci_bus);
  882. }
  883. }
  884. /* XXX What about PowerFail/PowerManagement??? -DaveM */
  885. #define SABRE_UE_INO 0x2e
  886. #define SABRE_CE_INO 0x2f
  887. #define SABRE_PCIERR_INO 0x30
  888. static void __init sabre_register_error_handlers(struct pci_controller_info *p)
  889. {
  890. struct pci_pbm_info *pbm = &p->pbm_A; /* arbitrary */
  891. unsigned long base = p->controller_regs;
  892. unsigned long irq, portid = p->portid;
  893. u64 tmp;
  894. /* We clear the error bits in the appropriate AFSR before
  895.  * registering the handler so that we don't get spurious
  896.  * interrupts.
  897.  */
  898. sabre_write(base + SABRE_UE_AFSR,
  899.     (SABRE_UEAFSR_PDRD | SABRE_UEAFSR_PDWR |
  900.      SABRE_UEAFSR_SDRD | SABRE_UEAFSR_SDWR |
  901.      SABRE_UEAFSR_SDTE | SABRE_UEAFSR_PDTE));
  902. irq = sabre_irq_build(pbm, NULL, (portid << 6) | SABRE_UE_INO);
  903. if (request_irq(irq, sabre_ue_intr,
  904. SA_SHIRQ, "SABRE UE", p) < 0) {
  905. prom_printf("SABRE%d: Cannot register UE interrupt.n",
  906.     p->index);
  907. prom_halt();
  908. }
  909. sabre_write(base + SABRE_CE_AFSR,
  910.     (SABRE_CEAFSR_PDRD | SABRE_CEAFSR_PDWR |
  911.      SABRE_CEAFSR_SDRD | SABRE_CEAFSR_SDWR));
  912. irq = sabre_irq_build(pbm, NULL, (portid << 6) | SABRE_CE_INO);
  913. if (request_irq(irq, sabre_ce_intr,
  914. SA_SHIRQ, "SABRE CE", p) < 0) {
  915. prom_printf("SABRE%d: Cannot register CE interrupt.n",
  916.     p->index);
  917. prom_halt();
  918. }
  919. irq = sabre_irq_build(pbm, NULL, (portid << 6) | SABRE_PCIERR_INO);
  920. if (request_irq(irq, sabre_pcierr_intr,
  921. SA_SHIRQ, "SABRE PCIERR", p) < 0) {
  922. prom_printf("SABRE%d: Cannot register PciERR interrupt.n",
  923.     p->index);
  924. prom_halt();
  925. }
  926. tmp = sabre_read(base + SABRE_PCICTRL);
  927. tmp |= SABRE_PCICTRL_ERREN;
  928. sabre_write(base + SABRE_PCICTRL, tmp);
  929. }
  930. static void __init sabre_resource_adjust(struct pci_dev *pdev,
  931.  struct resource *res,
  932.  struct resource *root)
  933. {
  934. struct pci_pbm_info *pbm = pci_bus2pbm[pdev->bus->number];
  935. struct pci_controller_info *p = pbm->parent;
  936. unsigned long base;
  937. if (res->flags & IORESOURCE_IO)
  938. base = p->controller_regs + SABRE_IOSPACE;
  939. else
  940. base = p->controller_regs + SABRE_MEMSPACE;
  941. res->start += base;
  942. res->end += base;
  943. }
  944. static void __init sabre_base_address_update(struct pci_dev *pdev, int resource)
  945. {
  946. struct pcidev_cookie *pcp = pdev->sysdata;
  947. struct pci_pbm_info *pbm = pcp->pbm;
  948. struct pci_controller_info *p = pbm->parent;
  949. struct resource *res;
  950. unsigned long base;
  951. u32 reg;
  952. int where, size, is_64bit;
  953. res = &pdev->resource[resource];
  954. if (resource < 6) {
  955. where = PCI_BASE_ADDRESS_0 + (resource * 4);
  956. } else if (resource == PCI_ROM_RESOURCE) {
  957. where = pdev->rom_base_reg;
  958. } else {
  959. /* Somebody might have asked allocation of a non-standard resource */
  960. return;
  961. }
  962. is_64bit = 0;
  963. if (res->flags & IORESOURCE_IO)
  964. base = p->controller_regs + SABRE_IOSPACE;
  965. else {
  966. base = p->controller_regs + SABRE_MEMSPACE;
  967. if ((res->flags & PCI_BASE_ADDRESS_MEM_TYPE_MASK)
  968.     == PCI_BASE_ADDRESS_MEM_TYPE_64)
  969. is_64bit = 1;
  970. }
  971. size = res->end - res->start;
  972. pci_read_config_dword(pdev, where, &reg);
  973. reg = ((reg & size) |
  974.        (((u32)(res->start - base)) & ~size));
  975. if (resource == PCI_ROM_RESOURCE) {
  976. reg |= PCI_ROM_ADDRESS_ENABLE;
  977. res->flags |= PCI_ROM_ADDRESS_ENABLE;
  978. }
  979. pci_write_config_dword(pdev, where, reg);
  980. /* This knows that the upper 32-bits of the address
  981.  * must be zero.  Our PCI common layer enforces this.
  982.  */
  983. if (is_64bit)
  984. pci_write_config_dword(pdev, where + 4, 0);
  985. }
  986. static void __init apb_init(struct pci_controller_info *p, struct pci_bus *sabre_bus)
  987. {
  988. struct list_head *walk = &sabre_bus->devices;
  989. for (walk = walk->next; walk != &sabre_bus->devices; walk = walk->next) {
  990. struct pci_dev *pdev = pci_dev_b(walk);
  991. if (pdev->vendor == PCI_VENDOR_ID_SUN &&
  992.     pdev->device == PCI_DEVICE_ID_SUN_SIMBA) {
  993. u16 word;
  994. sabre_read_word(pdev, PCI_COMMAND, &word);
  995. word |= PCI_COMMAND_SERR | PCI_COMMAND_PARITY |
  996. PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY |
  997. PCI_COMMAND_IO;
  998. sabre_write_word(pdev, PCI_COMMAND, word);
  999. /* Status register bits are "write 1 to clear". */
  1000. sabre_write_word(pdev, PCI_STATUS, 0xffff);
  1001. sabre_write_word(pdev, PCI_SEC_STATUS, 0xffff);
  1002. /* Use a primary/seconday latency timer value
  1003.  * of 64.
  1004.  */
  1005. sabre_write_byte(pdev, PCI_LATENCY_TIMER, 64);
  1006. sabre_write_byte(pdev, PCI_SEC_LATENCY_TIMER, 64);
  1007. /* Enable reporting/forwarding of master aborts,
  1008.  * parity, and SERR.
  1009.  */
  1010. sabre_write_byte(pdev, PCI_BRIDGE_CONTROL,
  1011.  (PCI_BRIDGE_CTL_PARITY |
  1012.   PCI_BRIDGE_CTL_SERR |
  1013.   PCI_BRIDGE_CTL_MASTER_ABORT));
  1014. }
  1015. }
  1016. }
  1017. static struct pcidev_cookie *alloc_bridge_cookie(struct pci_pbm_info *pbm)
  1018. {
  1019. struct pcidev_cookie *cookie = kmalloc(sizeof(*cookie), GFP_KERNEL);
  1020. if (!cookie) {
  1021. prom_printf("SABRE: Critical allocation failure.n");
  1022. prom_halt();
  1023. }
  1024. /* All we care about is the PBM. */
  1025. memset(cookie, 0, sizeof(*cookie));
  1026. cookie->pbm = pbm;
  1027. return cookie;
  1028. }
  1029. static void __init sabre_scan_bus(struct pci_controller_info *p)
  1030. {
  1031. static int once;
  1032. struct pci_bus *sabre_bus;
  1033. struct pci_pbm_info *pbm;
  1034. struct pcidev_cookie *cookie;
  1035. struct list_head *walk;
  1036. int sabres_scanned;
  1037. /* The APB bridge speaks to the Sabre host PCI bridge
  1038.  * at 66Mhz, but the front side of APB runs at 33Mhz
  1039.  * for both segments.
  1040.  */
  1041. p->pbm_A.is_66mhz_capable = 0;
  1042. p->pbm_B.is_66mhz_capable = 0;
  1043. /* Unlike for PSYCHO, we can only have one SABRE
  1044.  * in a system.  Having multiple SABREs is thus
  1045.  * and error, and as a consequence we do not need
  1046.  * to do any bus renumbering but we do have to have
  1047.  * the pci_bus2pbm array setup properly.
  1048.  *
  1049.  * Also note that the SABRE host bridge is hardwired
  1050.  * to live at bus 0.
  1051.  */
  1052. if (once != 0) {
  1053. prom_printf("SABRE: Multiple controllers unsupported.n");
  1054. prom_halt();
  1055. }
  1056. once++;
  1057. cookie = alloc_bridge_cookie(&p->pbm_A);
  1058. /* The pci_bus2pbm table has already been setup in sabre_init. */
  1059. sabre_bus = pci_scan_bus(p->pci_first_busno,
  1060.  p->pci_ops,
  1061.  &p->pbm_A);
  1062. pci_fixup_host_bridge_self(sabre_bus);
  1063. sabre_bus->self->sysdata = cookie;
  1064. apb_init(p, sabre_bus);
  1065. sabres_scanned = 0;
  1066. walk = &sabre_bus->children;
  1067. for (walk = walk->next; walk != &sabre_bus->children; walk = walk->next) {
  1068. struct pci_bus *pbus = pci_bus_b(walk);
  1069. if (pbus->number == p->pbm_A.pci_first_busno) {
  1070. pbm = &p->pbm_A;
  1071. } else if (pbus->number == p->pbm_B.pci_first_busno) {
  1072. pbm = &p->pbm_B;
  1073. } else
  1074. continue;
  1075. cookie = alloc_bridge_cookie(pbm);
  1076. pbus->self->sysdata = cookie;
  1077. sabres_scanned++;
  1078. pbus->sysdata = pbm;
  1079. pbm->pci_bus = pbus;
  1080. pci_fill_in_pbm_cookies(pbus, pbm, pbm->prom_node);
  1081. pci_record_assignments(pbm, pbus);
  1082. pci_assign_unassigned(pbm, pbus);
  1083. pci_fixup_irq(pbm, pbus);
  1084. pci_determine_66mhz_disposition(pbm, pbus);
  1085. pci_setup_busmastering(pbm, pbus);
  1086. }
  1087. if (!sabres_scanned) {
  1088. /* Hummingbird, no APBs. */
  1089. pbm = &p->pbm_A;
  1090. sabre_bus->sysdata = pbm;
  1091. pbm->pci_bus = sabre_bus;
  1092. pci_fill_in_pbm_cookies(sabre_bus, pbm, pbm->prom_node);
  1093. pci_record_assignments(pbm, sabre_bus);
  1094. pci_assign_unassigned(pbm, sabre_bus);
  1095. pci_fixup_irq(pbm, sabre_bus);
  1096. pci_determine_66mhz_disposition(pbm, sabre_bus);
  1097. pci_setup_busmastering(pbm, sabre_bus);
  1098. }
  1099. sabre_register_error_handlers(p);
  1100. }
  1101. static void __init sabre_iommu_init(struct pci_controller_info *p,
  1102.     int tsbsize, unsigned long dvma_offset,
  1103.     u32 dma_mask)
  1104. {
  1105. struct pci_iommu *iommu = p->pbm_A.iommu;
  1106. unsigned long tsbbase, i, order;
  1107. u64 control;
  1108. /* Setup initial software IOMMU state. */
  1109. spin_lock_init(&iommu->lock);
  1110. iommu->iommu_cur_ctx = 0;
  1111. /* Register addresses. */
  1112. iommu->iommu_control  = p->controller_regs + SABRE_IOMMU_CONTROL;
  1113. iommu->iommu_tsbbase  = p->controller_regs + SABRE_IOMMU_TSBBASE;
  1114. iommu->iommu_flush    = p->controller_regs + SABRE_IOMMU_FLUSH;
  1115. iommu->write_complete_reg = p->controller_regs + SABRE_WRSYNC;
  1116. /* Sabre's IOMMU lacks ctx flushing. */
  1117. iommu->iommu_ctxflush = 0;
  1118.                                         
  1119. /* Invalidate TLB Entries. */
  1120. control = sabre_read(p->controller_regs + SABRE_IOMMU_CONTROL);
  1121. control |= SABRE_IOMMUCTRL_DENAB;
  1122. sabre_write(p->controller_regs + SABRE_IOMMU_CONTROL, control);
  1123. for(i = 0; i < 16; i++) {
  1124. sabre_write(p->controller_regs + SABRE_IOMMU_TAG + (i * 8UL), 0);
  1125. sabre_write(p->controller_regs + SABRE_IOMMU_DATA + (i * 8UL), 0);
  1126. }
  1127. /* Leave diag mode enabled for full-flushing done
  1128.  * in pci_iommu.c
  1129.  */
  1130. tsbbase = __get_free_pages(GFP_KERNEL, order = get_order(tsbsize * 1024 * 8));
  1131. if (!tsbbase) {
  1132. prom_printf("SABRE_IOMMU: Error, gfp(tsb) failed.n");
  1133. prom_halt();
  1134. }
  1135. iommu->page_table = (iopte_t *)tsbbase;
  1136. iommu->page_table_map_base = dvma_offset;
  1137. iommu->dma_addr_mask = dma_mask;
  1138. memset((char *)tsbbase, 0, PAGE_SIZE << order);
  1139. sabre_write(p->controller_regs + SABRE_IOMMU_TSBBASE, __pa(tsbbase));
  1140. control = sabre_read(p->controller_regs + SABRE_IOMMU_CONTROL);
  1141. control &= ~(SABRE_IOMMUCTRL_TSBSZ | SABRE_IOMMUCTRL_TBWSZ);
  1142. control |= SABRE_IOMMUCTRL_ENAB;
  1143. switch(tsbsize) {
  1144. case 64:
  1145. control |= SABRE_IOMMU_TSBSZ_64K;
  1146. iommu->page_table_sz_bits = 16;
  1147. break;
  1148. case 128:
  1149. control |= SABRE_IOMMU_TSBSZ_128K;
  1150. iommu->page_table_sz_bits = 17;
  1151. break;
  1152. default:
  1153. prom_printf("iommu_init: Illegal TSB size %dn", tsbsize);
  1154. prom_halt();
  1155. break;
  1156. }
  1157. sabre_write(p->controller_regs + SABRE_IOMMU_CONTROL, control);
  1158. /* We start with no consistent mappings. */
  1159. iommu->lowest_consistent_map =
  1160. 1 << (iommu->page_table_sz_bits - PBM_LOGCLUSTERS);
  1161. for (i = 0; i < PBM_NCLUSTERS; i++) {
  1162. iommu->alloc_info[i].flush = 0;
  1163. iommu->alloc_info[i].next = 0;
  1164. }
  1165. }
  1166. static void __init pbm_register_toplevel_resources(struct pci_controller_info *p,
  1167.    struct pci_pbm_info *pbm)
  1168. {
  1169. char *name = pbm->name;
  1170. unsigned long ibase = p->controller_regs + SABRE_IOSPACE;
  1171. unsigned long mbase = p->controller_regs + SABRE_MEMSPACE;
  1172. unsigned int devfn;
  1173. unsigned long first, last, i;
  1174. u8 *addr, map;
  1175. sprintf(name, "SABRE%d PBM%c",
  1176. p->index,
  1177. (pbm == &p->pbm_A ? 'A' : 'B'));
  1178. pbm->io_space.name = pbm->mem_space.name = name;
  1179. devfn = PCI_DEVFN(1, (pbm == &p->pbm_A) ? 0 : 1);
  1180. addr = sabre_pci_config_mkaddr(pbm, 0, devfn, APB_IO_ADDRESS_MAP);
  1181. map = 0;
  1182. pci_config_read8(addr, &map);
  1183. first = 8;
  1184. last = 0;
  1185. for (i = 0; i < 8; i++) {
  1186. if ((map & (1 << i)) != 0) {
  1187. if (first > i)
  1188. first = i;
  1189. if (last < i)
  1190. last = i;
  1191. }
  1192. }
  1193. pbm->io_space.start = ibase + (first << 21UL);
  1194. pbm->io_space.end   = ibase + (last << 21UL) + ((1 << 21UL) - 1);
  1195. pbm->io_space.flags = IORESOURCE_IO;
  1196. addr = sabre_pci_config_mkaddr(pbm, 0, devfn, APB_MEM_ADDRESS_MAP);
  1197. map = 0;
  1198. pci_config_read8(addr, &map);
  1199. first = 8;
  1200. last = 0;
  1201. for (i = 0; i < 8; i++) {
  1202. if ((map & (1 << i)) != 0) {
  1203. if (first > i)
  1204. first = i;
  1205. if (last < i)
  1206. last = i;
  1207. }
  1208. }
  1209. pbm->mem_space.start = mbase + (first << 29UL);
  1210. pbm->mem_space.end   = mbase + (last << 29UL) + ((1 << 29UL) - 1);
  1211. pbm->mem_space.flags = IORESOURCE_MEM;
  1212. if (request_resource(&ioport_resource, &pbm->io_space) < 0) {
  1213. prom_printf("Cannot register PBM-%c's IO space.n",
  1214.     (pbm == &p->pbm_A ? 'A' : 'B'));
  1215. prom_halt();
  1216. }
  1217. if (request_resource(&iomem_resource, &pbm->mem_space) < 0) {
  1218. prom_printf("Cannot register PBM-%c's MEM space.n",
  1219.     (pbm == &p->pbm_A ? 'A' : 'B'));
  1220. prom_halt();
  1221. }
  1222. /* Register legacy regions if this PBM covers that area. */
  1223. if (pbm->io_space.start == ibase &&
  1224.     pbm->mem_space.start == mbase)
  1225. pci_register_legacy_regions(&pbm->io_space,
  1226.     &pbm->mem_space);
  1227. }
  1228. static void __init sabre_pbm_init(struct pci_controller_info *p, int sabre_node, u32 dma_begin)
  1229. {
  1230. struct pci_pbm_info *pbm;
  1231. char namebuf[128];
  1232. u32 busrange[2];
  1233. int node, simbas_found;
  1234. simbas_found = 0;
  1235. node = prom_getchild(sabre_node);
  1236. while ((node = prom_searchsiblings(node, "pci")) != 0) {
  1237. int err;
  1238. err = prom_getproperty(node, "model", namebuf, sizeof(namebuf));
  1239. if ((err <= 0) || strncmp(namebuf, "SUNW,simba", err))
  1240. goto next_pci;
  1241. err = prom_getproperty(node, "bus-range",
  1242.        (char *)&busrange[0], sizeof(busrange));
  1243. if (err == 0 || err == -1) {
  1244. prom_printf("APB: Error, cannot get PCI bus-range.n");
  1245. prom_halt();
  1246. }
  1247. simbas_found++;
  1248. if (busrange[0] == 1)
  1249. pbm = &p->pbm_B;
  1250. else
  1251. pbm = &p->pbm_A;
  1252. pbm->parent = p;
  1253. pbm->prom_node = node;
  1254. pbm->pci_first_slot = 1;
  1255. pbm->pci_first_busno = busrange[0];
  1256. pbm->pci_last_busno = busrange[1];
  1257. for (err = pbm->pci_first_busno;
  1258.      err <= pbm->pci_last_busno;
  1259.      err++)
  1260. pci_bus2pbm[err] = pbm;
  1261. prom_getstring(node, "name", pbm->prom_name, sizeof(pbm->prom_name));
  1262. err = prom_getproperty(node, "ranges",
  1263.        (char *)pbm->pbm_ranges,
  1264.        sizeof(pbm->pbm_ranges));
  1265. if (err != -1)
  1266. pbm->num_pbm_ranges =
  1267. (err / sizeof(struct linux_prom_pci_ranges));
  1268. else
  1269. pbm->num_pbm_ranges = 0;
  1270. err = prom_getproperty(node, "interrupt-map",
  1271.        (char *)pbm->pbm_intmap,
  1272.        sizeof(pbm->pbm_intmap));
  1273. if (err != -1) {
  1274. pbm->num_pbm_intmap = (err / sizeof(struct linux_prom_pci_intmap));
  1275. err = prom_getproperty(node, "interrupt-map-mask",
  1276.        (char *)&pbm->pbm_intmask,
  1277.        sizeof(pbm->pbm_intmask));
  1278. if (err == -1) {
  1279. prom_printf("APB: Fatal error, no interrupt-map-mask.n");
  1280. prom_halt();
  1281. }
  1282. } else {
  1283. pbm->num_pbm_intmap = 0;
  1284. memset(&pbm->pbm_intmask, 0, sizeof(pbm->pbm_intmask));
  1285. }
  1286. pbm_register_toplevel_resources(p, pbm);
  1287. next_pci:
  1288. node = prom_getsibling(node);
  1289. if (!node)
  1290. break;
  1291. }
  1292. if (simbas_found == 0) {
  1293. int err;
  1294. /* No APBs underneath, probably this is a hummingbird
  1295.  * system.
  1296.  */
  1297. pbm = &p->pbm_A;
  1298. pbm->parent = p;
  1299. pbm->prom_node = sabre_node;
  1300. pbm->pci_first_busno = p->pci_first_busno;
  1301. pbm->pci_last_busno = p->pci_last_busno;
  1302. for (err = pbm->pci_first_busno;
  1303.      err <= pbm->pci_last_busno;
  1304.      err++)
  1305. pci_bus2pbm[err] = pbm;
  1306. prom_getstring(sabre_node, "name", pbm->prom_name, sizeof(pbm->prom_name));
  1307. err = prom_getproperty(sabre_node, "ranges",
  1308.        (char *) pbm->pbm_ranges,
  1309.        sizeof(pbm->pbm_ranges));
  1310. if (err != -1)
  1311. pbm->num_pbm_ranges =
  1312. (err / sizeof(struct linux_prom_pci_ranges));
  1313. else
  1314. pbm->num_pbm_ranges = 0;
  1315. err = prom_getproperty(sabre_node, "interrupt-map",
  1316.        (char *) pbm->pbm_intmap,
  1317.        sizeof(pbm->pbm_intmap));
  1318. if (err != -1) {
  1319. pbm->num_pbm_intmap = (err / sizeof(struct linux_prom_pci_intmap));
  1320. err = prom_getproperty(sabre_node, "interrupt-map-mask",
  1321.        (char *)&pbm->pbm_intmask,
  1322.        sizeof(pbm->pbm_intmask));
  1323. if (err == -1) {
  1324. prom_printf("Hummingbird: Fatal error, no interrupt-map-mask.n");
  1325. prom_halt();
  1326. }
  1327. } else {
  1328. pbm->num_pbm_intmap = 0;
  1329. memset(&pbm->pbm_intmask, 0, sizeof(pbm->pbm_intmask));
  1330. }
  1331. sprintf(pbm->name, "SABRE%d PBM%c", p->index,
  1332. (pbm == &p->pbm_A ? 'A' : 'B'));
  1333. pbm->io_space.name = pbm->mem_space.name = pbm->name;
  1334. /* Hack up top-level resources. */
  1335. pbm->io_space.start = p->controller_regs + SABRE_IOSPACE;
  1336. pbm->io_space.end   = pbm->io_space.start + (1UL << 24) - 1UL;
  1337. pbm->io_space.flags = IORESOURCE_IO;
  1338. pbm->mem_space.start = p->controller_regs + SABRE_MEMSPACE;
  1339. pbm->mem_space.end   = pbm->mem_space.start + (unsigned long)dma_begin - 1UL;
  1340. pbm->mem_space.flags = IORESOURCE_MEM;
  1341. if (request_resource(&ioport_resource, &pbm->io_space) < 0) {
  1342. prom_printf("Cannot register Hummingbird's IO space.n");
  1343. prom_halt();
  1344. }
  1345. if (request_resource(&iomem_resource, &pbm->mem_space) < 0) {
  1346. prom_printf("Cannot register Hummingbird's MEM space.n");
  1347. prom_halt();
  1348. }
  1349. pci_register_legacy_regions(&pbm->io_space,
  1350.     &pbm->mem_space);
  1351. }
  1352. }
  1353. void __init sabre_init(int pnode, char *model_name)
  1354. {
  1355. struct linux_prom64_registers pr_regs[2];
  1356. struct pci_controller_info *p;
  1357. struct pci_iommu *iommu;
  1358. unsigned long flags;
  1359. int tsbsize, err;
  1360. u32 busrange[2];
  1361. u32 vdma[2];
  1362. u32 upa_portid, dma_mask;
  1363. int bus;
  1364. hummingbird_p = 0;
  1365. if (!strcmp(model_name, "pci108e,a001"))
  1366. hummingbird_p = 1;
  1367. else if (!strcmp(model_name, "SUNW,sabre")) {
  1368. char compat[64];
  1369. if (prom_getproperty(pnode, "compatible",
  1370.      compat, sizeof(compat)) > 0 &&
  1371.     !strcmp(compat, "pci108e,a001")) {
  1372. hummingbird_p = 1;
  1373. } else {
  1374. int cpu_node = linux_cpus[0].prom_node;
  1375. /* Of course, Sun has to encode things a thousand
  1376.  * different ways, inconsistently.
  1377.  */
  1378. if (prom_getproperty(cpu_node, "name",
  1379.      compat, sizeof(compat)) > 0 &&
  1380.     !strcmp(compat, "SUNW,UltraSPARC-IIe"))
  1381. hummingbird_p = 1;
  1382. }
  1383. }
  1384. p = kmalloc(sizeof(*p), GFP_ATOMIC);
  1385. if (!p) {
  1386. prom_printf("SABRE: Error, kmalloc(pci_controller_info) failed.n");
  1387. prom_halt();
  1388. }
  1389. memset(p, 0, sizeof(*p));
  1390. iommu = kmalloc(sizeof(*iommu), GFP_ATOMIC);
  1391. if (!iommu) {
  1392. prom_printf("SABRE: Error, kmalloc(pci_iommu) failed.n");
  1393. prom_halt();
  1394. }
  1395. memset(iommu, 0, sizeof(*iommu));
  1396. p->pbm_A.iommu = p->pbm_B.iommu = iommu;
  1397. upa_portid = prom_getintdefault(pnode, "upa-portid", 0xff);
  1398. spin_lock_irqsave(&pci_controller_lock, flags);
  1399. p->next = pci_controller_root;
  1400. pci_controller_root = p;
  1401. spin_unlock_irqrestore(&pci_controller_lock, flags);
  1402. p->portid = upa_portid;
  1403. p->index = pci_num_controllers++;
  1404. p->pbms_same_domain = 1;
  1405. p->scan_bus = sabre_scan_bus;
  1406. p->irq_build = sabre_irq_build;
  1407. p->base_address_update = sabre_base_address_update;
  1408. p->resource_adjust = sabre_resource_adjust;
  1409. p->pci_ops = &sabre_ops;
  1410. /*
  1411.  * Map in SABRE register set and report the presence of this SABRE.
  1412.  */
  1413. err = prom_getproperty(pnode, "reg",
  1414.        (char *)&pr_regs[0], sizeof(pr_regs));
  1415. if(err == 0 || err == -1) {
  1416. prom_printf("SABRE: Error, cannot get U2P registers "
  1417.     "from PROM.n");
  1418. prom_halt();
  1419. }
  1420. /*
  1421.  * First REG in property is base of entire SABRE register space.
  1422.  */
  1423. p->controller_regs = pr_regs[0].phys_addr;
  1424. pci_dma_wsync = p->controller_regs + SABRE_WRSYNC;
  1425. printk("PCI: Found SABRE, main regs at %016lx, wsync at %016lxn",
  1426.        p->controller_regs, pci_dma_wsync);
  1427. /* Error interrupts are enabled later after the bus scan. */
  1428. sabre_write(p->controller_regs + SABRE_PCICTRL,
  1429.     (SABRE_PCICTRL_MRLEN   | SABRE_PCICTRL_SERR |
  1430.      SABRE_PCICTRL_ARBPARK | SABRE_PCICTRL_AEN));
  1431. /* Now map in PCI config space for entire SABRE. */
  1432. p->pbm_A.config_space = p->pbm_B.config_space =
  1433. (p->controller_regs + SABRE_CONFIGSPACE);
  1434. printk("SABRE: Shared PCI config space at %016lxn",
  1435.        p->pbm_A.config_space);
  1436. err = prom_getproperty(pnode, "virtual-dma",
  1437.        (char *)&vdma[0], sizeof(vdma));
  1438. if(err == 0 || err == -1) {
  1439. prom_printf("SABRE: Error, cannot get virtual-dma property "
  1440.     "from PROM.n");
  1441. prom_halt();
  1442. }
  1443. dma_mask = vdma[0];
  1444. switch(vdma[1]) {
  1445. case 0x20000000:
  1446. dma_mask |= 0x1fffffff;
  1447. tsbsize = 64;
  1448. break;
  1449. case 0x40000000:
  1450. dma_mask |= 0x3fffffff;
  1451. tsbsize = 128;
  1452. break;
  1453. case 0x80000000:
  1454. dma_mask |= 0x7fffffff;
  1455. tsbsize = 128;
  1456. break;
  1457. default:
  1458. prom_printf("SABRE: strange virtual-dma size.n");
  1459. prom_halt();
  1460. }
  1461. sabre_iommu_init(p, tsbsize, vdma[0], dma_mask);
  1462. printk("SABRE: DVMA at %08x [%08x]n", vdma[0], vdma[1]);
  1463. err = prom_getproperty(pnode, "bus-range",
  1464.        (char *)&busrange[0], sizeof(busrange));
  1465. if(err == 0 || err == -1) {
  1466. prom_printf("SABRE: Error, cannot get PCI bus-range "
  1467.     " from PROM.n");
  1468. prom_halt();
  1469. }
  1470. p->pci_first_busno = busrange[0];
  1471. p->pci_last_busno = busrange[1];
  1472. /*
  1473.  * Handle config space reads through any Simba on APB.
  1474.  */
  1475. for (bus = p->pci_first_busno; bus <= p->pci_last_busno; bus++)
  1476. pci_bus2pbm[bus] = &p->pbm_A;
  1477. /*
  1478.  * Look for APB underneath.
  1479.  */
  1480. sabre_pbm_init(p, pnode, vdma[0]);
  1481. }