123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- --- a/arch/mips/pci/pci-ar71xx.c
- +++ b/arch/mips/pci/pci-ar71xx.c
- @@ -54,11 +54,9 @@
- struct ar71xx_pci_controller {
- struct device_node *np;
- void __iomem *cfg_base;
- - int irq;
- struct pci_controller pci_ctrl;
- struct resource io_res;
- struct resource mem_res;
- - struct irq_domain *domain;
- };
-
- /* Byte lane enable bits */
- @@ -230,104 +228,6 @@ static struct pci_ops ar71xx_pci_ops = {
- .write = ar71xx_pci_write_config,
- };
-
- -static void ar71xx_pci_irq_handler(struct irq_desc *desc)
- -{
- - void __iomem *base = ath79_reset_base;
- - struct irq_chip *chip = irq_desc_get_chip(desc);
- - struct ar71xx_pci_controller *apc = irq_desc_get_handler_data(desc);
- - u32 pending;
- -
- - chained_irq_enter(chip, desc);
- - pending = __raw_readl(base + AR71XX_RESET_REG_PCI_INT_STATUS) &
- - __raw_readl(base + AR71XX_RESET_REG_PCI_INT_ENABLE);
- -
- - if (pending & AR71XX_PCI_INT_DEV0)
- - generic_handle_irq(irq_linear_revmap(apc->domain, 1));
- -
- - else if (pending & AR71XX_PCI_INT_DEV1)
- - generic_handle_irq(irq_linear_revmap(apc->domain, 2));
- -
- - else if (pending & AR71XX_PCI_INT_DEV2)
- - generic_handle_irq(irq_linear_revmap(apc->domain, 3));
- -
- - else if (pending & AR71XX_PCI_INT_CORE)
- - generic_handle_irq(irq_linear_revmap(apc->domain, 4));
- -
- - else
- - spurious_interrupt();
- - chained_irq_exit(chip, desc);
- -}
- -
- -static void ar71xx_pci_irq_unmask(struct irq_data *d)
- -{
- - struct ar71xx_pci_controller *apc;
- - unsigned int irq;
- - void __iomem *base = ath79_reset_base;
- - u32 t;
- -
- - apc = irq_data_get_irq_chip_data(d);
- - irq = irq_linear_revmap(apc->domain, d->irq);
- -
- - t = __raw_readl(base + AR71XX_RESET_REG_PCI_INT_ENABLE);
- - __raw_writel(t | (1 << irq), base + AR71XX_RESET_REG_PCI_INT_ENABLE);
- -
- - /* flush write */
- - __raw_readl(base + AR71XX_RESET_REG_PCI_INT_ENABLE);
- -}
- -
- -static void ar71xx_pci_irq_mask(struct irq_data *d)
- -{
- - struct ar71xx_pci_controller *apc;
- - unsigned int irq;
- - void __iomem *base = ath79_reset_base;
- - u32 t;
- -
- - apc = irq_data_get_irq_chip_data(d);
- - irq = irq_linear_revmap(apc->domain, d->irq);
- -
- - t = __raw_readl(base + AR71XX_RESET_REG_PCI_INT_ENABLE);
- - __raw_writel(t & ~(1 << irq), base + AR71XX_RESET_REG_PCI_INT_ENABLE);
- -
- - /* flush write */
- - __raw_readl(base + AR71XX_RESET_REG_PCI_INT_ENABLE);
- -}
- -
- -static struct irq_chip ar71xx_pci_irq_chip = {
- - .name = "AR71XX PCI",
- - .irq_mask = ar71xx_pci_irq_mask,
- - .irq_unmask = ar71xx_pci_irq_unmask,
- - .irq_mask_ack = ar71xx_pci_irq_mask,
- -};
- -
- -static int ar71xx_pci_irq_map(struct irq_domain *d,
- - unsigned int irq, irq_hw_number_t hw)
- -{
- - struct ar71xx_pci_controller *apc = d->host_data;
- -
- - irq_set_chip_and_handler(irq, &ar71xx_pci_irq_chip, handle_level_irq);
- - irq_set_chip_data(irq, apc);
- -
- - return 0;
- -}
- -
- -static const struct irq_domain_ops ar71xx_pci_domain_ops = {
- - .xlate = irq_domain_xlate_onecell,
- - .map = ar71xx_pci_irq_map,
- -};
- -
- -static void ar71xx_pci_irq_init(struct ar71xx_pci_controller *apc)
- -{
- - void __iomem *base = ath79_reset_base;
- -
- - __raw_writel(0, base + AR71XX_RESET_REG_PCI_INT_ENABLE);
- - __raw_writel(0, base + AR71XX_RESET_REG_PCI_INT_STATUS);
- -
- - apc->domain = irq_domain_add_linear(apc->np, AR71XX_PCI_IRQ_COUNT,
- - &ar71xx_pci_domain_ops, apc);
- - irq_set_chained_handler_and_data(apc->irq, ar71xx_pci_irq_handler,
- - apc);
- -}
- -
- static void ar71xx_pci_reset(void)
- {
- ath79_device_reset_set(AR71XX_RESET_PCI_BUS | AR71XX_RESET_PCI_CORE);
- @@ -361,10 +261,6 @@ static int ar71xx_pci_probe(struct platf
- if (IS_ERR(apc->cfg_base))
- return PTR_ERR(apc->cfg_base);
-
- - apc->irq = platform_get_irq(pdev, 0);
- - if (apc->irq < 0)
- - return -EINVAL;
- -
- ar71xx_pci_reset();
-
- /* setup COMMAND register */
- @@ -375,8 +271,6 @@ static int ar71xx_pci_probe(struct platf
- /* clear bus errors */
- ar71xx_pci_check_error(apc, 1);
-
- - ar71xx_pci_irq_init(apc);
- -
- apc->np = pdev->dev.of_node;
- apc->pci_ctrl.pci_ops = &ar71xx_pci_ops;
- apc->pci_ctrl.mem_resource = &apc->mem_res;
|