2022-10-26 03:59:11

by chenweilong

[permalink] [raw]
Subject: [PATCH next 1/2] gpio: hisi: Add initial device tree support

Add support for HiSilicon GPIO controller in embedded platform, which
boot from devicetree.

Signed-off-by: Weilong Chen <[email protected]>
---
drivers/gpio/Kconfig | 2 +-
drivers/gpio/gpio-hisi.c | 15 ++++++++++++++-
2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
index e034f752e7ce..71a7880af59d 100644
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -310,7 +310,7 @@ config GPIO_GRGPIO

config GPIO_HISI
tristate "HiSilicon GPIO controller driver"
- depends on (ARM64 && ACPI) || COMPILE_TEST
+ depends on ARM64 || COMPILE_TEST
select GPIO_GENERIC
select GPIOLIB_IRQCHIP
help
diff --git a/drivers/gpio/gpio-hisi.c b/drivers/gpio/gpio-hisi.c
index 3caabef5c7a2..813c0c1d4e49 100644
--- a/drivers/gpio/gpio-hisi.c
+++ b/drivers/gpio/gpio-hisi.c
@@ -1,8 +1,10 @@
// SPDX-License-Identifier: GPL-2.0-only
/* Copyright (c) 2020 HiSilicon Limited. */
+#include <linux/acpi.h>
#include <linux/gpio/driver.h>
#include <linux/module.h>
#include <linux/mod_devicetable.h>
+#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/property.h>

@@ -215,11 +217,21 @@ static void hisi_gpio_init_irq(struct hisi_gpio *hisi_gpio)
hisi_gpio_write_reg(chip, HISI_GPIO_INTCOMB_MASK_WX, 1);
}

+#ifdef CONFIG_ACPI
static const struct acpi_device_id hisi_gpio_acpi_match[] = {
{"HISI0184", 0},
{}
};
MODULE_DEVICE_TABLE(acpi, hisi_gpio_acpi_match);
+#endif
+
+#ifdef CONFIG_OF
+static const struct of_device_id hisi_gpio_dts_match[] = {
+ { .compatible = "hisilicon,gpio-ascend910", },
+ { }
+};
+MODULE_DEVICE_TABLE(of, hisi_gpio_dts_match);
+#endif

static void hisi_gpio_get_pdata(struct device *dev,
struct hisi_gpio *hisi_gpio)
@@ -310,7 +322,8 @@ static int hisi_gpio_probe(struct platform_device *pdev)
static struct platform_driver hisi_gpio_driver = {
.driver = {
.name = HISI_GPIO_DRIVER_NAME,
- .acpi_match_table = hisi_gpio_acpi_match,
+ .acpi_match_table = ACPI_PTR(hisi_gpio_acpi_match),
+ .of_match_table = of_match_ptr(hisi_gpio_dts_match),
},
.probe = hisi_gpio_probe,
};
--
2.31.GIT



2022-10-26 04:11:07

by chenweilong

[permalink] [raw]
Subject: [PATCH next 2/2] dt-bindings: gpio: add entry for hisilicon,gpio-ascend910

Add the new compatible for HiSilicon gpio controller driver.

Signed-off-by: Weilong Chen <[email protected]>
---
.../gpio/hisilicon,gpio-ascend910.yaml | 54 +++++++++++++++++++
MAINTAINERS | 1 +
2 files changed, 55 insertions(+)
create mode 100644 Documentation/devicetree/bindings/gpio/hisilicon,gpio-ascend910.yaml

diff --git a/Documentation/devicetree/bindings/gpio/hisilicon,gpio-ascend910.yaml b/Documentation/devicetree/bindings/gpio/hisilicon,gpio-ascend910.yaml
new file mode 100644
index 000000000000..912e4b808cae
--- /dev/null
+++ b/Documentation/devicetree/bindings/gpio/hisilicon,gpio-ascend910.yaml
@@ -0,0 +1,54 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/gpio/hisilicon,gpio-ascend910.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: HiSilicon common GPIO controller Device Tree Bindings
+
+maintainers:
+ - Jay Fang <[email protected]>
+
+properties:
+ compatible:
+ const: hisilicon,gpio-ascend910
+ description:
+ The HiSilicon common GPIO controller can be used for many different
+ types of SoC such as Huawei Ascend AI series chips.
+
+ reg:
+ description:
+ Address and length of the register set for the device.
+ maxItems: 1
+
+ interrupts:
+ maxItems: 1
+
+ gpio-controller: true
+
+ "#gpio-cells":
+ const: 2
+
+ ngpios:
+ minimum: 1
+ maximum: 32
+
+required:
+ - compatible
+ - gpio-controller
+ - reg
+ - interrupts
+ - ngpios
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ gpio@840d0000 {
+ compatible = "hisilicon,gpio-ascend910";
+ reg = <0x840d0000 0x1000>;
+ ngpios = <0x20>;
+ gpio-controller;
+ #gpio-cells = <2>;
+ interrupts = <0x0 33 0x4>;
+ };
diff --git a/MAINTAINERS b/MAINTAINERS
index 746becb5fe92..0ec86558cdce 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -9212,6 +9212,7 @@ HISILICON GPIO DRIVER
M: Jay Fang <[email protected]>
L: [email protected]
S: Maintained
+F: Documentation/devicetree/bindings/gpio/hisilicon,gpio-ascend910.yaml
F: drivers/gpio/gpio-hisi.c

HISILICON HIGH PERFORMANCE RSA ENGINE DRIVER (HPRE)
--
2.31.GIT


2022-10-26 15:46:26

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH next 2/2] dt-bindings: gpio: add entry for hisilicon,gpio-ascend910

On 25/10/2022 23:42, Weilong Chen wrote:
> Add the new compatible for HiSilicon gpio controller driver.
>
> Signed-off-by: Weilong Chen <[email protected]>
> ---
> .../gpio/hisilicon,gpio-ascend910.yaml | 54 +++++++++++++++++++
> MAINTAINERS | 1 +
> 2 files changed, 55 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/gpio/hisilicon,gpio-ascend910.yaml
>
> diff --git a/Documentation/devicetree/bindings/gpio/hisilicon,gpio-ascend910.yaml b/Documentation/devicetree/bindings/gpio/hisilicon,gpio-ascend910.yaml
> new file mode 100644
> index 000000000000..912e4b808cae
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/gpio/hisilicon,gpio-ascend910.yaml
> @@ -0,0 +1,54 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/gpio/hisilicon,gpio-ascend910.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: HiSilicon common GPIO controller Device Tree Bindings

Drop "Device Tree Bindings"

> +
> +maintainers:
> + - Jay Fang <[email protected]>
> +
> +properties:
> + compatible:
> + const: hisilicon,gpio-ascend910
> + description:
> + The HiSilicon common GPIO controller can be used for many different
> + types of SoC such as Huawei Ascend AI series chips.

Put this description in top-level description.

> +
> + reg:
> + description:
> + Address and length of the register set for the device.

Drop description.

> + maxItems: 1
> +
> + interrupts:
> + maxItems: 1
> +
> + gpio-controller: true
> +
> + "#gpio-cells":
> + const: 2
> +
> + ngpios:
> + minimum: 1
> + maximum: 32
> +
> +required:
> + - compatible
> + - gpio-controller

gpio-cells are not required?

> + - reg
> + - interrupts
> + - ngpios
> +
> +unevaluatedProperties: false

Instead:
additionalProperties: false

> +
> +examples:
> + - |
> + gpio@840d0000 {
> + compatible = "hisilicon,gpio-ascend910";
> + reg = <0x840d0000 0x1000>;
> + ngpios = <0x20>;

Convention for counting is to use decimal numbers.

> + gpio-controller;
> + #gpio-cells = <2>;
> + interrupts = <0x0 33 0x4>;

This looks like standard IRQ flags, so use respective defines.


Best regards,
Krzysztof


2022-10-26 20:42:23

by Rob Herring

[permalink] [raw]
Subject: Re: [PATCH next 2/2] dt-bindings: gpio: add entry for hisilicon,gpio-ascend910

On Wed, Oct 26, 2022 at 11:42:19AM +0800, Weilong Chen wrote:
> Add the new compatible for HiSilicon gpio controller driver.
>
> Signed-off-by: Weilong Chen <[email protected]>
> ---
> .../gpio/hisilicon,gpio-ascend910.yaml | 54 +++++++++++++++++++
> MAINTAINERS | 1 +
> 2 files changed, 55 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/gpio/hisilicon,gpio-ascend910.yaml
>
> diff --git a/Documentation/devicetree/bindings/gpio/hisilicon,gpio-ascend910.yaml b/Documentation/devicetree/bindings/gpio/hisilicon,gpio-ascend910.yaml
> new file mode 100644
> index 000000000000..912e4b808cae
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/gpio/hisilicon,gpio-ascend910.yaml
> @@ -0,0 +1,54 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/gpio/hisilicon,gpio-ascend910.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: HiSilicon common GPIO controller Device Tree Bindings
> +
> +maintainers:
> + - Jay Fang <[email protected]>
> +
> +properties:
> + compatible:
> + const: hisilicon,gpio-ascend910

The normal convention is: vendor,soc-ipblock

> + description:
> + The HiSilicon common GPIO controller can be used for many different
> + types of SoC such as Huawei Ascend AI series chips.
> +
> + reg:
> + description:
> + Address and length of the register set for the device.
> + maxItems: 1
> +
> + interrupts:
> + maxItems: 1
> +
> + gpio-controller: true
> +
> + "#gpio-cells":
> + const: 2
> +
> + ngpios:
> + minimum: 1
> + maximum: 32
> +
> +required:
> + - compatible
> + - gpio-controller
> + - reg
> + - interrupts
> + - ngpios
> +
> +unevaluatedProperties: false
> +
> +examples:
> + - |
> + gpio@840d0000 {
> + compatible = "hisilicon,gpio-ascend910";
> + reg = <0x840d0000 0x1000>;
> + ngpios = <0x20>;
> + gpio-controller;
> + #gpio-cells = <2>;
> + interrupts = <0x0 33 0x4>;
> + };
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 746becb5fe92..0ec86558cdce 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -9212,6 +9212,7 @@ HISILICON GPIO DRIVER
> M: Jay Fang <[email protected]>
> L: [email protected]
> S: Maintained
> +F: Documentation/devicetree/bindings/gpio/hisilicon,gpio-ascend910.yaml
> F: drivers/gpio/gpio-hisi.c
>
> HISILICON HIGH PERFORMANCE RSA ENGINE DRIVER (HPRE)
> --
> 2.31.GIT
>
>

2022-10-27 08:24:12

by chenweilong

[permalink] [raw]
Subject: Re: [PATCH next 2/2] dt-bindings: gpio: add entry for hisilicon,gpio-ascend910

On 2022/10/26 22:46, Krzysztof Kozlowski wrote:
> On 25/10/2022 23:42, Weilong Chen wrote:
>> Add the new compatible for HiSilicon gpio controller driver.
>>
>> Signed-off-by: Weilong Chen <[email protected]>
>> ---
>> .../gpio/hisilicon,gpio-ascend910.yaml | 54 +++++++++++++++++++
>> MAINTAINERS | 1 +
>> 2 files changed, 55 insertions(+)
>> create mode 100644 Documentation/devicetree/bindings/gpio/hisilicon,gpio-ascend910.yaml
>>
>> diff --git a/Documentation/devicetree/bindings/gpio/hisilicon,gpio-ascend910.yaml b/Documentation/devicetree/bindings/gpio/hisilicon,gpio-ascend910.yaml
>> new file mode 100644
>> index 000000000000..912e4b808cae
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/gpio/hisilicon,gpio-ascend910.yaml
>> @@ -0,0 +1,54 @@
>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
>> +%YAML 1.2
>> +---
>> +$id: http://devicetree.org/schemas/gpio/hisilicon,gpio-ascend910.yaml#
>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>> +
>> +title: HiSilicon common GPIO controller Device Tree Bindings
> Drop "Device Tree Bindings"
>
>> +
>> +maintainers:
>> + - Jay Fang <[email protected]>
>> +
>> +properties:
>> + compatible:
>> + const: hisilicon,gpio-ascend910
>> + description:
>> + The HiSilicon common GPIO controller can be used for many different
>> + types of SoC such as Huawei Ascend AI series chips.
> Put this description in top-level description.
>
>> +
>> + reg:
>> + description:
>> + Address and length of the register set for the device.
> Drop description.
>
>> + maxItems: 1
>> +
>> + interrupts:
>> + maxItems: 1
>> +
>> + gpio-controller: true
>> +
>> + "#gpio-cells":
>> + const: 2
>> +
>> + ngpios:
>> + minimum: 1
>> + maximum: 32
>> +
>> +required:
>> + - compatible
>> + - gpio-controller
> gpio-cells are not required?
>
>> + - reg
>> + - interrupts
>> + - ngpios
>> +
>> +unevaluatedProperties: false
> Instead:
> additionalProperties: false
>
>> +
>> +examples:
>> + - |
>> + gpio@840d0000 {
>> + compatible = "hisilicon,gpio-ascend910";
>> + reg = <0x840d0000 0x1000>;
>> + ngpios = <0x20>;
> Convention for counting is to use decimal numbers.
>
>> + gpio-controller;
>> + #gpio-cells = <2>;
>> + interrupts = <0x0 33 0x4>;
> This looks like standard IRQ flags, so use respective defines.

Sorry, I don't get this, you mean like this? :

interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;

Thanks.

>
> Best regards,
> Krzysztof
>
> .



2022-10-27 13:11:44

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH next 2/2] dt-bindings: gpio: add entry for hisilicon,gpio-ascend910

On 27/10/2022 03:47, chenweilong wrote:
>> Convention for counting is to use decimal numbers.
>>
>>> + gpio-controller;
>>> + #gpio-cells = <2>;
>>> + interrupts = <0x0 33 0x4>;
>> This looks like standard IRQ flags, so use respective defines.
>
> Sorry, I don't get this, you mean like this? :
>
> interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;

Yes.

Best regards,
Krzysztof


2022-11-08 11:22:26

by Linus Walleij

[permalink] [raw]
Subject: Re: [PATCH next 1/2] gpio: hisi: Add initial device tree support

Hi Weilong,

thanks for your patch!

On Wed, Oct 26, 2022 at 5:34 AM Weilong Chen <[email protected]> wrote:

> Add support for HiSilicon GPIO controller in embedded platform, which
> boot from devicetree.
>
> Signed-off-by: Weilong Chen <[email protected]>

I will provide OF comments, I let Andy and other ACPI experts say
what is necessary for ACPI.

(...)
> +#include <linux/acpi.h>

I don't know if this is necessary, check it.

> #include <linux/gpio/driver.h>
> #include <linux/module.h>
> #include <linux/mod_devicetable.h>
> +#include <linux/of.h>

This is unnecessary for what you are trying to do. Drop it.

> +#ifdef CONFIG_ACPI
> static const struct acpi_device_id hisi_gpio_acpi_match[] = {
> {"HISI0184", 0},
> {}
> };
> MODULE_DEVICE_TABLE(acpi, hisi_gpio_acpi_match);
> +#endif

Don't know about this #ifdef, check if it is needed.

> +#ifdef CONFIG_OF
> +static const struct of_device_id hisi_gpio_dts_match[] = {
> + { .compatible = "hisilicon,gpio-ascend910", },
> + { }
> +};
> +MODULE_DEVICE_TABLE(of, hisi_gpio_dts_match);
> +#endif

Drop the ifdef, it is not needed.

> static void hisi_gpio_get_pdata(struct device *dev,
> struct hisi_gpio *hisi_gpio)
> @@ -310,7 +322,8 @@ static int hisi_gpio_probe(struct platform_device *pdev)
> static struct platform_driver hisi_gpio_driver = {
> .driver = {
> .name = HISI_GPIO_DRIVER_NAME,
> - .acpi_match_table = hisi_gpio_acpi_match,
> + .acpi_match_table = ACPI_PTR(hisi_gpio_acpi_match),
> + .of_match_table = of_match_ptr(hisi_gpio_dts_match),

Drop of_match_ptr() just assign it.

The reason it works is because we put struct of_device_id into the generic
headers so we can avoid the ifdefing.

Yours,
Linus Walleij

2022-11-08 12:08:07

by chenweilong

[permalink] [raw]
Subject: Re: [PATCH next 1/2] gpio: hisi: Add initial device tree support

On 2022/11/8 18:33, Linus Walleij wrote:
> Hi Weilong,
>
> thanks for your patch!
>
> On Wed, Oct 26, 2022 at 5:34 AM Weilong Chen <[email protected]> wrote:
>
>> Add support for HiSilicon GPIO controller in embedded platform, which
>> boot from devicetree.
>>
>> Signed-off-by: Weilong Chen <[email protected]>
> I will provide OF comments, I let Andy and other ACPI experts say
> what is necessary for ACPI.
>
> (...)
>> +#include <linux/acpi.h>
> I don't know if this is necessary, check it.
>
>> #include <linux/gpio/driver.h>
>> #include <linux/module.h>
>> #include <linux/mod_devicetable.h>
>> +#include <linux/of.h>
> This is unnecessary for what you are trying to do. Drop it.
>
>> +#ifdef CONFIG_ACPI
>> static const struct acpi_device_id hisi_gpio_acpi_match[] = {
>> {"HISI0184", 0},
>> {}
>> };
>> MODULE_DEVICE_TABLE(acpi, hisi_gpio_acpi_match);
>> +#endif
> Don't know about this #ifdef, check if it is needed.
>
>> +#ifdef CONFIG_OF
>> +static const struct of_device_id hisi_gpio_dts_match[] = {
>> + { .compatible = "hisilicon,gpio-ascend910", },
>> + { }
>> +};
>> +MODULE_DEVICE_TABLE(of, hisi_gpio_dts_match);
>> +#endif
> Drop the ifdef, it is not needed.
>
>> static void hisi_gpio_get_pdata(struct device *dev,
>> struct hisi_gpio *hisi_gpio)
>> @@ -310,7 +322,8 @@ static int hisi_gpio_probe(struct platform_device *pdev)
>> static struct platform_driver hisi_gpio_driver = {
>> .driver = {
>> .name = HISI_GPIO_DRIVER_NAME,
>> - .acpi_match_table = hisi_gpio_acpi_match,
>> + .acpi_match_table = ACPI_PTR(hisi_gpio_acpi_match),
>> + .of_match_table = of_match_ptr(hisi_gpio_dts_match),
> Drop of_match_ptr() just assign it.
>
> The reason it works is because we put struct of_device_id into the generic
> headers so we can avoid the ifdefing.
>
> Yours,
> Linus Walleij

Thank for your review,I get it,and make  improvements in subsequent patches.


Best regards,

Weilong Chen.

> .