Hi Darren, Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on powerpc/next] [also build test WARNING on v4.15-rc6 next-20180103] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Darren-Stevens/powerpc-pasemi-Add-PCI-initialisation-for-Nemo-board/20180103-091349 base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next config: powerpc-allmodconfig (attached as .config) compiler: powerpc64-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=powerpc All warnings (new ones prefixed by >>): In file included from include/linux/printk.h:7:0, from include/linux/kernel.h:14, from arch/powerpc/platforms/pasemi/pci.c:26: arch/powerpc/platforms/pasemi/pci.c: In function 'sb600_set_flag': >> include/linux/kern_levels.h:5:18: warning: format '%lx' expects argument of >> type 'long unsigned int', but argument 2 has type 'resource_size_t {aka long >> long unsigned int}' [-Wformat=] #define KERN_SOH "\001" /* ASCII Start Of Header */ ^ include/linux/kern_levels.h:10:19: note: in expansion of macro 'KERN_SOH' #define KERN_CRIT KERN_SOH "2" /* critical conditions */ ^~~~~~~~ >> arch/powerpc/platforms/pasemi/pci.c:137:10: note: in expansion of macro >> 'KERN_CRIT' printk(KERN_CRIT "NEMO SB600 IOB base %08lx\n",res.start); ^~~~~~~~~ arch/powerpc/platforms/pasemi/pci.c:137:45: note: format string is defined here printk(KERN_CRIT "NEMO SB600 IOB base %08lx\n",res.start); ~~~~^ %08llx vim +/KERN_CRIT +137 arch/powerpc/platforms/pasemi/pci.c > 26 #include <linux/kernel.h> 27 #include <linux/pci.h> 28 29 #include <asm/pci-bridge.h> 30 #include <asm/isa-bridge.h> 31 #include <asm/machdep.h> 32 33 #include <asm/ppc-pci.h> 34 35 #include "pasemi.h" 36 37 #define PA_PXP_CFA(bus, devfn, off) (((bus) << 20) | ((devfn) << 12) | (off)) 38 39 static inline int pa_pxp_offset_valid(u8 bus, u8 devfn, int offset) 40 { 41 /* Device 0 Function 0 is special: It's config space spans function 1 as 42 * well, so allow larger offset. It's really a two-function device but the 43 * second function does not probe. 44 */ 45 if (bus == 0 && devfn == 0) 46 return offset < 8192; 47 else 48 return offset < 4096; 49 } 50 51 static void volatile __iomem *pa_pxp_cfg_addr(struct pci_controller *hose, 52 u8 bus, u8 devfn, int offset) 53 { 54 return hose->cfg_data + PA_PXP_CFA(bus, devfn, offset); 55 } 56 57 static inline int is_root_port(int busno, int devfn) 58 { 59 return ((busno == 0) && (PCI_FUNC(devfn) < 4) && 60 ((PCI_SLOT(devfn) == 16) || (PCI_SLOT(devfn) == 17))); 61 } 62 63 static inline int is_5945_reg(int reg) 64 { 65 return (((reg >= 0x18) && (reg < 0x34)) || 66 ((reg >= 0x158) && (reg < 0x178))); 67 } 68 69 static int workaround_5945(struct pci_bus *bus, unsigned int devfn, 70 int offset, int len, u32 *val) 71 { 72 struct pci_controller *hose; 73 void volatile __iomem *addr, *dummy; 74 int byte; 75 u32 tmp; 76 77 if (!is_root_port(bus->number, devfn) || !is_5945_reg(offset)) 78 return 0; 79 80 hose = pci_bus_to_host(bus); 81 82 addr = pa_pxp_cfg_addr(hose, bus->number, devfn, offset & ~0x3); 83 byte = offset & 0x3; 84 85 /* Workaround bug 5945: write 0 to a dummy register before reading, 86 * and write back what we read. We must read/write the full 32-bit 87 * contents so we need to shift and mask by hand. 88 */ 89 dummy = pa_pxp_cfg_addr(hose, bus->number, devfn, 0x10); 90 out_le32(dummy, 0); 91 tmp = in_le32(addr); 92 out_le32(addr, tmp); 93 94 switch (len) { 95 case 1: 96 *val = (tmp >> (8*byte)) & 0xff; 97 break; 98 case 2: 99 if (byte == 0) 100 *val = tmp & 0xffff; 101 else 102 *val = (tmp >> 16) & 0xffff; 103 break; 104 default: 105 *val = tmp; 106 break; 107 } 108 109 return 1; 110 } 111 112 #ifdef CONFIG_PPC_PASEMI_NEMO 113 static int sb600_bus = 5; 114 static void __iomem *iob_mapbase = NULL; 115 116 static void sb600_set_flag(int bus) 117 { 118 struct resource res; 119 struct device_node *dn; 120 int err; 121 122 if (iob_mapbase == NULL) { 123 dn = of_find_compatible_node(NULL, "isa", "pasemi,1682m-iob"); 124 if (!dn) { 125 printk(KERN_CRIT "NEMO SB600 missing iob node\n"); 126 return; 127 } 128 129 err = of_address_to_resource(dn, 0, &res); 130 of_node_put(dn); 131 132 if (err) { 133 printk(KERN_CRIT "NEMO SB600 missing resource\n"); 134 return; 135 } 136 > 137 printk(KERN_CRIT "NEMO SB600 IOB base > %08lx\n",res.start); 138 139 iob_mapbase = ioremap(res.start + 0x100, 0x94); 140 } 141 142 if (iob_mapbase != NULL) { 143 if (bus == sb600_bus) { 144 /* 145 * This is the SB600's bus, tell the PCI-e root port 146 * to allow non-zero devices to enumerate. 147 */ 148 out_le32(iob_mapbase + 4, in_le32(iob_mapbase + 4) | 0x800); 149 } else { 150 /* 151 * Only scan device 0 on other busses 152 */ 153 out_le32(iob_mapbase + 4, in_le32(iob_mapbase + 4) & ~0x800); 154 } 155 } 156 } 157 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
.config.gz
Description: application/gzip