Lines Matching refs:priv
101 static int grpci1_cfg_w32(struct grpci1_priv *priv, unsigned int bus,
106 struct grpci1_priv *priv = dev->bus->sysdata; in grpci1_map_irq() local
113 return priv->irq_map[pin]; in grpci1_map_irq()
116 static int grpci1_cfg_r32(struct grpci1_priv *priv, unsigned int bus, in grpci1_cfg_r32() argument
132 cfg = REGLOAD(priv->regs->cfg_stat); in grpci1_cfg_r32()
133 REGSTORE(priv->regs->cfg_stat, (cfg & ~(0xf << 23)) | (bus << 23)); in grpci1_cfg_r32()
136 pci_conf = (u32 *) (priv->pci_conf | (devfn << 8) | (where & 0xfc)); in grpci1_cfg_r32()
140 if (REGLOAD(priv->regs->cfg_stat) & CFGSTAT_CTO) { in grpci1_cfg_r32()
143 tmp = REGLOAD(priv->regs->stat_cmd); in grpci1_cfg_r32()
144 grpci1_cfg_w32(priv, TGT, 0, PCI_COMMAND, tmp); in grpci1_cfg_r32()
153 static int grpci1_cfg_r16(struct grpci1_priv *priv, unsigned int bus, in grpci1_cfg_r16() argument
161 ret = grpci1_cfg_r32(priv, bus, devfn, where & ~0x3, &v); in grpci1_cfg_r16()
166 static int grpci1_cfg_r8(struct grpci1_priv *priv, unsigned int bus, in grpci1_cfg_r8() argument
172 ret = grpci1_cfg_r32(priv, bus, devfn, where & ~0x3, &v); in grpci1_cfg_r8()
178 static int grpci1_cfg_w32(struct grpci1_priv *priv, unsigned int bus, in grpci1_cfg_w32() argument
195 cfg = REGLOAD(priv->regs->cfg_stat); in grpci1_cfg_w32()
196 REGSTORE(priv->regs->cfg_stat, (cfg & ~(0xf << 23)) | (bus << 23)); in grpci1_cfg_w32()
198 pci_conf = (unsigned int *) (priv->pci_conf | in grpci1_cfg_w32()
205 static int grpci1_cfg_w16(struct grpci1_priv *priv, unsigned int bus, in grpci1_cfg_w16() argument
213 ret = grpci1_cfg_r32(priv, bus, devfn, where&~3, &v); in grpci1_cfg_w16()
218 return grpci1_cfg_w32(priv, bus, devfn, where & ~0x3, v); in grpci1_cfg_w16()
221 static int grpci1_cfg_w8(struct grpci1_priv *priv, unsigned int bus, in grpci1_cfg_w8() argument
227 ret = grpci1_cfg_r32(priv, bus, devfn, where & ~0x3, &v); in grpci1_cfg_w8()
232 return grpci1_cfg_w32(priv, bus, devfn, where & ~0x3, v); in grpci1_cfg_w8()
241 struct grpci1_priv *priv = grpci1priv; in grpci1_read_config() local
252 ret = grpci1_cfg_r8(priv, busno, devfn, where, val); in grpci1_read_config()
255 ret = grpci1_cfg_r16(priv, busno, devfn, where, val); in grpci1_read_config()
258 ret = grpci1_cfg_r32(priv, busno, devfn, where, val); in grpci1_read_config()
280 struct grpci1_priv *priv = grpci1priv; in grpci1_write_config() local
296 return grpci1_cfg_w8(priv, busno, devfn, where, val); in grpci1_write_config()
298 return grpci1_cfg_w16(priv, busno, devfn, where, val); in grpci1_write_config()
300 return grpci1_cfg_w32(priv, busno, devfn, where, val); in grpci1_write_config()
317 struct grpci1_priv *priv = grpci1priv; in grpci1_mask_irq() local
324 REGSTORE(priv->regs->irq, REGLOAD(priv->regs->irq) & ~(1 << irqidx)); in grpci1_mask_irq()
330 struct grpci1_priv *priv = grpci1priv; in grpci1_unmask_irq() local
337 REGSTORE(priv->regs->irq, REGLOAD(priv->regs->irq) | (1 << irqidx)); in grpci1_unmask_irq()
362 struct grpci1_priv *priv = grpci1priv; in grpci1_pci_flow_irq() local
366 irqreg = REGLOAD(priv->regs->irq); in grpci1_pci_flow_irq()
371 generic_handle_irq(priv->irq_err); in grpci1_pci_flow_irq()
380 generic_handle_irq(priv->irq_map[i]); in grpci1_pci_flow_irq()
420 static void grpci1_hw_init(struct grpci1_priv *priv) in grpci1_hw_init() argument
423 struct grpci1_regs __iomem *regs = priv->regs; in grpci1_hw_init()
426 REGSTORE(regs->cfg_stat, priv->pci_area & 0xf0000000); in grpci1_hw_init()
441 grpci1_cfg_w32(priv, TGT, 0, PCI_BASE_ADDRESS_0, 0xffffffff); in grpci1_hw_init()
442 grpci1_cfg_r32(priv, TGT, 0, PCI_BASE_ADDRESS_0, &bar_sz); in grpci1_hw_init()
444 pciadr = priv->pci_area - bar_sz; in grpci1_hw_init()
445 grpci1_cfg_w32(priv, TGT, 0, PCI_BASE_ADDRESS_0, pciadr); in grpci1_hw_init()
451 grpci1_cfg_w32(priv, TGT, 0, PCI_BASE_ADDRESS_1, ahbadr); in grpci1_hw_init()
458 grpci1_cfg_w8(priv, TGT, 0, PCI_CACHE_LINE_SIZE, 0xff); in grpci1_hw_init()
459 grpci1_cfg_w8(priv, TGT, 0, PCI_LATENCY_TIMER, 0x40); in grpci1_hw_init()
462 grpci1_cfg_r32(priv, TGT, 0, PCI_COMMAND, &data); in grpci1_hw_init()
464 grpci1_cfg_w32(priv, TGT, 0, PCI_COMMAND, data); in grpci1_hw_init()
469 struct grpci1_priv *priv = arg; in grpci1_jump_interrupt() local
470 dev_err(priv->dev, "Jump IRQ happened\n"); in grpci1_jump_interrupt()
477 struct grpci1_priv *priv = arg; in grpci1_err_interrupt() local
480 grpci1_cfg_r16(priv, TGT, 0, PCI_STATUS, &status); in grpci1_err_interrupt()
481 status &= priv->pci_err_mask; in grpci1_err_interrupt()
487 dev_err(priv->dev, "Data Parity Error\n"); in grpci1_err_interrupt()
490 dev_err(priv->dev, "Signalled Target Abort\n"); in grpci1_err_interrupt()
493 dev_err(priv->dev, "Received Target Abort\n"); in grpci1_err_interrupt()
496 dev_err(priv->dev, "Received Master Abort\n"); in grpci1_err_interrupt()
499 dev_err(priv->dev, "Signalled System Error\n"); in grpci1_err_interrupt()
502 dev_err(priv->dev, "Parity Error\n"); in grpci1_err_interrupt()
505 grpci1_cfg_w16(priv, TGT, 0, PCI_STATUS, status); in grpci1_err_interrupt()
513 struct grpci1_priv *priv; in grpci1_of_probe() local
529 priv = devm_kzalloc(&ofdev->dev, sizeof(*priv), GFP_KERNEL); in grpci1_of_probe()
530 if (!priv) { in grpci1_of_probe()
534 platform_set_drvdata(ofdev, priv); in grpci1_of_probe()
535 priv->dev = &ofdev->dev; in grpci1_of_probe()
567 priv->regs = regs; in grpci1_of_probe()
568 priv->irq = irq_of_parse_and_map(ofdev->dev.of_node, 0); in grpci1_of_probe()
569 dev_info(&ofdev->dev, "host found at 0x%p, irq%d\n", regs, priv->irq); in grpci1_of_probe()
572 priv->pci_area = ofdev->resource[1].start; in grpci1_of_probe()
573 priv->pci_area_end = ofdev->resource[1].end+1; in grpci1_of_probe()
574 priv->pci_io = ofdev->resource[2].start; in grpci1_of_probe()
575 priv->pci_conf = ofdev->resource[2].start + 0x10000; in grpci1_of_probe()
576 priv->pci_conf_end = priv->pci_conf + 0x10000; in grpci1_of_probe()
577 priv->pci_io_va = (unsigned long)ioremap(priv->pci_io, 0x10000); in grpci1_of_probe()
578 if (!priv->pci_io_va) { in grpci1_of_probe()
587 priv->pci_area, priv->pci_area_end-1, in grpci1_of_probe()
588 priv->pci_io, priv->pci_conf-1, in grpci1_of_probe()
589 priv->pci_conf, priv->pci_conf_end-1); in grpci1_of_probe()
596 priv->info.io_space.name = "GRPCI1 PCI I/O Space"; in grpci1_of_probe()
597 priv->info.io_space.start = priv->pci_io_va + 0x1000; in grpci1_of_probe()
598 priv->info.io_space.end = priv->pci_io_va + 0x10000 - 1; in grpci1_of_probe()
599 priv->info.io_space.flags = IORESOURCE_IO; in grpci1_of_probe()
605 priv->info.mem_space.name = "GRPCI1 PCI MEM Space"; in grpci1_of_probe()
606 priv->info.mem_space.start = priv->pci_area; in grpci1_of_probe()
607 priv->info.mem_space.end = priv->pci_area_end - 1; in grpci1_of_probe()
608 priv->info.mem_space.flags = IORESOURCE_MEM; in grpci1_of_probe()
610 if (request_resource(&iomem_resource, &priv->info.mem_space) < 0) { in grpci1_of_probe()
616 if (request_resource(&ioport_resource, &priv->info.io_space) < 0) { in grpci1_of_probe()
623 priv->info.busn.name = "GRPCI1 busn"; in grpci1_of_probe()
624 priv->info.busn.start = 0; in grpci1_of_probe()
625 priv->info.busn.end = 15; in grpci1_of_probe()
627 grpci1priv = priv; in grpci1_of_probe()
630 grpci1_hw_init(priv); in grpci1_of_probe()
637 leon_update_virq_handling(priv->irq, grpci1_pci_flow_irq, "pcilvl", 0); in grpci1_of_probe()
639 priv->irq_map[0] = grpci1_build_device_irq(1); in grpci1_of_probe()
640 priv->irq_map[1] = grpci1_build_device_irq(2); in grpci1_of_probe()
641 priv->irq_map[2] = grpci1_build_device_irq(3); in grpci1_of_probe()
642 priv->irq_map[3] = grpci1_build_device_irq(4); in grpci1_of_probe()
643 priv->irq_err = grpci1_build_device_irq(5); in grpci1_of_probe()
646 priv->irq_map[0], priv->irq_map[1], priv->irq_map[2], in grpci1_of_probe()
647 priv->irq_map[3]); in grpci1_of_probe()
650 err = devm_request_irq(&ofdev->dev, priv->irq, grpci1_jump_interrupt, 0, in grpci1_of_probe()
651 "GRPCI1_JUMP", priv); in grpci1_of_probe()
658 err = devm_request_irq(&ofdev->dev, priv->irq_err, in grpci1_of_probe()
660 priv); in grpci1_of_probe()
668 priv->pci_err_mask = ALL_PCI_ERRORS; in grpci1_of_probe()
671 priv->pci_err_mask = DEF_PCI_ERRORS; in grpci1_of_probe()
682 priv->info.ops = &grpci1_ops; in grpci1_of_probe()
683 priv->info.map_irq = grpci1_map_irq; in grpci1_of_probe()
684 leon_pci_init(ofdev, &priv->info); in grpci1_of_probe()
689 release_resource(&priv->info.io_space); in grpci1_of_probe()
691 release_resource(&priv->info.mem_space); in grpci1_of_probe()
693 iounmap((void __iomem *)priv->pci_io_va); in grpci1_of_probe()