mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 05:54:26 -04:00 
			
		
		
		
	Refreshed all patches. Removed upstreamed patches: - 037-v4.18-0008-ARM-dts-BCM5301x-Fix-i2c-controller-interrupt-type.patch Compile-tested on: cns3xxx, imx6 Runtime-tested on: cns3xxx, imx6 Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
		
			
				
	
	
		
			140 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- 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;
 |