Lines Matching refs:pbm

134 	struct pci_pbm_info *pbm = dev_id;  in psycho_ue_intr()  local
135 unsigned long afsr_reg = pbm->controller_regs + PSYCHO_UE_AFSR; in psycho_ue_intr()
136 unsigned long afar_reg = pbm->controller_regs + PSYCHO_UE_AFAR; in psycho_ue_intr()
154 pbm->name, in psycho_ue_intr()
162 pbm->name, in psycho_ue_intr()
167 printk("%s: UE AFAR [%016lx]\n", pbm->name, afar); in psycho_ue_intr()
168 printk("%s: UE Secondary errors [", pbm->name); in psycho_ue_intr()
187 psycho_check_iommu_error(pbm, afsr, afar, UE_ERR); in psycho_ue_intr()
188 if (pbm->sibling) in psycho_ue_intr()
189 psycho_check_iommu_error(pbm->sibling, afsr, afar, UE_ERR); in psycho_ue_intr()
213 struct pci_pbm_info *pbm = dev_id; in psycho_ce_intr() local
214 unsigned long afsr_reg = pbm->controller_regs + PSYCHO_CE_AFSR; in psycho_ce_intr()
215 unsigned long afar_reg = pbm->controller_regs + PSYCHO_CE_AFAR; in psycho_ce_intr()
233 pbm->name, in psycho_ce_intr()
246 pbm->name, in psycho_ce_intr()
252 printk("%s: CE AFAR [%016lx]\n", pbm->name, afar); in psycho_ce_intr()
253 printk("%s: CE Secondary errors [", pbm->name); in psycho_ce_intr()
287 static void psycho_register_error_handlers(struct pci_pbm_info *pbm) in psycho_register_error_handlers() argument
289 struct platform_device *op = of_find_device_by_node(pbm->op->dev.of_node); in psycho_register_error_handlers()
290 unsigned long base = pbm->controller_regs; in psycho_register_error_handlers()
314 "PSYCHO_UE", pbm); in psycho_register_error_handlers()
316 "PSYCHO_CE", pbm); in psycho_register_error_handlers()
323 "PSYCHO_PCIERR", pbm); in psycho_register_error_handlers()
326 "err=%d\n", pbm->name, err); in psycho_register_error_handlers()
352 static void pbm_config_busmastering(struct pci_pbm_info *pbm) in pbm_config_busmastering() argument
359 addr = psycho_pci_config_mkaddr(pbm, pbm->pci_first_busno, in pbm_config_busmastering()
364 addr = psycho_pci_config_mkaddr(pbm, pbm->pci_first_busno, in pbm_config_busmastering()
369 static void psycho_scan_bus(struct pci_pbm_info *pbm, in psycho_scan_bus() argument
372 pbm_config_busmastering(pbm); in psycho_scan_bus()
373 pbm->is_66mhz_capable = 0; in psycho_scan_bus()
374 pbm->pci_bus = pci_scan_one_pbm(pbm, parent); in psycho_scan_bus()
379 psycho_register_error_handlers(pbm); in psycho_scan_bus()
394 static void psycho_controller_hwinit(struct pci_pbm_info *pbm) in psycho_controller_hwinit() argument
398 upa_writeq(5, pbm->controller_regs + PSYCHO_IRQ_RETRY); in psycho_controller_hwinit()
401 tmp = upa_readq(pbm->controller_regs + PSYCHO_PCIA_CTRL); in psycho_controller_hwinit()
403 upa_writeq(tmp, pbm->controller_regs + PSYCHO_PCIA_CTRL); in psycho_controller_hwinit()
405 tmp = upa_readq(pbm->controller_regs + PSYCHO_PCIB_CTRL); in psycho_controller_hwinit()
407 upa_writeq(tmp, pbm->controller_regs + PSYCHO_PCIB_CTRL); in psycho_controller_hwinit()
413 tmp = upa_readq(pbm->controller_regs + PSYCHO_PCIA_DIAG); in psycho_controller_hwinit()
415 upa_writeq(tmp, pbm->controller_regs + PSYCHO_PCIA_DIAG); in psycho_controller_hwinit()
417 tmp = upa_readq(pbm->controller_regs + PSYCHO_PCIB_DIAG); in psycho_controller_hwinit()
419 upa_writeq(tmp, pbm->controller_regs + PSYCHO_PCIB_DIAG); in psycho_controller_hwinit()
422 static void psycho_pbm_strbuf_init(struct pci_pbm_info *pbm, in psycho_pbm_strbuf_init() argument
425 unsigned long base = pbm->controller_regs; in psycho_pbm_strbuf_init()
429 pbm->stc.strbuf_control = base + PSYCHO_STRBUF_CONTROL_A; in psycho_pbm_strbuf_init()
430 pbm->stc.strbuf_pflush = base + PSYCHO_STRBUF_FLUSH_A; in psycho_pbm_strbuf_init()
431 pbm->stc.strbuf_fsync = base + PSYCHO_STRBUF_FSYNC_A; in psycho_pbm_strbuf_init()
432 pbm->stc.strbuf_err_stat = base + PSYCHO_STC_ERR_A; in psycho_pbm_strbuf_init()
433 pbm->stc.strbuf_tag_diag = base + PSYCHO_STC_TAG_A; in psycho_pbm_strbuf_init()
434 pbm->stc.strbuf_line_diag= base + PSYCHO_STC_LINE_A; in psycho_pbm_strbuf_init()
436 pbm->stc.strbuf_control = base + PSYCHO_STRBUF_CONTROL_B; in psycho_pbm_strbuf_init()
437 pbm->stc.strbuf_pflush = base + PSYCHO_STRBUF_FLUSH_B; in psycho_pbm_strbuf_init()
438 pbm->stc.strbuf_fsync = base + PSYCHO_STRBUF_FSYNC_B; in psycho_pbm_strbuf_init()
439 pbm->stc.strbuf_err_stat = base + PSYCHO_STC_ERR_B; in psycho_pbm_strbuf_init()
440 pbm->stc.strbuf_tag_diag = base + PSYCHO_STC_TAG_B; in psycho_pbm_strbuf_init()
441 pbm->stc.strbuf_line_diag= base + PSYCHO_STC_LINE_B; in psycho_pbm_strbuf_init()
444 pbm->stc.strbuf_ctxflush = 0; in psycho_pbm_strbuf_init()
445 pbm->stc.strbuf_ctxmatch_base = 0; in psycho_pbm_strbuf_init()
447 pbm->stc.strbuf_flushflag = (volatile unsigned long *) in psycho_pbm_strbuf_init()
448 ((((unsigned long)&pbm->stc.__flushflag_buf[0]) in psycho_pbm_strbuf_init()
451 pbm->stc.strbuf_flushflag_pa = (unsigned long) in psycho_pbm_strbuf_init()
452 __pa(pbm->stc.strbuf_flushflag); in psycho_pbm_strbuf_init()
464 control = upa_readq(pbm->stc.strbuf_control); in psycho_pbm_strbuf_init()
474 upa_writeq(control, pbm->stc.strbuf_control); in psycho_pbm_strbuf_init()
476 pbm->stc.strbuf_enabled = 1; in psycho_pbm_strbuf_init()
486 static void psycho_pbm_init(struct pci_pbm_info *pbm, in psycho_pbm_init() argument
489 psycho_pbm_init_common(pbm, op, "PSYCHO", PBM_CHIP_TYPE_PSYCHO); in psycho_pbm_init()
490 psycho_pbm_strbuf_init(pbm, is_pbm_a); in psycho_pbm_init()
491 psycho_scan_bus(pbm, &op->dev); in psycho_pbm_init()
496 struct pci_pbm_info *pbm; in psycho_find_sibling() local
498 for (pbm = pci_pbm_root; pbm; pbm = pbm->next) { in psycho_find_sibling()
499 if (pbm->portid == upa_portid) in psycho_find_sibling()
500 return pbm; in psycho_find_sibling()
511 struct pci_pbm_info *pbm; in psycho_probe() local
519 pbm = kzalloc(sizeof(*pbm), GFP_KERNEL); in psycho_probe()
520 if (!pbm) { in psycho_probe()
525 pbm->sibling = psycho_find_sibling(upa_portid); in psycho_probe()
526 if (pbm->sibling) { in psycho_probe()
527 iommu = pbm->sibling->iommu; in psycho_probe()
536 pbm->iommu = iommu; in psycho_probe()
537 pbm->portid = upa_portid; in psycho_probe()
548 pbm->controller_regs = pr_regs[2].phys_addr; in psycho_probe()
549 pbm->config_space = (pr_regs[2].phys_addr + PSYCHO_CONFIGSPACE); in psycho_probe()
552 pbm->pci_afsr = pbm->controller_regs + PSYCHO_PCI_AFSR_A; in psycho_probe()
553 pbm->pci_afar = pbm->controller_regs + PSYCHO_PCI_AFAR_A; in psycho_probe()
554 pbm->pci_csr = pbm->controller_regs + PSYCHO_PCIA_CTRL; in psycho_probe()
556 pbm->pci_afsr = pbm->controller_regs + PSYCHO_PCI_AFSR_B; in psycho_probe()
557 pbm->pci_afar = pbm->controller_regs + PSYCHO_PCI_AFAR_B; in psycho_probe()
558 pbm->pci_csr = pbm->controller_regs + PSYCHO_PCIB_CTRL; in psycho_probe()
561 psycho_controller_hwinit(pbm); in psycho_probe()
562 if (!pbm->sibling) { in psycho_probe()
563 err = psycho_iommu_init(pbm, 128, 0xc0000000, in psycho_probe()
570 starfire_hookup(pbm->portid); in psycho_probe()
573 psycho_pbm_init(pbm, op, is_pbm_a); in psycho_probe()
575 pbm->next = pci_pbm_root; in psycho_probe()
576 pci_pbm_root = pbm; in psycho_probe()
578 if (pbm->sibling) in psycho_probe()
579 pbm->sibling->sibling = pbm; in psycho_probe()
581 dev_set_drvdata(&op->dev, pbm); in psycho_probe()
586 if (!pbm->sibling) in psycho_probe()
587 kfree(pbm->iommu); in psycho_probe()
590 kfree(pbm); in psycho_probe()