Hi Andy, I love your patch! Yet something to improve: [auto build test ERROR on linus/master] [also build test ERROR on gpio/for-next v5.5-rc1 next-20191209] [cannot apply to pinctrl/devel] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982] url: https://github.com/0day-ci/linux/commits/Andy-Shevchenko/pinctrl-intel-Move-Lynxpoint-to-pin-control-umbrella/20191210-030030 base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git e42617b825f8073569da76dc4510bfa019b1c35a config: x86_64-allyesconfig (attached as .config) compiler: gcc-7 (Debian 7.5.0-1) 7.5.0 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 If you fix the issue, kindly add following tag Reported-by: kbuild test robot All error/warnings (new ones prefixed by >>): >> drivers/pinctrl/intel/pinctrl-lynxpoint.c:200:56: warning: 'struct intel_pinctrl' declared inside parameter list will not be visible outside of this definition or declaration static struct intel_community *lp_get_community(struct intel_pinctrl *lg, ^~~~~~~~~~~~~ drivers/pinctrl/intel/pinctrl-lynxpoint.c: In function 'lp_get_community': >> drivers/pinctrl/intel/pinctrl-lynxpoint.c:206:20: error: dereferencing pointer to incomplete type 'struct intel_pinctrl' for (i = 0; i < lg->ncommunities; i++) { ^~ drivers/pinctrl/intel/pinctrl-lynxpoint.c: In function 'lp_gpio_reg': >> drivers/pinctrl/intel/pinctrl-lynxpoint.c:222:26: error: passing argument 1 of 'lp_get_community' from incompatible pointer type [-Werror=incompatible-pointer-types] comm = lp_get_community(lg, offset); ^~ drivers/pinctrl/intel/pinctrl-lynxpoint.c:200:32: note: expected 'struct intel_pinctrl *' but argument is of type 'struct intel_pinctrl *' static struct intel_community *lp_get_community(struct intel_pinctrl *lg, ^~~~~~~~~~~~~~~~ drivers/pinctrl/intel/pinctrl-lynxpoint.c: At top level: drivers/pinctrl/intel/pinctrl-lynxpoint.c:238:37: warning: 'struct intel_pinctrl' declared inside parameter list will not be visible outside of this definition or declaration static bool lp_gpio_acpi_use(struct intel_pinctrl *lg, unsigned int pin) ^~~~~~~~~~~~~ drivers/pinctrl/intel/pinctrl-lynxpoint.c: In function 'lp_gpio_acpi_use': drivers/pinctrl/intel/pinctrl-lynxpoint.c:242:28: error: dereferencing pointer to incomplete type 'struct intel_pinctrl' acpi_use = lp_gpio_reg(&lg->chip, pin, LP_ACPI_OWNED); ^~ drivers/pinctrl/intel/pinctrl-lynxpoint.c: In function 'lp_gpio_request': drivers/pinctrl/intel/pinctrl-lynxpoint.c:256:19: error: dereferencing pointer to incomplete type 'struct intel_pinctrl' pm_runtime_get(lg->dev); /* should we put if failed */ ^~ drivers/pinctrl/intel/pinctrl-lynxpoint.c: In function 'lp_gpio_free': drivers/pinctrl/intel/pinctrl-lynxpoint.c:283:19: error: dereferencing pointer to incomplete type 'struct intel_pinctrl' pm_runtime_put(lg->dev); ^~ In file included from include/linux/radix-tree.h:16:0, from include/linux/idr.h:15, from include/linux/kernfs.h:13, from include/linux/sysfs.h:16, from include/linux/kobject.h:20, from include/linux/of.h:17, from include/linux/irqdomain.h:35, from include/linux/acpi.h:13, from drivers/pinctrl/intel/pinctrl-lynxpoint.c:9: drivers/pinctrl/intel/pinctrl-lynxpoint.c: In function 'lp_gpio_set': drivers/pinctrl/intel/pinctrl-lynxpoint.c:298:27: error: dereferencing pointer to incomplete type 'struct intel_pinctrl' raw_spin_lock_irqsave(&lg->lock, flags); ^ include/linux/spinlock.h:250:34: note: in definition of macro 'raw_spin_lock_irqsave' flags = _raw_spin_lock_irqsave(lock); \ ^~~~ drivers/pinctrl/intel/pinctrl-lynxpoint.c: In function 'lp_gpio_direction_input': drivers/pinctrl/intel/pinctrl-lynxpoint.c:314:27: error: dereferencing pointer to incomplete type 'struct intel_pinctrl' raw_spin_lock_irqsave(&lg->lock, flags); ^ include/linux/spinlock.h:250:34: note: in definition of macro 'raw_spin_lock_irqsave' flags = _raw_spin_lock_irqsave(lock); \ ^~~~ drivers/pinctrl/intel/pinctrl-lynxpoint.c: In function 'lp_gpio_direction_output': drivers/pinctrl/intel/pinctrl-lynxpoint.c:330:27: error: dereferencing pointer to incomplete type 'struct intel_pinctrl' raw_spin_lock_irqsave(&lg->lock, flags); ^ include/linux/spinlock.h:250:34: note: in definition of macro 'raw_spin_lock_irqsave' flags = _raw_spin_lock_irqsave(lock); \ ^~~~ drivers/pinctrl/intel/pinctrl-lynxpoint.c: In function 'lp_gpio_irq_handler': drivers/pinctrl/intel/pinctrl-lynxpoint.c:358:26: error: dereferencing pointer to incomplete type 'struct intel_pinctrl' for (base = 0; base < lg->chip.ngpio; base += 32) { ^~ drivers/pinctrl/intel/pinctrl-lynxpoint.c: In function 'lp_irq_ack': drivers/pinctrl/intel/pinctrl-lynxpoint.c:380:37: error: dereferencing pointer to incomplete type 'struct intel_pinctrl' void __iomem *reg = lp_gpio_reg(&lg->chip, hwirq, LP_INT_STAT); ^~ drivers/pinctrl/intel/pinctrl-lynxpoint.c: In function 'lp_irq_enable': drivers/pinctrl/intel/pinctrl-lynxpoint.c:401:37: error: dereferencing pointer to incomplete type 'struct intel_pinctrl' void __iomem *reg = lp_gpio_reg(&lg->chip, hwirq, LP_INT_ENABLE); ^~ drivers/pinctrl/intel/pinctrl-lynxpoint.c: In function 'lp_irq_disable': drivers/pinctrl/intel/pinctrl-lynxpoint.c:414:37: error: dereferencing pointer to incomplete type 'struct intel_pinctrl' void __iomem *reg = lp_gpio_reg(&lg->chip, hwirq, LP_INT_ENABLE); ^~ drivers/pinctrl/intel/pinctrl-lynxpoint.c: In function 'lp_irq_set_type': drivers/pinctrl/intel/pinctrl-lynxpoint.c:427:37: error: dereferencing pointer to incomplete type 'struct intel_pinctrl' void __iomem *reg = lp_gpio_reg(&lg->chip, hwirq, LP_CONFIG1); ^~ >> drivers/pinctrl/intel/pinctrl-lynxpoint.c:435:23: error: passing argument 1 of 'lp_gpio_acpi_use' from incompatible pointer type [-Werror=incompatible-pointer-types] if (lp_gpio_acpi_use(lg, hwirq)) { ^~ drivers/pinctrl/intel/pinctrl-lynxpoint.c:238:13: note: expected 'struct intel_pinctrl *' but argument is of type 'struct intel_pinctrl *' static bool lp_gpio_acpi_use(struct intel_pinctrl *lg, unsigned int pin) ^~~~~~~~~~~~~~~~ drivers/pinctrl/intel/pinctrl-lynxpoint.c: In function 'lp_gpio_irq_init_hw': drivers/pinctrl/intel/pinctrl-lynxpoint.c:488:26: error: dereferencing pointer to incomplete type 'struct intel_pinctrl' for (base = 0; base < lg->chip.ngpio; base += 32) { ^~ drivers/pinctrl/intel/pinctrl-lynxpoint.c: In function 'lp_gpio_probe': drivers/pinctrl/intel/pinctrl-lynxpoint.c:515:32: error: dereferencing pointer to incomplete type 'struct intel_pinctrl' lg = devm_kzalloc(dev, sizeof(*lg), GFP_KERNEL); ^~~ drivers/pinctrl/intel/pinctrl-lynxpoint.c: In function 'lp_gpio_resume': drivers/pinctrl/intel/pinctrl-lynxpoint.c:622:20: error: dereferencing pointer to incomplete type 'struct intel_pinctrl' for (i = 0; i < lg->chip.ngpio; i++) { ^~ cc1: some warnings being treated as errors vim +206 drivers/pinctrl/intel/pinctrl-lynxpoint.c 170 171 /* 172 * Lynxpoint gpios are controlled through both bitmapped registers and 173 * per gpio specific registers. The bitmapped registers are in chunks of 174 * 3 x 32bit registers to cover all 95 GPIOs 175 * 176 * per gpio specific registers consist of two 32bit registers per gpio 177 * (LP_CONFIG1 and LP_CONFIG2), with 95 GPIOs there's a total of 178 * 190 config registers. 179 * 180 * A simplified view of the register layout look like this: 181 * 182 * LP_ACPI_OWNED[31:0] gpio ownerships for gpios 0-31 (bitmapped registers) 183 * LP_ACPI_OWNED[63:32] gpio ownerships for gpios 32-63 184 * LP_ACPI_OWNED[94:64] gpio ownerships for gpios 63-94 185 * ... 186 * LP_INT_ENABLE[31:0] ... 187 * LP_INT_ENABLE[63:32] ... 188 * LP_INT_ENABLE[94:64] ... 189 * LP0_CONFIG1 (gpio 0) config1 reg for gpio 0 (per gpio registers) 190 * LP0_CONFIG2 (gpio 0) config2 reg for gpio 0 191 * LP1_CONFIG1 (gpio 1) config1 reg for gpio 1 192 * LP1_CONFIG2 (gpio 1) config2 reg for gpio 1 193 * LP2_CONFIG1 (gpio 2) ... 194 * LP2_CONFIG2 (gpio 2) ... 195 * ... 196 * LP94_CONFIG1 (gpio 94) ... 197 * LP94_CONFIG2 (gpio 94) ... 198 */ 199 > 200 static struct intel_community *lp_get_community(struct intel_pinctrl *lg, 201 unsigned int pin) 202 { 203 struct intel_community *comm; 204 int i; 205 > 206 for (i = 0; i < lg->ncommunities; i++) { 207 comm = &lg->communities[i]; 208 if (pin < comm->pin_base + comm->npins && pin >= comm->pin_base) 209 return comm; 210 } 211 212 return NULL; 213 } 214 215 static void __iomem *lp_gpio_reg(struct gpio_chip *chip, unsigned int offset, 216 int reg) 217 { 218 struct intel_pinctrl *lg = gpiochip_get_data(chip); 219 struct intel_community *comm; 220 int reg_offset; 221 > 222 comm = lp_get_community(lg, offset); 223 if (!comm) 224 return NULL; 225 226 offset -= comm->pin_base; 227 228 if (reg == LP_CONFIG1 || reg == LP_CONFIG2) 229 /* per gpio specific config registers */ 230 reg_offset = offset * 8; 231 else 232 /* bitmapped registers */ 233 reg_offset = (offset / 32) * 4; 234 235 return comm->regs + reg_offset + reg; 236 } 237 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org Intel Corporation