pci-xtalk-bridge.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (C) 2003 Christoph Hellwig ([email protected])
  4. * Copyright (C) 1999, 2000, 04 Ralf Baechle ([email protected])
  5. * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
  6. */
  7. #include <linux/kernel.h>
  8. #include <linux/export.h>
  9. #include <linux/pci.h>
  10. #include <linux/smp.h>
  11. #include <linux/dma-direct.h>
  12. #include <linux/platform_device.h>
  13. #include <linux/platform_data/xtalk-bridge.h>
  14. #include <linux/nvmem-consumer.h>
  15. #include <linux/crc16.h>
  16. #include <linux/irqdomain.h>
  17. #include <asm/pci/bridge.h>
  18. #include <asm/paccess.h>
  19. #include <asm/sn/irq_alloc.h>
  20. #include <asm/sn/ioc3.h>
  21. #define CRC16_INIT 0
  22. #define CRC16_VALID 0xb001
  23. /*
  24. * Common phys<->dma mapping for platforms using pci xtalk bridge
  25. */
  26. dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr)
  27. {
  28. struct pci_dev *pdev = to_pci_dev(dev);
  29. struct bridge_controller *bc = BRIDGE_CONTROLLER(pdev->bus);
  30. return bc->baddr + paddr;
  31. }
  32. phys_addr_t dma_to_phys(struct device *dev, dma_addr_t dma_addr)
  33. {
  34. return dma_addr & ~(0xffUL << 56);
  35. }
  36. /*
  37. * Most of the IOC3 PCI config register aren't present
  38. * we emulate what is needed for a normal PCI enumeration
  39. */
  40. static int ioc3_cfg_rd(void *addr, int where, int size, u32 *value, u32 sid)
  41. {
  42. u32 cf, shift, mask;
  43. switch (where & ~3) {
  44. case 0x00 ... 0x10:
  45. case 0x40 ... 0x44:
  46. if (get_dbe(cf, (u32 *)addr))
  47. return PCIBIOS_DEVICE_NOT_FOUND;
  48. break;
  49. case 0x2c:
  50. cf = sid;
  51. break;
  52. case 0x3c:
  53. /* emulate sane interrupt pin value */
  54. cf = 0x00000100;
  55. break;
  56. default:
  57. cf = 0;
  58. break;
  59. }
  60. shift = (where & 3) << 3;
  61. mask = 0xffffffffU >> ((4 - size) << 3);
  62. *value = (cf >> shift) & mask;
  63. return PCIBIOS_SUCCESSFUL;
  64. }
  65. static int ioc3_cfg_wr(void *addr, int where, int size, u32 value)
  66. {
  67. u32 cf, shift, mask, smask;
  68. if ((where >= 0x14 && where < 0x40) || (where >= 0x48))
  69. return PCIBIOS_SUCCESSFUL;
  70. if (get_dbe(cf, (u32 *)addr))
  71. return PCIBIOS_DEVICE_NOT_FOUND;
  72. shift = ((where & 3) << 3);
  73. mask = (0xffffffffU >> ((4 - size) << 3));
  74. smask = mask << shift;
  75. cf = (cf & ~smask) | ((value & mask) << shift);
  76. if (put_dbe(cf, (u32 *)addr))
  77. return PCIBIOS_DEVICE_NOT_FOUND;
  78. return PCIBIOS_SUCCESSFUL;
  79. }
  80. static void bridge_disable_swapping(struct pci_dev *dev)
  81. {
  82. struct bridge_controller *bc = BRIDGE_CONTROLLER(dev->bus);
  83. int slot = PCI_SLOT(dev->devfn);
  84. /* Turn off byte swapping */
  85. bridge_clr(bc, b_device[slot].reg, BRIDGE_DEV_SWAP_DIR);
  86. bridge_read(bc, b_widget.w_tflush); /* Flush */
  87. }
  88. DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SGI, PCI_DEVICE_ID_SGI_IOC3,
  89. bridge_disable_swapping);
  90. /*
  91. * The Bridge ASIC supports both type 0 and type 1 access. Type 1 is
  92. * not really documented, so right now I can't write code which uses it.
  93. * Therefore we use type 0 accesses for now even though they won't work
  94. * correctly for PCI-to-PCI bridges.
  95. *
  96. * The function is complicated by the ultimate brokenness of the IOC3 chip
  97. * which is used in SGI systems. The IOC3 can only handle 32-bit PCI
  98. * accesses and does only decode parts of it's address space.
  99. */
  100. static int pci_conf0_read_config(struct pci_bus *bus, unsigned int devfn,
  101. int where, int size, u32 *value)
  102. {
  103. struct bridge_controller *bc = BRIDGE_CONTROLLER(bus);
  104. struct bridge_regs *bridge = bc->base;
  105. int slot = PCI_SLOT(devfn);
  106. int fn = PCI_FUNC(devfn);
  107. void *addr;
  108. u32 cf;
  109. int res;
  110. addr = &bridge->b_type0_cfg_dev[slot].f[fn].c[PCI_VENDOR_ID];
  111. if (get_dbe(cf, (u32 *)addr))
  112. return PCIBIOS_DEVICE_NOT_FOUND;
  113. /*
  114. * IOC3 is broken beyond belief ... Don't even give the
  115. * generic PCI code a chance to look at it for real ...
  116. */
  117. if (cf == (PCI_VENDOR_ID_SGI | (PCI_DEVICE_ID_SGI_IOC3 << 16))) {
  118. addr = &bridge->b_type0_cfg_dev[slot].f[fn].l[where >> 2];
  119. return ioc3_cfg_rd(addr, where, size, value,
  120. bc->ioc3_sid[slot]);
  121. }
  122. addr = &bridge->b_type0_cfg_dev[slot].f[fn].c[where ^ (4 - size)];
  123. if (size == 1)
  124. res = get_dbe(*value, (u8 *)addr);
  125. else if (size == 2)
  126. res = get_dbe(*value, (u16 *)addr);
  127. else
  128. res = get_dbe(*value, (u32 *)addr);
  129. return res ? PCIBIOS_DEVICE_NOT_FOUND : PCIBIOS_SUCCESSFUL;
  130. }
  131. static int pci_conf1_read_config(struct pci_bus *bus, unsigned int devfn,
  132. int where, int size, u32 *value)
  133. {
  134. struct bridge_controller *bc = BRIDGE_CONTROLLER(bus);
  135. struct bridge_regs *bridge = bc->base;
  136. int busno = bus->number;
  137. int slot = PCI_SLOT(devfn);
  138. int fn = PCI_FUNC(devfn);
  139. void *addr;
  140. u32 cf;
  141. int res;
  142. bridge_write(bc, b_pci_cfg, (busno << 16) | (slot << 11));
  143. addr = &bridge->b_type1_cfg.c[(fn << 8) | PCI_VENDOR_ID];
  144. if (get_dbe(cf, (u32 *)addr))
  145. return PCIBIOS_DEVICE_NOT_FOUND;
  146. /*
  147. * IOC3 is broken beyond belief ... Don't even give the
  148. * generic PCI code a chance to look at it for real ...
  149. */
  150. if (cf == (PCI_VENDOR_ID_SGI | (PCI_DEVICE_ID_SGI_IOC3 << 16))) {
  151. addr = &bridge->b_type1_cfg.c[(fn << 8) | (where & ~3)];
  152. return ioc3_cfg_rd(addr, where, size, value,
  153. bc->ioc3_sid[slot]);
  154. }
  155. addr = &bridge->b_type1_cfg.c[(fn << 8) | (where ^ (4 - size))];
  156. if (size == 1)
  157. res = get_dbe(*value, (u8 *)addr);
  158. else if (size == 2)
  159. res = get_dbe(*value, (u16 *)addr);
  160. else
  161. res = get_dbe(*value, (u32 *)addr);
  162. return res ? PCIBIOS_DEVICE_NOT_FOUND : PCIBIOS_SUCCESSFUL;
  163. }
  164. static int pci_read_config(struct pci_bus *bus, unsigned int devfn,
  165. int where, int size, u32 *value)
  166. {
  167. if (!pci_is_root_bus(bus))
  168. return pci_conf1_read_config(bus, devfn, where, size, value);
  169. return pci_conf0_read_config(bus, devfn, where, size, value);
  170. }
  171. static int pci_conf0_write_config(struct pci_bus *bus, unsigned int devfn,
  172. int where, int size, u32 value)
  173. {
  174. struct bridge_controller *bc = BRIDGE_CONTROLLER(bus);
  175. struct bridge_regs *bridge = bc->base;
  176. int slot = PCI_SLOT(devfn);
  177. int fn = PCI_FUNC(devfn);
  178. void *addr;
  179. u32 cf;
  180. int res;
  181. addr = &bridge->b_type0_cfg_dev[slot].f[fn].c[PCI_VENDOR_ID];
  182. if (get_dbe(cf, (u32 *)addr))
  183. return PCIBIOS_DEVICE_NOT_FOUND;
  184. /*
  185. * IOC3 is broken beyond belief ... Don't even give the
  186. * generic PCI code a chance to look at it for real ...
  187. */
  188. if (cf == (PCI_VENDOR_ID_SGI | (PCI_DEVICE_ID_SGI_IOC3 << 16))) {
  189. addr = &bridge->b_type0_cfg_dev[slot].f[fn].l[where >> 2];
  190. return ioc3_cfg_wr(addr, where, size, value);
  191. }
  192. addr = &bridge->b_type0_cfg_dev[slot].f[fn].c[where ^ (4 - size)];
  193. if (size == 1)
  194. res = put_dbe(value, (u8 *)addr);
  195. else if (size == 2)
  196. res = put_dbe(value, (u16 *)addr);
  197. else
  198. res = put_dbe(value, (u32 *)addr);
  199. if (res)
  200. return PCIBIOS_DEVICE_NOT_FOUND;
  201. return PCIBIOS_SUCCESSFUL;
  202. }
  203. static int pci_conf1_write_config(struct pci_bus *bus, unsigned int devfn,
  204. int where, int size, u32 value)
  205. {
  206. struct bridge_controller *bc = BRIDGE_CONTROLLER(bus);
  207. struct bridge_regs *bridge = bc->base;
  208. int slot = PCI_SLOT(devfn);
  209. int fn = PCI_FUNC(devfn);
  210. int busno = bus->number;
  211. void *addr;
  212. u32 cf;
  213. int res;
  214. bridge_write(bc, b_pci_cfg, (busno << 16) | (slot << 11));
  215. addr = &bridge->b_type1_cfg.c[(fn << 8) | PCI_VENDOR_ID];
  216. if (get_dbe(cf, (u32 *)addr))
  217. return PCIBIOS_DEVICE_NOT_FOUND;
  218. /*
  219. * IOC3 is broken beyond belief ... Don't even give the
  220. * generic PCI code a chance to look at it for real ...
  221. */
  222. if (cf == (PCI_VENDOR_ID_SGI | (PCI_DEVICE_ID_SGI_IOC3 << 16))) {
  223. addr = &bridge->b_type0_cfg_dev[slot].f[fn].l[where >> 2];
  224. return ioc3_cfg_wr(addr, where, size, value);
  225. }
  226. addr = &bridge->b_type1_cfg.c[(fn << 8) | (where ^ (4 - size))];
  227. if (size == 1)
  228. res = put_dbe(value, (u8 *)addr);
  229. else if (size == 2)
  230. res = put_dbe(value, (u16 *)addr);
  231. else
  232. res = put_dbe(value, (u32 *)addr);
  233. if (res)
  234. return PCIBIOS_DEVICE_NOT_FOUND;
  235. return PCIBIOS_SUCCESSFUL;
  236. }
  237. static int pci_write_config(struct pci_bus *bus, unsigned int devfn,
  238. int where, int size, u32 value)
  239. {
  240. if (!pci_is_root_bus(bus))
  241. return pci_conf1_write_config(bus, devfn, where, size, value);
  242. return pci_conf0_write_config(bus, devfn, where, size, value);
  243. }
  244. static struct pci_ops bridge_pci_ops = {
  245. .read = pci_read_config,
  246. .write = pci_write_config,
  247. };
  248. struct bridge_irq_chip_data {
  249. struct bridge_controller *bc;
  250. nasid_t nasid;
  251. };
  252. static int bridge_set_affinity(struct irq_data *d, const struct cpumask *mask,
  253. bool force)
  254. {
  255. #ifdef CONFIG_NUMA
  256. struct bridge_irq_chip_data *data = d->chip_data;
  257. int bit = d->parent_data->hwirq;
  258. int pin = d->hwirq;
  259. int ret, cpu;
  260. ret = irq_chip_set_affinity_parent(d, mask, force);
  261. if (ret >= 0) {
  262. cpu = cpumask_first_and(mask, cpu_online_mask);
  263. data->nasid = cpu_to_node(cpu);
  264. bridge_write(data->bc, b_int_addr[pin].addr,
  265. (((data->bc->intr_addr >> 30) & 0x30000) |
  266. bit | (data->nasid << 8)));
  267. bridge_read(data->bc, b_wid_tflush);
  268. }
  269. return ret;
  270. #else
  271. return irq_chip_set_affinity_parent(d, mask, force);
  272. #endif
  273. }
  274. struct irq_chip bridge_irq_chip = {
  275. .name = "BRIDGE",
  276. .irq_mask = irq_chip_mask_parent,
  277. .irq_unmask = irq_chip_unmask_parent,
  278. .irq_set_affinity = bridge_set_affinity
  279. };
  280. static int bridge_domain_alloc(struct irq_domain *domain, unsigned int virq,
  281. unsigned int nr_irqs, void *arg)
  282. {
  283. struct bridge_irq_chip_data *data;
  284. struct irq_alloc_info *info = arg;
  285. int ret;
  286. if (nr_irqs > 1 || !info)
  287. return -EINVAL;
  288. data = kzalloc(sizeof(*data), GFP_KERNEL);
  289. if (!data)
  290. return -ENOMEM;
  291. ret = irq_domain_alloc_irqs_parent(domain, virq, nr_irqs, arg);
  292. if (ret >= 0) {
  293. data->bc = info->ctrl;
  294. data->nasid = info->nasid;
  295. irq_domain_set_info(domain, virq, info->pin, &bridge_irq_chip,
  296. data, handle_level_irq, NULL, NULL);
  297. } else {
  298. kfree(data);
  299. }
  300. return ret;
  301. }
  302. static void bridge_domain_free(struct irq_domain *domain, unsigned int virq,
  303. unsigned int nr_irqs)
  304. {
  305. struct irq_data *irqd = irq_domain_get_irq_data(domain, virq);
  306. if (nr_irqs)
  307. return;
  308. kfree(irqd->chip_data);
  309. irq_domain_free_irqs_top(domain, virq, nr_irqs);
  310. }
  311. static int bridge_domain_activate(struct irq_domain *domain,
  312. struct irq_data *irqd, bool reserve)
  313. {
  314. struct bridge_irq_chip_data *data = irqd->chip_data;
  315. struct bridge_controller *bc = data->bc;
  316. int bit = irqd->parent_data->hwirq;
  317. int pin = irqd->hwirq;
  318. u32 device;
  319. bridge_write(bc, b_int_addr[pin].addr,
  320. (((bc->intr_addr >> 30) & 0x30000) |
  321. bit | (data->nasid << 8)));
  322. bridge_set(bc, b_int_enable, (1 << pin));
  323. bridge_set(bc, b_int_enable, 0x7ffffe00); /* more stuff in int_enable */
  324. /*
  325. * Enable sending of an interrupt clear packet to the hub on a high to
  326. * low transition of the interrupt pin.
  327. *
  328. * IRIX sets additional bits in the address which are documented as
  329. * reserved in the bridge docs.
  330. */
  331. bridge_set(bc, b_int_mode, (1UL << pin));
  332. /*
  333. * We assume the bridge to have a 1:1 mapping between devices
  334. * (slots) and intr pins.
  335. */
  336. device = bridge_read(bc, b_int_device);
  337. device &= ~(7 << (pin*3));
  338. device |= (pin << (pin*3));
  339. bridge_write(bc, b_int_device, device);
  340. bridge_read(bc, b_wid_tflush);
  341. return 0;
  342. }
  343. static void bridge_domain_deactivate(struct irq_domain *domain,
  344. struct irq_data *irqd)
  345. {
  346. struct bridge_irq_chip_data *data = irqd->chip_data;
  347. bridge_clr(data->bc, b_int_enable, (1 << irqd->hwirq));
  348. bridge_read(data->bc, b_wid_tflush);
  349. }
  350. static const struct irq_domain_ops bridge_domain_ops = {
  351. .alloc = bridge_domain_alloc,
  352. .free = bridge_domain_free,
  353. .activate = bridge_domain_activate,
  354. .deactivate = bridge_domain_deactivate
  355. };
  356. /*
  357. * All observed requests have pin == 1. We could have a global here, that
  358. * gets incremented and returned every time - unfortunately, pci_map_irq
  359. * may be called on the same device over and over, and need to return the
  360. * same value. On O2000, pin can be 0 or 1, and PCI slots can be [0..7].
  361. *
  362. * A given PCI device, in general, should be able to intr any of the cpus
  363. * on any one of the hubs connected to its xbow.
  364. */
  365. static int bridge_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
  366. {
  367. struct bridge_controller *bc = BRIDGE_CONTROLLER(dev->bus);
  368. struct irq_alloc_info info;
  369. int irq;
  370. switch (pin) {
  371. case PCI_INTERRUPT_UNKNOWN:
  372. case PCI_INTERRUPT_INTA:
  373. case PCI_INTERRUPT_INTC:
  374. pin = 0;
  375. break;
  376. case PCI_INTERRUPT_INTB:
  377. case PCI_INTERRUPT_INTD:
  378. pin = 1;
  379. }
  380. irq = bc->pci_int[slot][pin];
  381. if (irq == -1) {
  382. info.ctrl = bc;
  383. info.nasid = bc->nasid;
  384. info.pin = bc->int_mapping[slot][pin];
  385. irq = irq_domain_alloc_irqs(bc->domain, 1, bc->nasid, &info);
  386. if (irq < 0)
  387. return irq;
  388. bc->pci_int[slot][pin] = irq;
  389. }
  390. return irq;
  391. }
  392. #define IOC3_SID(sid) (PCI_VENDOR_ID_SGI | ((sid) << 16))
  393. static void bridge_setup_ip27_baseio6g(struct bridge_controller *bc)
  394. {
  395. bc->ioc3_sid[2] = IOC3_SID(IOC3_SUBSYS_IP27_BASEIO6G);
  396. bc->ioc3_sid[6] = IOC3_SID(IOC3_SUBSYS_IP27_MIO);
  397. bc->int_mapping[2][1] = 4;
  398. bc->int_mapping[6][1] = 6;
  399. }
  400. static void bridge_setup_ip27_baseio(struct bridge_controller *bc)
  401. {
  402. bc->ioc3_sid[2] = IOC3_SID(IOC3_SUBSYS_IP27_BASEIO);
  403. bc->int_mapping[2][1] = 4;
  404. }
  405. static void bridge_setup_ip29_baseio(struct bridge_controller *bc)
  406. {
  407. bc->ioc3_sid[2] = IOC3_SID(IOC3_SUBSYS_IP29_SYSBOARD);
  408. bc->int_mapping[2][1] = 3;
  409. }
  410. static void bridge_setup_ip30_sysboard(struct bridge_controller *bc)
  411. {
  412. bc->ioc3_sid[2] = IOC3_SID(IOC3_SUBSYS_IP30_SYSBOARD);
  413. bc->int_mapping[2][1] = 4;
  414. }
  415. static void bridge_setup_menet(struct bridge_controller *bc)
  416. {
  417. bc->ioc3_sid[0] = IOC3_SID(IOC3_SUBSYS_MENET);
  418. bc->ioc3_sid[1] = IOC3_SID(IOC3_SUBSYS_MENET);
  419. bc->ioc3_sid[2] = IOC3_SID(IOC3_SUBSYS_MENET);
  420. bc->ioc3_sid[3] = IOC3_SID(IOC3_SUBSYS_MENET4);
  421. }
  422. static void bridge_setup_io7(struct bridge_controller *bc)
  423. {
  424. bc->ioc3_sid[4] = IOC3_SID(IOC3_SUBSYS_IO7);
  425. }
  426. static void bridge_setup_io8(struct bridge_controller *bc)
  427. {
  428. bc->ioc3_sid[4] = IOC3_SID(IOC3_SUBSYS_IO8);
  429. }
  430. static void bridge_setup_io9(struct bridge_controller *bc)
  431. {
  432. bc->ioc3_sid[1] = IOC3_SID(IOC3_SUBSYS_IO9);
  433. }
  434. static void bridge_setup_ip34_fuel_sysboard(struct bridge_controller *bc)
  435. {
  436. bc->ioc3_sid[4] = IOC3_SID(IOC3_SUBSYS_IP34_SYSBOARD);
  437. }
  438. #define BRIDGE_BOARD_SETUP(_partno, _setup) \
  439. { .match = _partno, .setup = _setup }
  440. static const struct {
  441. char *match;
  442. void (*setup)(struct bridge_controller *bc);
  443. } bridge_ioc3_devid[] = {
  444. BRIDGE_BOARD_SETUP("030-0734-", bridge_setup_ip27_baseio6g),
  445. BRIDGE_BOARD_SETUP("030-0880-", bridge_setup_ip27_baseio6g),
  446. BRIDGE_BOARD_SETUP("030-1023-", bridge_setup_ip27_baseio),
  447. BRIDGE_BOARD_SETUP("030-1124-", bridge_setup_ip27_baseio),
  448. BRIDGE_BOARD_SETUP("030-1025-", bridge_setup_ip29_baseio),
  449. BRIDGE_BOARD_SETUP("030-1244-", bridge_setup_ip29_baseio),
  450. BRIDGE_BOARD_SETUP("030-1389-", bridge_setup_ip29_baseio),
  451. BRIDGE_BOARD_SETUP("030-0887-", bridge_setup_ip30_sysboard),
  452. BRIDGE_BOARD_SETUP("030-1467-", bridge_setup_ip30_sysboard),
  453. BRIDGE_BOARD_SETUP("030-0873-", bridge_setup_menet),
  454. BRIDGE_BOARD_SETUP("030-1557-", bridge_setup_io7),
  455. BRIDGE_BOARD_SETUP("030-1673-", bridge_setup_io8),
  456. BRIDGE_BOARD_SETUP("030-1771-", bridge_setup_io9),
  457. BRIDGE_BOARD_SETUP("030-1707-", bridge_setup_ip34_fuel_sysboard),
  458. };
  459. static void bridge_setup_board(struct bridge_controller *bc, char *partnum)
  460. {
  461. int i;
  462. for (i = 0; i < ARRAY_SIZE(bridge_ioc3_devid); i++)
  463. if (!strncmp(partnum, bridge_ioc3_devid[i].match,
  464. strlen(bridge_ioc3_devid[i].match))) {
  465. bridge_ioc3_devid[i].setup(bc);
  466. }
  467. }
  468. static int bridge_nvmem_match(struct device *dev, const void *data)
  469. {
  470. const char *name = dev_name(dev);
  471. const char *prefix = data;
  472. if (strlen(name) < strlen(prefix))
  473. return 0;
  474. return memcmp(prefix, dev_name(dev), strlen(prefix)) == 0;
  475. }
  476. static int bridge_get_partnum(u64 baddr, char *partnum)
  477. {
  478. struct nvmem_device *nvmem;
  479. char prefix[24];
  480. u8 prom[64];
  481. int i, j;
  482. int ret;
  483. snprintf(prefix, sizeof(prefix), "bridge-%012llx-0b-", baddr);
  484. nvmem = nvmem_device_find(prefix, bridge_nvmem_match);
  485. if (IS_ERR(nvmem))
  486. return PTR_ERR(nvmem);
  487. ret = nvmem_device_read(nvmem, 0, 64, prom);
  488. nvmem_device_put(nvmem);
  489. if (ret != 64)
  490. return ret;
  491. if (crc16(CRC16_INIT, prom, 32) != CRC16_VALID ||
  492. crc16(CRC16_INIT, prom + 32, 32) != CRC16_VALID)
  493. return -EINVAL;
  494. /* Assemble part number */
  495. j = 0;
  496. for (i = 0; i < 19; i++)
  497. if (prom[i + 11] != ' ')
  498. partnum[j++] = prom[i + 11];
  499. for (i = 0; i < 6; i++)
  500. if (prom[i + 32] != ' ')
  501. partnum[j++] = prom[i + 32];
  502. partnum[j] = 0;
  503. return 0;
  504. }
  505. static int bridge_probe(struct platform_device *pdev)
  506. {
  507. struct xtalk_bridge_platform_data *bd = dev_get_platdata(&pdev->dev);
  508. struct device *dev = &pdev->dev;
  509. struct bridge_controller *bc;
  510. struct pci_host_bridge *host;
  511. struct irq_domain *domain, *parent;
  512. struct fwnode_handle *fn;
  513. char partnum[26];
  514. int slot;
  515. int err;
  516. /* get part number from one wire prom */
  517. if (bridge_get_partnum(virt_to_phys((void *)bd->bridge_addr), partnum))
  518. return -EPROBE_DEFER; /* not available yet */
  519. parent = irq_get_default_host();
  520. if (!parent)
  521. return -ENODEV;
  522. fn = irq_domain_alloc_named_fwnode("BRIDGE");
  523. if (!fn)
  524. return -ENOMEM;
  525. domain = irq_domain_create_hierarchy(parent, 0, 8, fn,
  526. &bridge_domain_ops, NULL);
  527. if (!domain) {
  528. irq_domain_free_fwnode(fn);
  529. return -ENOMEM;
  530. }
  531. pci_set_flags(PCI_PROBE_ONLY);
  532. host = devm_pci_alloc_host_bridge(dev, sizeof(*bc));
  533. if (!host) {
  534. err = -ENOMEM;
  535. goto err_remove_domain;
  536. }
  537. bc = pci_host_bridge_priv(host);
  538. bc->busn.name = "Bridge PCI busn";
  539. bc->busn.start = 0;
  540. bc->busn.end = 0xff;
  541. bc->busn.flags = IORESOURCE_BUS;
  542. bc->domain = domain;
  543. pci_add_resource_offset(&host->windows, &bd->mem, bd->mem_offset);
  544. pci_add_resource_offset(&host->windows, &bd->io, bd->io_offset);
  545. pci_add_resource(&host->windows, &bc->busn);
  546. err = devm_request_pci_bus_resources(dev, &host->windows);
  547. if (err < 0)
  548. goto err_free_resource;
  549. bc->nasid = bd->nasid;
  550. bc->baddr = (u64)bd->masterwid << 60 | PCI64_ATTR_BAR;
  551. bc->base = (struct bridge_regs *)bd->bridge_addr;
  552. bc->intr_addr = bd->intr_addr;
  553. /*
  554. * Clear all pending interrupts.
  555. */
  556. bridge_write(bc, b_int_rst_stat, BRIDGE_IRR_ALL_CLR);
  557. /*
  558. * Until otherwise set up, assume all interrupts are from slot 0
  559. */
  560. bridge_write(bc, b_int_device, 0x0);
  561. /*
  562. * disable swapping for big windows
  563. */
  564. bridge_clr(bc, b_wid_control,
  565. BRIDGE_CTRL_IO_SWAP | BRIDGE_CTRL_MEM_SWAP);
  566. #ifdef CONFIG_PAGE_SIZE_4KB
  567. bridge_clr(bc, b_wid_control, BRIDGE_CTRL_PAGE_SIZE);
  568. #else /* 16kB or larger */
  569. bridge_set(bc, b_wid_control, BRIDGE_CTRL_PAGE_SIZE);
  570. #endif
  571. /*
  572. * Hmm... IRIX sets additional bits in the address which
  573. * are documented as reserved in the bridge docs.
  574. */
  575. bridge_write(bc, b_wid_int_upper,
  576. ((bc->intr_addr >> 32) & 0xffff) | (bd->masterwid << 16));
  577. bridge_write(bc, b_wid_int_lower, bc->intr_addr & 0xffffffff);
  578. bridge_write(bc, b_dir_map, (bd->masterwid << 20)); /* DMA */
  579. bridge_write(bc, b_int_enable, 0);
  580. for (slot = 0; slot < 8; slot++) {
  581. bridge_set(bc, b_device[slot].reg, BRIDGE_DEV_SWAP_DIR);
  582. bc->pci_int[slot][0] = -1;
  583. bc->pci_int[slot][1] = -1;
  584. /* default interrupt pin mapping */
  585. bc->int_mapping[slot][0] = slot;
  586. bc->int_mapping[slot][1] = slot ^ 4;
  587. }
  588. bridge_read(bc, b_wid_tflush); /* wait until Bridge PIO complete */
  589. bridge_setup_board(bc, partnum);
  590. host->dev.parent = dev;
  591. host->sysdata = bc;
  592. host->busnr = 0;
  593. host->ops = &bridge_pci_ops;
  594. host->map_irq = bridge_map_irq;
  595. host->swizzle_irq = pci_common_swizzle;
  596. err = pci_scan_root_bus_bridge(host);
  597. if (err < 0)
  598. goto err_free_resource;
  599. pci_bus_claim_resources(host->bus);
  600. pci_bus_add_devices(host->bus);
  601. platform_set_drvdata(pdev, host->bus);
  602. return 0;
  603. err_free_resource:
  604. pci_free_resource_list(&host->windows);
  605. err_remove_domain:
  606. irq_domain_remove(domain);
  607. irq_domain_free_fwnode(fn);
  608. return err;
  609. }
  610. static int bridge_remove(struct platform_device *pdev)
  611. {
  612. struct pci_bus *bus = platform_get_drvdata(pdev);
  613. struct bridge_controller *bc = BRIDGE_CONTROLLER(bus);
  614. struct fwnode_handle *fn = bc->domain->fwnode;
  615. irq_domain_remove(bc->domain);
  616. irq_domain_free_fwnode(fn);
  617. pci_lock_rescan_remove();
  618. pci_stop_root_bus(bus);
  619. pci_remove_root_bus(bus);
  620. pci_unlock_rescan_remove();
  621. return 0;
  622. }
  623. static struct platform_driver bridge_driver = {
  624. .probe = bridge_probe,
  625. .remove = bridge_remove,
  626. .driver = {
  627. .name = "xtalk-bridge",
  628. }
  629. };
  630. builtin_platform_driver(bridge_driver);