mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-29 10:08:59 +00:00
ba6096d04b
OpenWRT's developer guide prefers having actual patches so they an be sent upstream more easily. However, in this case, Adding proper fields also allows for `git am` to properly function. Some of these patches are quite old, and lack much traceable history. This commit tries to rectify that, by digging in the history to find where and how it was first added. It is by no means perfect and also shows some patches that should have been long gone. Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
150 lines
4.1 KiB
Diff
150 lines
4.1 KiB
Diff
From: John Crispin <john@phrozen.org>
|
|
Subject: ath79: fix remove irq code from pci driver patch
|
|
|
|
This patch got mangled in the void while rebasing it.
|
|
|
|
Submitted-by: John Crispin <john@phrozen.org>
|
|
---
|
|
arch/mips/pci/pci-ar71xx.c | 107 ------------------
|
|
1 file changed, 141 deletions(-)
|
|
|
|
--- a/arch/mips/pci/pci-ar71xx.c
|
|
+++ b/arch/mips/pci/pci-ar71xx.c
|
|
@@ -51,11 +51,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 */
|
|
@@ -227,104 +225,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);
|
|
@@ -358,10 +258,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 */
|
|
@@ -372,8 +268,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;
|