Message ID | 1495712248-5232-7-git-send-email-gabriele.paoloni@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi zhichang.yuan,
[auto build test ERROR on linus/master]
[also build test ERROR on v4.12-rc2 next-20170525]
[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/Gabriele-Paoloni/LPC-legacy-ISA-I-O-support/20170526-033719
config: ia64-allmodconfig (attached as .config)
compiler: ia64-linux-gcc (GCC) 6.2.0
reproduce:
wget https://raw.githubusercontent.com/01org/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=ia64
All errors (new ones prefixed by >>):
drivers/built-in.o: In function `lpc_host_io_setup':
>> hisi_lpc.c:(.text+0x252): undefined reference to `acpi_set_logic_pio_resource'
drivers/built-in.o: In function `acpi_scan_init':
(.init.text+0x6742): undefined reference to `acpi_indirectio_scan_init'
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[...] > Hi zhichang.yuan, > > [auto build test ERROR on linus/master] > [also build test ERROR on v4.12-rc2 next-20170525] > [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/Gabriele-Paoloni/LPC- > legacy-ISA-I-O-support/20170526-033719 > config: ia64-allmodconfig (attached as .config) > compiler: ia64-linux-gcc (GCC) 6.2.0 > reproduce: > wget https://raw.githubusercontent.com/01org/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=ia64 > > All errors (new ones prefixed by >>): > > drivers/built-in.o: In function `lpc_host_io_setup': > >> hisi_lpc.c:(.text+0x252): undefined reference to > `acpi_set_logic_pio_resource' > drivers/built-in.o: In function `acpi_scan_init': > (.init.text+0x6742): undefined reference to > `acpi_indirectio_scan_init' I believe the problem is in patch 4/7 config HISILICON_LPC bool "Support for ISA I/O space on Hisilicon Hip0X" depends on (ARM64 && ARCH_HISI) || COMPILE_TEST ^^^^^^^^^^^^ the COMPILE_TEST above allowing HISILICON_LPC also for other architectures. I think we can remove "|| COMPILE_TEST"...I will fix it in v10 Gab + select LOGIC_PIO + select INDIRECT_PIO + help + Driver needed for some legacy ISA devices attached to Low-Pin-Count + on Hisilicon Hip0X SoC. > > --- > 0-DAY kernel test infrastructure Open Source Technology > Center > https://lists.01.org/pipermail/kbuild-all Intel > Corporation
diff --git a/drivers/acpi/arm64/acpi_indirect_pio.c b/drivers/acpi/arm64/acpi_indirect_pio.c index 7813f73..3a5ba7a 100644 --- a/drivers/acpi/arm64/acpi_indirect_pio.c +++ b/drivers/acpi/arm64/acpi_indirect_pio.c @@ -261,6 +261,9 @@ int acpi_set_logic_pio_resource(struct device *child, /* All the host devices which apply indirect-PIO can be listed here. */ static const struct acpi_device_id acpi_indirect_host_id[] = { +#ifdef CONFIG_HISILICON_LPC + {"HISI0191", INDIRECT_PIO_INFO(lpc_host_desc)}, +#endif {""}, }; diff --git a/drivers/bus/hisi_lpc.c b/drivers/bus/hisi_lpc.c index 4f3bf76..05a0a84 100644 --- a/drivers/bus/hisi_lpc.c +++ b/drivers/bus/hisi_lpc.c @@ -467,7 +467,9 @@ static int hisilpc_probe(struct platform_device *pdev) } /* register the LPC host PIO resources */ - if (!has_acpi_companion(dev)) { + if (has_acpi_companion(dev)) { + lpcdev->io_host = find_io_range_by_fwnode(dev->fwnode); + } else { struct logic_pio_hwaddr *range; range = kzalloc(sizeof(*range), GFP_KERNEL); @@ -481,13 +483,14 @@ static int hisilpc_probe(struct platform_device *pdev) ret = logic_pio_register_range(range); if (ret) { kfree(range); - dev_err(dev, "OF: register IO range FAIL!\n"); + dev_err(dev, "OF: logic_pio_register_range returned %d!\n", + ret); return -ret; } lpcdev->io_host = range; } if (!lpcdev->io_host) { - dev_err(dev, "Hisilpc IO hasn't registered!\n"); + dev_err(dev, "HiSi LPC IO hasn't been registered!\n"); return -EFAULT; } @@ -533,10 +536,72 @@ static const struct of_device_id hisilpc_of_match[] = { {}, }; +#ifdef CONFIG_ACPI +#include <acpi/acpi_indirect_pio.h> + +struct lpc_private_data { + resource_size_t io_size; + resource_size_t io_start; +}; + +static struct lpc_private_data lpc_data = { + .io_size = LPC_BUS_IO_SIZE, + .io_start = LPC_MIN_BUS_RANGE, +}; + +static int lpc_host_io_setup(struct acpi_device *adev, void *pdata) +{ + int ret = 0; + struct logic_pio_hwaddr *range; + struct lpc_private_data *lpc_private; + struct acpi_device *child; + + lpc_private = (struct lpc_private_data *)pdata; + range = kzalloc(sizeof(*range), GFP_KERNEL); + if (!range) + return -ENOMEM; + range->fwnode = &adev->fwnode; + range->flags = PIO_INDIRECT; + range->size = lpc_private->io_size; + range->hw_start = lpc_private->io_start; + + ret = logic_pio_register_range(range); + if (ret) { + kfree(range); + return ret; + } + + /* In HiSilicon lpc, only care about the children of the host. */ + list_for_each_entry(child, &adev->children, node) { + ret = acpi_set_logic_pio_resource(&child->dev, &adev->dev); + if (ret) { + dev_err(&child->dev, + "acpi_set_logic_pio_resource() returned %d\n", + ret); + return ret; + } + } + + return ret; +} + +static const struct acpi_device_id hisilpc_acpi_match[] = { + {"HISI0191", }, + {}, +}; + +const struct indirect_pio_device_desc lpc_host_desc = { + .pdata = &lpc_data, + .pre_setup = lpc_host_io_setup, +}; + +#endif + static struct platform_driver hisilpc_driver = { .driver = { .name = "hisi_lpc", .of_match_table = hisilpc_of_match, + .acpi_match_table = ACPI_PTR(hisilpc_acpi_match), }, .probe = hisilpc_probe, }; diff --git a/include/acpi/acpi_indirect_pio.h b/include/acpi/acpi_indirect_pio.h index efc5c43..7a8d26b 100644 --- a/include/acpi/acpi_indirect_pio.h +++ b/include/acpi/acpi_indirect_pio.h @@ -18,6 +18,10 @@ struct indirect_pio_device_desc { int (*pre_setup)(struct acpi_device *adev, void *pdata); }; +#ifdef CONFIG_HISILICON_LPC +extern const struct indirect_pio_device_desc lpc_host_desc; +#endif + int acpi_set_logic_pio_resource(struct device *child, struct device *hostdev);