Lines Matching refs:rpc

84 static inline u32 rt3883_pci_r32(struct rt3883_pci_controller *rpc,  in rt3883_pci_r32()  argument
87 return ioread32(rpc->base + reg); in rt3883_pci_r32()
90 static inline void rt3883_pci_w32(struct rt3883_pci_controller *rpc, in rt3883_pci_w32() argument
93 iowrite32(val, rpc->base + reg); in rt3883_pci_w32()
103 static u32 rt3883_pci_read_cfg32(struct rt3883_pci_controller *rpc, in rt3883_pci_read_cfg32() argument
113 rt3883_pci_w32(rpc, address, RT3883_PCI_REG_CFGADDR); in rt3883_pci_read_cfg32()
114 ret = rt3883_pci_r32(rpc, RT3883_PCI_REG_CFGDATA); in rt3883_pci_read_cfg32()
119 static void rt3883_pci_write_cfg32(struct rt3883_pci_controller *rpc, in rt3883_pci_write_cfg32() argument
128 rt3883_pci_w32(rpc, address, RT3883_PCI_REG_CFGADDR); in rt3883_pci_write_cfg32()
129 rt3883_pci_w32(rpc, val, RT3883_PCI_REG_CFGDATA); in rt3883_pci_write_cfg32()
134 struct rt3883_pci_controller *rpc; in rt3883_pci_irq_handler() local
137 rpc = irq_desc_get_handler_data(desc); in rt3883_pci_irq_handler()
139 pending = rt3883_pci_r32(rpc, RT3883_PCI_REG_PCIINT) & in rt3883_pci_irq_handler()
140 rt3883_pci_r32(rpc, RT3883_PCI_REG_PCIENA); in rt3883_pci_irq_handler()
150 irq = irq_find_mapping(rpc->irq_domain, bit); in rt3883_pci_irq_handler()
159 struct rt3883_pci_controller *rpc; in rt3883_pci_irq_unmask() local
162 rpc = irq_data_get_irq_chip_data(d); in rt3883_pci_irq_unmask()
164 t = rt3883_pci_r32(rpc, RT3883_PCI_REG_PCIENA); in rt3883_pci_irq_unmask()
165 rt3883_pci_w32(rpc, t | BIT(d->hwirq), RT3883_PCI_REG_PCIENA); in rt3883_pci_irq_unmask()
167 rt3883_pci_r32(rpc, RT3883_PCI_REG_PCIENA); in rt3883_pci_irq_unmask()
172 struct rt3883_pci_controller *rpc; in rt3883_pci_irq_mask() local
175 rpc = irq_data_get_irq_chip_data(d); in rt3883_pci_irq_mask()
177 t = rt3883_pci_r32(rpc, RT3883_PCI_REG_PCIENA); in rt3883_pci_irq_mask()
178 rt3883_pci_w32(rpc, t & ~BIT(d->hwirq), RT3883_PCI_REG_PCIENA); in rt3883_pci_irq_mask()
180 rt3883_pci_r32(rpc, RT3883_PCI_REG_PCIENA); in rt3883_pci_irq_mask()
205 struct rt3883_pci_controller *rpc) in rt3883_pci_irq_init() argument
209 irq = irq_of_parse_and_map(rpc->intc_of_node, 0); in rt3883_pci_irq_init()
212 of_node_full_name(rpc->intc_of_node)); in rt3883_pci_irq_init()
217 rt3883_pci_w32(rpc, 0, RT3883_PCI_REG_PCIENA); in rt3883_pci_irq_init()
219 rpc->irq_domain = in rt3883_pci_irq_init()
220 irq_domain_add_linear(rpc->intc_of_node, RT3883_PCI_IRQ_COUNT, in rt3883_pci_irq_init()
222 rpc); in rt3883_pci_irq_init()
223 if (!rpc->irq_domain) { in rt3883_pci_irq_init()
228 irq_set_chained_handler_and_data(irq, rt3883_pci_irq_handler, rpc); in rt3883_pci_irq_init()
236 struct rt3883_pci_controller *rpc; in rt3883_pci_config_read() local
241 rpc = pci_bus_to_rt3883_controller(bus); in rt3883_pci_config_read()
243 if (!rpc->pcie_ready && bus->number == 1) in rt3883_pci_config_read()
249 rt3883_pci_w32(rpc, address, RT3883_PCI_REG_CFGADDR); in rt3883_pci_config_read()
250 data = rt3883_pci_r32(rpc, RT3883_PCI_REG_CFGDATA); in rt3883_pci_config_read()
270 struct rt3883_pci_controller *rpc; in rt3883_pci_config_write() local
275 rpc = pci_bus_to_rt3883_controller(bus); in rt3883_pci_config_write()
277 if (!rpc->pcie_ready && bus->number == 1) in rt3883_pci_config_write()
283 rt3883_pci_w32(rpc, address, RT3883_PCI_REG_CFGADDR); in rt3883_pci_config_write()
284 data = rt3883_pci_r32(rpc, RT3883_PCI_REG_CFGDATA); in rt3883_pci_config_write()
300 rt3883_pci_w32(rpc, data, RT3883_PCI_REG_CFGDATA); in rt3883_pci_config_write()
310 static void rt3883_pci_preinit(struct rt3883_pci_controller *rpc, unsigned mode) in rt3883_pci_preinit() argument
377 rt3883_pci_w32(rpc, t, RT3883_PCI_REG_PCICFG); in rt3883_pci_preinit()
380 rt3883_pci_r32(rpc, RT3883_PCI_REG_PCICFG); in rt3883_pci_preinit()
386 t = rt3883_pci_r32(rpc, RT3883_PCI_REG_STATUS(1)); in rt3883_pci_preinit()
388 rpc->pcie_ready = t & BIT(0); in rt3883_pci_preinit()
390 if (!rpc->pcie_ready) { in rt3883_pci_preinit()
410 rt3883_pci_w32(rpc, 0x79, RT3883_PCI_REG_ARBCTL); in rt3883_pci_preinit()
415 struct rt3883_pci_controller *rpc; in rt3883_pci_probe() local
424 rpc = devm_kzalloc(dev, sizeof(*rpc), GFP_KERNEL); in rt3883_pci_probe()
425 if (!rpc) in rt3883_pci_probe()
429 rpc->base = devm_ioremap_resource(dev, res); in rt3883_pci_probe()
430 if (IS_ERR(rpc->base)) in rt3883_pci_probe()
431 return PTR_ERR(rpc->base); in rt3883_pci_probe()
436 rpc->intc_of_node = child; in rt3883_pci_probe()
441 if (!rpc->intc_of_node) { in rt3883_pci_probe()
443 of_node_full_name(rpc->intc_of_node), in rt3883_pci_probe()
452 rpc->pci_controller.of_node = child; in rt3883_pci_probe()
457 if (!rpc->pci_controller.of_node) { in rt3883_pci_probe()
459 of_node_full_name(rpc->intc_of_node), in rt3883_pci_probe()
466 for_each_available_child_of_node(rpc->pci_controller.of_node, child) { in rt3883_pci_probe()
499 rt3883_pci_preinit(rpc, mode); in rt3883_pci_probe()
501 rpc->pci_controller.pci_ops = &rt3883_pci_ops; in rt3883_pci_probe()
502 rpc->pci_controller.io_resource = &rpc->io_res; in rt3883_pci_probe()
503 rpc->pci_controller.mem_resource = &rpc->mem_res; in rt3883_pci_probe()
506 pci_load_of_ranges(&rpc->pci_controller, in rt3883_pci_probe()
507 rpc->pci_controller.of_node); in rt3883_pci_probe()
509 rt3883_pci_w32(rpc, rpc->mem_res.start, RT3883_PCI_REG_MEMBASE); in rt3883_pci_probe()
510 rt3883_pci_w32(rpc, rpc->io_res.start, RT3883_PCI_REG_IOBASE); in rt3883_pci_probe()
512 ioport_resource.start = rpc->io_res.start; in rt3883_pci_probe()
513 ioport_resource.end = rpc->io_res.end; in rt3883_pci_probe()
516 rt3883_pci_w32(rpc, 0x03ff0000, RT3883_PCI_REG_BAR0SETUP(0)); in rt3883_pci_probe()
517 rt3883_pci_w32(rpc, RT3883_MEMORY_BASE, RT3883_PCI_REG_IMBASEBAR0(0)); in rt3883_pci_probe()
518 rt3883_pci_w32(rpc, 0x08021814, RT3883_PCI_REG_ID(0)); in rt3883_pci_probe()
519 rt3883_pci_w32(rpc, 0x00800001, RT3883_PCI_REG_CLASS(0)); in rt3883_pci_probe()
520 rt3883_pci_w32(rpc, 0x28801814, RT3883_PCI_REG_SUBID(0)); in rt3883_pci_probe()
523 rt3883_pci_w32(rpc, 0x03ff0000, RT3883_PCI_REG_BAR0SETUP(1)); in rt3883_pci_probe()
524 rt3883_pci_w32(rpc, RT3883_MEMORY_BASE, RT3883_PCI_REG_IMBASEBAR0(1)); in rt3883_pci_probe()
525 rt3883_pci_w32(rpc, 0x08021814, RT3883_PCI_REG_ID(1)); in rt3883_pci_probe()
526 rt3883_pci_w32(rpc, 0x06040001, RT3883_PCI_REG_CLASS(1)); in rt3883_pci_probe()
527 rt3883_pci_w32(rpc, 0x28801814, RT3883_PCI_REG_SUBID(1)); in rt3883_pci_probe()
529 err = rt3883_pci_irq_init(dev, rpc); in rt3883_pci_probe()
534 val = rt3883_pci_read_cfg32(rpc, 0, 0x01, 0, PCI_COMMAND); in rt3883_pci_probe()
536 rt3883_pci_write_cfg32(rpc, 0, 0x01, 0, PCI_COMMAND, val); in rt3883_pci_probe()
539 val = rt3883_pci_read_cfg32(rpc, 0, 0x00, 0, PCI_COMMAND); in rt3883_pci_probe()
541 rt3883_pci_write_cfg32(rpc, 0, 0x00, 0, PCI_COMMAND, val); in rt3883_pci_probe()
544 rt3883_pci_w32(rpc, 0x03ff0001, RT3883_PCI_REG_BAR0SETUP(0)); in rt3883_pci_probe()
545 rt3883_pci_w32(rpc, 0x03ff0001, RT3883_PCI_REG_BAR0SETUP(1)); in rt3883_pci_probe()
547 rt3883_pci_write_cfg32(rpc, 0, RT3883_P2P_BR_DEVNUM, 0, in rt3883_pci_probe()
551 rt3883_pci_read_cfg32(rpc, 0, RT3883_P2P_BR_DEVNUM, 0, in rt3883_pci_probe()
554 rt3883_pci_write_cfg32(rpc, 0, RT3883_P2P_BR_DEVNUM, 0, in rt3883_pci_probe()
558 register_pci_controller(&rpc->pci_controller); in rt3883_pci_probe()
563 of_node_put(rpc->pci_controller.of_node); in rt3883_pci_probe()
565 of_node_put(rpc->intc_of_node); in rt3883_pci_probe()