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

嵌入式Linux

开发平台:

Unix_Linux

  1. /* $Id: pci_psycho.c,v 1.30.2.2 2002/02/01 00:57:47 davem Exp $
  2.  * pci_psycho.c: PSYCHO/U2P 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/pbm.h>
  14. #include <asm/iommu.h>
  15. #include <asm/irq.h>
  16. #include <asm/starfire.h>
  17. #include "pci_impl.h"
  18. #include "iommu_common.h"
  19. /* All PSYCHO registers are 64-bits.  The following accessor
  20.  * routines are how they are accessed.  The REG parameter
  21.  * is a physical address.
  22.  */
  23. #define psycho_read(__reg) 
  24. ({ u64 __ret; 
  25. __asm__ __volatile__("ldxa [%1] %2, %0" 
  26.      : "=r" (__ret) 
  27.      : "r" (__reg), "i" (ASI_PHYS_BYPASS_EC_E) 
  28.      : "memory"); 
  29. __ret; 
  30. })
  31. #define psycho_write(__reg, __val) 
  32. __asm__ __volatile__("stxa %0, [%1] %2" 
  33.      : /* no outputs */ 
  34.      : "r" (__val), "r" (__reg), 
  35.        "i" (ASI_PHYS_BYPASS_EC_E) 
  36.      : "memory")
  37. /* Misc. PSYCHO PCI controller register offsets and definitions. */
  38. #define PSYCHO_CONTROL 0x0010UL
  39. #define  PSYCHO_CONTROL_IMPL  0xf000000000000000 /* Implementation of this PSYCHO*/
  40. #define  PSYCHO_CONTROL_VER  0x0f00000000000000 /* Version of this PSYCHO       */
  41. #define  PSYCHO_CONTROL_MID  0x00f8000000000000 /* UPA Module ID of PSYCHO      */
  42. #define  PSYCHO_CONTROL_IGN  0x0007c00000000000 /* Interrupt Group Number       */
  43. #define  PSYCHO_CONTROL_RESV     0x00003ffffffffff0 /* Reserved                     */
  44. #define  PSYCHO_CONTROL_APCKEN  0x0000000000000008 /* Address Parity Check Enable  */
  45. #define  PSYCHO_CONTROL_APERR  0x0000000000000004 /* Incoming System Addr Parerr  */
  46. #define  PSYCHO_CONTROL_IAP  0x0000000000000002 /* Invert UPA Parity            */
  47. #define  PSYCHO_CONTROL_MODE  0x0000000000000001 /* PSYCHO clock mode            */
  48. #define PSYCHO_PCIA_CTRL 0x2000UL
  49. #define PSYCHO_PCIB_CTRL 0x4000UL
  50. #define  PSYCHO_PCICTRL_RESV1  0xfffffff000000000 /* Reserved                     */
  51. #define  PSYCHO_PCICTRL_SBH_ERR  0x0000000800000000 /* Streaming byte hole error    */
  52. #define  PSYCHO_PCICTRL_SERR  0x0000000400000000 /* SERR signal asserted         */
  53. #define  PSYCHO_PCICTRL_SPEED  0x0000000200000000 /* PCI speed (1 is U2P clock)   */
  54. #define  PSYCHO_PCICTRL_RESV2  0x00000001ffc00000 /* Reserved                     */
  55. #define  PSYCHO_PCICTRL_ARB_PARK 0x0000000000200000 /* PCI arbitration parking      */
  56. #define  PSYCHO_PCICTRL_RESV3  0x00000000001ff800 /* Reserved                     */
  57. #define  PSYCHO_PCICTRL_SBH_INT  0x0000000000000400 /* Streaming byte hole int enab */
  58. #define  PSYCHO_PCICTRL_WEN  0x0000000000000200 /* Power Mgmt Wake Enable       */
  59. #define  PSYCHO_PCICTRL_EEN  0x0000000000000100 /* PCI Error Interrupt Enable   */
  60. #define  PSYCHO_PCICTRL_RESV4  0x00000000000000c0 /* Reserved                     */
  61. #define  PSYCHO_PCICTRL_AEN  0x000000000000003f /* PCI DVMA Arbitration Enable  */
  62. /* U2P Programmer's Manual, page 13-55, configuration space
  63.  * address format:
  64.  * 
  65.  *  32             24 23 16 15    11 10       8 7   2  1 0
  66.  * ---------------------------------------------------------
  67.  * |0 0 0 0 0 0 0 0 1| bus | device | function | reg | 0 0 |
  68.  * ---------------------------------------------------------
  69.  */
  70. #define PSYCHO_CONFIG_BASE(PBM)
  71. ((PBM)->config_space | (1UL << 24))
  72. #define PSYCHO_CONFIG_ENCODE(BUS, DEVFN, REG)
  73. (((unsigned long)(BUS)   << 16) |
  74.  ((unsigned long)(DEVFN) << 8)  |
  75.  ((unsigned long)(REG)))
  76. static void *psycho_pci_config_mkaddr(struct pci_pbm_info *pbm,
  77.       unsigned char bus,
  78.       unsigned int devfn,
  79.       int where)
  80. {
  81. if (!pbm)
  82. return NULL;
  83. return (void *)
  84. (PSYCHO_CONFIG_BASE(pbm) |
  85.  PSYCHO_CONFIG_ENCODE(bus, devfn, where));
  86. }
  87. static int psycho_out_of_range(struct pci_pbm_info *pbm,
  88.        unsigned char bus,
  89.        unsigned char devfn)
  90. {
  91. return ((pbm->parent == 0) ||
  92. ((pbm == &pbm->parent->pbm_B) &&
  93.  (bus == pbm->pci_first_busno) &&
  94.  PCI_SLOT(devfn) > 8) ||
  95. ((pbm == &pbm->parent->pbm_A) &&
  96.  (bus == pbm->pci_first_busno) &&
  97.  PCI_SLOT(devfn) > 8));
  98. }
  99. /* PSYCHO PCI configuration space accessors. */
  100. static int psycho_read_byte(struct pci_dev *dev, int where, u8 *value)
  101. {
  102. struct pci_pbm_info *pbm = pci_bus2pbm[dev->bus->number];
  103. unsigned char bus = dev->bus->number;
  104. unsigned int devfn = dev->devfn;
  105. u8 *addr;
  106. *value = 0xff;
  107. addr = psycho_pci_config_mkaddr(pbm, bus, devfn, where);
  108. if (!addr)
  109. return PCIBIOS_SUCCESSFUL;
  110. if (psycho_out_of_range(pbm, bus, devfn))
  111. return PCIBIOS_SUCCESSFUL;
  112. pci_config_read8(addr, value);
  113. return PCIBIOS_SUCCESSFUL;
  114. }
  115. static int psycho_read_word(struct pci_dev *dev, int where, u16 *value)
  116. {
  117. struct pci_pbm_info *pbm = pci_bus2pbm[dev->bus->number];
  118. unsigned char bus = dev->bus->number;
  119. unsigned int devfn = dev->devfn;
  120. u16 *addr;
  121. *value = 0xffff;
  122. addr = psycho_pci_config_mkaddr(pbm, bus, devfn, where);
  123. if (!addr)
  124. return PCIBIOS_SUCCESSFUL;
  125. if (psycho_out_of_range(pbm, bus, devfn))
  126. return PCIBIOS_SUCCESSFUL;
  127. if (where & 0x01) {
  128. printk("pcibios_read_config_word: misaligned reg [%x]n",
  129.        where);
  130. return PCIBIOS_SUCCESSFUL;
  131. }
  132. pci_config_read16(addr, value);
  133. return PCIBIOS_SUCCESSFUL;
  134. }
  135. static int psycho_read_dword(struct pci_dev *dev, int where, u32 *value)
  136. {
  137. struct pci_pbm_info *pbm = pci_bus2pbm[dev->bus->number];
  138. unsigned char bus = dev->bus->number;
  139. unsigned int devfn = dev->devfn;
  140. u32 *addr;
  141. *value = 0xffffffff;
  142. addr = psycho_pci_config_mkaddr(pbm, bus, devfn, where);
  143. if (!addr)
  144. return PCIBIOS_SUCCESSFUL;
  145. if (psycho_out_of_range(pbm, bus, devfn))
  146. return PCIBIOS_SUCCESSFUL;
  147. if (where & 0x03) {
  148. printk("pcibios_read_config_dword: misaligned reg [%x]n",
  149.        where);
  150. return PCIBIOS_SUCCESSFUL;
  151. }
  152. pci_config_read32(addr, value);
  153. return PCIBIOS_SUCCESSFUL;
  154. }
  155. static int psycho_write_byte(struct pci_dev *dev, int where, u8 value)
  156. {
  157. struct pci_pbm_info *pbm = pci_bus2pbm[dev->bus->number];
  158. unsigned char bus = dev->bus->number;
  159. unsigned int devfn = dev->devfn;
  160. u8 *addr;
  161. addr = psycho_pci_config_mkaddr(pbm, bus, devfn, where);
  162. if (!addr)
  163. return PCIBIOS_SUCCESSFUL;
  164. if (psycho_out_of_range(pbm, bus, devfn))
  165. return PCIBIOS_SUCCESSFUL;
  166. pci_config_write8(addr, value);
  167. return PCIBIOS_SUCCESSFUL;
  168. }
  169. static int psycho_write_word(struct pci_dev *dev, int where, u16 value)
  170. {
  171. struct pci_pbm_info *pbm = pci_bus2pbm[dev->bus->number];
  172. unsigned char bus = dev->bus->number;
  173. unsigned int devfn = dev->devfn;
  174. u16 *addr;
  175. addr = psycho_pci_config_mkaddr(pbm, bus, devfn, where);
  176. if (!addr)
  177. return PCIBIOS_SUCCESSFUL;
  178. if (psycho_out_of_range(pbm, bus, devfn))
  179. return PCIBIOS_SUCCESSFUL;
  180. if (where & 0x01) {
  181. printk("pcibios_write_config_word: misaligned reg [%x]n",
  182.        where);
  183. return PCIBIOS_SUCCESSFUL;
  184. }
  185. pci_config_write16(addr, value);
  186. return PCIBIOS_SUCCESSFUL;
  187. }
  188. static int psycho_write_dword(struct pci_dev *dev, int where, u32 value)
  189. {
  190. struct pci_pbm_info *pbm = pci_bus2pbm[dev->bus->number];
  191. unsigned char bus = dev->bus->number;
  192. unsigned int devfn = dev->devfn;
  193. u32 *addr;
  194. addr = psycho_pci_config_mkaddr(pbm, bus, devfn, where);
  195. if (!addr)
  196. return PCIBIOS_SUCCESSFUL;
  197. if (psycho_out_of_range(pbm, bus, devfn))
  198. return PCIBIOS_SUCCESSFUL;
  199. if (where & 0x03) {
  200. printk("pcibios_write_config_dword: misaligned reg [%x]n",
  201.        where);
  202. return PCIBIOS_SUCCESSFUL;
  203. }
  204. pci_config_write32(addr, value);
  205. return PCIBIOS_SUCCESSFUL;
  206. }
  207. static struct pci_ops psycho_ops = {
  208. psycho_read_byte,
  209. psycho_read_word,
  210. psycho_read_dword,
  211. psycho_write_byte,
  212. psycho_write_word,
  213. psycho_write_dword
  214. };
  215. /* PSYCHO interrupt mapping support. */
  216. #define PSYCHO_IMAP_A_SLOT0 0x0c00UL
  217. #define PSYCHO_IMAP_B_SLOT0 0x0c20UL
  218. static unsigned long psycho_pcislot_imap_offset(unsigned long ino)
  219. {
  220. unsigned int bus =  (ino & 0x10) >> 4;
  221. unsigned int slot = (ino & 0x0c) >> 2;
  222. if (bus == 0)
  223. return PSYCHO_IMAP_A_SLOT0 + (slot * 8);
  224. else
  225. return PSYCHO_IMAP_B_SLOT0 + (slot * 8);
  226. }
  227. #define PSYCHO_IMAP_SCSI 0x1000UL
  228. #define PSYCHO_IMAP_ETH 0x1008UL
  229. #define PSYCHO_IMAP_BPP 0x1010UL
  230. #define PSYCHO_IMAP_AU_REC 0x1018UL
  231. #define PSYCHO_IMAP_AU_PLAY 0x1020UL
  232. #define PSYCHO_IMAP_PFAIL 0x1028UL
  233. #define PSYCHO_IMAP_KMS 0x1030UL
  234. #define PSYCHO_IMAP_FLPY 0x1038UL
  235. #define PSYCHO_IMAP_SHW 0x1040UL
  236. #define PSYCHO_IMAP_KBD 0x1048UL
  237. #define PSYCHO_IMAP_MS 0x1050UL
  238. #define PSYCHO_IMAP_SER 0x1058UL
  239. #define PSYCHO_IMAP_TIM0 0x1060UL
  240. #define PSYCHO_IMAP_TIM1 0x1068UL
  241. #define PSYCHO_IMAP_UE 0x1070UL
  242. #define PSYCHO_IMAP_CE 0x1078UL
  243. #define PSYCHO_IMAP_A_ERR 0x1080UL
  244. #define PSYCHO_IMAP_B_ERR 0x1088UL
  245. #define PSYCHO_IMAP_PMGMT 0x1090UL
  246. #define PSYCHO_IMAP_GFX 0x1098UL
  247. #define PSYCHO_IMAP_EUPA 0x10a0UL
  248. static unsigned long __onboard_imap_off[] = {
  249. /*0x20*/ PSYCHO_IMAP_SCSI,
  250. /*0x21*/ PSYCHO_IMAP_ETH,
  251. /*0x22*/ PSYCHO_IMAP_BPP,
  252. /*0x23*/ PSYCHO_IMAP_AU_REC,
  253. /*0x24*/ PSYCHO_IMAP_AU_PLAY,
  254. /*0x25*/ PSYCHO_IMAP_PFAIL,
  255. /*0x26*/ PSYCHO_IMAP_KMS,
  256. /*0x27*/ PSYCHO_IMAP_FLPY,
  257. /*0x28*/ PSYCHO_IMAP_SHW,
  258. /*0x29*/ PSYCHO_IMAP_KBD,
  259. /*0x2a*/ PSYCHO_IMAP_MS,
  260. /*0x2b*/ PSYCHO_IMAP_SER,
  261. /*0x2c*/ PSYCHO_IMAP_TIM0,
  262. /*0x2d*/ PSYCHO_IMAP_TIM1,
  263. /*0x2e*/ PSYCHO_IMAP_UE,
  264. /*0x2f*/ PSYCHO_IMAP_CE,
  265. /*0x30*/ PSYCHO_IMAP_A_ERR,
  266. /*0x31*/ PSYCHO_IMAP_B_ERR,
  267. /*0x32*/ PSYCHO_IMAP_PMGMT
  268. };
  269. #define PSYCHO_ONBOARD_IRQ_BASE 0x20
  270. #define PSYCHO_ONBOARD_IRQ_LAST 0x32
  271. #define psycho_onboard_imap_offset(__ino) 
  272. __onboard_imap_off[(__ino) - PSYCHO_ONBOARD_IRQ_BASE]
  273. #define PSYCHO_ICLR_A_SLOT0 0x1400UL
  274. #define PSYCHO_ICLR_SCSI 0x1800UL
  275. #define psycho_iclr_offset(ino)       
  276. ((ino & 0x20) ? (PSYCHO_ICLR_SCSI + (((ino) & 0x1f) << 3)) :  
  277. (PSYCHO_ICLR_A_SLOT0 + (((ino) & 0x1f)<<3)))
  278. /* PCI PSYCHO INO number to Sparc PIL level. */
  279. static unsigned char psycho_pil_table[] = {
  280. /*0x00*/0, 0, 0, 0, /* PCI A slot 0  Int A, B, C, D */
  281. /*0x04*/0, 0, 0, 0, /* PCI A slot 1  Int A, B, C, D */
  282. /*0x08*/0, 0, 0, 0, /* PCI A slot 2  Int A, B, C, D */
  283. /*0x0c*/0, 0, 0, 0, /* PCI A slot 3  Int A, B, C, D */
  284. /*0x10*/0, 0, 0, 0, /* PCI B slot 0  Int A, B, C, D */
  285. /*0x14*/0, 0, 0, 0, /* PCI B slot 1  Int A, B, C, D */
  286. /*0x18*/0, 0, 0, 0, /* PCI B slot 2  Int A, B, C, D */
  287. /*0x1c*/0, 0, 0, 0, /* PCI B slot 3  Int A, B, C, D */
  288. /*0x20*/3, /* SCSI */
  289. /*0x21*/5, /* Ethernet */
  290. /*0x22*/8, /* Parallel Port */
  291. /*0x23*/13, /* Audio Record */
  292. /*0x24*/14, /* Audio Playback */
  293. /*0x25*/15, /* PowerFail */
  294. /*0x26*/3, /* second SCSI */
  295. /*0x27*/11, /* Floppy */
  296. /*0x28*/2, /* Spare Hardware */
  297. /*0x29*/9, /* Keyboard */
  298. /*0x2a*/4, /* Mouse */
  299. /*0x2b*/12, /* Serial */
  300. /*0x2c*/10, /* Timer 0 */
  301. /*0x2d*/11, /* Timer 1 */
  302. /*0x2e*/15, /* Uncorrectable ECC */
  303. /*0x2f*/15, /* Correctable ECC */
  304. /*0x30*/15, /* PCI Bus A Error */
  305. /*0x31*/15, /* PCI Bus B Error */
  306. /*0x32*/1, /* Power Management */
  307. };
  308. static int __init psycho_ino_to_pil(struct pci_dev *pdev, unsigned int ino)
  309. {
  310. int ret;
  311. ret = psycho_pil_table[ino];
  312. if (ret == 0 && pdev == NULL) {
  313. ret = 1;
  314. } else if (ret == 0) {
  315. switch ((pdev->class >> 16) & 0xff) {
  316. case PCI_BASE_CLASS_STORAGE:
  317. ret = 4;
  318. break;
  319. case PCI_BASE_CLASS_NETWORK:
  320. ret = 6;
  321. break;
  322. case PCI_BASE_CLASS_DISPLAY:
  323. ret = 9;
  324. break;
  325. case PCI_BASE_CLASS_MULTIMEDIA:
  326. case PCI_BASE_CLASS_MEMORY:
  327. case PCI_BASE_CLASS_BRIDGE:
  328. case PCI_BASE_CLASS_SERIAL:
  329. ret = 10;
  330. break;
  331. default:
  332. ret = 1;
  333. break;
  334. };
  335. }
  336. return ret;
  337. }
  338. static unsigned int __init psycho_irq_build(struct pci_pbm_info *pbm,
  339.     struct pci_dev *pdev,
  340.     unsigned int ino)
  341. {
  342. struct pci_controller_info *p = pbm->parent;
  343. struct ino_bucket *bucket;
  344. unsigned long imap, iclr;
  345. unsigned long imap_off, iclr_off;
  346. int pil, inofixup = 0;
  347. ino &= PCI_IRQ_INO;
  348. if (ino < PSYCHO_ONBOARD_IRQ_BASE) {
  349. /* PCI slot */
  350. imap_off = psycho_pcislot_imap_offset(ino);
  351. } else {
  352. /* Onboard device */
  353. if (ino > PSYCHO_ONBOARD_IRQ_LAST) {
  354. prom_printf("psycho_irq_build: Wacky INO [%x]n", ino);
  355. prom_halt();
  356. }
  357. imap_off = psycho_onboard_imap_offset(ino);
  358. }
  359. /* Now build the IRQ bucket. */
  360. pil = psycho_ino_to_pil(pdev, ino);
  361. imap = p->controller_regs + imap_off;
  362. imap += 4;
  363. iclr_off = psycho_iclr_offset(ino);
  364. iclr = p->controller_regs + iclr_off;
  365. iclr += 4;
  366. if ((ino & 0x20) == 0)
  367. inofixup = ino & 0x03;
  368. bucket = __bucket(build_irq(pil, inofixup, iclr, imap));
  369. bucket->flags |= IBF_PCI;
  370. return __irq(bucket);
  371. }
  372. /* PSYCHO error handling support. */
  373. enum psycho_error_type {
  374. UE_ERR, CE_ERR, PCI_ERR
  375. };
  376. /* Helper function of IOMMU error checking, which checks out
  377.  * the state of the streaming buffers.  The IOMMU lock is
  378.  * held when this is called.
  379.  *
  380.  * For the PCI error case we know which PBM (and thus which
  381.  * streaming buffer) caused the error, but for the uncorrectable
  382.  * error case we do not.  So we always check both streaming caches.
  383.  */
  384. #define PSYCHO_STRBUF_CONTROL_A 0x2800UL
  385. #define PSYCHO_STRBUF_CONTROL_B 0x4800UL
  386. #define  PSYCHO_STRBUF_CTRL_LPTR    0x00000000000000f0 /* LRU Lock Pointer */
  387. #define  PSYCHO_STRBUF_CTRL_LENAB   0x0000000000000008 /* LRU Lock Enable */
  388. #define  PSYCHO_STRBUF_CTRL_RRDIS   0x0000000000000004 /* Rerun Disable */
  389. #define  PSYCHO_STRBUF_CTRL_DENAB   0x0000000000000002 /* Diagnostic Mode Enable */
  390. #define  PSYCHO_STRBUF_CTRL_ENAB    0x0000000000000001 /* Streaming Buffer Enable */
  391. #define PSYCHO_STRBUF_FLUSH_A   0x2808UL
  392. #define PSYCHO_STRBUF_FLUSH_B   0x4808UL
  393. #define PSYCHO_STRBUF_FSYNC_A   0x2810UL
  394. #define PSYCHO_STRBUF_FSYNC_B   0x4810UL
  395. #define PSYCHO_STC_DATA_A 0xb000UL
  396. #define PSYCHO_STC_DATA_B 0xc000UL
  397. #define PSYCHO_STC_ERR_A 0xb400UL
  398. #define PSYCHO_STC_ERR_B 0xc400UL
  399. #define  PSYCHO_STCERR_WRITE  0x0000000000000002 /* Write Error */
  400. #define  PSYCHO_STCERR_READ  0x0000000000000001 /* Read Error */
  401. #define PSYCHO_STC_TAG_A 0xb800UL
  402. #define PSYCHO_STC_TAG_B 0xc800UL
  403. #define  PSYCHO_STCTAG_PPN  0x0fffffff00000000 /* Physical Page Number */
  404. #define  PSYCHO_STCTAG_VPN  0x00000000ffffe000 /* Virtual Page Number */
  405. #define  PSYCHO_STCTAG_VALID  0x0000000000000002 /* Valid */
  406. #define  PSYCHO_STCTAG_WRITE  0x0000000000000001 /* Writable */
  407. #define PSYCHO_STC_LINE_A 0xb900UL
  408. #define PSYCHO_STC_LINE_B 0xc900UL
  409. #define  PSYCHO_STCLINE_LINDX  0x0000000001e00000 /* LRU Index */
  410. #define  PSYCHO_STCLINE_SPTR  0x00000000001f8000 /* Dirty Data Start Pointer */
  411. #define  PSYCHO_STCLINE_LADDR  0x0000000000007f00 /* Line Address */
  412. #define  PSYCHO_STCLINE_EPTR  0x00000000000000fc /* Dirty Data End Pointer */
  413. #define  PSYCHO_STCLINE_VALID  0x0000000000000002 /* Valid */
  414. #define  PSYCHO_STCLINE_FOFN  0x0000000000000001 /* Fetch Outstanding / Flush Necessary */
  415. static spinlock_t stc_buf_lock = SPIN_LOCK_UNLOCKED;
  416. static unsigned long stc_error_buf[128];
  417. static unsigned long stc_tag_buf[16];
  418. static unsigned long stc_line_buf[16];
  419. static void __psycho_check_one_stc(struct pci_controller_info *p,
  420.    struct pci_pbm_info *pbm,
  421.    int is_pbm_a)
  422. {
  423. struct pci_strbuf *strbuf = &pbm->stc;
  424. unsigned long regbase = p->controller_regs;
  425. unsigned long err_base, tag_base, line_base;
  426. u64 control;
  427. int i;
  428. if (is_pbm_a) {
  429. err_base = regbase + PSYCHO_STC_ERR_A;
  430. tag_base = regbase + PSYCHO_STC_TAG_A;
  431. line_base = regbase + PSYCHO_STC_LINE_A;
  432. } else {
  433. err_base = regbase + PSYCHO_STC_ERR_A;
  434. tag_base = regbase + PSYCHO_STC_TAG_A;
  435. line_base = regbase + PSYCHO_STC_LINE_A;
  436. }
  437. spin_lock(&stc_buf_lock);
  438. /* This is __REALLY__ dangerous.  When we put the
  439.  * streaming buffer into diagnostic mode to probe
  440.  * it's tags and error status, we _must_ clear all
  441.  * of the line tag valid bits before re-enabling
  442.  * the streaming buffer.  If any dirty data lives
  443.  * in the STC when we do this, we will end up
  444.  * invalidating it before it has a chance to reach
  445.  * main memory.
  446.  */
  447. control = psycho_read(strbuf->strbuf_control);
  448. psycho_write(strbuf->strbuf_control,
  449.      (control | PSYCHO_STRBUF_CTRL_DENAB));
  450. for (i = 0; i < 128; i++) {
  451. unsigned long val;
  452. val = psycho_read(err_base + (i * 8UL));
  453. psycho_write(err_base + (i * 8UL), 0UL);
  454. stc_error_buf[i] = val;
  455. }
  456. for (i = 0; i < 16; i++) {
  457. stc_tag_buf[i] = psycho_read(tag_base + (i * 8UL));
  458. stc_line_buf[i] = psycho_read(line_base + (i * 8UL));
  459. psycho_write(tag_base + (i * 8UL), 0UL);
  460. psycho_write(line_base + (i * 8UL), 0UL);
  461. }
  462. /* OK, state is logged, exit diagnostic mode. */
  463. psycho_write(strbuf->strbuf_control, control);
  464. for (i = 0; i < 16; i++) {
  465. int j, saw_error, first, last;
  466. saw_error = 0;
  467. first = i * 8;
  468. last = first + 8;
  469. for (j = first; j < last; j++) {
  470. unsigned long errval = stc_error_buf[j];
  471. if (errval != 0) {
  472. saw_error++;
  473. printk("PSYCHO%d(PBM%c): STC_ERR(%d)[wr(%d)rd(%d)]n",
  474.        p->index,
  475.        (is_pbm_a ? 'A' : 'B'),
  476.        j,
  477.        (errval & PSYCHO_STCERR_WRITE) ? 1 : 0,
  478.        (errval & PSYCHO_STCERR_READ) ? 1 : 0);
  479. }
  480. }
  481. if (saw_error != 0) {
  482. unsigned long tagval = stc_tag_buf[i];
  483. unsigned long lineval = stc_line_buf[i];
  484. printk("PSYCHO%d(PBM%c): STC_TAG(%d)[PA(%016lx)VA(%08lx)V(%d)W(%d)]n",
  485.        p->index,
  486.        (is_pbm_a ? 'A' : 'B'),
  487.        i,
  488.        ((tagval & PSYCHO_STCTAG_PPN) >> 19UL),
  489.        (tagval & PSYCHO_STCTAG_VPN),
  490.        ((tagval & PSYCHO_STCTAG_VALID) ? 1 : 0),
  491.        ((tagval & PSYCHO_STCTAG_WRITE) ? 1 : 0));
  492. printk("PSYCHO%d(PBM%c): STC_LINE(%d)[LIDX(%lx)SP(%lx)LADDR(%lx)EP(%lx)"
  493.        "V(%d)FOFN(%d)]n",
  494.        p->index,
  495.        (is_pbm_a ? 'A' : 'B'),
  496.        i,
  497.        ((lineval & PSYCHO_STCLINE_LINDX) >> 21UL),
  498.        ((lineval & PSYCHO_STCLINE_SPTR) >> 15UL),
  499.        ((lineval & PSYCHO_STCLINE_LADDR) >> 8UL),
  500.        ((lineval & PSYCHO_STCLINE_EPTR) >> 2UL),
  501.        ((lineval & PSYCHO_STCLINE_VALID) ? 1 : 0),
  502.        ((lineval & PSYCHO_STCLINE_FOFN) ? 1 : 0));
  503. }
  504. }
  505. spin_unlock(&stc_buf_lock);
  506. }
  507. static void __psycho_check_stc_error(struct pci_controller_info *p,
  508.      unsigned long afsr,
  509.      unsigned long afar,
  510.      enum psycho_error_type type)
  511. {
  512. struct pci_pbm_info *pbm;
  513. pbm = &p->pbm_A;
  514. if (pbm->stc.strbuf_enabled)
  515. __psycho_check_one_stc(p, pbm, 1);
  516. pbm = &p->pbm_B;
  517. if (pbm->stc.strbuf_enabled)
  518. __psycho_check_one_stc(p, pbm, 0);
  519. }
  520. /* When an Uncorrectable Error or a PCI Error happens, we
  521.  * interrogate the IOMMU state to see if it is the cause.
  522.  */
  523. #define PSYCHO_IOMMU_CONTROL 0x0200UL
  524. #define  PSYCHO_IOMMU_CTRL_RESV     0xfffffffff9000000 /* Reserved                      */
  525. #define  PSYCHO_IOMMU_CTRL_XLTESTAT 0x0000000006000000 /* Translation Error Status      */
  526. #define  PSYCHO_IOMMU_CTRL_XLTEERR  0x0000000001000000 /* Translation Error encountered */
  527. #define  PSYCHO_IOMMU_CTRL_LCKEN    0x0000000000800000 /* Enable translation locking    */
  528. #define  PSYCHO_IOMMU_CTRL_LCKPTR   0x0000000000780000 /* Translation lock pointer      */
  529. #define  PSYCHO_IOMMU_CTRL_TSBSZ    0x0000000000070000 /* TSB Size                      */
  530. #define  PSYCHO_IOMMU_TSBSZ_1K      0x0000000000000000 /* TSB Table 1024 8-byte entries */
  531. #define  PSYCHO_IOMMU_TSBSZ_2K      0x0000000000010000 /* TSB Table 2048 8-byte entries */
  532. #define  PSYCHO_IOMMU_TSBSZ_4K      0x0000000000020000 /* TSB Table 4096 8-byte entries */
  533. #define  PSYCHO_IOMMU_TSBSZ_8K      0x0000000000030000 /* TSB Table 8192 8-byte entries */
  534. #define  PSYCHO_IOMMU_TSBSZ_16K     0x0000000000040000 /* TSB Table 16k 8-byte entries  */
  535. #define  PSYCHO_IOMMU_TSBSZ_32K     0x0000000000050000 /* TSB Table 32k 8-byte entries  */
  536. #define  PSYCHO_IOMMU_TSBSZ_64K     0x0000000000060000 /* TSB Table 64k 8-byte entries  */
  537. #define  PSYCHO_IOMMU_TSBSZ_128K    0x0000000000070000 /* TSB Table 128k 8-byte entries */
  538. #define  PSYCHO_IOMMU_CTRL_RESV2    0x000000000000fff8 /* Reserved                      */
  539. #define  PSYCHO_IOMMU_CTRL_TBWSZ    0x0000000000000004 /* Assumed page size, 0=8k 1=64k */
  540. #define  PSYCHO_IOMMU_CTRL_DENAB    0x0000000000000002 /* Diagnostic mode enable        */
  541. #define  PSYCHO_IOMMU_CTRL_ENAB     0x0000000000000001 /* IOMMU Enable                  */
  542. #define PSYCHO_IOMMU_TSBBASE 0x0208UL
  543. #define PSYCHO_IOMMU_FLUSH 0x0210UL
  544. #define PSYCHO_IOMMU_TAG 0xa580UL
  545. #define  PSYCHO_IOMMU_TAG_ERRSTS (0x3UL << 23UL)
  546. #define  PSYCHO_IOMMU_TAG_ERR  (0x1UL << 22UL)
  547. #define  PSYCHO_IOMMU_TAG_WRITE  (0x1UL << 21UL)
  548. #define  PSYCHO_IOMMU_TAG_STREAM (0x1UL << 20UL)
  549. #define  PSYCHO_IOMMU_TAG_SIZE  (0x1UL << 19UL)
  550. #define  PSYCHO_IOMMU_TAG_VPAGE  0x7ffffUL
  551. #define PSYCHO_IOMMU_DATA 0xa600UL
  552. #define  PSYCHO_IOMMU_DATA_VALID (1UL << 30UL)
  553. #define  PSYCHO_IOMMU_DATA_CACHE (1UL << 28UL)
  554. #define  PSYCHO_IOMMU_DATA_PPAGE 0xfffffffUL
  555. static void psycho_check_iommu_error(struct pci_controller_info *p,
  556.      unsigned long afsr,
  557.      unsigned long afar,
  558.      enum psycho_error_type type)
  559. {
  560. struct pci_iommu *iommu = p->pbm_A.iommu;
  561. unsigned long iommu_tag[16];
  562. unsigned long iommu_data[16];
  563. unsigned long flags;
  564. u64 control;
  565. int i;
  566. spin_lock_irqsave(&iommu->lock, flags);
  567. control = psycho_read(iommu->iommu_control);
  568. if (control & PSYCHO_IOMMU_CTRL_XLTEERR) {
  569. char *type_string;
  570. /* Clear the error encountered bit. */
  571. control &= ~PSYCHO_IOMMU_CTRL_XLTEERR;
  572. psycho_write(iommu->iommu_control, control);
  573. switch((control & PSYCHO_IOMMU_CTRL_XLTESTAT) >> 25UL) {
  574. case 0:
  575. type_string = "Protection Error";
  576. break;
  577. case 1:
  578. type_string = "Invalid Error";
  579. break;
  580. case 2:
  581. type_string = "TimeOut Error";
  582. break;
  583. case 3:
  584. default:
  585. type_string = "ECC Error";
  586. break;
  587. };
  588. printk("PSYCHO%d: IOMMU Error, type[%s]n",
  589.        p->index, type_string);
  590. /* Put the IOMMU into diagnostic mode and probe
  591.  * it's TLB for entries with error status.
  592.  *
  593.  * It is very possible for another DVMA to occur
  594.  * while we do this probe, and corrupt the system
  595.  * further.  But we are so screwed at this point
  596.  * that we are likely to crash hard anyways, so
  597.  * get as much diagnostic information to the
  598.  * console as we can.
  599.  */
  600. psycho_write(iommu->iommu_control,
  601.      control | PSYCHO_IOMMU_CTRL_DENAB);
  602. for (i = 0; i < 16; i++) {
  603. unsigned long base = p->controller_regs;
  604. iommu_tag[i] =
  605. psycho_read(base + PSYCHO_IOMMU_TAG + (i * 8UL));
  606. iommu_data[i] =
  607. psycho_read(base + PSYCHO_IOMMU_DATA + (i * 8UL));
  608. /* Now clear out the entry. */
  609. psycho_write(base + PSYCHO_IOMMU_TAG + (i * 8UL), 0);
  610. psycho_write(base + PSYCHO_IOMMU_DATA + (i * 8UL), 0);
  611. }
  612. /* Leave diagnostic mode. */
  613. psycho_write(iommu->iommu_control, control);
  614. for (i = 0; i < 16; i++) {
  615. unsigned long tag, data;
  616. tag = iommu_tag[i];
  617. if (!(tag & PSYCHO_IOMMU_TAG_ERR))
  618. continue;
  619. data = iommu_data[i];
  620. switch((tag & PSYCHO_IOMMU_TAG_ERRSTS) >> 23UL) {
  621. case 0:
  622. type_string = "Protection Error";
  623. break;
  624. case 1:
  625. type_string = "Invalid Error";
  626. break;
  627. case 2:
  628. type_string = "TimeOut Error";
  629. break;
  630. case 3:
  631. default:
  632. type_string = "ECC Error";
  633. break;
  634. };
  635. printk("PSYCHO%d: IOMMU TAG(%d)[error(%s) wr(%d) str(%d) sz(%dK) vpg(%08lx)]n",
  636.        p->index, i, type_string,
  637.        ((tag & PSYCHO_IOMMU_TAG_WRITE) ? 1 : 0),
  638.        ((tag & PSYCHO_IOMMU_TAG_STREAM) ? 1 : 0),
  639.        ((tag & PSYCHO_IOMMU_TAG_SIZE) ? 64 : 8),
  640.        (tag & PSYCHO_IOMMU_TAG_VPAGE) << IOMMU_PAGE_SHIFT);
  641. printk("PSYCHO%d: IOMMU DATA(%d)[valid(%d) cache(%d) ppg(%016lx)]n",
  642.        p->index, i,
  643.        ((data & PSYCHO_IOMMU_DATA_VALID) ? 1 : 0),
  644.        ((data & PSYCHO_IOMMU_DATA_CACHE) ? 1 : 0),
  645.        (data & PSYCHO_IOMMU_DATA_PPAGE) << IOMMU_PAGE_SHIFT);
  646. }
  647. }
  648. __psycho_check_stc_error(p, afsr, afar, type);
  649. spin_unlock_irqrestore(&iommu->lock, flags);
  650. }
  651. /* Uncorrectable Errors.  Cause of the error and the address are
  652.  * recorded in the UE_AFSR and UE_AFAR of PSYCHO.  They are errors
  653.  * relating to UPA interface transactions.
  654.  */
  655. #define PSYCHO_UE_AFSR 0x0030UL
  656. #define  PSYCHO_UEAFSR_PPIO 0x8000000000000000 /* Primary PIO is cause         */
  657. #define  PSYCHO_UEAFSR_PDRD 0x4000000000000000 /* Primary DVMA read is cause   */
  658. #define  PSYCHO_UEAFSR_PDWR 0x2000000000000000 /* Primary DVMA write is cause  */
  659. #define  PSYCHO_UEAFSR_SPIO 0x1000000000000000 /* Secondary PIO is cause       */
  660. #define  PSYCHO_UEAFSR_SDRD 0x0800000000000000 /* Secondary DVMA read is cause */
  661. #define  PSYCHO_UEAFSR_SDWR 0x0400000000000000 /* Secondary DVMA write is cause*/
  662. #define  PSYCHO_UEAFSR_RESV1 0x03ff000000000000 /* Reserved                     */
  663. #define  PSYCHO_UEAFSR_BMSK 0x0000ffff00000000 /* Bytemask of failed transfer  */
  664. #define  PSYCHO_UEAFSR_DOFF 0x00000000e0000000 /* Doubleword Offset            */
  665. #define  PSYCHO_UEAFSR_MID 0x000000001f000000 /* UPA MID causing the fault    */
  666. #define  PSYCHO_UEAFSR_BLK 0x0000000000800000 /* Trans was block operation    */
  667. #define  PSYCHO_UEAFSR_RESV2 0x00000000007fffff /* Reserved                     */
  668. #define PSYCHO_UE_AFAR 0x0038UL
  669. static void psycho_ue_intr(int irq, void *dev_id, struct pt_regs *regs)
  670. {
  671. struct pci_controller_info *p = dev_id;
  672. unsigned long afsr_reg = p->controller_regs + PSYCHO_UE_AFSR;
  673. unsigned long afar_reg = p->controller_regs + PSYCHO_UE_AFAR;
  674. unsigned long afsr, afar, error_bits;
  675. int reported;
  676. /* Latch uncorrectable error status. */
  677. afar = psycho_read(afar_reg);
  678. afsr = psycho_read(afsr_reg);
  679. /* Clear the primary/secondary error status bits. */
  680. error_bits = afsr &
  681. (PSYCHO_UEAFSR_PPIO | PSYCHO_UEAFSR_PDRD | PSYCHO_UEAFSR_PDWR |
  682.  PSYCHO_UEAFSR_SPIO | PSYCHO_UEAFSR_SDRD | PSYCHO_UEAFSR_SDWR);
  683. if (!error_bits)
  684. return;
  685. psycho_write(afsr_reg, error_bits);
  686. /* Log the error. */
  687. printk("PSYCHO%d: Uncorrectable Error, primary error type[%s]n",
  688.        p->index,
  689.        (((error_bits & PSYCHO_UEAFSR_PPIO) ?
  690.  "PIO" :
  691.  ((error_bits & PSYCHO_UEAFSR_PDRD) ?
  692.   "DMA Read" :
  693.   ((error_bits & PSYCHO_UEAFSR_PDWR) ?
  694.    "DMA Write" : "???")))));
  695. printk("PSYCHO%d: bytemask[%04lx] dword_offset[%lx] UPA_MID[%02lx] was_block(%d)n",
  696.        p->index,
  697.        (afsr & PSYCHO_UEAFSR_BMSK) >> 32UL,
  698.        (afsr & PSYCHO_UEAFSR_DOFF) >> 29UL,
  699.        (afsr & PSYCHO_UEAFSR_MID) >> 24UL,
  700.        ((afsr & PSYCHO_UEAFSR_BLK) ? 1 : 0));
  701. printk("PSYCHO%d: UE AFAR [%016lx]n", p->index, afar);
  702. printk("PSYCHO%d: UE Secondary errors [", p->index);
  703. reported = 0;
  704. if (afsr & PSYCHO_UEAFSR_SPIO) {
  705. reported++;
  706. printk("(PIO)");
  707. }
  708. if (afsr & PSYCHO_UEAFSR_SDRD) {
  709. reported++;
  710. printk("(DMA Read)");
  711. }
  712. if (afsr & PSYCHO_UEAFSR_SDWR) {
  713. reported++;
  714. printk("(DMA Write)");
  715. }
  716. if (!reported)
  717. printk("(none)");
  718. printk("]n");
  719. /* Interrogate IOMMU for error status. */
  720. psycho_check_iommu_error(p, afsr, afar, UE_ERR);
  721. }
  722. /* Correctable Errors. */
  723. #define PSYCHO_CE_AFSR 0x0040UL
  724. #define  PSYCHO_CEAFSR_PPIO 0x8000000000000000 /* Primary PIO is cause         */
  725. #define  PSYCHO_CEAFSR_PDRD 0x4000000000000000 /* Primary DVMA read is cause   */
  726. #define  PSYCHO_CEAFSR_PDWR 0x2000000000000000 /* Primary DVMA write is cause  */
  727. #define  PSYCHO_CEAFSR_SPIO 0x1000000000000000 /* Secondary PIO is cause       */
  728. #define  PSYCHO_CEAFSR_SDRD 0x0800000000000000 /* Secondary DVMA read is cause */
  729. #define  PSYCHO_CEAFSR_SDWR 0x0400000000000000 /* Secondary DVMA write is cause*/
  730. #define  PSYCHO_CEAFSR_RESV1 0x0300000000000000 /* Reserved                     */
  731. #define  PSYCHO_CEAFSR_ESYND 0x00ff000000000000 /* Syndrome Bits                */
  732. #define  PSYCHO_CEAFSR_BMSK 0x0000ffff00000000 /* Bytemask of failed transfer  */
  733. #define  PSYCHO_CEAFSR_DOFF 0x00000000e0000000 /* Double Offset                */
  734. #define  PSYCHO_CEAFSR_MID 0x000000001f000000 /* UPA MID causing the fault    */
  735. #define  PSYCHO_CEAFSR_BLK 0x0000000000800000 /* Trans was block operation    */
  736. #define  PSYCHO_CEAFSR_RESV2 0x00000000007fffff /* Reserved                     */
  737. #define PSYCHO_CE_AFAR 0x0040UL
  738. static void psycho_ce_intr(int irq, void *dev_id, struct pt_regs *regs)
  739. {
  740. struct pci_controller_info *p = dev_id;
  741. unsigned long afsr_reg = p->controller_regs + PSYCHO_CE_AFSR;
  742. unsigned long afar_reg = p->controller_regs + PSYCHO_CE_AFAR;
  743. unsigned long afsr, afar, error_bits;
  744. int reported;
  745. /* Latch error status. */
  746. afar = psycho_read(afar_reg);
  747. afsr = psycho_read(afsr_reg);
  748. /* Clear primary/secondary error status bits. */
  749. error_bits = afsr &
  750. (PSYCHO_CEAFSR_PPIO | PSYCHO_CEAFSR_PDRD | PSYCHO_CEAFSR_PDWR |
  751.  PSYCHO_CEAFSR_SPIO | PSYCHO_CEAFSR_SDRD | PSYCHO_CEAFSR_SDWR);
  752. if (!error_bits)
  753. return;
  754. psycho_write(afsr_reg, error_bits);
  755. /* Log the error. */
  756. printk("PSYCHO%d: Correctable Error, primary error type[%s]n",
  757.        p->index,
  758.        (((error_bits & PSYCHO_CEAFSR_PPIO) ?
  759.  "PIO" :
  760.  ((error_bits & PSYCHO_CEAFSR_PDRD) ?
  761.   "DMA Read" :
  762.   ((error_bits & PSYCHO_CEAFSR_PDWR) ?
  763.    "DMA Write" : "???")))));
  764. /* XXX Use syndrome and afar to print out module string just like
  765.  * XXX UDB CE trap handler does... -DaveM
  766.  */
  767. printk("PSYCHO%d: syndrome[%02lx] bytemask[%04lx] dword_offset[%lx] "
  768.        "UPA_MID[%02lx] was_block(%d)n",
  769.        p->index,
  770.        (afsr & PSYCHO_CEAFSR_ESYND) >> 48UL,
  771.        (afsr & PSYCHO_CEAFSR_BMSK) >> 32UL,
  772.        (afsr & PSYCHO_CEAFSR_DOFF) >> 29UL,
  773.        (afsr & PSYCHO_CEAFSR_MID) >> 24UL,
  774.        ((afsr & PSYCHO_CEAFSR_BLK) ? 1 : 0));
  775. printk("PSYCHO%d: CE AFAR [%016lx]n", p->index, afar);
  776. printk("PSYCHO%d: CE Secondary errors [", p->index);
  777. reported = 0;
  778. if (afsr & PSYCHO_CEAFSR_SPIO) {
  779. reported++;
  780. printk("(PIO)");
  781. }
  782. if (afsr & PSYCHO_CEAFSR_SDRD) {
  783. reported++;
  784. printk("(DMA Read)");
  785. }
  786. if (afsr & PSYCHO_CEAFSR_SDWR) {
  787. reported++;
  788. printk("(DMA Write)");
  789. }
  790. if (!reported)
  791. printk("(none)");
  792. printk("]n");
  793. }
  794. /* PCI Errors.  They are signalled by the PCI bus module since they
  795.  * are assosciated with a specific bus segment.
  796.  */
  797. #define PSYCHO_PCI_AFSR_A 0x2010UL
  798. #define PSYCHO_PCI_AFSR_B 0x4010UL
  799. #define  PSYCHO_PCIAFSR_PMA 0x8000000000000000 /* Primary Master Abort Error   */
  800. #define  PSYCHO_PCIAFSR_PTA 0x4000000000000000 /* Primary Target Abort Error   */
  801. #define  PSYCHO_PCIAFSR_PRTRY 0x2000000000000000 /* Primary Excessive Retries    */
  802. #define  PSYCHO_PCIAFSR_PPERR 0x1000000000000000 /* Primary Parity Error         */
  803. #define  PSYCHO_PCIAFSR_SMA 0x0800000000000000 /* Secondary Master Abort Error */
  804. #define  PSYCHO_PCIAFSR_STA 0x0400000000000000 /* Secondary Target Abort Error */
  805. #define  PSYCHO_PCIAFSR_SRTRY 0x0200000000000000 /* Secondary Excessive Retries  */
  806. #define  PSYCHO_PCIAFSR_SPERR 0x0100000000000000 /* Secondary Parity Error       */
  807. #define  PSYCHO_PCIAFSR_RESV1 0x00ff000000000000 /* Reserved                     */
  808. #define  PSYCHO_PCIAFSR_BMSK 0x0000ffff00000000 /* Bytemask of failed transfer  */
  809. #define  PSYCHO_PCIAFSR_BLK 0x0000000080000000 /* Trans was block operation    */
  810. #define  PSYCHO_PCIAFSR_RESV2 0x0000000040000000 /* Reserved                     */
  811. #define  PSYCHO_PCIAFSR_MID 0x000000003e000000 /* MID causing the error        */
  812. #define  PSYCHO_PCIAFSR_RESV3 0x0000000001ffffff /* Reserved                     */
  813. #define PSYCHO_PCI_AFAR_A 0x2018UL
  814. #define PSYCHO_PCI_AFAR_B 0x4018UL
  815. static void psycho_pcierr_intr(int irq, void *dev_id, struct pt_regs *regs)
  816. {
  817. struct pci_pbm_info *pbm = dev_id;
  818. struct pci_controller_info *p = pbm->parent;
  819. unsigned long afsr_reg, afar_reg;
  820. unsigned long afsr, afar, error_bits;
  821. int is_pbm_a, reported;
  822. is_pbm_a = (pbm == &pbm->parent->pbm_A);
  823. if (is_pbm_a) {
  824. afsr_reg = p->controller_regs + PSYCHO_PCI_AFSR_A;
  825. afar_reg = p->controller_regs + PSYCHO_PCI_AFAR_A;
  826. } else {
  827. afsr_reg = p->controller_regs + PSYCHO_PCI_AFSR_B;
  828. afar_reg = p->controller_regs + PSYCHO_PCI_AFAR_B;
  829. }
  830. /* Latch error status. */
  831. afar = psycho_read(afar_reg);
  832. afsr = psycho_read(afsr_reg);
  833. /* Clear primary/secondary error status bits. */
  834. error_bits = afsr &
  835. (PSYCHO_PCIAFSR_PMA | PSYCHO_PCIAFSR_PTA |
  836.  PSYCHO_PCIAFSR_PRTRY | PSYCHO_PCIAFSR_PPERR |
  837.  PSYCHO_PCIAFSR_SMA | PSYCHO_PCIAFSR_STA |
  838.  PSYCHO_PCIAFSR_SRTRY | PSYCHO_PCIAFSR_SPERR);
  839. if (!error_bits)
  840. return;
  841. psycho_write(afsr_reg, error_bits);
  842. /* Log the error. */
  843. printk("PSYCHO%d(PBM%c): PCI Error, primary error type[%s]n",
  844.        p->index, (is_pbm_a ? 'A' : 'B'),
  845.        (((error_bits & PSYCHO_PCIAFSR_PMA) ?
  846.  "Master Abort" :
  847.  ((error_bits & PSYCHO_PCIAFSR_PTA) ?
  848.   "Target Abort" :
  849.   ((error_bits & PSYCHO_PCIAFSR_PRTRY) ?
  850.    "Excessive Retries" :
  851.    ((error_bits & PSYCHO_PCIAFSR_PPERR) ?
  852.     "Parity Error" : "???"))))));
  853. printk("PSYCHO%d(PBM%c): bytemask[%04lx] UPA_MID[%02lx] was_block(%d)n",
  854.        p->index, (is_pbm_a ? 'A' : 'B'),
  855.        (afsr & PSYCHO_PCIAFSR_BMSK) >> 32UL,
  856.        (afsr & PSYCHO_PCIAFSR_MID) >> 25UL,
  857.        (afsr & PSYCHO_PCIAFSR_BLK) ? 1 : 0);
  858. printk("PSYCHO%d(PBM%c): PCI AFAR [%016lx]n",
  859.        p->index, (is_pbm_a ? 'A' : 'B'), afar);
  860. printk("PSYCHO%d(PBM%c): PCI Secondary errors [",
  861.        p->index, (is_pbm_a ? 'A' : 'B'));
  862. reported = 0;
  863. if (afsr & PSYCHO_PCIAFSR_SMA) {
  864. reported++;
  865. printk("(Master Abort)");
  866. }
  867. if (afsr & PSYCHO_PCIAFSR_STA) {
  868. reported++;
  869. printk("(Target Abort)");
  870. }
  871. if (afsr & PSYCHO_PCIAFSR_SRTRY) {
  872. reported++;
  873. printk("(Excessive Retries)");
  874. }
  875. if (afsr & PSYCHO_PCIAFSR_SPERR) {
  876. reported++;
  877. printk("(Parity Error)");
  878. }
  879. if (!reported)
  880. printk("(none)");
  881. printk("]n");
  882. /* For the error types shown, scan PBM's PCI bus for devices
  883.  * which have logged that error type.
  884.  */
  885. /* If we see a Target Abort, this could be the result of an
  886.  * IOMMU translation error of some sort.  It is extremely
  887.  * useful to log this information as usually it indicates
  888.  * a bug in the IOMMU support code or a PCI device driver.
  889.  */
  890. if (error_bits & (PSYCHO_PCIAFSR_PTA | PSYCHO_PCIAFSR_STA)) {
  891. psycho_check_iommu_error(p, afsr, afar, PCI_ERR);
  892. pci_scan_for_target_abort(p, pbm, pbm->pci_bus);
  893. }
  894. if (error_bits & (PSYCHO_PCIAFSR_PMA | PSYCHO_PCIAFSR_SMA))
  895. pci_scan_for_master_abort(p, pbm, pbm->pci_bus);
  896. /* For excessive retries, PSYCHO/PBM will abort the device
  897.  * and there is no way to specifically check for excessive
  898.  * retries in the config space status registers.  So what
  899.  * we hope is that we'll catch it via the master/target
  900.  * abort events.
  901.  */
  902. if (error_bits & (PSYCHO_PCIAFSR_PPERR | PSYCHO_PCIAFSR_SPERR))
  903. pci_scan_for_parity_error(p, pbm, pbm->pci_bus);
  904. }
  905. /* XXX What about PowerFail/PowerManagement??? -DaveM */
  906. #define PSYCHO_ECC_CTRL 0x0020
  907. #define  PSYCHO_ECCCTRL_EE  0x8000000000000000 /* Enable ECC Checking */
  908. #define  PSYCHO_ECCCTRL_UE  0x4000000000000000 /* Enable UE Interrupts */
  909. #define  PSYCHO_ECCCTRL_CE  0x2000000000000000 /* Enable CE INterrupts */
  910. #define PSYCHO_UE_INO 0x2e
  911. #define PSYCHO_CE_INO 0x2f
  912. #define PSYCHO_PCIERR_A_INO 0x30
  913. #define PSYCHO_PCIERR_B_INO 0x31
  914. static void __init psycho_register_error_handlers(struct pci_controller_info *p)
  915. {
  916. struct pci_pbm_info *pbm = &p->pbm_A; /* arbitrary */
  917. unsigned long base = p->controller_regs;
  918. unsigned int irq, portid = p->portid;
  919. u64 tmp;
  920. /* Build IRQs and register handlers. */
  921. irq = psycho_irq_build(pbm, NULL, (portid << 6) | PSYCHO_UE_INO);
  922. if (request_irq(irq, psycho_ue_intr,
  923. SA_SHIRQ, "PSYCHO UE", p) < 0) {
  924. prom_printf("PSYCHO%d: Cannot register UE interrupt.n",
  925.     p->index);
  926. prom_halt();
  927. }
  928. irq = psycho_irq_build(pbm, NULL, (portid << 6) | PSYCHO_CE_INO);
  929. if (request_irq(irq, psycho_ce_intr,
  930. SA_SHIRQ, "PSYCHO CE", p) < 0) {
  931. prom_printf("PSYCHO%d: Cannot register CE interrupt.n",
  932.     p->index);
  933. prom_halt();
  934. }
  935. irq = psycho_irq_build(pbm, NULL, (portid << 6) | PSYCHO_PCIERR_A_INO);
  936. if (request_irq(irq, psycho_pcierr_intr,
  937. SA_SHIRQ, "PSYCHO PCIERR", &p->pbm_A) < 0) {
  938. prom_printf("PSYCHO%d(PBMA): Cannot register PciERR interrupt.n",
  939.     p->index);
  940. prom_halt();
  941. }
  942. irq = psycho_irq_build(pbm, NULL, (portid << 6) | PSYCHO_PCIERR_B_INO);
  943. if (request_irq(irq, psycho_pcierr_intr,
  944. SA_SHIRQ, "PSYCHO PCIERR", &p->pbm_B) < 0) {
  945. prom_printf("PSYCHO%d(PBMB): Cannot register PciERR interrupt.n",
  946.     p->index);
  947. prom_halt();
  948. }
  949. /* Enable UE and CE interrupts for controller. */
  950. psycho_write(base + PSYCHO_ECC_CTRL,
  951.      (PSYCHO_ECCCTRL_EE |
  952.       PSYCHO_ECCCTRL_UE |
  953.       PSYCHO_ECCCTRL_CE));
  954. /* Enable PCI Error interrupts and clear error
  955.  * bits for each PBM.
  956.  */
  957. tmp = psycho_read(base + PSYCHO_PCIA_CTRL);
  958. tmp |= (PSYCHO_PCICTRL_SBH_ERR |
  959. PSYCHO_PCICTRL_SERR |
  960. PSYCHO_PCICTRL_SBH_INT |
  961. PSYCHO_PCICTRL_EEN);
  962. psycho_write(base + PSYCHO_PCIA_CTRL, tmp);
  963.      
  964. tmp = psycho_read(base + PSYCHO_PCIB_CTRL);
  965. tmp |= (PSYCHO_PCICTRL_SBH_ERR |
  966. PSYCHO_PCICTRL_SERR |
  967. PSYCHO_PCICTRL_SBH_INT |
  968. PSYCHO_PCICTRL_EEN);
  969. psycho_write(base + PSYCHO_PCIB_CTRL, tmp);
  970. }
  971. /* PSYCHO boot time probing and initialization. */
  972. static void __init psycho_resource_adjust(struct pci_dev *pdev,
  973.   struct resource *res,
  974.   struct resource *root)
  975. {
  976. res->start += root->start;
  977. res->end += root->start;
  978. }
  979. static void __init psycho_base_address_update(struct pci_dev *pdev, int resource)
  980. {
  981. struct pcidev_cookie *pcp = pdev->sysdata;
  982. struct pci_pbm_info *pbm = pcp->pbm;
  983. struct resource *res, *root;
  984. u32 reg;
  985. int where, size, is_64bit;
  986. res = &pdev->resource[resource];
  987. where = PCI_BASE_ADDRESS_0 + (resource * 4);
  988. is_64bit = 0;
  989. if (res->flags & IORESOURCE_IO)
  990. root = &pbm->io_space;
  991. else {
  992. root = &pbm->mem_space;
  993. if ((res->flags & PCI_BASE_ADDRESS_MEM_TYPE_MASK)
  994.     == PCI_BASE_ADDRESS_MEM_TYPE_64)
  995. is_64bit = 1;
  996. }
  997. size = res->end - res->start;
  998. pci_read_config_dword(pdev, where, &reg);
  999. reg = ((reg & size) |
  1000.        (((u32)(res->start - root->start)) & ~size));
  1001. pci_write_config_dword(pdev, where, reg);
  1002. /* This knows that the upper 32-bits of the address
  1003.  * must be zero.  Our PCI common layer enforces this.
  1004.  */
  1005. if (is_64bit)
  1006. pci_write_config_dword(pdev, where + 4, 0);
  1007. }
  1008. /* We have to do the config space accesses by hand, thus... */
  1009. #define PBM_BRIDGE_BUS 0x40
  1010. #define PBM_BRIDGE_SUBORDINATE 0x41
  1011. static void __init pbm_renumber(struct pci_pbm_info *pbm, u8 orig_busno)
  1012. {
  1013. u8 *addr, busno;
  1014. int nbus;
  1015. busno = pci_highest_busnum;
  1016. nbus = pbm->pci_last_busno - pbm->pci_first_busno;
  1017. addr = psycho_pci_config_mkaddr(pbm, orig_busno,
  1018. 0, PBM_BRIDGE_BUS);
  1019. pci_config_write8(addr, busno);
  1020. addr = psycho_pci_config_mkaddr(pbm, busno,
  1021. 0, PBM_BRIDGE_SUBORDINATE);
  1022. pci_config_write8(addr, busno + nbus);
  1023. pbm->pci_first_busno = busno;
  1024. pbm->pci_last_busno = busno + nbus;
  1025. pci_highest_busnum = busno + nbus + 1;
  1026. do {
  1027. pci_bus2pbm[busno++] = pbm;
  1028. } while (nbus--);
  1029. }
  1030. /* We have to do the config space accesses by hand here since
  1031.  * the pci_bus2pbm array is not ready yet.
  1032.  */
  1033. static void __init pbm_pci_bridge_renumber(struct pci_pbm_info *pbm,
  1034.    u8 busno)
  1035. {
  1036. u32 devfn, l, class;
  1037. u8 hdr_type;
  1038. int is_multi = 0;
  1039. for(devfn = 0; devfn < 0xff; ++devfn) {
  1040. u32 *dwaddr;
  1041. u8 *baddr;
  1042. if (PCI_FUNC(devfn) != 0 && is_multi == 0)
  1043. continue;
  1044. /* Anything there? */
  1045. dwaddr = psycho_pci_config_mkaddr(pbm, busno, devfn, PCI_VENDOR_ID);
  1046. l = 0xffffffff;
  1047. pci_config_read32(dwaddr, &l);
  1048. if (l == 0xffffffff || l == 0x00000000 ||
  1049.     l == 0x0000ffff || l == 0xffff0000) {
  1050. is_multi = 0;
  1051. continue;
  1052. }
  1053. baddr = psycho_pci_config_mkaddr(pbm, busno, devfn, PCI_HEADER_TYPE);
  1054. pci_config_read8(baddr, &hdr_type);
  1055. if (PCI_FUNC(devfn) == 0)
  1056. is_multi = hdr_type & 0x80;
  1057. dwaddr = psycho_pci_config_mkaddr(pbm, busno, devfn, PCI_CLASS_REVISION);
  1058. class = 0xffffffff;
  1059. pci_config_read32(dwaddr, &class);
  1060. if ((class >> 16) == PCI_CLASS_BRIDGE_PCI) {
  1061. u32 buses = 0xffffffff;
  1062. dwaddr = psycho_pci_config_mkaddr(pbm, busno, devfn,
  1063.   PCI_PRIMARY_BUS);
  1064. pci_config_read32(dwaddr, &buses);
  1065. pbm_pci_bridge_renumber(pbm, (buses >> 8) & 0xff);
  1066. buses &= 0xff000000;
  1067. pci_config_write32(dwaddr, buses);
  1068. }
  1069. }
  1070. }
  1071. static void __init pbm_bridge_reconfigure(struct pci_controller_info *p)
  1072. {
  1073. struct pci_pbm_info *pbm;
  1074. u8 *addr;
  1075. /* Clear out primary/secondary/subordinate bus numbers on
  1076.  * all PCI-to-PCI bridges under each PBM.  The generic bus
  1077.  * probing will fix them up.
  1078.  */
  1079. pbm_pci_bridge_renumber(&p->pbm_B, p->pbm_B.pci_first_busno);
  1080. pbm_pci_bridge_renumber(&p->pbm_A, p->pbm_A.pci_first_busno);
  1081. /* Move PBM A out of the way. */
  1082. pbm = &p->pbm_A;
  1083. addr = psycho_pci_config_mkaddr(pbm, pbm->pci_first_busno,
  1084. 0, PBM_BRIDGE_BUS);
  1085. pci_config_write8(addr, 0xff);
  1086. addr = psycho_pci_config_mkaddr(pbm, 0xff,
  1087. 0, PBM_BRIDGE_SUBORDINATE);
  1088. pci_config_write8(addr, 0xff);
  1089. /* Now we can safely renumber both PBMs. */
  1090. pbm_renumber(&p->pbm_B, p->pbm_B.pci_first_busno);
  1091. pbm_renumber(&p->pbm_A, 0xff);
  1092. }
  1093. static void __init pbm_config_busmastering(struct pci_pbm_info *pbm)
  1094. {
  1095. u8 *addr;
  1096. /* Set cache-line size to 64 bytes, this is actually
  1097.  * a nop but I do it for completeness.
  1098.  */
  1099. addr = psycho_pci_config_mkaddr(pbm, pbm->pci_first_busno,
  1100. 0, PCI_CACHE_LINE_SIZE);
  1101. pci_config_write8(addr, 64 / sizeof(u32));
  1102. /* Set PBM latency timer to 64 PCI clocks. */
  1103. addr = psycho_pci_config_mkaddr(pbm, pbm->pci_first_busno,
  1104. 0, PCI_LATENCY_TIMER);
  1105. pci_config_write8(addr, 64);
  1106. }
  1107. static void __init pbm_scan_bus(struct pci_controller_info *p,
  1108. struct pci_pbm_info *pbm)
  1109. {
  1110. struct pcidev_cookie *cookie = kmalloc(sizeof(*cookie), GFP_KERNEL);
  1111. if (!cookie) {
  1112. prom_printf("PSYCHO: Critical allocation failure.n");
  1113. prom_halt();
  1114. }
  1115. /* All we care about is the PBM. */
  1116. memset(cookie, 0, sizeof(*cookie));
  1117. cookie->pbm = pbm;
  1118. pbm->pci_bus = pci_scan_bus(pbm->pci_first_busno,
  1119.     p->pci_ops,
  1120.     pbm);
  1121. pci_fixup_host_bridge_self(pbm->pci_bus);
  1122. pbm->pci_bus->self->sysdata = cookie;
  1123. pci_fill_in_pbm_cookies(pbm->pci_bus, pbm, pbm->prom_node);
  1124. pci_record_assignments(pbm, pbm->pci_bus);
  1125. pci_assign_unassigned(pbm, pbm->pci_bus);
  1126. pci_fixup_irq(pbm, pbm->pci_bus);
  1127. pci_determine_66mhz_disposition(pbm, pbm->pci_bus);
  1128. pci_setup_busmastering(pbm, pbm->pci_bus);
  1129. }
  1130. static void __init psycho_scan_bus(struct pci_controller_info *p)
  1131. {
  1132. pbm_bridge_reconfigure(p);
  1133. pbm_config_busmastering(&p->pbm_B);
  1134. p->pbm_B.is_66mhz_capable = 0;
  1135. pbm_config_busmastering(&p->pbm_A);
  1136. p->pbm_A.is_66mhz_capable = 1;
  1137. pbm_scan_bus(p, &p->pbm_B);
  1138. pbm_scan_bus(p, &p->pbm_A);
  1139. /* After the PCI bus scan is complete, we can register
  1140.  * the error interrupt handlers.
  1141.  */
  1142. psycho_register_error_handlers(p);
  1143. }
  1144. static void __init psycho_iommu_init(struct pci_controller_info *p)
  1145. {
  1146. struct pci_iommu *iommu = p->pbm_A.iommu;
  1147. unsigned long tsbbase, i;
  1148. u64 control;
  1149. /* Setup initial software IOMMU state. */
  1150. spin_lock_init(&iommu->lock);
  1151. iommu->iommu_cur_ctx = 0;
  1152. /* Register addresses. */
  1153. iommu->iommu_control  = p->controller_regs + PSYCHO_IOMMU_CONTROL;
  1154. iommu->iommu_tsbbase  = p->controller_regs + PSYCHO_IOMMU_TSBBASE;
  1155. iommu->iommu_flush    = p->controller_regs + PSYCHO_IOMMU_FLUSH;
  1156. /* PSYCHO's IOMMU lacks ctx flushing. */
  1157. iommu->iommu_ctxflush = 0;
  1158. /* We use the main control register of PSYCHO as the write
  1159.  * completion register.
  1160.  */
  1161. iommu->write_complete_reg = p->controller_regs + PSYCHO_CONTROL;
  1162. /*
  1163.  * Invalidate TLB Entries.
  1164.  */
  1165. control = psycho_read(p->controller_regs + PSYCHO_IOMMU_CONTROL);
  1166. control |= PSYCHO_IOMMU_CTRL_DENAB;
  1167. psycho_write(p->controller_regs + PSYCHO_IOMMU_CONTROL, control);
  1168. for(i = 0; i < 16; i++) {
  1169. psycho_write(p->controller_regs + PSYCHO_IOMMU_TAG + (i * 8UL), 0);
  1170. psycho_write(p->controller_regs + PSYCHO_IOMMU_DATA + (i * 8UL), 0);
  1171. }
  1172. /* Leave diag mode enabled for full-flushing done
  1173.  * in pci_iommu.c
  1174.  */
  1175. /* Using assumed page size 8K with 128K entries we need 1MB iommu page
  1176.  * table (128K ioptes * 8 bytes per iopte).  This is
  1177.  * page order 7 on UltraSparc.
  1178.  */
  1179. tsbbase = __get_free_pages(GFP_KERNEL, get_order(IO_TSB_SIZE));
  1180. if (!tsbbase) {
  1181. prom_printf("PSYCHO_IOMMU: Error, gfp(tsb) failed.n");
  1182. prom_halt();
  1183. }
  1184. iommu->page_table = (iopte_t *)tsbbase;
  1185. iommu->page_table_sz_bits = 17;
  1186. iommu->page_table_map_base = 0xc0000000;
  1187. iommu->dma_addr_mask = 0xffffffff;
  1188. memset((char *)tsbbase, 0, IO_TSB_SIZE);
  1189. /* We start with no consistent mappings. */
  1190. iommu->lowest_consistent_map =
  1191. 1 << (iommu->page_table_sz_bits - PBM_LOGCLUSTERS);
  1192. for (i = 0; i < PBM_NCLUSTERS; i++) {
  1193. iommu->alloc_info[i].flush = 0;
  1194. iommu->alloc_info[i].next = 0;
  1195. }
  1196. psycho_write(p->controller_regs + PSYCHO_IOMMU_TSBBASE, __pa(tsbbase));
  1197. control = psycho_read(p->controller_regs + PSYCHO_IOMMU_CONTROL);
  1198. control &= ~(PSYCHO_IOMMU_CTRL_TSBSZ | PSYCHO_IOMMU_CTRL_TBWSZ);
  1199. control |= (PSYCHO_IOMMU_TSBSZ_128K | PSYCHO_IOMMU_CTRL_ENAB);
  1200. psycho_write(p->controller_regs + PSYCHO_IOMMU_CONTROL, control);
  1201. /* If necessary, hook us up for starfire IRQ translations. */
  1202. if(this_is_starfire)
  1203. p->starfire_cookie = starfire_hookup(p->portid);
  1204. else
  1205. p->starfire_cookie = NULL;
  1206. }
  1207. #define PSYCHO_IRQ_RETRY 0x1a00UL
  1208. #define PSYCHO_PCIA_DIAG 0x2020UL
  1209. #define PSYCHO_PCIB_DIAG 0x4020UL
  1210. #define  PSYCHO_PCIDIAG_RESV  0xffffffffffffff80 /* Reserved                     */
  1211. #define  PSYCHO_PCIDIAG_DRETRY  0x0000000000000040 /* Disable retry limit          */
  1212. #define  PSYCHO_PCIDIAG_DISYNC  0x0000000000000020 /* Disable DMA wr / irq sync    */
  1213. #define  PSYCHO_PCIDIAG_DDWSYNC  0x0000000000000010 /* Disable DMA wr / PIO rd sync */
  1214. #define  PSYCHO_PCIDIAG_IDDPAR  0x0000000000000008 /* Invert DMA data parity       */
  1215. #define  PSYCHO_PCIDIAG_IPDPAR  0x0000000000000004 /* Invert PIO data parity       */
  1216. #define  PSYCHO_PCIDIAG_IPAPAR  0x0000000000000002 /* Invert PIO address parity    */
  1217. #define  PSYCHO_PCIDIAG_LPBACK  0x0000000000000001 /* Enable loopback mode         */
  1218. static void psycho_controller_hwinit(struct pci_controller_info *p)
  1219. {
  1220. u64 tmp;
  1221. /* PROM sets the IRQ retry value too low, increase it. */
  1222. psycho_write(p->controller_regs + PSYCHO_IRQ_RETRY, 0xff);
  1223. /* Enable arbiter for all PCI slots. */
  1224. tmp = psycho_read(p->controller_regs + PSYCHO_PCIA_CTRL);
  1225. tmp |= PSYCHO_PCICTRL_AEN;
  1226. psycho_write(p->controller_regs + PSYCHO_PCIA_CTRL, tmp);
  1227. tmp = psycho_read(p->controller_regs + PSYCHO_PCIB_CTRL);
  1228. tmp |= PSYCHO_PCICTRL_AEN;
  1229. psycho_write(p->controller_regs + PSYCHO_PCIB_CTRL, tmp);
  1230. /* Disable DMA write / PIO read synchronization on
  1231.  * both PCI bus segments.
  1232.  * [ U2P Erratum 1243770, STP2223BGA data sheet ]
  1233.  */
  1234. tmp = psycho_read(p->controller_regs + PSYCHO_PCIA_DIAG);
  1235. tmp |= PSYCHO_PCIDIAG_DDWSYNC;
  1236. psycho_write(p->controller_regs + PSYCHO_PCIA_DIAG, tmp);
  1237. tmp = psycho_read(p->controller_regs + PSYCHO_PCIB_DIAG);
  1238. tmp |= PSYCHO_PCIDIAG_DDWSYNC;
  1239. psycho_write(p->controller_regs + PSYCHO_PCIB_DIAG, tmp);
  1240. }
  1241. static void __init pbm_register_toplevel_resources(struct pci_controller_info *p,
  1242.    struct pci_pbm_info *pbm)
  1243. {
  1244. char *name = pbm->name;
  1245. sprintf(name, "PSYCHO%d PBM%c",
  1246. p->index,
  1247. (pbm == &p->pbm_A ? 'A' : 'B'));
  1248. pbm->io_space.name = pbm->mem_space.name = name;
  1249. request_resource(&ioport_resource, &pbm->io_space);
  1250. request_resource(&iomem_resource, &pbm->mem_space);
  1251. pci_register_legacy_regions(&pbm->io_space,
  1252.     &pbm->mem_space);
  1253. }
  1254. static void psycho_pbm_strbuf_init(struct pci_controller_info *p,
  1255.    struct pci_pbm_info *pbm,
  1256.    int is_pbm_a)
  1257. {
  1258. unsigned long base = p->controller_regs;
  1259. u64 control;
  1260. if (is_pbm_a) {
  1261. pbm->stc.strbuf_control  = base + PSYCHO_STRBUF_CONTROL_A;
  1262. pbm->stc.strbuf_pflush   = base + PSYCHO_STRBUF_FLUSH_A;
  1263. pbm->stc.strbuf_fsync    = base + PSYCHO_STRBUF_FSYNC_A;
  1264. } else {
  1265. pbm->stc.strbuf_control  = base + PSYCHO_STRBUF_CONTROL_B;
  1266. pbm->stc.strbuf_pflush   = base + PSYCHO_STRBUF_FLUSH_B;
  1267. pbm->stc.strbuf_fsync    = base + PSYCHO_STRBUF_FSYNC_B;
  1268. }
  1269. /* PSYCHO's streaming buffer lacks ctx flushing. */
  1270. pbm->stc.strbuf_ctxflush      = 0;
  1271. pbm->stc.strbuf_ctxmatch_base = 0;
  1272. pbm->stc.strbuf_flushflag = (volatile unsigned long *)
  1273. ((((unsigned long)&pbm->stc.__flushflag_buf[0])
  1274.   + 63UL)
  1275.  & ~63UL);
  1276. pbm->stc.strbuf_flushflag_pa = (unsigned long)
  1277. __pa(pbm->stc.strbuf_flushflag);
  1278. /* Enable the streaming buffer.  We have to be careful
  1279.  * just in case OBP left it with LRU locking enabled.
  1280.  *
  1281.  * It is possible to control if PBM will be rerun on
  1282.  * line misses.  Currently I just retain whatever setting
  1283.  * OBP left us with.  All checks so far show it having
  1284.  * a value of zero.
  1285.  */
  1286. #undef PSYCHO_STRBUF_RERUN_ENABLE
  1287. #undef PSYCHO_STRBUF_RERUN_DISABLE
  1288. control = psycho_read(pbm->stc.strbuf_control);
  1289. control |= PSYCHO_STRBUF_CTRL_ENAB;
  1290. control &= ~(PSYCHO_STRBUF_CTRL_LENAB | PSYCHO_STRBUF_CTRL_LPTR);
  1291. #ifdef PSYCHO_STRBUF_RERUN_ENABLE
  1292. control &= ~(PSYCHO_STRBUF_CTRL_RRDIS);
  1293. #else
  1294. #ifdef PSYCHO_STRBUF_RERUN_DISABLE
  1295. control |= PSYCHO_STRBUF_CTRL_RRDIS;
  1296. #endif
  1297. #endif
  1298. psycho_write(pbm->stc.strbuf_control, control);
  1299. pbm->stc.strbuf_enabled = 1;
  1300. }
  1301. #define PSYCHO_IOSPACE_A 0x002000000UL
  1302. #define PSYCHO_IOSPACE_B 0x002010000UL
  1303. #define PSYCHO_IOSPACE_SIZE 0x00000ffffUL
  1304. #define PSYCHO_MEMSPACE_A 0x100000000UL
  1305. #define PSYCHO_MEMSPACE_B 0x180000000UL
  1306. #define PSYCHO_MEMSPACE_SIZE 0x07fffffffUL
  1307. static void psycho_pbm_init(struct pci_controller_info *p,
  1308.     int prom_node, int is_pbm_a)
  1309. {
  1310. unsigned int busrange[2];
  1311. struct pci_pbm_info *pbm;
  1312. int err;
  1313. if (is_pbm_a) {
  1314. pbm = &p->pbm_A;
  1315. pbm->pci_first_slot = 1;
  1316. pbm->io_space.start = p->controller_regs + PSYCHO_IOSPACE_A;
  1317. pbm->mem_space.start = p->controller_regs + PSYCHO_MEMSPACE_A;
  1318. } else {
  1319. pbm = &p->pbm_B;
  1320. pbm->pci_first_slot = 2;
  1321. pbm->io_space.start = p->controller_regs + PSYCHO_IOSPACE_B;
  1322. pbm->mem_space.start = p->controller_regs + PSYCHO_MEMSPACE_B;
  1323. }
  1324. pbm->io_space.end = pbm->io_space.start + PSYCHO_IOSPACE_SIZE;
  1325. pbm->io_space.flags = IORESOURCE_IO;
  1326. pbm->mem_space.end = pbm->mem_space.start + PSYCHO_MEMSPACE_SIZE;
  1327. pbm->mem_space.flags = IORESOURCE_MEM;
  1328. pbm_register_toplevel_resources(p, pbm);
  1329. pbm->parent = p;
  1330. pbm->prom_node = prom_node;
  1331. prom_getstring(prom_node, "name",
  1332.        pbm->prom_name,
  1333.        sizeof(pbm->prom_name));
  1334. err = prom_getproperty(prom_node, "ranges",
  1335.        (char *)pbm->pbm_ranges,
  1336.        sizeof(pbm->pbm_ranges));
  1337. if (err != -1)
  1338. pbm->num_pbm_ranges =
  1339. (err / sizeof(struct linux_prom_pci_ranges));
  1340. else
  1341. pbm->num_pbm_ranges = 0;
  1342. err = prom_getproperty(prom_node, "interrupt-map",
  1343.        (char *)pbm->pbm_intmap,
  1344.        sizeof(pbm->pbm_intmap));
  1345. if (err != -1) {
  1346. pbm->num_pbm_intmap = (err / sizeof(struct linux_prom_pci_intmap));
  1347. err = prom_getproperty(prom_node, "interrupt-map-mask",
  1348.        (char *)&pbm->pbm_intmask,
  1349.        sizeof(pbm->pbm_intmask));
  1350. if (err == -1) {
  1351. prom_printf("PSYCHO-PBM: Fatal error, no "
  1352.     "interrupt-map-mask.n");
  1353. prom_halt();
  1354. }
  1355. } else {
  1356. pbm->num_pbm_intmap = 0;
  1357. memset(&pbm->pbm_intmask, 0, sizeof(pbm->pbm_intmask));
  1358. }
  1359. err = prom_getproperty(prom_node, "bus-range",
  1360.        (char *)&busrange[0],
  1361.        sizeof(busrange));
  1362. if (err == 0 || err == -1) {
  1363. prom_printf("PSYCHO-PBM: Fatal error, no bus-range.n");
  1364. prom_halt();
  1365. }
  1366. pbm->pci_first_busno = busrange[0];
  1367. pbm->pci_last_busno = busrange[1];
  1368. psycho_pbm_strbuf_init(p, pbm, is_pbm_a);
  1369. }
  1370. #define PSYCHO_CONFIGSPACE 0x001000000UL
  1371. void __init psycho_init(int node, char *model_name)
  1372. {
  1373. struct linux_prom64_registers pr_regs[3];
  1374. struct pci_controller_info *p;
  1375. struct pci_iommu *iommu;
  1376. unsigned long flags;
  1377. u32 upa_portid;
  1378. int is_pbm_a, err;
  1379. upa_portid = prom_getintdefault(node, "upa-portid", 0xff);
  1380. spin_lock_irqsave(&pci_controller_lock, flags);
  1381. for(p = pci_controller_root; p; p = p->next) {
  1382. if (p->portid == upa_portid) {
  1383. spin_unlock_irqrestore(&pci_controller_lock, flags);
  1384. is_pbm_a = (p->pbm_A.prom_node == 0);
  1385. psycho_pbm_init(p, node, is_pbm_a);
  1386. return;
  1387. }
  1388. }
  1389. spin_unlock_irqrestore(&pci_controller_lock, flags);
  1390. p = kmalloc(sizeof(struct pci_controller_info), GFP_ATOMIC);
  1391. if (!p) {
  1392. prom_printf("PSYCHO: Fatal memory allocation error.n");
  1393. prom_halt();
  1394. }
  1395. memset(p, 0, sizeof(*p));
  1396. iommu = kmalloc(sizeof(struct pci_iommu), GFP_ATOMIC);
  1397. if (!iommu) {
  1398. prom_printf("PSYCHO: Fatal memory allocation error.n");
  1399. prom_halt();
  1400. }
  1401. memset(iommu, 0, sizeof(*iommu));
  1402. p->pbm_A.iommu = p->pbm_B.iommu = iommu;
  1403. spin_lock_irqsave(&pci_controller_lock, flags);
  1404. p->next = pci_controller_root;
  1405. pci_controller_root = p;
  1406. spin_unlock_irqrestore(&pci_controller_lock, flags);
  1407. p->portid = upa_portid;
  1408. p->index = pci_num_controllers++;
  1409. p->pbms_same_domain = 0;
  1410. p->scan_bus = psycho_scan_bus;
  1411. p->irq_build = psycho_irq_build;
  1412. p->base_address_update = psycho_base_address_update;
  1413. p->resource_adjust = psycho_resource_adjust;
  1414. p->pci_ops = &psycho_ops;
  1415. err = prom_getproperty(node, "reg",
  1416.        (char *)&pr_regs[0],
  1417.        sizeof(pr_regs));
  1418. if (err == 0 || err == -1) {
  1419. prom_printf("PSYCHO: Fatal error, no reg property.n");
  1420. prom_halt();
  1421. }
  1422. p->controller_regs = pr_regs[2].phys_addr;
  1423. printk("PCI: Found PSYCHO, control regs at %016lxn",
  1424.        p->controller_regs);
  1425. p->pbm_A.config_space = p->pbm_B.config_space =
  1426. (pr_regs[2].phys_addr + PSYCHO_CONFIGSPACE);
  1427. printk("PSYCHO: Shared PCI config space at %016lxn",
  1428.        p->pbm_A.config_space);
  1429. /*
  1430.  * Psycho's PCI MEM space is mapped to a 2GB aligned area, so
  1431.  * we need to adjust our MEM space mask.
  1432.  */
  1433. pci_memspace_mask = 0x7fffffffUL;
  1434. psycho_controller_hwinit(p);
  1435. psycho_iommu_init(p);
  1436. is_pbm_a = ((pr_regs[0].phys_addr & 0x6000) == 0x2000);
  1437. psycho_pbm_init(p, node, is_pbm_a);
  1438. }