Lines Matching refs:apc
177 static inline u32 ar2315_pci_reg_read(struct ar2315_pci_ctrl *apc, u32 reg) in ar2315_pci_reg_read() argument
179 return __raw_readl(apc->mmr_mem + reg); in ar2315_pci_reg_read()
182 static inline void ar2315_pci_reg_write(struct ar2315_pci_ctrl *apc, u32 reg, in ar2315_pci_reg_write() argument
185 __raw_writel(val, apc->mmr_mem + reg); in ar2315_pci_reg_write()
188 static inline void ar2315_pci_reg_mask(struct ar2315_pci_ctrl *apc, u32 reg, in ar2315_pci_reg_mask() argument
191 u32 ret = ar2315_pci_reg_read(apc, reg); in ar2315_pci_reg_mask()
195 ar2315_pci_reg_write(apc, reg, ret); in ar2315_pci_reg_mask()
198 static int ar2315_pci_cfg_access(struct ar2315_pci_ctrl *apc, unsigned devfn, in ar2315_pci_cfg_access() argument
213 ar2315_pci_reg_write(apc, AR2315_PCI_ISR, AR2315_PCI_INT_ABORT); in ar2315_pci_cfg_access()
215 ar2315_pci_reg_mask(apc, AR2315_PCI_MISC_CONFIG, 0, in ar2315_pci_cfg_access()
220 value = __raw_readl(apc->cfg_mem + addr); in ar2315_pci_cfg_access()
222 isr = ar2315_pci_reg_read(apc, AR2315_PCI_ISR); in ar2315_pci_cfg_access()
229 __raw_writel(value, apc->cfg_mem + addr); in ar2315_pci_cfg_access()
230 isr = ar2315_pci_reg_read(apc, AR2315_PCI_ISR); in ar2315_pci_cfg_access()
240 ar2315_pci_reg_write(apc, AR2315_PCI_ISR, AR2315_PCI_INT_ABORT); in ar2315_pci_cfg_access()
246 ar2315_pci_reg_mask(apc, AR2315_PCI_MISC_CONFIG, AR2315_PCIMISC_CFG_SEL, in ar2315_pci_cfg_access()
253 static inline int ar2315_pci_local_cfg_rd(struct ar2315_pci_ctrl *apc, in ar2315_pci_local_cfg_rd() argument
256 return ar2315_pci_cfg_access(apc, devfn, where, sizeof(u32), val, in ar2315_pci_local_cfg_rd()
260 static inline int ar2315_pci_local_cfg_wr(struct ar2315_pci_ctrl *apc, in ar2315_pci_local_cfg_wr() argument
263 return ar2315_pci_cfg_access(apc, devfn, where, sizeof(u32), &val, in ar2315_pci_local_cfg_wr()
270 struct ar2315_pci_ctrl *apc = ar2315_pci_bus_to_apc(bus); in ar2315_pci_cfg_read() local
275 return ar2315_pci_cfg_access(apc, devfn, where, size, value, false); in ar2315_pci_cfg_read()
281 struct ar2315_pci_ctrl *apc = ar2315_pci_bus_to_apc(bus); in ar2315_pci_cfg_write() local
286 return ar2315_pci_cfg_access(apc, devfn, where, size, &value, true); in ar2315_pci_cfg_write()
294 static int ar2315_pci_host_setup(struct ar2315_pci_ctrl *apc) in ar2315_pci_host_setup() argument
300 res = ar2315_pci_local_cfg_rd(apc, devfn, PCI_VENDOR_ID, &id); in ar2315_pci_host_setup()
305 ar2315_pci_local_cfg_wr(apc, devfn, PCI_BASE_ADDRESS_0, in ar2315_pci_host_setup()
307 ar2315_pci_local_cfg_wr(apc, devfn, PCI_BASE_ADDRESS_1, in ar2315_pci_host_setup()
309 ar2315_pci_local_cfg_wr(apc, devfn, PCI_BASE_ADDRESS_2, in ar2315_pci_host_setup()
313 ar2315_pci_local_cfg_wr(apc, devfn, PCI_COMMAND, PCI_COMMAND_MEMORY | in ar2315_pci_host_setup()
323 struct ar2315_pci_ctrl *apc = irq_get_handler_data(irq); in ar2315_pci_irq_handler() local
324 u32 pending = ar2315_pci_reg_read(apc, AR2315_PCI_ISR) & in ar2315_pci_irq_handler()
325 ar2315_pci_reg_read(apc, AR2315_PCI_IMR); in ar2315_pci_irq_handler()
329 pci_irq = irq_find_mapping(apc->domain, __ffs(pending)); in ar2315_pci_irq_handler()
339 struct ar2315_pci_ctrl *apc = irq_data_get_irq_chip_data(d); in ar2315_pci_irq_mask() local
341 ar2315_pci_reg_mask(apc, AR2315_PCI_IMR, BIT(d->hwirq), 0); in ar2315_pci_irq_mask()
346 struct ar2315_pci_ctrl *apc = irq_data_get_irq_chip_data(d); in ar2315_pci_irq_mask_ack() local
349 ar2315_pci_reg_mask(apc, AR2315_PCI_IMR, m, 0); in ar2315_pci_irq_mask_ack()
350 ar2315_pci_reg_write(apc, AR2315_PCI_ISR, m); in ar2315_pci_irq_mask_ack()
355 struct ar2315_pci_ctrl *apc = irq_data_get_irq_chip_data(d); in ar2315_pci_irq_unmask() local
357 ar2315_pci_reg_mask(apc, AR2315_PCI_IMR, 0, BIT(d->hwirq)); in ar2315_pci_irq_unmask()
379 static void ar2315_pci_irq_init(struct ar2315_pci_ctrl *apc) in ar2315_pci_irq_init() argument
381 ar2315_pci_reg_mask(apc, AR2315_PCI_IER, AR2315_PCI_IER_ENABLE, 0); in ar2315_pci_irq_init()
382 ar2315_pci_reg_mask(apc, AR2315_PCI_IMR, (AR2315_PCI_INT_ABORT | in ar2315_pci_irq_init()
385 apc->irq_ext = irq_create_mapping(apc->domain, AR2315_PCI_IRQ_EXT); in ar2315_pci_irq_init()
387 irq_set_chained_handler(apc->irq, ar2315_pci_irq_handler); in ar2315_pci_irq_init()
388 irq_set_handler_data(apc->irq, apc); in ar2315_pci_irq_init()
392 ar2315_pci_reg_write(apc, AR2315_PCI_ISR, AR2315_PCI_INT_ABORT | in ar2315_pci_irq_init()
394 ar2315_pci_reg_mask(apc, AR2315_PCI_IER, 0, AR2315_PCI_IER_ENABLE); in ar2315_pci_irq_init()
399 struct ar2315_pci_ctrl *apc; in ar2315_pci_probe() local
404 apc = devm_kzalloc(dev, sizeof(*apc), GFP_KERNEL); in ar2315_pci_probe()
405 if (!apc) in ar2315_pci_probe()
411 apc->irq = irq; in ar2315_pci_probe()
415 apc->mmr_mem = devm_ioremap_resource(dev, res); in ar2315_pci_probe()
416 if (IS_ERR(apc->mmr_mem)) in ar2315_pci_probe()
417 return PTR_ERR(apc->mmr_mem); in ar2315_pci_probe()
424 apc->mem_res.name = "AR2315 PCI mem space"; in ar2315_pci_probe()
425 apc->mem_res.parent = res; in ar2315_pci_probe()
426 apc->mem_res.start = res->start; in ar2315_pci_probe()
427 apc->mem_res.end = res->end; in ar2315_pci_probe()
428 apc->mem_res.flags = IORESOURCE_MEM; in ar2315_pci_probe()
431 apc->cfg_mem = devm_ioremap_nocache(dev, res->start, in ar2315_pci_probe()
433 if (!apc->cfg_mem) { in ar2315_pci_probe()
439 ar2315_pci_reg_mask(apc, AR2315_PCI_MISC_CONFIG, in ar2315_pci_probe()
445 ar2315_pci_reg_mask(apc, AR2315_PCI_MISC_CONFIG, in ar2315_pci_probe()
449 ar2315_pci_reg_write(apc, AR2315_PCI_UNCACHE_CFG, in ar2315_pci_probe()
453 ar2315_pci_reg_read(apc, AR2315_PCI_UNCACHE_CFG); in ar2315_pci_probe()
457 err = ar2315_pci_host_setup(apc); in ar2315_pci_probe()
461 apc->domain = irq_domain_add_linear(NULL, AR2315_PCI_IRQ_COUNT, in ar2315_pci_probe()
462 &ar2315_pci_irq_domain_ops, apc); in ar2315_pci_probe()
463 if (!apc->domain) { in ar2315_pci_probe()
468 ar2315_pci_irq_init(apc); in ar2315_pci_probe()
471 apc->io_res.name = "AR2315 IO space"; in ar2315_pci_probe()
472 apc->io_res.start = 0; in ar2315_pci_probe()
473 apc->io_res.end = 0; in ar2315_pci_probe()
474 apc->io_res.flags = IORESOURCE_IO, in ar2315_pci_probe()
476 apc->pci_ctrl.pci_ops = &ar2315_pci_ops; in ar2315_pci_probe()
477 apc->pci_ctrl.mem_resource = &apc->mem_res, in ar2315_pci_probe()
478 apc->pci_ctrl.io_resource = &apc->io_res, in ar2315_pci_probe()
480 register_pci_controller(&apc->pci_ctrl); in ar2315_pci_probe()
502 struct ar2315_pci_ctrl *apc = ar2315_pci_bus_to_apc(dev->bus); in pcibios_map_irq() local
504 return slot ? 0 : apc->irq_ext; in pcibios_map_irq()