Lines Matching refs:pbm

78 static void *schizo_pci_config_mkaddr(struct pci_pbm_info *pbm,  in schizo_pci_config_mkaddr()  argument
83 if (!pbm) in schizo_pci_config_mkaddr()
85 bus -= pbm->pci_first_busno; in schizo_pci_config_mkaddr()
87 (SCHIZO_CONFIG_BASE(pbm) | in schizo_pci_config_mkaddr()
126 static void __schizo_check_stc_error_pbm(struct pci_pbm_info *pbm, in __schizo_check_stc_error_pbm() argument
129 struct strbuf *strbuf = &pbm->stc; in __schizo_check_stc_error_pbm()
130 unsigned long regbase = pbm->pbm_regs; in __schizo_check_stc_error_pbm()
181 pbm->name, in __schizo_check_stc_error_pbm()
191 pbm->name, in __schizo_check_stc_error_pbm()
201 pbm->name, in __schizo_check_stc_error_pbm()
234 static void schizo_check_iommu_error_pbm(struct pci_pbm_info *pbm, in schizo_check_iommu_error_pbm() argument
237 struct iommu *iommu = pbm->iommu; in schizo_check_iommu_error_pbm()
270 pbm->name, type_string); in schizo_check_iommu_error_pbm()
285 base = pbm->pbm_regs; in schizo_check_iommu_error_pbm()
326 pbm->name, i, type_string, in schizo_check_iommu_error_pbm()
333 pbm->name, i, in schizo_check_iommu_error_pbm()
339 if (pbm->stc.strbuf_enabled) in schizo_check_iommu_error_pbm()
340 __schizo_check_stc_error_pbm(pbm, type); in schizo_check_iommu_error_pbm()
344 static void schizo_check_iommu_error(struct pci_pbm_info *pbm, in schizo_check_iommu_error() argument
347 schizo_check_iommu_error_pbm(pbm, type); in schizo_check_iommu_error()
348 if (pbm->sibling) in schizo_check_iommu_error()
349 schizo_check_iommu_error_pbm(pbm->sibling, type); in schizo_check_iommu_error()
373 struct pci_pbm_info *pbm = dev_id; in schizo_ue_intr() local
374 unsigned long afsr_reg = pbm->controller_regs + SCHIZO_UE_AFSR; in schizo_ue_intr()
375 unsigned long afar_reg = pbm->controller_regs + SCHIZO_UE_AFAR; in schizo_ue_intr()
401 pbm->name, in schizo_ue_intr()
409 pbm->name, in schizo_ue_intr()
414 pbm->name, in schizo_ue_intr()
420 printk("%s: UE AFAR [%016lx]\n", pbm->name, afar); in schizo_ue_intr()
421 printk("%s: UE Secondary errors [", pbm->name); in schizo_ue_intr()
436 schizo_check_iommu_error(pbm, UE_ERR); in schizo_ue_intr()
461 struct pci_pbm_info *pbm = dev_id; in schizo_ce_intr() local
462 unsigned long afsr_reg = pbm->controller_regs + SCHIZO_CE_AFSR; in schizo_ce_intr()
463 unsigned long afar_reg = pbm->controller_regs + SCHIZO_CE_AFAR; in schizo_ce_intr()
489 pbm->name, in schizo_ce_intr()
501 pbm->name, in schizo_ce_intr()
506 pbm->name, in schizo_ce_intr()
512 printk("%s: CE AFAR [%016lx]\n", pbm->name, afar); in schizo_ce_intr()
513 printk("%s: CE Secondary errors [", pbm->name); in schizo_ce_intr()
580 static irqreturn_t schizo_pcierr_intr_other(struct pci_pbm_info *pbm) in schizo_pcierr_intr_other() argument
586 csr_reg = pbm->pbm_regs + SCHIZO_PCI_CTRL; in schizo_pcierr_intr_other()
602 pbm->name); in schizo_pcierr_intr_other()
605 pbm->name); in schizo_pcierr_intr_other()
608 pbm->name); in schizo_pcierr_intr_other()
611 pbm->name); in schizo_pcierr_intr_other()
614 pbm->name); in schizo_pcierr_intr_other()
617 pbm->name); in schizo_pcierr_intr_other()
620 pbm->pci_ops->read(pbm->pci_bus, 0, PCI_STATUS, 2, &stat); in schizo_pcierr_intr_other()
627 pbm->name, stat); in schizo_pcierr_intr_other()
628 pbm->pci_ops->write(pbm->pci_bus, 0, PCI_STATUS, 2, 0xffff); in schizo_pcierr_intr_other()
636 struct pci_pbm_info *pbm = dev_id; in schizo_pcierr_intr() local
641 base = pbm->pbm_regs; in schizo_pcierr_intr()
659 return schizo_pcierr_intr_other(pbm); in schizo_pcierr_intr()
664 pbm->name, in schizo_pcierr_intr()
678 pbm->name, in schizo_pcierr_intr()
688 pbm->name, afar); in schizo_pcierr_intr()
690 pbm->name); in schizo_pcierr_intr()
730 schizo_check_iommu_error(pbm, PCI_ERR); in schizo_pcierr_intr()
731 pci_scan_for_target_abort(pbm, pbm->pci_bus); in schizo_pcierr_intr()
734 pci_scan_for_master_abort(pbm, pbm->pci_bus); in schizo_pcierr_intr()
744 pci_scan_for_parity_error(pbm, pbm->pci_bus); in schizo_pcierr_intr()
790 struct pci_pbm_info *pbm = dev_id; in schizo_safarierr_intr() local
793 errlog = upa_readq(pbm->controller_regs + SCHIZO_SAFARI_ERRLOG); in schizo_safarierr_intr()
795 pbm->controller_regs + SCHIZO_SAFARI_ERRLOG); in schizo_safarierr_intr()
799 pbm->name, errlog); in schizo_safarierr_intr()
805 pbm->name); in schizo_safarierr_intr()
806 schizo_check_iommu_error(pbm, SAFARI_ERR); in schizo_safarierr_intr()
822 static int pbm_routes_this_ino(struct pci_pbm_info *pbm, u32 ino) in pbm_routes_this_ino() argument
826 if (pbm->ino_bitmap & (1UL << ino)) in pbm_routes_this_ino()
846 static void tomatillo_register_error_handlers(struct pci_pbm_info *pbm) in tomatillo_register_error_handlers() argument
848 struct platform_device *op = of_find_device_by_node(pbm->op->dev.of_node); in tomatillo_register_error_handlers()
860 if (pbm_routes_this_ino(pbm, SCHIZO_UE_INO)) { in tomatillo_register_error_handlers()
862 "TOMATILLO_UE", pbm); in tomatillo_register_error_handlers()
865 "err=%d\n", pbm->name, err); in tomatillo_register_error_handlers()
867 if (pbm_routes_this_ino(pbm, SCHIZO_CE_INO)) { in tomatillo_register_error_handlers()
869 "TOMATILLO_CE", pbm); in tomatillo_register_error_handlers()
872 "err=%d\n", pbm->name, err); in tomatillo_register_error_handlers()
875 if (pbm_routes_this_ino(pbm, SCHIZO_PCIERR_A_INO)) { in tomatillo_register_error_handlers()
877 "TOMATILLO_PCIERR", pbm); in tomatillo_register_error_handlers()
878 } else if (pbm_routes_this_ino(pbm, SCHIZO_PCIERR_B_INO)) { in tomatillo_register_error_handlers()
880 "TOMATILLO_PCIERR", pbm); in tomatillo_register_error_handlers()
884 "err=%d\n", pbm->name, err); in tomatillo_register_error_handlers()
886 if (pbm_routes_this_ino(pbm, SCHIZO_SERR_INO)) { in tomatillo_register_error_handlers()
888 "TOMATILLO_SERR", pbm); in tomatillo_register_error_handlers()
891 "err=%d\n", pbm->name, err); in tomatillo_register_error_handlers()
897 SCHIZO_ECCCTRL_CE), pbm->controller_regs + SCHIZO_ECC_CTRL); in tomatillo_register_error_handlers()
910 tmp = upa_readq(pbm->pbm_regs + SCHIZO_PCI_CTRL); in tomatillo_register_error_handlers()
913 upa_writeq(tmp, pbm->pbm_regs + SCHIZO_PCI_CTRL); in tomatillo_register_error_handlers()
922 upa_writeq(err_mask, pbm->pbm_regs + SCHIZO_PCI_AFSR); in tomatillo_register_error_handlers()
935 pbm->controller_regs + SCHIZO_SAFARI_ERRCTRL); in tomatillo_register_error_handlers()
938 pbm->controller_regs + SCHIZO_SAFARI_IRQCTRL); in tomatillo_register_error_handlers()
941 static void schizo_register_error_handlers(struct pci_pbm_info *pbm) in schizo_register_error_handlers() argument
943 struct platform_device *op = of_find_device_by_node(pbm->op->dev.of_node); in schizo_register_error_handlers()
955 if (pbm_routes_this_ino(pbm, SCHIZO_UE_INO)) { in schizo_register_error_handlers()
957 "SCHIZO_UE", pbm); in schizo_register_error_handlers()
960 "err=%d\n", pbm->name, err); in schizo_register_error_handlers()
962 if (pbm_routes_this_ino(pbm, SCHIZO_CE_INO)) { in schizo_register_error_handlers()
964 "SCHIZO_CE", pbm); in schizo_register_error_handlers()
967 "err=%d\n", pbm->name, err); in schizo_register_error_handlers()
970 if (pbm_routes_this_ino(pbm, SCHIZO_PCIERR_A_INO)) { in schizo_register_error_handlers()
972 "SCHIZO_PCIERR", pbm); in schizo_register_error_handlers()
973 } else if (pbm_routes_this_ino(pbm, SCHIZO_PCIERR_B_INO)) { in schizo_register_error_handlers()
975 "SCHIZO_PCIERR", pbm); in schizo_register_error_handlers()
979 "err=%d\n", pbm->name, err); in schizo_register_error_handlers()
981 if (pbm_routes_this_ino(pbm, SCHIZO_SERR_INO)) { in schizo_register_error_handlers()
983 "SCHIZO_SERR", pbm); in schizo_register_error_handlers()
986 "err=%d\n", pbm->name, err); in schizo_register_error_handlers()
992 SCHIZO_ECCCTRL_CE), pbm->controller_regs + SCHIZO_ECC_CTRL); in schizo_register_error_handlers()
1008 tmp = upa_readq(pbm->pbm_regs + SCHIZO_PCI_CTRL); in schizo_register_error_handlers()
1011 upa_writeq(tmp, pbm->pbm_regs + SCHIZO_PCI_CTRL); in schizo_register_error_handlers()
1019 pbm->pbm_regs + SCHIZO_PCI_AFSR); in schizo_register_error_handlers()
1047 pbm->controller_regs + SCHIZO_SAFARI_ERRCTRL); in schizo_register_error_handlers()
1050 static void pbm_config_busmastering(struct pci_pbm_info *pbm) in pbm_config_busmastering() argument
1057 addr = schizo_pci_config_mkaddr(pbm, pbm->pci_first_busno, in pbm_config_busmastering()
1062 addr = schizo_pci_config_mkaddr(pbm, pbm->pci_first_busno, in pbm_config_busmastering()
1067 static void schizo_scan_bus(struct pci_pbm_info *pbm, struct device *parent) in schizo_scan_bus() argument
1069 pbm_config_busmastering(pbm); in schizo_scan_bus()
1070 pbm->is_66mhz_capable = in schizo_scan_bus()
1071 (of_find_property(pbm->op->dev.of_node, "66mhz-capable", NULL) in schizo_scan_bus()
1074 pbm->pci_bus = pci_scan_one_pbm(pbm, parent); in schizo_scan_bus()
1076 if (pbm->chip_type == PBM_CHIP_TYPE_TOMATILLO) in schizo_scan_bus()
1077 tomatillo_register_error_handlers(pbm); in schizo_scan_bus()
1079 schizo_register_error_handlers(pbm); in schizo_scan_bus()
1088 static void schizo_pbm_strbuf_init(struct pci_pbm_info *pbm) in schizo_pbm_strbuf_init() argument
1090 unsigned long base = pbm->pbm_regs; in schizo_pbm_strbuf_init()
1093 if (pbm->chip_type == PBM_CHIP_TYPE_TOMATILLO) { in schizo_pbm_strbuf_init()
1099 pbm->stc.strbuf_control = base + SCHIZO_STRBUF_CONTROL; in schizo_pbm_strbuf_init()
1100 pbm->stc.strbuf_pflush = base + SCHIZO_STRBUF_FLUSH; in schizo_pbm_strbuf_init()
1101 pbm->stc.strbuf_fsync = base + SCHIZO_STRBUF_FSYNC; in schizo_pbm_strbuf_init()
1102 pbm->stc.strbuf_ctxflush = base + SCHIZO_STRBUF_CTXFLUSH; in schizo_pbm_strbuf_init()
1103 pbm->stc.strbuf_ctxmatch_base = base + SCHIZO_STRBUF_CTXMATCH; in schizo_pbm_strbuf_init()
1105 pbm->stc.strbuf_flushflag = (volatile unsigned long *) in schizo_pbm_strbuf_init()
1106 ((((unsigned long)&pbm->stc.__flushflag_buf[0]) in schizo_pbm_strbuf_init()
1109 pbm->stc.strbuf_flushflag_pa = (unsigned long) in schizo_pbm_strbuf_init()
1110 __pa(pbm->stc.strbuf_flushflag); in schizo_pbm_strbuf_init()
1116 control = upa_readq(pbm->stc.strbuf_control); in schizo_pbm_strbuf_init()
1121 upa_writeq(control, pbm->stc.strbuf_control); in schizo_pbm_strbuf_init()
1123 pbm->stc.strbuf_enabled = 1; in schizo_pbm_strbuf_init()
1131 static int schizo_pbm_iommu_init(struct pci_pbm_info *pbm) in schizo_pbm_iommu_init() argument
1135 struct iommu *iommu = pbm->iommu; in schizo_pbm_iommu_init()
1141 vdma = of_get_property(pbm->op->dev.of_node, "virtual-dma", NULL); in schizo_pbm_iommu_init()
1168 iommu->iommu_control = pbm->pbm_regs + SCHIZO_IOMMU_CONTROL; in schizo_pbm_iommu_init()
1169 iommu->iommu_tsbbase = pbm->pbm_regs + SCHIZO_IOMMU_TSBBASE; in schizo_pbm_iommu_init()
1170 iommu->iommu_flush = pbm->pbm_regs + SCHIZO_IOMMU_FLUSH; in schizo_pbm_iommu_init()
1172 iommu->iommu_ctxflush = pbm->pbm_regs + SCHIZO_IOMMU_CTXFLUSH; in schizo_pbm_iommu_init()
1177 iommu->write_complete_reg = pbm->controller_regs + 0x10000UL; in schizo_pbm_iommu_init()
1189 upa_writeq(0, pbm->pbm_regs + tagbase + (i * 8UL)); in schizo_pbm_iommu_init()
1190 upa_writeq(0, pbm->pbm_regs + database + (i * 8UL)); in schizo_pbm_iommu_init()
1197 pbm->numa_node); in schizo_pbm_iommu_init()
1256 static void schizo_pbm_hw_init(struct pci_pbm_info *pbm) in schizo_pbm_hw_init() argument
1260 upa_writeq(5, pbm->pbm_regs + SCHIZO_PCI_IRQ_RETRY); in schizo_pbm_hw_init()
1262 tmp = upa_readq(pbm->pbm_regs + SCHIZO_PCI_CTRL); in schizo_pbm_hw_init()
1267 if (pbm->chip_type == PBM_CHIP_TYPE_TOMATILLO && in schizo_pbm_hw_init()
1268 pbm->chip_version >= 0x2) in schizo_pbm_hw_init()
1271 if (!of_find_property(pbm->op->dev.of_node, "no-bus-parking", NULL)) in schizo_pbm_hw_init()
1276 if (pbm->chip_type == PBM_CHIP_TYPE_TOMATILLO && in schizo_pbm_hw_init()
1277 pbm->chip_version <= 0x1) in schizo_pbm_hw_init()
1282 if (pbm->chip_type == PBM_CHIP_TYPE_TOMATILLO) in schizo_pbm_hw_init()
1287 upa_writeq(tmp, pbm->pbm_regs + SCHIZO_PCI_CTRL); in schizo_pbm_hw_init()
1289 tmp = upa_readq(pbm->pbm_regs + SCHIZO_PCI_DIAG); in schizo_pbm_hw_init()
1293 upa_writeq(tmp, pbm->pbm_regs + SCHIZO_PCI_DIAG); in schizo_pbm_hw_init()
1295 if (pbm->chip_type == PBM_CHIP_TYPE_TOMATILLO) { in schizo_pbm_hw_init()
1305 upa_writeq(tmp, pbm->pbm_regs + TOMATILLO_PCI_IOC_CSR); in schizo_pbm_hw_init()
1309 static int schizo_pbm_init(struct pci_pbm_info *pbm, in schizo_pbm_init() argument
1346 pbm->next = pci_pbm_root; in schizo_pbm_init()
1347 pci_pbm_root = pbm; in schizo_pbm_init()
1349 pbm->numa_node = -1; in schizo_pbm_init()
1351 pbm->pci_ops = &sun4u_pci_ops; in schizo_pbm_init()
1352 pbm->config_space_reg_bits = 8; in schizo_pbm_init()
1354 pbm->index = pci_num_pbms++; in schizo_pbm_init()
1356 pbm->portid = portid; in schizo_pbm_init()
1357 pbm->op = op; in schizo_pbm_init()
1359 pbm->chip_type = chip_type; in schizo_pbm_init()
1360 pbm->chip_version = of_getintprop_default(dp, "version#", 0); in schizo_pbm_init()
1361 pbm->chip_revision = of_getintprop_default(dp, "module-version#", 0); in schizo_pbm_init()
1363 pbm->pbm_regs = regs[0].phys_addr; in schizo_pbm_init()
1364 pbm->controller_regs = regs[1].phys_addr - 0x10000UL; in schizo_pbm_init()
1367 pbm->sync_reg = regs[3].phys_addr + 0x1a18UL; in schizo_pbm_init()
1369 pbm->name = dp->full_name; in schizo_pbm_init()
1372 pbm->name, chipset_name, in schizo_pbm_init()
1373 pbm->chip_version, pbm->chip_revision); in schizo_pbm_init()
1375 schizo_pbm_hw_init(pbm); in schizo_pbm_init()
1377 pci_determine_mem_io_space(pbm); in schizo_pbm_init()
1379 pci_get_pbm_props(pbm); in schizo_pbm_init()
1381 err = schizo_pbm_iommu_init(pbm); in schizo_pbm_init()
1385 schizo_pbm_strbuf_init(pbm); in schizo_pbm_init()
1387 schizo_scan_bus(pbm, &op->dev); in schizo_pbm_init()
1404 struct pci_pbm_info *pbm; in schizo_find_sibling() local
1406 for (pbm = pci_pbm_root; pbm; pbm = pbm->next) { in schizo_find_sibling()
1407 if (portid_compare(pbm->portid, portid, chip_type)) in schizo_find_sibling()
1408 return pbm; in schizo_find_sibling()
1416 struct pci_pbm_info *pbm; in __schizo_init() local
1424 pbm = kzalloc(sizeof(*pbm), GFP_KERNEL); in __schizo_init()
1425 if (!pbm) { in __schizo_init()
1430 pbm->sibling = schizo_find_sibling(portid, chip_type); in __schizo_init()
1438 pbm->iommu = iommu; in __schizo_init()
1440 if (schizo_pbm_init(pbm, op, portid, chip_type)) in __schizo_init()
1443 if (pbm->sibling) in __schizo_init()
1444 pbm->sibling->sibling = pbm; in __schizo_init()
1446 dev_set_drvdata(&op->dev, pbm); in __schizo_init()
1451 kfree(pbm->iommu); in __schizo_init()
1454 kfree(pbm); in __schizo_init()