sh: legacy PCI evt2irq migration.
This converts over the legacy PCI IRQs to evt2irq() backed hwirq lookups. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
parent
9f38045643
commit
58796ce67a
9 changed files with 53 additions and 38 deletions
|
@ -14,6 +14,7 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
|
#include <linux/sh_intc.h>
|
||||||
#include "pci-sh4.h"
|
#include "pci-sh4.h"
|
||||||
|
|
||||||
#define PCIMCR_MRSET_OFF 0xBFFFFFFF
|
#define PCIMCR_MRSET_OFF 0xBFFFFFFF
|
||||||
|
@ -27,7 +28,7 @@ int pcibios_map_platform_irq(const struct pci_dev *pdev, u8 slot, u8 pin)
|
||||||
* slot2: pin1-4 = irq7,8,5,6
|
* slot2: pin1-4 = irq7,8,5,6
|
||||||
* slot3: pin1-4 = irq8,5,6,7
|
* slot3: pin1-4 = irq8,5,6,7
|
||||||
*/
|
*/
|
||||||
int irq = ((slot + pin - 1) & 0x3) + 5;
|
int irq = ((slot + pin - 1) & 0x3) + evt2irq(0x2a0);
|
||||||
|
|
||||||
if ((slot | (pin - 1)) > 0x3) {
|
if ((slot | (pin - 1)) > 0x3) {
|
||||||
printk(KERN_WARNING "PCI: Bad IRQ mapping request for slot %d pin %c\n",
|
printk(KERN_WARNING "PCI: Bad IRQ mapping request for slot %d pin %c\n",
|
||||||
|
|
|
@ -12,13 +12,10 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
#include <linux/sh_intc.h>
|
||||||
#include "pci-sh4.h"
|
#include "pci-sh4.h"
|
||||||
|
|
||||||
static char irq_tab[] __initdata = {
|
|
||||||
65, 66, 67, 68,
|
|
||||||
};
|
|
||||||
|
|
||||||
int __init pcibios_map_platform_irq(const struct pci_dev *pdev, u8 slot, u8 pin)
|
int __init pcibios_map_platform_irq(const struct pci_dev *pdev, u8 slot, u8 pin)
|
||||||
{
|
{
|
||||||
return irq_tab[slot];
|
return evt2irq(0xa20) + slot;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,18 +13,28 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
#include <linux/sh_intc.h>
|
||||||
#include "pci-sh4.h"
|
#include "pci-sh4.h"
|
||||||
|
|
||||||
|
#define IRQ_INTA evt2irq(0xa20)
|
||||||
|
#define IRQ_INTB evt2irq(0xa40)
|
||||||
|
#define IRQ_INTC evt2irq(0xa60)
|
||||||
|
#define IRQ_INTD evt2irq(0xa80)
|
||||||
|
|
||||||
/* IDSEL [16][17][18][19][20][21][22][23][24][25][26][27][28][29][30][31] */
|
/* IDSEL [16][17][18][19][20][21][22][23][24][25][26][27][28][29][30][31] */
|
||||||
static char sdk7780_irq_tab[4][16] __initdata = {
|
static char sdk7780_irq_tab[4][16] __initdata = {
|
||||||
/* INTA */
|
/* INTA */
|
||||||
{ 65, 68, 67, 68, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
|
{ IRQ_INTA, IRQ_INTD, IRQ_INTC, IRQ_INTD, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1 },
|
||||||
/* INTB */
|
/* INTB */
|
||||||
{ 66, 65, -1, 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
|
{ IRQ_INTB, IRQ_INTA, -1, IRQ_INTA, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1 },
|
||||||
/* INTC */
|
/* INTC */
|
||||||
{ 67, 66, -1, 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
|
{ IRQ_INTC, IRQ_INTB, -1, IRQ_INTB, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1 },
|
||||||
/* INTD */
|
/* INTD */
|
||||||
{ 68, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
|
{ IRQ_INTD, IRQ_INTC, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1 },
|
||||||
};
|
};
|
||||||
|
|
||||||
int __init pcibios_map_platform_irq(const struct pci_dev *pdev, u8 slot, u8 pin)
|
int __init pcibios_map_platform_irq(const struct pci_dev *pdev, u8 slot, u8 pin)
|
||||||
|
|
|
@ -4,13 +4,14 @@
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
#include <linux/sh_intc.h>
|
||||||
#include "pci-sh4.h"
|
#include "pci-sh4.h"
|
||||||
|
|
||||||
int __init pcibios_map_platform_irq(const struct pci_dev *, u8 slot, u8 pin)
|
int __init pcibios_map_platform_irq(const struct pci_dev *, u8 slot, u8 pin)
|
||||||
{
|
{
|
||||||
switch (slot) {
|
switch (slot) {
|
||||||
case 0: return 13;
|
case 0: return evt2irq(0x3a0);
|
||||||
case 1: return 13; /* AMD Ethernet controller */
|
case 1: return evt2irq(0x3a0); /* AMD Ethernet controller */
|
||||||
case 2: return -1;
|
case 2: return -1;
|
||||||
case 3: return -1;
|
case 3: return -1;
|
||||||
case 4: return -1;
|
case 4: return -1;
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
|
#include <linux/sh_intc.h>
|
||||||
|
|
||||||
int __init pcibios_map_platform_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
int __init pcibios_map_platform_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||||
{
|
{
|
||||||
|
@ -9,21 +10,21 @@ int __init pcibios_map_platform_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||||
|
|
||||||
if (dev->bus->number == 0) {
|
if (dev->bus->number == 0) {
|
||||||
switch (slot) {
|
switch (slot) {
|
||||||
case 4: return 5; /* eth0 */
|
case 4: return evt2irq(0x2a0); /* eth0 */
|
||||||
case 8: return 5; /* eth1 */
|
case 8: return evt2irq(0x2a0); /* eth1 */
|
||||||
case 6: return 2; /* PCI bridge */
|
case 6: return evt2irq(0x240); /* PCI bridge */
|
||||||
default:
|
default:
|
||||||
printk(KERN_ERR "PCI: Bad IRQ mapping request "
|
printk(KERN_ERR "PCI: Bad IRQ mapping request "
|
||||||
"for slot %d\n", slot);
|
"for slot %d\n", slot);
|
||||||
return 2;
|
return evt2irq(0x240);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch (pin) {
|
switch (pin) {
|
||||||
case 0: irq = 2; break;
|
case 0: irq = evt2irq(0x240); break;
|
||||||
case 1: irq = 2; break;
|
case 1: irq = evt2irq(0x240); break;
|
||||||
case 2: irq = 2; break;
|
case 2: irq = evt2irq(0x240); break;
|
||||||
case 3: irq = 2; break;
|
case 3: irq = evt2irq(0x240); break;
|
||||||
case 4: irq = 2; break;
|
case 4: irq = evt2irq(0x240); break;
|
||||||
default: irq = -1; break;
|
default: irq = -1; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
|
#include <linux/sh_intc.h>
|
||||||
#include "pci-sh4.h"
|
#include "pci-sh4.h"
|
||||||
|
|
||||||
int __init pcibios_map_platform_irq(const struct pci_dev *pdev, u8 slot, u8 pin)
|
int __init pcibios_map_platform_irq(const struct pci_dev *pdev, u8 slot, u8 pin)
|
||||||
|
@ -24,11 +25,11 @@ int __init pcibios_map_platform_irq(const struct pci_dev *pdev, u8 slot, u8 pin)
|
||||||
|
|
||||||
switch (slot) {
|
switch (slot) {
|
||||||
case 8: /* the PCI bridge */ break;
|
case 8: /* the PCI bridge */ break;
|
||||||
case 11: irq = 8; break; /* USB */
|
case 11: irq = evt2irq(0x300); break; /* USB */
|
||||||
case 12: irq = 11; break; /* PCMCIA */
|
case 12: irq = evt2irq(0x360); break; /* PCMCIA */
|
||||||
case 13: irq = 5; break; /* eth0 */
|
case 13: irq = evt2irq(0x2a0); break; /* eth0 */
|
||||||
case 14: irq = 8; break; /* eth1 */
|
case 14: irq = evt2irq(0x300); break; /* eth1 */
|
||||||
case 15: irq = 11; break; /* safenet (unused) */
|
case 15: irq = evt2irq(0x360); break; /* safenet (unused) */
|
||||||
}
|
}
|
||||||
|
|
||||||
printk("PCI: Mapping SnapGear IRQ for slot %d, pin %c to irq %d\n",
|
printk("PCI: Mapping SnapGear IRQ for slot %d, pin %c to irq %d\n",
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/sh_clk.h>
|
#include <linux/sh_clk.h>
|
||||||
|
#include <linux/sh_intc.h>
|
||||||
#include "pcie-sh7786.h"
|
#include "pcie-sh7786.h"
|
||||||
#include <asm/sizes.h>
|
#include <asm/sizes.h>
|
||||||
|
|
||||||
|
@ -468,7 +469,7 @@ static int __init pcie_init(struct sh7786_pcie_port *port)
|
||||||
|
|
||||||
int __init pcibios_map_platform_irq(const struct pci_dev *pdev, u8 slot, u8 pin)
|
int __init pcibios_map_platform_irq(const struct pci_dev *pdev, u8 slot, u8 pin)
|
||||||
{
|
{
|
||||||
return 71;
|
return evt2irq(0xae0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init sh7786_pcie_core_init(void)
|
static int __init sh7786_pcie_core_init(void)
|
||||||
|
|
|
@ -11,13 +11,14 @@
|
||||||
* for more details.
|
* for more details.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#include <linux/sh_intc.h>
|
||||||
|
|
||||||
#define IRQ_CF1 9 /* CF1 */
|
#define IRQ_CF1 evt2irq(0x320) /* CF1 */
|
||||||
#define IRQ_CF0 10 /* CF0 */
|
#define IRQ_CF0 evt2irq(0x340) /* CF0 */
|
||||||
#define IRQ_INTD 11 /* INTD */
|
#define IRQ_INTD evt2irq(0x360) /* INTD */
|
||||||
#define IRQ_ETH1 12 /* Ether1 */
|
#define IRQ_ETH1 evt2irq(0x380) /* Ether1 */
|
||||||
#define IRQ_ETH0 13 /* Ether0 */
|
#define IRQ_ETH0 evt2irq(0x3a0) /* Ether0 */
|
||||||
#define IRQ_INTA 14 /* INTA */
|
#define IRQ_INTA evt2irq(0x3c0) /* INTA */
|
||||||
|
|
||||||
void init_lboxre2_IRQ(void);
|
void init_lboxre2_IRQ(void);
|
||||||
|
|
||||||
|
|
|
@ -4,14 +4,16 @@
|
||||||
#ifndef _ASM_SH_TITAN_H
|
#ifndef _ASM_SH_TITAN_H
|
||||||
#define _ASM_SH_TITAN_H
|
#define _ASM_SH_TITAN_H
|
||||||
|
|
||||||
|
#include <linux/sh_intc.h>
|
||||||
|
|
||||||
#define __IO_PREFIX titan
|
#define __IO_PREFIX titan
|
||||||
#include <asm/io_generic.h>
|
#include <asm/io_generic.h>
|
||||||
|
|
||||||
/* IRQ assignments */
|
/* IRQ assignments */
|
||||||
#define TITAN_IRQ_WAN 2 /* eth0 (WAN) */
|
#define TITAN_IRQ_WAN evt2irq(0x240) /* eth0 (WAN) */
|
||||||
#define TITAN_IRQ_LAN 5 /* eth1 (LAN) */
|
#define TITAN_IRQ_LAN evt2irq(0x2a0) /* eth1 (LAN) */
|
||||||
#define TITAN_IRQ_MPCIA 8 /* mPCI A */
|
#define TITAN_IRQ_MPCIA evt2irq(0x300) /* mPCI A */
|
||||||
#define TITAN_IRQ_MPCIB 11 /* mPCI B */
|
#define TITAN_IRQ_MPCIB evt2irq(0x360) /* mPCI B */
|
||||||
#define TITAN_IRQ_USB 11 /* USB */
|
#define TITAN_IRQ_USB evt2irq(0x360) /* USB */
|
||||||
|
|
||||||
#endif /* __ASM_SH_TITAN_H */
|
#endif /* __ASM_SH_TITAN_H */
|
||||||
|
|
Loading…
Add table
Reference in a new issue