Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1650388 > unrolled thread
| Started by | Gabriele Paoloni <gabriele.paoloni@huawei.com> |
|---|---|
| First post | 2017-05-25 13:40 +0200 |
| Last post | 2017-05-26 12:20 +0200 |
| Articles | 2 — 1 participant |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH v9 6/7] LPC: Add the ACPI LPC support Gabriele Paoloni <gabriele.paoloni@huawei.com> - 2017-05-25 13:40 +0200
RE: [PATCH v9 6/7] LPC: Add the ACPI LPC support Gabriele Paoloni <gabriele.paoloni@huawei.com> - 2017-05-26 12:20 +0200
| From | Gabriele Paoloni <gabriele.paoloni@huawei.com> |
|---|---|
| Date | 2017-05-25 13:40 +0200 |
| Subject | [PATCH v9 6/7] LPC: Add the ACPI LPC support |
| Message-ID | <tKZhw-7An-17@gated-at.bofh.it> |
From: "zhichang.yuan" <yuanzhichang@hisilicon.com>
Based on the provious patches, this patch supports the ACPI LPC host on
Hip06/Hip07.
Signed-off-by: zhichang.yuan <yuanzhichang@hisilicon.com>
Signed-off-by: John Garry <john.garry@huawei.com>
Signed-off-by: Gabriele Paoloni <gabriele.paoloni@huawei.com>
Tested-by: dann frazier <dann.frazier@canonical.com>
---
drivers/acpi/arm64/acpi_indirect_pio.c | 3 ++
drivers/bus/hisi_lpc.c | 71 ++++++++++++++++++++++++++++++++--
include/acpi/acpi_indirect_pio.h | 4 ++
3 files changed, 75 insertions(+), 3 deletions(-)
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);
--
2.7.4
[toc] | [next] | [standalone]
| From | Gabriele Paoloni <gabriele.paoloni@huawei.com> |
|---|---|
| Date | 2017-05-26 12:20 +0200 |
| Message-ID | <tLkvD-4BA-7@gated-at.bofh.it> |
| In reply to | #1650388 |
[...]
> 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
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web