From: Stephen Rothwell This patch allows iSeries to build with CONFIG_PCI=n. This is useful for partitions that have only virtual I/O. Signed-off-by: Stephen Rothwell Signed-off-by: Andrew Morton --- arch/ppc64/Kconfig | 2 +- arch/ppc64/kernel/Makefile | 6 +++--- arch/ppc64/kernel/dma.c | 4 ++++ arch/ppc64/kernel/iSeries_iommu.c | 3 ++- arch/ppc64/kernel/iSeries_setup.c | 8 ++++++++ arch/ppc64/kernel/sys_ppc32.c | 3 ++- arch/ppc64/lib/Makefile | 2 +- drivers/char/mem.c | 8 ++++---- drivers/serial/Kconfig | 2 +- include/asm-ppc64/dma.h | 3 +++ include/asm-ppc64/iommu.h | 4 ++++ 11 files changed, 33 insertions(+), 12 deletions(-) diff -puN arch/ppc64/Kconfig~ppc64-iseries-allow-build-with-no-pci arch/ppc64/Kconfig --- 25/arch/ppc64/Kconfig~ppc64-iseries-allow-build-with-no-pci 2005-06-08 01:32:45.000000000 -0700 +++ 25-akpm/arch/ppc64/Kconfig 2005-06-08 01:32:45.000000000 -0700 @@ -359,7 +359,7 @@ config EISA bool config PCI - bool + bool "support for PCI devices" if (EMBEDDED && PPC_ISERIES) default y help Find out whether your system includes a PCI bus. PCI is the name of diff -puN arch/ppc64/kernel/dma.c~ppc64-iseries-allow-build-with-no-pci arch/ppc64/kernel/dma.c --- 25/arch/ppc64/kernel/dma.c~ppc64-iseries-allow-build-with-no-pci 2005-06-08 01:32:45.000000000 -0700 +++ 25-akpm/arch/ppc64/kernel/dma.c 2005-06-08 01:32:45.000000000 -0700 @@ -15,8 +15,10 @@ static struct dma_mapping_ops *get_dma_ops(struct device *dev) { +#ifdef CONFIG_PCI if (dev->bus == &pci_bus_type) return &pci_dma_ops; +#endif #ifdef CONFIG_IBMVIO if (dev->bus == &vio_bus_type) return &vio_dma_ops; @@ -37,8 +39,10 @@ EXPORT_SYMBOL(dma_supported); int dma_set_mask(struct device *dev, u64 dma_mask) { +#ifdef CONFIG_PCI if (dev->bus == &pci_bus_type) return pci_set_dma_mask(to_pci_dev(dev), dma_mask); +#endif #ifdef CONFIG_IBMVIO if (dev->bus == &vio_bus_type) return -EIO; diff -puN arch/ppc64/kernel/iSeries_iommu.c~ppc64-iseries-allow-build-with-no-pci arch/ppc64/kernel/iSeries_iommu.c --- 25/arch/ppc64/kernel/iSeries_iommu.c~ppc64-iseries-allow-build-with-no-pci 2005-06-08 01:32:45.000000000 -0700 +++ 25-akpm/arch/ppc64/kernel/iSeries_iommu.c 2005-06-08 01:32:45.000000000 -0700 @@ -83,7 +83,7 @@ static void tce_free_iSeries(struct iomm } } - +#ifdef CONFIG_PCI /* * This function compares the known tables to find an iommu_table * that has already been built for hardware TCEs. @@ -159,6 +159,7 @@ void iommu_devnode_init_iSeries(struct i else kfree(tbl); } +#endif static void iommu_dev_setup_iSeries(struct pci_dev *dev) { } static void iommu_bus_setup_iSeries(struct pci_bus *bus) { } diff -puN arch/ppc64/kernel/iSeries_setup.c~ppc64-iseries-allow-build-with-no-pci arch/ppc64/kernel/iSeries_setup.c --- 25/arch/ppc64/kernel/iSeries_setup.c~ppc64-iseries-allow-build-with-no-pci 2005-06-08 01:32:45.000000000 -0700 +++ 25-akpm/arch/ppc64/kernel/iSeries_setup.c 2005-06-08 01:32:45.000000000 -0700 @@ -76,7 +76,11 @@ extern void ppcdbg_initialize(void); static void build_iSeries_Memory_Map(void); static void setup_iSeries_cache_sizes(void); static void iSeries_bolt_kernel(unsigned long saddr, unsigned long eaddr); +#ifdef CONFIG_PCI extern void iSeries_pci_final_fixup(void); +#else +static void iSeries_pci_final_fixup(void) { } +#endif /* Global Variables */ static unsigned long procFreqHz; @@ -876,6 +880,10 @@ static int set_spread_lpevents(char *str } __setup("spread_lpevents=", set_spread_lpevents); +#ifndef CONFIG_PCI +void __init iSeries_init_IRQ(void) { } +#endif + void __init iSeries_early_setup(void) { iSeries_fixup_klimit(); diff -puN arch/ppc64/kernel/Makefile~ppc64-iseries-allow-build-with-no-pci arch/ppc64/kernel/Makefile --- 25/arch/ppc64/kernel/Makefile~ppc64-iseries-allow-build-with-no-pci 2005-06-08 01:32:45.000000000 -0700 +++ 25-akpm/arch/ppc64/kernel/Makefile 2005-06-08 01:32:45.000000000 -0700 @@ -16,13 +16,13 @@ obj-y += vdso32/ vdso64/ obj-$(CONFIG_PPC_OF) += of_device.o -pci-obj-$(CONFIG_PPC_ISERIES) += iSeries_pci.o iSeries_VpdInfo.o +pci-obj-$(CONFIG_PPC_ISERIES) += iSeries_pci.o iSeries_irq.o \ + iSeries_VpdInfo.o pci-obj-$(CONFIG_PPC_MULTIPLATFORM) += pci_dn.o pci_direct_iommu.o obj-$(CONFIG_PCI) += pci.o pci_iommu.o iomap.o $(pci-obj-y) -obj-$(CONFIG_PPC_ISERIES) += iSeries_irq.o \ - HvCall.o HvLpConfig.o LparData.o \ +obj-$(CONFIG_PPC_ISERIES) += HvCall.o HvLpConfig.o LparData.o \ iSeries_setup.o ItLpQueue.o hvCall.o \ mf.o HvLpEvent.o iSeries_proc.o iSeries_htab.o \ iSeries_iommu.o diff -puN arch/ppc64/kernel/sys_ppc32.c~ppc64-iseries-allow-build-with-no-pci arch/ppc64/kernel/sys_ppc32.c --- 25/arch/ppc64/kernel/sys_ppc32.c~ppc64-iseries-allow-build-with-no-pci 2005-06-08 01:32:45.000000000 -0700 +++ 25-akpm/arch/ppc64/kernel/sys_ppc32.c 2005-06-08 01:32:45.000000000 -0700 @@ -741,6 +741,7 @@ asmlinkage int sys32_pciconfig_write(u32 asmlinkage int sys32_pciconfig_iobase(u32 which, u32 in_bus, u32 in_devfn) { +#ifdef CONFIG_PCI struct pci_controller* hose; struct list_head *ln; struct pci_bus *bus = NULL; @@ -786,7 +787,7 @@ asmlinkage int sys32_pciconfig_iobase(u3 case IOBASE_ISA_MEM: return -EINVAL; } - +#endif /* CONFIG_PCI */ return -EOPNOTSUPP; } diff -puN arch/ppc64/lib/Makefile~ppc64-iseries-allow-build-with-no-pci arch/ppc64/lib/Makefile --- 25/arch/ppc64/lib/Makefile~ppc64-iseries-allow-build-with-no-pci 2005-06-08 01:32:45.000000000 -0700 +++ 25-akpm/arch/ppc64/lib/Makefile 2005-06-08 01:32:45.000000000 -0700 @@ -12,7 +12,7 @@ lib-$(CONFIG_SMP) += locks.o # e2a provides EBCDIC to ASCII conversions. ifdef CONFIG_PPC_ISERIES -obj-$(CONFIG_PCI) += e2a.o +obj-y += e2a.o endif lib-$(CONFIG_DEBUG_KERNEL) += sstep.o diff -puN drivers/char/mem.c~ppc64-iseries-allow-build-with-no-pci drivers/char/mem.c --- 25/drivers/char/mem.c~ppc64-iseries-allow-build-with-no-pci 2005-06-08 01:32:45.000000000 -0700 +++ 25-akpm/drivers/char/mem.c 2005-06-08 01:32:45.000000000 -0700 @@ -484,7 +484,7 @@ static ssize_t write_kmem(struct file * return virtr + wrote; } -#if defined(CONFIG_ISA) || !defined(__mc68000__) +#if (defined(CONFIG_ISA) || !defined(__mc68000__)) && (!defined(CONFIG_PPC_ISERIES) || defined(CONFIG_PCI)) static ssize_t read_port(struct file * file, char __user * buf, size_t count, loff_t *ppos) { @@ -744,7 +744,7 @@ static struct file_operations null_fops .write = write_null, }; -#if defined(CONFIG_ISA) || !defined(__mc68000__) +#if (defined(CONFIG_ISA) || !defined(__mc68000__)) && (!defined(CONFIG_PPC_ISERIES) || defined(CONFIG_PCI)) static struct file_operations port_fops = { .llseek = memory_lseek, .read = read_port, @@ -804,7 +804,7 @@ static int memory_open(struct inode * in case 3: filp->f_op = &null_fops; break; -#if defined(CONFIG_ISA) || !defined(__mc68000__) +#if (defined(CONFIG_ISA) || !defined(__mc68000__)) && (!defined(CONFIG_PPC_ISERIES) || defined(CONFIG_PCI)) case 4: filp->f_op = &port_fops; break; @@ -846,7 +846,7 @@ static const struct { {1, "mem", S_IRUSR | S_IWUSR | S_IRGRP, &mem_fops}, {2, "kmem", S_IRUSR | S_IWUSR | S_IRGRP, &kmem_fops}, {3, "null", S_IRUGO | S_IWUGO, &null_fops}, -#if defined(CONFIG_ISA) || !defined(__mc68000__) +#if (defined(CONFIG_ISA) || !defined(__mc68000__)) && (!defined(CONFIG_PPC_ISERIES) || defined(CONFIG_PCI)) {4, "port", S_IRUSR | S_IWUSR | S_IRGRP, &port_fops}, #endif {5, "zero", S_IRUGO | S_IWUGO, &zero_fops}, diff -puN drivers/serial/Kconfig~ppc64-iseries-allow-build-with-no-pci drivers/serial/Kconfig --- 25/drivers/serial/Kconfig~ppc64-iseries-allow-build-with-no-pci 2005-06-08 01:32:45.000000000 -0700 +++ 25-akpm/drivers/serial/Kconfig 2005-06-08 01:32:45.000000000 -0700 @@ -753,7 +753,7 @@ config SERIAL_MPC52xx_CONSOLE_BAUD config SERIAL_ICOM tristate "IBM Multiport Serial Adapter" - depends on PPC_ISERIES || PPC_PSERIES + depends on PCI && (PPC_ISERIES || PPC_PSERIES) select SERIAL_CORE help This driver is for a family of multiport serial adapters diff -puN include/asm-ppc64/dma.h~ppc64-iseries-allow-build-with-no-pci include/asm-ppc64/dma.h --- 25/include/asm-ppc64/dma.h~ppc64-iseries-allow-build-with-no-pci 2005-06-08 01:32:45.000000000 -0700 +++ 25-akpm/include/asm-ppc64/dma.h 2005-06-08 01:32:45.000000000 -0700 @@ -27,6 +27,8 @@ /* Doesn't really apply... */ #define MAX_DMA_ADDRESS (~0UL) +#if !defined(CONFIG_PPC_ISERIES) || defined(CONFIG_PCI) + #define dma_outb outb #define dma_inb inb @@ -323,4 +325,5 @@ extern int isa_dma_bridge_buggy; #else #define isa_dma_bridge_buggy (0) #endif +#endif /* !defined(CONFIG_PPC_ISERIES) || defined(CONFIG_PCI) */ #endif /* _ASM_DMA_H */ diff -puN include/asm-ppc64/iommu.h~ppc64-iseries-allow-build-with-no-pci include/asm-ppc64/iommu.h --- 25/include/asm-ppc64/iommu.h~ppc64-iseries-allow-build-with-no-pci 2005-06-08 01:32:45.000000000 -0700 +++ 25-akpm/include/asm-ppc64/iommu.h 2005-06-08 01:32:45.000000000 -0700 @@ -137,8 +137,12 @@ extern void iommu_init_early_pSeries(voi extern void iommu_init_early_iSeries(void); extern void iommu_init_early_u3(void); +#ifdef CONFIG_PCI extern void pci_iommu_init(void); extern void pci_direct_iommu_init(void); +#else +static inline void pci_iommu_init(void) { } +#endif extern void alloc_u3_dart_table(void); _