msi: fix ARM compile
Subsystems (3)
PATCH 1/2 msi: fix ARM compile
In file included from drivers/pci/msi.c:22:include/asm/smp.h:17:26: asm/arch/smp.h: No such file or directory include/asm/smp.h:20:3: #error "<asm-arm/smp.h> included in non-SMP build" include/asm/smp.h:23:1: warning: "raw_smp_processor_id" redefined In file included from include/linux/sched.h:65,
from include/linux/mm.h:4,
from drivers/pci/msi.c:10:include/linux/smp.h:85:1: warning: this is the location of the previous definition
Tested on powerpc, i386, and x86_64.
---
drivers/pci/msi.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/pci/msi.c +1 -1
@@ -16,10 +16,10 @@#include <linux/pci.h> #include <linux/proc_fs.h> #include <linux/msi.h> +#include <linux/smp.h> #include <asm/errno.h> #include <asm/io.h> -#include <asm/smp.h> #include "pci.h" #include "msi.h"
PATCH 2/2 iop13xx: msi support (rev6)
From: Daniel Wolstenholme <[email protected]>
Enable devices to signal interrupts via PCI memory cycles.
rev6:
* fix enable/disable typo, Michael Ellerman
rev5:
* fix up ack, enable, and disable for iop13xx_msi_chip
rev4:
* move smp compile fix to separate patch
* use dynamic_irq_init in create_irq()
* hookup mask/unmask routines in iop13xx_msi_chip
rev3:
* change msi.c to use linux/smp.h instead of asm/smp.h
* call dynamic_irq_cleanup at destroy_irq time
rev2:
* destroy_irq did not take the full 128 bits of msi_irq_in_use into account
* added missing '&' for calls to test_and_set_bit and clear_bit
---
arch/arm/mach-iop13xx/Makefile | 1 arch/arm/mach-iop13xx/irq.c | 5 + arch/arm/mach-iop13xx/msi.c | 194 ++++++++++++++++++++++++++++++++ arch/arm/mach-iop13xx/pci.c | 16 +++ include/asm-arm/arch-iop13xx/iop13xx.h | 29 +++++ include/asm-arm/arch-iop13xx/irqs.h | 8 + include/asm-arm/arch-iop13xx/msi.h | 11 ++ 7 files changed, 262 insertions(+), 2 deletions(-)
arch/arm/mach-iop13xx/Makefile +1 -0
@@ -9,3 +9,4 @@ obj-$(CONFIG_ARCH_IOP13XX) += pci.o obj-$(CONFIG_ARCH_IOP13XX) += io.o obj-$(CONFIG_MACH_IQ81340SC) += iq81340sc.o obj-$(CONFIG_MACH_IQ81340MC) += iq81340mc.o +obj-$(CONFIG_PCI_MSI) += msi.o
arch/arm/mach-iop13xx/irq.c +4 -1
@@ -26,6 +26,7 @@#include <asm/hardware.h> #include <asm/mach-types.h> #include <asm/arch/irqs.h> +#include <asm/arch/msi.h> /* INTCTL0 CP6 R0 Page 4 */
@@ -258,7 +259,7 @@ void __init iop13xx_init_irq(void)write_intbase (INTBASE );write_intsize (INTSIZE_4 ); -for (i =0 ; i <NR_IOP13XX_IRQS ; i++) { +for (i =0 ; i <=IRQ_IOP13XX_HPI ; i++) {if (i <32 )set_irq_chip (i, &iop13xx_irqchip1);else if (i <64 )
@@ -271,4 +272,6 @@ void __init iop13xx_init_irq(void)set_irq_handler (i, handle_level_irq);set_irq_flags (i,IRQF_VALID |IRQF_PROBE ); } + +iop13xx_msi_init (); }
arch/arm/mach-iop13xx/msi.c new file +194 -0
194 lines not on this page · raw message
arch/arm/mach-iop13xx/pci.c +16 -0
@@ -559,6 +559,14 @@ void __init iop13xx_atue_setup(void)int func =iop13xx_atu_function (IOP13XX_INIT_ATU_ATUE );u32 reg_val; +#ifdef CONFIG_PCI_MSI +/* BAR 0 (inbound msi window) */ +__raw_writel (IOP13XX_MU_BASE_PHYS ,IOP13XX_MU_MUBAR ); +__raw_writel (~(IOP13XX_MU_WINDOW_SIZE -1 ),IOP13XX_ATUE_IALR0 ); +__raw_writel (IOP13XX_MU_BASE_PHYS ,IOP13XX_ATUE_IATVR0 ); +__raw_writel (IOP13XX_MU_BASE_PCI ,IOP13XX_ATUE_IABAR0 ); +#endif +/* BAR 1 (1:1 mapping with Physical RAM) */ /* Set limit and enable */ __raw_writel(~(IOP13XX_MAX_RAM_SIZE - PHYS_OFFSET - 1) & ~0x1,
@@ -720,6 +728,14 @@ void __init iop13xx_atux_setup(void)else atux_trhfa_timeout = jiffies; +#ifdef CONFIG_PCI_MSI +/* BAR 0 (inbound msi window) */ +__raw_writel (IOP13XX_MU_BASE_PHYS ,IOP13XX_MU_MUBAR ); +__raw_writel (~(IOP13XX_MU_WINDOW_SIZE -1 ),IOP13XX_ATUX_IALR0 ); +__raw_writel (IOP13XX_MU_BASE_PHYS ,IOP13XX_ATUX_IATVR0 ); +__raw_writel (IOP13XX_MU_BASE_PCI ,IOP13XX_ATUX_IABAR0 ); +#endif +/* BAR 1 (1:1 mapping with Physical RAM) */ /* Set limit and enable */ __raw_writel(~(IOP13XX_MAX_RAM_SIZE - PHYS_OFFSET - 1) & ~0x1,
include/asm-arm/arch-iop13xx/iop13xx.h +29 -0
@@ -176,6 +176,7 @@ static inline int iop13xx_cpu_id(void)#define IOP13XX_ADMA1_PMMR_OFFSET 0x00000200#define IOP13XX_ADMA2_PMMR_OFFSET 0x00000400#define IOP13XX_PBI_PMMR_OFFSET 0x00001580 +#define IOP13XX_MU_PMMR_OFFSET 0x00004000#define IOP13XX_ESSR0_PMMR_OFFSET 0x00002188#define IOP13XX_ESSR0 IOP13XX_REG_ADDR32(0x00002188)
@@ -407,6 +408,34 @@ static inline int iop13xx_cpu_id(void)#define IOP13XX_ATU_OUMBAR_FUNC_NUM_MASK (0x7)/*=======================================================================*/ +/*============================MESSAGING UNIT=============================*/ +#define IOP13XX_MU_OFFSET (ofs) IOP13XX_REG_ADDR32(IOP13XX_MU_PMMR_OFFSET +\ + (ofs)) + +#define IOP13XX_MU_IMR0 IOP13XX_MU_OFFSET(0x10) +#define IOP13XX_MU_IMR1 IOP13XX_MU_OFFSET(0x14) +#define IOP13XX_MU_OMR0 IOP13XX_MU_OFFSET(0x18) +#define IOP13XX_MU_OMR1 IOP13XX_MU_OFFSET(0x1C) +#define IOP13XX_MU_IDR IOP13XX_MU_OFFSET(0x20) +#define IOP13XX_MU_IISR IOP13XX_MU_OFFSET(0x24) +#define IOP13XX_MU_IIMR IOP13XX_MU_OFFSET(0x28) +#define IOP13XX_MU_ODR IOP13XX_MU_OFFSET(0x2C) +#define IOP13XX_MU_OISR IOP13XX_MU_OFFSET(0x30) +#define IOP13XX_MU_OIMR IOP13XX_MU_OFFSET(0x34) +#define IOP13XX_MU_IRCSR IOP13XX_MU_OFFSET(0x38) +#define IOP13XX_MU_ORCSR IOP13XX_MU_OFFSET(0x3C) +#define IOP13XX_MU_MIMR IOP13XX_MU_OFFSET(0x48) +#define IOP13XX_MU_MUCR IOP13XX_MU_OFFSET(0x50) +#define IOP13XX_MU_QBAR IOP13XX_MU_OFFSET(0x54) +#define IOP13XX_MU_MUBAR IOP13XX_MU_OFFSET(0x84) + +#define IOP13XX_MU_WINDOW_SIZE (8 * 1024) +#define IOP13XX_MU_BASE_PHYS (0xff000000) +#define IOP13XX_MU_BASE_PCI (0xff000000) +#define IOP13XX_MU_MIMR_PCI (IOP13XX_MU_BASE_PCI + 0x48) +#define IOP13XX_MU_MIMR_CORE_SELECT (15) +/*=======================================================================*/ +/*==============================ADMA UNITS===============================*/ #define IOP13XX_ADMA_PHYS_BASE (chan) IOP13XX_REG_ADDR32_PHYS((chan << 9))#define IOP13XX_ADMA_UPPER_PA (chan) (IOP13XX_ADMA_PHYS_BASE(chan) + 0xc0)
include/asm-arm/arch-iop13xx/irqs.h +7 -1
@@ -168,7 +168,7 @@ static inline u32 read_intpnd_3(void)#define IRQ_IOP13XX_ATUE_IMD (110)/* 14 */ #define IRQ_IOP13XX_MU_MSI_TB (111)/* 15 */ #define IRQ_IOP13XX_RSVD_112 (112)/* 16 */ -#define IRQ_IOP13XX_RSVD_113 (113)/* 17 */ +#define IRQ_IOP13XX_INBD_MSI (113)/* 17 */ #define IRQ_IOP13XX_RSVD_114 (114)/* 18 */ #define IRQ_IOP13XX_RSVD_115 (115)/* 19 */ #define IRQ_IOP13XX_RSVD_116 (116)/* 20 */
@@ -184,7 +184,13 @@ static inline u32 read_intpnd_3(void)#define IRQ_IOP13XX_RSVD_126 (126)/* 30 */ #define IRQ_IOP13XX_HPI (127)/* 31 */ +#ifdef CONFIG_PCI_MSI +#define IRQ_IOP13XX_MSI_0 (IRQ_IOP13XX_HPI + 1) +#define NR_IOP13XX_IRQS (IRQ_IOP13XX_MSI_0 + 128) +#else #define NR_IOP13XX_IRQS (IRQ_IOP13XX_HPI + 1) +#endif +#define NR_IRQS NR_IOP13XX_IRQS#endif /* _IOP13XX_IRQ_H_ */
include/asm-arm/arch-iop13xx/msi.h new file +11 -0
@@ -0,0 +1,11 @@ +#ifndef _IOP13XX_MSI_H_ +#define _IOP13XX_MSI_H_ +#ifdef CONFIG_PCI_MSI +void iop13xx_msi_init (void ); +#else +static inline void iop13xx_msi_init (void ) +{ +return ; +} +#endif +#endif