Lines Matching refs:priv
223 struct grpci2_priv *priv = dev->bus->sysdata; in grpci2_map_irq() local
230 return priv->irq_map[pin]; in grpci2_map_irq()
233 static int grpci2_cfg_r32(struct grpci2_priv *priv, unsigned int bus, in grpci2_cfg_r32() argument
252 REGSTORE(priv->regs->ctrl, (REGLOAD(priv->regs->ctrl) & ~(0xff << 16)) | in grpci2_cfg_r32()
257 REGSTORE(priv->regs->sts_cap, (STS_CFGERR | STS_CFGERRVALID)); in grpci2_cfg_r32()
259 pci_conf = (unsigned int *) (priv->pci_conf | in grpci2_cfg_r32()
266 while ((REGLOAD(priv->regs->sts_cap) & STS_CFGERRVALID) == 0) in grpci2_cfg_r32()
269 if (REGLOAD(priv->regs->sts_cap) & STS_CFGERR) { in grpci2_cfg_r32()
279 static int grpci2_cfg_r16(struct grpci2_priv *priv, unsigned int bus, in grpci2_cfg_r16() argument
287 ret = grpci2_cfg_r32(priv, bus, devfn, where & ~0x3, &v); in grpci2_cfg_r16()
292 static int grpci2_cfg_r8(struct grpci2_priv *priv, unsigned int bus, in grpci2_cfg_r8() argument
298 ret = grpci2_cfg_r32(priv, bus, devfn, where & ~0x3, &v); in grpci2_cfg_r8()
304 static int grpci2_cfg_w32(struct grpci2_priv *priv, unsigned int bus, in grpci2_cfg_w32() argument
322 REGSTORE(priv->regs->ctrl, (REGLOAD(priv->regs->ctrl) & ~(0xff << 16)) | in grpci2_cfg_w32()
327 REGSTORE(priv->regs->sts_cap, (STS_CFGERR | STS_CFGERRVALID)); in grpci2_cfg_w32()
329 pci_conf = (unsigned int *) (priv->pci_conf | in grpci2_cfg_w32()
336 while ((REGLOAD(priv->regs->sts_cap) & STS_CFGERRVALID) == 0) in grpci2_cfg_w32()
342 static int grpci2_cfg_w16(struct grpci2_priv *priv, unsigned int bus, in grpci2_cfg_w16() argument
350 ret = grpci2_cfg_r32(priv, bus, devfn, where&~3, &v); in grpci2_cfg_w16()
355 return grpci2_cfg_w32(priv, bus, devfn, where & ~0x3, v); in grpci2_cfg_w16()
358 static int grpci2_cfg_w8(struct grpci2_priv *priv, unsigned int bus, in grpci2_cfg_w8() argument
364 ret = grpci2_cfg_r32(priv, bus, devfn, where & ~0x3, &v); in grpci2_cfg_w8()
369 return grpci2_cfg_w32(priv, bus, devfn, where & ~0x3, v); in grpci2_cfg_w8()
378 struct grpci2_priv *priv = grpci2priv; in grpci2_read_config() local
389 ret = grpci2_cfg_r8(priv, busno, devfn, where, val); in grpci2_read_config()
392 ret = grpci2_cfg_r16(priv, busno, devfn, where, val); in grpci2_read_config()
395 ret = grpci2_cfg_r32(priv, busno, devfn, where, val); in grpci2_read_config()
417 struct grpci2_priv *priv = grpci2priv; in grpci2_write_config() local
433 return grpci2_cfg_w8(priv, busno, devfn, where, val); in grpci2_write_config()
435 return grpci2_cfg_w16(priv, busno, devfn, where, val); in grpci2_write_config()
437 return grpci2_cfg_w32(priv, busno, devfn, where, val); in grpci2_write_config()
455 struct grpci2_priv *priv = grpci2priv; in grpci2_mask_irq() local
462 REGSTORE(priv->regs->ctrl, REGLOAD(priv->regs->ctrl) & ~(1 << irqidx)); in grpci2_mask_irq()
470 struct grpci2_priv *priv = grpci2priv; in grpci2_unmask_irq() local
477 REGSTORE(priv->regs->ctrl, REGLOAD(priv->regs->ctrl) | (1 << irqidx)); in grpci2_unmask_irq()
503 struct grpci2_priv *priv = grpci2priv; in grpci2_pci_flow_irq() local
507 ctrl = REGLOAD(priv->regs->ctrl); in grpci2_pci_flow_irq()
508 sts_cap = REGLOAD(priv->regs->sts_cap); in grpci2_pci_flow_irq()
512 generic_handle_irq(priv->virq_err); in grpci2_pci_flow_irq()
522 generic_handle_irq(priv->irq_map[i]); in grpci2_pci_flow_irq()
532 if ((priv->irq_mode == 0) && (sts_cap & (STS_IDMA | STS_IDMAERR))) { in grpci2_pci_flow_irq()
533 generic_handle_irq(priv->virq_dma); in grpci2_pci_flow_irq()
564 static void grpci2_hw_init(struct grpci2_priv *priv) in grpci2_hw_init() argument
567 struct grpci2_regs __iomem *regs = priv->regs; in grpci2_hw_init()
569 struct grpci2_barcfg *barcfg = priv->tgtbars; in grpci2_hw_init()
572 if (priv->do_reset) { in grpci2_hw_init()
589 REGSTORE(regs->ahbmst_map[i], priv->pci_area); in grpci2_hw_init()
592 grpci2_cfg_r32(priv, TGT, 0, PCI_VENDOR_ID, &priv->pciid); in grpci2_hw_init()
595 grpci2_cfg_r8(priv, TGT, 0, PCI_CAPABILITY_LIST, &capptr); in grpci2_hw_init()
598 grpci2_cfg_r32(priv, TGT, 0, capptr+CAP9_IOMAP_OFS, &io_map); in grpci2_hw_init()
599 io_map = (io_map & ~0x1) | (priv->bt_enabled ? 1 : 0); in grpci2_hw_init()
600 grpci2_cfg_w32(priv, TGT, 0, capptr+CAP9_IOMAP_OFS, io_map); in grpci2_hw_init()
631 grpci2_cfg_w32(priv, TGT, 0, capptr+CAP9_BARSIZE_OFS+i*4, in grpci2_hw_init()
633 grpci2_cfg_w32(priv, TGT, 0, PCI_BASE_ADDRESS_0+i*4, pciadr); in grpci2_hw_init()
634 grpci2_cfg_w32(priv, TGT, 0, capptr+CAP9_BAR_OFS+i*4, ahbadr); in grpci2_hw_init()
640 grpci2_cfg_r32(priv, TGT, 0, PCI_COMMAND, &data); in grpci2_hw_init()
642 grpci2_cfg_w32(priv, TGT, 0, PCI_COMMAND, data); in grpci2_hw_init()
657 struct grpci2_priv *priv = arg; in grpci2_err_interrupt() local
658 struct grpci2_regs __iomem *regs = priv->regs; in grpci2_err_interrupt()
686 struct grpci2_priv *priv; in grpci2_of_probe() local
721 priv = grpci2priv = kzalloc(sizeof(struct grpci2_priv), GFP_KERNEL); in grpci2_of_probe()
726 priv->regs = regs; in grpci2_of_probe()
727 priv->irq = ofdev->archdata.irqs[0]; /* BASE IRQ */ in grpci2_of_probe()
728 priv->irq_mode = (capability & STS_IRQMODE) >> STS_IRQMODE_BIT; in grpci2_of_probe()
730 printk(KERN_INFO "GRPCI2: host found at %p, irq%d\n", regs, priv->irq); in grpci2_of_probe()
733 priv->bt_enabled = 1; in grpci2_of_probe()
738 memcpy(priv->tgtbars, tmp, 2*4*6); in grpci2_of_probe()
740 memset(priv->tgtbars, -1, 2*4*6); in grpci2_of_probe()
745 priv->do_reset = *tmp; in grpci2_of_probe()
747 priv->irq_mask = 0xf; in grpci2_of_probe()
752 priv->do_reset = *tmp; in grpci2_of_probe()
754 priv->do_reset = 0; in grpci2_of_probe()
757 priv->pci_area = ofdev->resource[1].start; in grpci2_of_probe()
758 priv->pci_area_end = ofdev->resource[1].end+1; in grpci2_of_probe()
759 priv->pci_io = ofdev->resource[2].start; in grpci2_of_probe()
760 priv->pci_conf = ofdev->resource[2].start + 0x10000; in grpci2_of_probe()
761 priv->pci_conf_end = priv->pci_conf + 0x10000; in grpci2_of_probe()
762 priv->pci_io_va = (unsigned long)ioremap(priv->pci_io, 0x10000); in grpci2_of_probe()
763 if (!priv->pci_io_va) { in grpci2_of_probe()
772 priv->pci_area, priv->pci_area_end-1, in grpci2_of_probe()
773 priv->pci_io, priv->pci_conf-1, in grpci2_of_probe()
774 priv->pci_conf, priv->pci_conf_end-1); in grpci2_of_probe()
781 memset(&priv->info.io_space, 0, sizeof(struct resource)); in grpci2_of_probe()
782 priv->info.io_space.name = "GRPCI2 PCI I/O Space"; in grpci2_of_probe()
783 priv->info.io_space.start = priv->pci_io_va + 0x1000; in grpci2_of_probe()
784 priv->info.io_space.end = priv->pci_io_va + 0x10000 - 1; in grpci2_of_probe()
785 priv->info.io_space.flags = IORESOURCE_IO; in grpci2_of_probe()
791 memset(&priv->info.mem_space, 0, sizeof(struct resource)); in grpci2_of_probe()
792 priv->info.mem_space.name = "GRPCI2 PCI MEM Space"; in grpci2_of_probe()
793 priv->info.mem_space.start = priv->pci_area; in grpci2_of_probe()
794 priv->info.mem_space.end = priv->pci_area_end - 1; in grpci2_of_probe()
795 priv->info.mem_space.flags = IORESOURCE_MEM; in grpci2_of_probe()
797 if (request_resource(&iomem_resource, &priv->info.mem_space) < 0) in grpci2_of_probe()
799 if (request_resource(&ioport_resource, &priv->info.io_space) < 0) in grpci2_of_probe()
803 priv->info.busn.name = "GRPCI2 busn"; in grpci2_of_probe()
804 priv->info.busn.start = 0; in grpci2_of_probe()
805 priv->info.busn.end = 255; in grpci2_of_probe()
807 grpci2_hw_init(priv); in grpci2_of_probe()
813 if (priv->irq_mode < 2) { in grpci2_of_probe()
815 leon_update_virq_handling(priv->irq, grpci2_pci_flow_irq, in grpci2_of_probe()
818 priv->irq_map[0] = grpci2_build_device_irq(1); in grpci2_of_probe()
819 priv->irq_map[1] = grpci2_build_device_irq(2); in grpci2_of_probe()
820 priv->irq_map[2] = grpci2_build_device_irq(3); in grpci2_of_probe()
821 priv->irq_map[3] = grpci2_build_device_irq(4); in grpci2_of_probe()
823 priv->virq_err = grpci2_build_device_irq(5); in grpci2_of_probe()
824 if (priv->irq_mode & 1) in grpci2_of_probe()
825 priv->virq_dma = ofdev->archdata.irqs[1]; in grpci2_of_probe()
827 priv->virq_dma = grpci2_build_device_irq(6); in grpci2_of_probe()
830 err = request_irq(priv->irq, grpci2_jump_interrupt, 0, in grpci2_of_probe()
831 "GRPCI2_JUMP", priv); in grpci2_of_probe()
841 priv->irq_map[i] = ofdev->archdata.irqs[i]; in grpci2_of_probe()
843 priv->virq_err = priv->irq_map[0]; in grpci2_of_probe()
844 if (priv->irq_mode & 1) in grpci2_of_probe()
845 priv->virq_dma = ofdev->archdata.irqs[4]; in grpci2_of_probe()
847 priv->virq_dma = priv->irq_map[0]; in grpci2_of_probe()
850 REGSTORE(regs->ctrl, REGLOAD(regs->ctrl)|(priv->irq_mask&0xf)); in grpci2_of_probe()
854 err = request_irq(priv->virq_err, grpci2_err_interrupt, IRQF_SHARED, in grpci2_of_probe()
855 "GRPCI2_ERR", priv); in grpci2_of_probe()
868 priv->info.ops = &grpci2_ops; in grpci2_of_probe()
869 priv->info.map_irq = grpci2_map_irq; in grpci2_of_probe()
870 leon_pci_init(ofdev, &priv->info); in grpci2_of_probe()
875 release_resource(&priv->info.io_space); in grpci2_of_probe()
877 release_resource(&priv->info.mem_space); in grpci2_of_probe()
880 iounmap((void __iomem *)priv->pci_io_va); in grpci2_of_probe()
882 kfree(priv); in grpci2_of_probe()