diff mbox series

[v3,1/2] sandbox, test: add test for GPIO_HOG function

Message ID 20200205061959.907501-2-hs@denx.de
State Changes Requested
Delegated to: Tom Rini
Headers show
Series gpio: add possibility to search for gpio label name | expand

Commit Message

Heiko Schocher Feb. 5, 2020, 6:19 a.m. UTC
currently gpio hog function is not tested with "ut dm gpio"
so add some basic tests for gpio hog functionality.

For this enable GPIO_HOG in sandbox_defconfig, add
in DTS some gpio hog entries, and add testcase in
"ut dm gpio" command.

Signed-off-by: Heiko Schocher <hs@denx.de>

---

Changes in v3: None
Changes in v2:
- add basic gpio hog test functions

 arch/sandbox/dts/test.dts          | 24 ++++++++++++++++++++++++
 configs/sandbox64_defconfig        |  1 +
 configs/sandbox_defconfig          |  1 +
 configs/sandbox_flattree_defconfig |  1 +
 configs/sandbox_spl_defconfig      |  1 +
 test/dm/gpio.c                     | 23 +++++++++++++++++++++++
 6 files changed, 51 insertions(+)

Comments

Simon Glass Feb. 5, 2020, 5:59 p.m. UTC | #1
On Tue, 4 Feb 2020 at 23:20, Heiko Schocher <hs@denx.de> wrote:
>
> currently gpio hog function is not tested with "ut dm gpio"
> so add some basic tests for gpio hog functionality.
>
> For this enable GPIO_HOG in sandbox_defconfig, add
> in DTS some gpio hog entries, and add testcase in
> "ut dm gpio" command.
>
> Signed-off-by: Heiko Schocher <hs@denx.de>
>
> ---
>
> Changes in v3: None
> Changes in v2:
> - add basic gpio hog test functions
>
>  arch/sandbox/dts/test.dts          | 24 ++++++++++++++++++++++++
>  configs/sandbox64_defconfig        |  1 +
>  configs/sandbox_defconfig          |  1 +
>  configs/sandbox_flattree_defconfig |  1 +
>  configs/sandbox_spl_defconfig      |  1 +
>  test/dm/gpio.c                     | 23 +++++++++++++++++++++++
>  6 files changed, 51 insertions(+)

Reviewed-by: Simon Glass <sjg@chromium.org>
Tom Rini April 24, 2020, 5:45 p.m. UTC | #2
On Wed, Feb 05, 2020 at 07:19:58AM +0100, Heiko Schocher wrote:

> currently gpio hog function is not tested with "ut dm gpio"
> so add some basic tests for gpio hog functionality.
> 
> For this enable GPIO_HOG in sandbox_defconfig, add
> in DTS some gpio hog entries, and add testcase in
> "ut dm gpio" command.
> 
> Signed-off-by: Heiko Schocher <hs@denx.de>
> Reviewed-by: Simon Glass <sjg@chromium.org>

This no longer applies cleanly/obviously, please rebase, thanks!
Heiko Schocher April 27, 2020, 5:16 a.m. UTC | #3
Hello Tom,

Am 24.04.2020 um 19:45 schrieb Tom Rini:
> On Wed, Feb 05, 2020 at 07:19:58AM +0100, Heiko Schocher wrote:
> 
>> currently gpio hog function is not tested with "ut dm gpio"
>> so add some basic tests for gpio hog functionality.
>>
>> For this enable GPIO_HOG in sandbox_defconfig, add
>> in DTS some gpio hog entries, and add testcase in
>> "ut dm gpio" command.
>>
>> Signed-off-by: Heiko Schocher <hs@denx.de>
>> Reviewed-by: Simon Glass <sjg@chromium.org>
> 
> This no longer applies cleanly/obviously, please rebase, thanks!

Done, unfortunately, aristainetos2 does not boot anymore... got:

    ├─UBOOT (ari-ub)
│   │    <> ### Connect to "aristainetos" using command: /usr/bin/telnet ts2 7015
│   │    <> Trying 192.168.1.202...
│   │    <> Connected to ts2.
│   │    <> Escape character is '^]'.
│   │    <> <debug_uart> unrecognized JEDEC id bytes: 00, 00, 00
│   │    <> *** Warning - spi_flash_probe_bus_cs() failed, using default environment
│   │    <>
│   │    <> alloc space exhausted
│   │    <> alloc space exhausted
│   │    <> alloc space exhausted
│   │    <> himport_r: can't insert "loadbootscriptUSB=ext4load usb 0 ${loadaddr} ${script};" into 
hash table
│   │    <> alloc space exhausted
│   │    <> alloc space exhausted

Seems early SPI NOR detection fails ...

Have to start bisect, try to find some time...

bye,
Heiko
Heiko Schocher April 27, 2020, 6:47 a.m. UTC | #4
Hello Tom, Patrick,

Am 27.04.2020 um 07:16 schrieb Heiko Schocher:
> Hello Tom,
> 
> Am 24.04.2020 um 19:45 schrieb Tom Rini:
>> On Wed, Feb 05, 2020 at 07:19:58AM +0100, Heiko Schocher wrote:
>>
>>> currently gpio hog function is not tested with "ut dm gpio"
>>> so add some basic tests for gpio hog functionality.
>>>
>>> For this enable GPIO_HOG in sandbox_defconfig, add
>>> in DTS some gpio hog entries, and add testcase in
>>> "ut dm gpio" command.
>>>
>>> Signed-off-by: Heiko Schocher <hs@denx.de>
>>> Reviewed-by: Simon Glass <sjg@chromium.org>
>>
>> This no longer applies cleanly/obviously, please rebase, thanks!
> 
> Done, unfortunately, aristainetos2 does not boot anymore... got:
> 
>     ├─UBOOT (ari-ub)
> │   │    <> ### Connect to "aristainetos" using command: /usr/bin/telnet ts2 7015
> │   │    <> Trying 192.168.1.202...
> │   │    <> Connected to ts2.
> │   │    <> Escape character is '^]'.
> │   │    <> <debug_uart> unrecognized JEDEC id bytes: 00, 00, 00
> │   │    <> *** Warning - spi_flash_probe_bus_cs() failed, using default environment
> │   │    <>
> │   │    <> alloc space exhausted
> │   │    <> alloc space exhausted
> │   │    <> alloc space exhausted
> │   │    <> himport_r: can't insert "loadbootscriptUSB=ext4load usb 0 ${loadaddr} ${script};" into 
> hash table
> │   │    <> alloc space exhausted
> │   │    <> alloc space exhausted
> 
> Seems early SPI NOR detection fails ...
> 
> Have to start bisect, try to find some time...

Ok, commit:

commit 788ea834124bd6169ea10b2d37d5de48a2dd28a0 (bisect-788ea83412)
Author: Patrick Delaunay <patrick.delaunay@st.com>
Date:   Mon Jan 13 11:35:03 2020 +0100

     gpio: add function _dm_gpio_set_dir_flags

     Introduce the function _dm_gpio_set_dir_flags to set dir flags
     without check if the GPIO is reserved.

     Separate the reserved check for "set_dir" and "set_dir_flags".

     This patch is a preliminary step to add new ops.

     Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
     Reviewed-by: Simon Glass <sjg@chromium.org>

breaks the aristainetos2 board ... reverting this patch (and therefore
I needed some more patches to revert as it was a patchseries):

* dbf06f0e6c - (HEAD -> aristainetos-denx) Revert "gpio: add function _gpio_get_value" (vor 5 
Minuten) <Heiko Schocher>
* 5c85a7cc26 - Revert "gpio: add function _dm_gpio_set_dir_flags" (vor 5 Minuten) <Heiko Schocher>
* c226d65d88 - Revert "gpio: add function check_dir_flags" (vor 5 Minuten) <Heiko Schocher>
* 1423a40c69 - Revert "gpio: add helper GPIOD_FLAGS_OUTPUT" (vor 5 Minuten) <Heiko Schocher>
* fb0176450f - Revert "gpio: update dir_flags management" (vor 5 Minuten) <Heiko Schocher>
* 9d74cc5ecb - Revert "gpio: add support of new GPIO direction flag" (vor 5 Minuten) <Heiko Schocher>
* 3bf361c206 - Revert "gpio: add ops to get dir flags" (vor 5 Minuten) <Heiko Schocher>
* beb6d3c2d9 - Revert "gpio: add ops to set dir flags" (vor 5 Minuten) <Heiko Schocher>

And board boots again fine ...

I do not see, why commit 788ea834124bd6169ea10b2d37d5de48a2dd28a0
makes SPI not working anymore ...

Any ideas?

bye,
Heiko
Heiko Schocher May 12, 2020, 6:26 a.m. UTC | #5
Hello Tom, Patrick,

Am 27.04.2020 um 08:47 schrieb Heiko Schocher:
> Hello Tom, Patrick,
> 
> Am 27.04.2020 um 07:16 schrieb Heiko Schocher:
>> Hello Tom,
>>
>> Am 24.04.2020 um 19:45 schrieb Tom Rini:
>>> On Wed, Feb 05, 2020 at 07:19:58AM +0100, Heiko Schocher wrote:
>>>
>>>> currently gpio hog function is not tested with "ut dm gpio"
>>>> so add some basic tests for gpio hog functionality.
>>>>
>>>> For this enable GPIO_HOG in sandbox_defconfig, add
>>>> in DTS some gpio hog entries, and add testcase in
>>>> "ut dm gpio" command.
>>>>
>>>> Signed-off-by: Heiko Schocher <hs@denx.de>
>>>> Reviewed-by: Simon Glass <sjg@chromium.org>
>>>
>>> This no longer applies cleanly/obviously, please rebase, thanks!
>>
>> Done, unfortunately, aristainetos2 does not boot anymore... got:
>>
>>     ├─UBOOT (ari-ub)
>> │   │    <> ### Connect to "aristainetos" using command: /usr/bin/telnet ts2 7015
>> │   │    <> Trying 192.168.1.202...
>> │   │    <> Connected to ts2.
>> │   │    <> Escape character is '^]'.
>> │   │    <> <debug_uart> unrecognized JEDEC id bytes: 00, 00, 00
>> │   │    <> *** Warning - spi_flash_probe_bus_cs() failed, using default environment
>> │   │    <>
>> │   │    <> alloc space exhausted
>> │   │    <> alloc space exhausted
>> │   │    <> alloc space exhausted
>> │   │    <> himport_r: can't insert "loadbootscriptUSB=ext4load usb 0 ${loadaddr} ${script};" into 
>> hash table
>> │   │    <> alloc space exhausted
>> │   │    <> alloc space exhausted
>>
>> Seems early SPI NOR detection fails ...
>>
>> Have to start bisect, try to find some time...
> 
> Ok, commit:
> 
> commit 788ea834124bd6169ea10b2d37d5de48a2dd28a0 (bisect-788ea83412)
> Author: Patrick Delaunay <patrick.delaunay@st.com>
> Date:   Mon Jan 13 11:35:03 2020 +0100
> 
>      gpio: add function _dm_gpio_set_dir_flags
> 
>      Introduce the function _dm_gpio_set_dir_flags to set dir flags
>      without check if the GPIO is reserved.
> 
>      Separate the reserved check for "set_dir" and "set_dir_flags".
> 
>      This patch is a preliminary step to add new ops.
> 
>      Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
>      Reviewed-by: Simon Glass <sjg@chromium.org>
> 
> breaks the aristainetos2 board ... reverting this patch (and therefore
> I needed some more patches to revert as it was a patchseries):
> 
> * dbf06f0e6c - (HEAD -> aristainetos-denx) Revert "gpio: add function _gpio_get_value" (vor 5 
> Minuten) <Heiko Schocher>
> * 5c85a7cc26 - Revert "gpio: add function _dm_gpio_set_dir_flags" (vor 5 Minuten) <Heiko Schocher>
> * c226d65d88 - Revert "gpio: add function check_dir_flags" (vor 5 Minuten) <Heiko Schocher>
> * 1423a40c69 - Revert "gpio: add helper GPIOD_FLAGS_OUTPUT" (vor 5 Minuten) <Heiko Schocher>
> * fb0176450f - Revert "gpio: update dir_flags management" (vor 5 Minuten) <Heiko Schocher>
> * 9d74cc5ecb - Revert "gpio: add support of new GPIO direction flag" (vor 5 Minuten) <Heiko Schocher>
> * 3bf361c206 - Revert "gpio: add ops to get dir flags" (vor 5 Minuten) <Heiko Schocher>
> * beb6d3c2d9 - Revert "gpio: add ops to set dir flags" (vor 5 Minuten) <Heiko Schocher>
> 
> And board boots again fine ...
> 
> I do not see, why commit 788ea834124bd6169ea10b2d37d5de48a2dd28a0
> makes SPI not working anymore ...
> 
> Any ideas?

Just looking with sandbox into it ... added debug patch:

diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c
index 3fb6b6e69c..2e68f558bd 100644
--- a/drivers/gpio/gpio-uclass.c
+++ b/drivers/gpio/gpio-uclass.c
@@ -273,9 +273,11 @@ static int gpio_hog_probe(struct udevice *dev)
         struct gpio_hog_priv *priv = dev_get_priv(dev);
         int ret;

+       printf("%s: --------- dev->name: %s nr: %d flag: %d platflags: %d\n", __func__, dev->name, 
plat->val[0], plat->val[1], plat->gpiod_flags);
         ret = gpio_dev_request_index(dev->parent, dev->name, "gpio-hog",
                                      plat->val[0], plat->gpiod_flags,
                                      plat->val[1], &priv->gpiod);
+       printf("%s: --------- gpiod: %p\n", __func__, &priv->gpiod);
         if (ret < 0) {
                 debug("%s: node %s could not get gpio.\n", __func__,
                       dev->name);
@@ -291,6 +293,10 @@ static int gpio_hog_probe(struct udevice *dev)
                 }
         }

+       if (1) {
+               struct gpio_desc *gpiod = &priv->gpiod;
+               printf("%s: gpiod_flags: %x\n", __func__, gpiod->flags);
+       }
         return 0;
  }


and see:

=> ut dm gpio
Test: dm_test_gpio: gpio.c
gpio_hog_probe_all: ---------
gpio_hog_probe: --------- dev->name: hog_input_active_low nr: 0 flag: 1 platflags: 4
gpio_hog_probe: --------- gpiod: 0000000015901050
gpio_hog_probe: gpiod_flags: 8
gpio_hog_probe: --------- dev->name: hog_input_active_high nr: 1 flag: 0 platflags: 4
gpio_hog_probe: --------- gpiod: 00000000159010a0
gpio_hog_probe: gpiod_flags: 0
gpio_hog_probe: --------- dev->name: hog_output_low nr: 2 flag: 0 platflags: 2
gpio_hog_probe: --------- gpiod: 00000000159010f0
gpio_hog_probe: gpiod_flags: 0
gpio_hog_probe: --------- dev->name: hog_output_high nr: 3 flag: 0 platflags: 2
gpio_hog_probe: --------- gpiod: 0000000015901130
gpio_hog_probe: gpiod_flags: 0
gpio_hog_lookup_name: name: hog_input_active_low
gpio_hog_lookup_name: --------- gpiod: 15901050
test/dm/gpio.c:115, dm_test_gpio(): GPIOD_IS_IN | GPIOD_ACTIVE_LOW == desc->flags: Expected 0xc 
(12), got 0x8 (8)

It looks like the  plat->gpiod_flags are not written anymore into gpiod
through the gpio_dev_request_index() function ...

bye,
Heiko
Heiko Schocher May 12, 2020, 7:32 a.m. UTC | #6
Hello tom, Patrick,

Am 12.05.2020 um 08:26 schrieb Heiko Schocher:
> Hello Tom, Patrick,
> 
> Am 27.04.2020 um 08:47 schrieb Heiko Schocher:
>> Hello Tom, Patrick,
>>
>> Am 27.04.2020 um 07:16 schrieb Heiko Schocher:
>>> Hello Tom,
>>>
>>> Am 24.04.2020 um 19:45 schrieb Tom Rini:
>>>> On Wed, Feb 05, 2020 at 07:19:58AM +0100, Heiko Schocher wrote:
>>>>
>>>>> currently gpio hog function is not tested with "ut dm gpio"
>>>>> so add some basic tests for gpio hog functionality.
>>>>>
>>>>> For this enable GPIO_HOG in sandbox_defconfig, add
>>>>> in DTS some gpio hog entries, and add testcase in
>>>>> "ut dm gpio" command.
>>>>>
>>>>> Signed-off-by: Heiko Schocher <hs@denx.de>
>>>>> Reviewed-by: Simon Glass <sjg@chromium.org>
>>>>
>>>> This no longer applies cleanly/obviously, please rebase, thanks!
>>>
>>> Done, unfortunately, aristainetos2 does not boot anymore... got:
>>>
>>>     ├─UBOOT (ari-ub)
>>> │   │    <> ### Connect to "aristainetos" using command: /usr/bin/telnet ts2 7015
>>> │   │    <> Trying 192.168.1.202...
>>> │   │    <> Connected to ts2.
>>> │   │    <> Escape character is '^]'.
>>> │   │    <> <debug_uart> unrecognized JEDEC id bytes: 00, 00, 00
>>> │   │    <> *** Warning - spi_flash_probe_bus_cs() failed, using default environment
>>> │   │    <>
>>> │   │    <> alloc space exhausted
>>> │   │    <> alloc space exhausted
>>> │   │    <> alloc space exhausted
>>> │   │    <> himport_r: can't insert "loadbootscriptUSB=ext4load usb 0 ${loadaddr} ${script};" 
>>> into hash table
>>> │   │    <> alloc space exhausted
>>> │   │    <> alloc space exhausted
>>>
>>> Seems early SPI NOR detection fails ...
>>>
>>> Have to start bisect, try to find some time...
>>
>> Ok, commit:
>>
>> commit 788ea834124bd6169ea10b2d37d5de48a2dd28a0 (bisect-788ea83412)
>> Author: Patrick Delaunay <patrick.delaunay@st.com>
>> Date:   Mon Jan 13 11:35:03 2020 +0100
>>
>>      gpio: add function _dm_gpio_set_dir_flags
>>
>>      Introduce the function _dm_gpio_set_dir_flags to set dir flags
>>      without check if the GPIO is reserved.
>>
>>      Separate the reserved check for "set_dir" and "set_dir_flags".
>>
>>      This patch is a preliminary step to add new ops.
>>
>>      Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
>>      Reviewed-by: Simon Glass <sjg@chromium.org>
>>
>> breaks the aristainetos2 board ... reverting this patch (and therefore
>> I needed some more patches to revert as it was a patchseries):
>>
>> * dbf06f0e6c - (HEAD -> aristainetos-denx) Revert "gpio: add function _gpio_get_value" (vor 5 
>> Minuten) <Heiko Schocher>
>> * 5c85a7cc26 - Revert "gpio: add function _dm_gpio_set_dir_flags" (vor 5 Minuten) <Heiko Schocher>
>> * c226d65d88 - Revert "gpio: add function check_dir_flags" (vor 5 Minuten) <Heiko Schocher>
>> * 1423a40c69 - Revert "gpio: add helper GPIOD_FLAGS_OUTPUT" (vor 5 Minuten) <Heiko Schocher>
>> * fb0176450f - Revert "gpio: update dir_flags management" (vor 5 Minuten) <Heiko Schocher>
>> * 9d74cc5ecb - Revert "gpio: add support of new GPIO direction flag" (vor 5 Minuten) <Heiko Schocher>
>> * 3bf361c206 - Revert "gpio: add ops to get dir flags" (vor 5 Minuten) <Heiko Schocher>
>> * beb6d3c2d9 - Revert "gpio: add ops to set dir flags" (vor 5 Minuten) <Heiko Schocher>
>>
>> And board boots again fine ...
>>
>> I do not see, why commit 788ea834124bd6169ea10b2d37d5de48a2dd28a0
>> makes SPI not working anymore ...
>>
>> Any ideas?
> 
> Just looking with sandbox into it ... added debug patch:
> 
> diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c
> index 3fb6b6e69c..2e68f558bd 100644
> --- a/drivers/gpio/gpio-uclass.c
> +++ b/drivers/gpio/gpio-uclass.c
> @@ -273,9 +273,11 @@ static int gpio_hog_probe(struct udevice *dev)
>          struct gpio_hog_priv *priv = dev_get_priv(dev);
>          int ret;
> 
> +       printf("%s: --------- dev->name: %s nr: %d flag: %d platflags: %d\n", __func__, dev->name, 
> plat->val[0], plat->val[1], plat->gpiod_flags);
>          ret = gpio_dev_request_index(dev->parent, dev->name, "gpio-hog",
>                                       plat->val[0], plat->gpiod_flags,
>                                       plat->val[1], &priv->gpiod);
> +       printf("%s: --------- gpiod: %p\n", __func__, &priv->gpiod);
>          if (ret < 0) {
>                  debug("%s: node %s could not get gpio.\n", __func__,
>                        dev->name);
> @@ -291,6 +293,10 @@ static int gpio_hog_probe(struct udevice *dev)
>                  }
>          }
> 
> +       if (1) {
> +               struct gpio_desc *gpiod = &priv->gpiod;
> +               printf("%s: gpiod_flags: %x\n", __func__, gpiod->flags);
> +       }
>          return 0;
>   }
> 
> 
> and see:
> 
> => ut dm gpio
> Test: dm_test_gpio: gpio.c
> gpio_hog_probe_all: ---------
> gpio_hog_probe: --------- dev->name: hog_input_active_low nr: 0 flag: 1 platflags: 4
> gpio_hog_probe: --------- gpiod: 0000000015901050
> gpio_hog_probe: gpiod_flags: 8
> gpio_hog_probe: --------- dev->name: hog_input_active_high nr: 1 flag: 0 platflags: 4
> gpio_hog_probe: --------- gpiod: 00000000159010a0
> gpio_hog_probe: gpiod_flags: 0
> gpio_hog_probe: --------- dev->name: hog_output_low nr: 2 flag: 0 platflags: 2
> gpio_hog_probe: --------- gpiod: 00000000159010f0
> gpio_hog_probe: gpiod_flags: 0
> gpio_hog_probe: --------- dev->name: hog_output_high nr: 3 flag: 0 platflags: 2
> gpio_hog_probe: --------- gpiod: 0000000015901130
> gpio_hog_probe: gpiod_flags: 0
> gpio_hog_lookup_name: name: hog_input_active_low
> gpio_hog_lookup_name: --------- gpiod: 15901050
> test/dm/gpio.c:115, dm_test_gpio(): GPIOD_IS_IN | GPIOD_ACTIVE_LOW == desc->flags: Expected 0xc 
> (12), got 0x8 (8)
> 
> It looks like the  plat->gpiod_flags are not written anymore into gpiod
> through the gpio_dev_request_index() function ...

Ok, I did now the following change:

https://github.com/hsdenx/u-boot-test/commits/aristainetos-gpio-v4

$ git show c4a3295fa6
commit c4a3295fa67f23408ba3ff5552532222f48142f6
Author: Heiko Schocher <hs@denx.de>
Date:   Tue May 12 08:56:40 2020 +0200

     gpio-uclass.c: save the GPIOD flags also in the gpio descriptor

     save the GPIOD_ flags also in the gpio descriptor.

     Signed-off-by: Heiko Schocher <hs@denx.de>

     Patch-cc: Patrick Delaunay <patrick.delaunay@st.com>

     Series-changes: 4
     - new in version 4

diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c
index 757ab7106e..fc94334160 100644
--- a/drivers/gpio/gpio-uclass.c
+++ b/drivers/gpio/gpio-uclass.c
@@ -572,6 +572,9 @@ static int _dm_gpio_set_dir_flags(struct gpio_desc *desc, ulong flags)
                 return ret;
         }

+       /* save the flags also in descriptor */
+       desc->flags = flags;
+
         /* GPIOD_ are directly managed by driver in set_dir_flags*/
         if (ops->set_dir_flags) {
                 ret = ops->set_dir_flags(dev, desc->offset, flags);

and with it, the sandbox tests and the aristainetos2 board works fine
again. I have just started a travis build for it:

https://travis-ci.org/github/hsdenx/u-boot-test/builds/685995112

If no errors pop up, I send v4 version of my patchseries.

bye,
Heiko
Patrick DELAUNAY May 14, 2020, 1:47 p.m. UTC | #7
Hi Heiko

> From: Heiko Schocher <hs@denx.de>
> Sent: mardi 12 mai 2020 09:32
> 
> Hello tom, Patrick,
> 
> Am 12.05.2020 um 08:26 schrieb Heiko Schocher:
> > Hello Tom, Patrick,
> >
> > Am 27.04.2020 um 08:47 schrieb Heiko Schocher:
> >> Hello Tom, Patrick,
> >>
> >> Am 27.04.2020 um 07:16 schrieb Heiko Schocher:
> >>> Hello Tom,
> >>>
> >>> Am 24.04.2020 um 19:45 schrieb Tom Rini:
> >>>> On Wed, Feb 05, 2020 at 07:19:58AM +0100, Heiko Schocher wrote:
> >>>>
> >>>>> currently gpio hog function is not tested with "ut dm gpio"
> >>>>> so add some basic tests for gpio hog functionality.
> >>>>>
> >>>>> For this enable GPIO_HOG in sandbox_defconfig, add in DTS some
> >>>>> gpio hog entries, and add testcase in "ut dm gpio" command.
> >>>>>
> >>>>> Signed-off-by: Heiko Schocher <hs@denx.de>
> >>>>> Reviewed-by: Simon Glass <sjg@chromium.org>
> >>>>
> >>>> This no longer applies cleanly/obviously, please rebase, thanks!
> >>>
> >>> Done, unfortunately, aristainetos2 does not boot anymore... got:
> >>>
> >>>     ├─UBOOT (ari-ub)
> >>> │   │    <> ### Connect to "aristainetos" using command:
> >>> /usr/bin/telnet ts2 7015 │   │    <> Trying 192.168.1.202...
> >>> │   │    <> Connected to ts2.
> >>> │   │    <> Escape character is '^]'.
> >>> │   │    <> <debug_uart> unrecognized JEDEC id bytes: 00, 00, 00 │
> >>> │    <> *** Warning - spi_flash_probe_bus_cs() failed, using default
> >>> environment │   │    <> │   │    <> alloc space exhausted │   │
> >>> <> alloc space exhausted │   │    <> alloc space exhausted │   │
> >>> <> himport_r: can't insert "loadbootscriptUSB=ext4load usb 0 ${loadaddr}
> ${script};"
> >>> into hash table
> >>> │   │    <> alloc space exhausted
> >>> │   │    <> alloc space exhausted
> >>>
> >>> Seems early SPI NOR detection fails ...
> >>>
> >>> Have to start bisect, try to find some time...
> >>
> >> Ok, commit:
> >>
> >> commit 788ea834124bd6169ea10b2d37d5de48a2dd28a0 (bisect-788ea83412)
> >> Author: Patrick Delaunay <patrick.delaunay@st.com>
> >> Date:   Mon Jan 13 11:35:03 2020 +0100
> >>
> >>      gpio: add function _dm_gpio_set_dir_flags
> >>
> >>      Introduce the function _dm_gpio_set_dir_flags to set dir flags
> >>      without check if the GPIO is reserved.
> >>
> >>      Separate the reserved check for "set_dir" and "set_dir_flags".
> >>
> >>      This patch is a preliminary step to add new ops.
> >>
> >>      Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
> >>      Reviewed-by: Simon Glass <sjg@chromium.org>
> >>
> >> breaks the aristainetos2 board ... reverting this patch (and
> >> therefore I needed some more patches to revert as it was a patchseries):
> >>
> >> * dbf06f0e6c - (HEAD -> aristainetos-denx) Revert "gpio: add function
> >> _gpio_get_value" (vor 5
> >> Minuten) <Heiko Schocher>
> >> * 5c85a7cc26 - Revert "gpio: add function _dm_gpio_set_dir_flags"
> >> (vor 5 Minuten) <Heiko Schocher>
> >> * c226d65d88 - Revert "gpio: add function check_dir_flags" (vor 5
> >> Minuten) <Heiko Schocher>
> >> * 1423a40c69 - Revert "gpio: add helper GPIOD_FLAGS_OUTPUT" (vor 5
> >> Minuten) <Heiko Schocher>
> >> * fb0176450f - Revert "gpio: update dir_flags management" (vor 5
> >> Minuten) <Heiko Schocher>
> >> * 9d74cc5ecb - Revert "gpio: add support of new GPIO direction flag"
> >> (vor 5 Minuten) <Heiko Schocher>
> >> * 3bf361c206 - Revert "gpio: add ops to get dir flags" (vor 5
> >> Minuten) <Heiko Schocher>
> >> * beb6d3c2d9 - Revert "gpio: add ops to set dir flags" (vor 5
> >> Minuten) <Heiko Schocher>
> >>
> >> And board boots again fine ...
> >>
> >> I do not see, why commit 788ea834124bd6169ea10b2d37d5de48a2dd28a0
> >> makes SPI not working anymore ...
> >>
> >> Any ideas?
> >
> > Just looking with sandbox into it ... added debug patch:
> >
> > diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c
> > index 3fb6b6e69c..2e68f558bd 100644
> > --- a/drivers/gpio/gpio-uclass.c
> > +++ b/drivers/gpio/gpio-uclass.c
> > @@ -273,9 +273,11 @@ static int gpio_hog_probe(struct udevice *dev)
> >          struct gpio_hog_priv *priv = dev_get_priv(dev);
> >          int ret;
> >
> > +       printf("%s: --------- dev->name: %s nr: %d flag: %d platflags:
> > +%d\n", __func__, dev->name,
> > plat->val[0], plat->val[1], plat->gpiod_flags);
> >          ret = gpio_dev_request_index(dev->parent, dev->name,
> > "gpio-hog",
> >                                       plat->val[0], plat->gpiod_flags,
> >                                       plat->val[1], &priv->gpiod);
> > +       printf("%s: --------- gpiod: %p\n", __func__, &priv->gpiod);
> >          if (ret < 0) {
> >                  debug("%s: node %s could not get gpio.\n", __func__,
> >                        dev->name);
> > @@ -291,6 +293,10 @@ static int gpio_hog_probe(struct udevice *dev)
> >                  }
> >          }
> >
> > +       if (1) {
> > +               struct gpio_desc *gpiod = &priv->gpiod;
> > +               printf("%s: gpiod_flags: %x\n", __func__,
> > +gpiod->flags);
> > +       }
> >          return 0;
> >   }
> >
> >
> > and see:
> >
> > => ut dm gpio
> > Test: dm_test_gpio: gpio.c
> > gpio_hog_probe_all: ---------
> > gpio_hog_probe: --------- dev->name: hog_input_active_low nr: 0 flag:
> > 1 platflags: 4
> > gpio_hog_probe: --------- gpiod: 0000000015901050
> > gpio_hog_probe: gpiod_flags: 8
> > gpio_hog_probe: --------- dev->name: hog_input_active_high nr: 1 flag:
> > 0 platflags: 4
> > gpio_hog_probe: --------- gpiod: 00000000159010a0
> > gpio_hog_probe: gpiod_flags: 0
> > gpio_hog_probe: --------- dev->name: hog_output_low nr: 2 flag: 0
> > platflags: 2
> > gpio_hog_probe: --------- gpiod: 00000000159010f0
> > gpio_hog_probe: gpiod_flags: 0
> > gpio_hog_probe: --------- dev->name: hog_output_high nr: 3 flag: 0
> > platflags: 2
> > gpio_hog_probe: --------- gpiod: 0000000015901130
> > gpio_hog_probe: gpiod_flags: 0
> > gpio_hog_lookup_name: name: hog_input_active_low
> > gpio_hog_lookup_name: --------- gpiod: 15901050 test/dm/gpio.c:115,
> > dm_test_gpio(): GPIOD_IS_IN | GPIOD_ACTIVE_LOW == desc->flags:
> > Expected 0xc (12), got 0x8 (8)
> >
> > It looks like the  plat->gpiod_flags are not written anymore into
> > gpiod through the gpio_dev_request_index() function ...
> 
> Ok, I did now the following change:
> 
> https://github.com/hsdenx/u-boot-test/commits/aristainetos-gpio-v4
> 
> $ git show c4a3295fa6
> commit c4a3295fa67f23408ba3ff5552532222f48142f6
> Author: Heiko Schocher <hs@denx.de>
> Date:   Tue May 12 08:56:40 2020 +0200
> 
>      gpio-uclass.c: save the GPIOD flags also in the gpio descriptor
> 
>      save the GPIOD_ flags also in the gpio descriptor.
> 
>      Signed-off-by: Heiko Schocher <hs@denx.de>
> 
>      Patch-cc: Patrick Delaunay <patrick.delaunay@st.com>
> 
>      Series-changes: 4
>      - new in version 4
> 
> diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c index
> 757ab7106e..fc94334160 100644
> --- a/drivers/gpio/gpio-uclass.c
> +++ b/drivers/gpio/gpio-uclass.c
> @@ -572,6 +572,9 @@ static int _dm_gpio_set_dir_flags(struct gpio_desc
> *desc, ulong flags)
>                  return ret;
>          }
> 
> +       /* save the flags also in descriptor */
> +       desc->flags = flags;
> +
>          /* GPIOD_ are directly managed by driver in set_dir_flags*/
>          if (ops->set_dir_flags) {
>                  ret = ops->set_dir_flags(dev, desc->offset, flags);
> 
> and with it, the sandbox tests and the aristainetos2 board works fine again. I have
> just started a travis build for it:
> 
> https://travis-ci.org/github/hsdenx/u-boot-test/builds/685995112
> 
> If no errors pop up, I send v4 version of my patchseries.

In my serie, normally the update of the desc->flags was done in  dm_gpio_set_dir_flags()

with the line

	/* update the descriptor flags */
	if (ret)
		desc->flags = flags;

not needed in dm_gpio_set_dir (as requested with desc->flags)

At first lok, I don't understood the execution path to have desc->flags not updated...

But in fact I inverse the test (again :-<)

	/* update the descriptor flags */
+	if (!ret)
-	if (ret)
		desc->flags = flags;

but this test could move in _ dm_gpio_set_deit to be more clear,
but I think we need continue to test ret value before to update descriptor

Sorry for the issue.

Do you prefer that send a sperate patch to correct this error ?

Regards

Patrick
Heiko Schocher May 15, 2020, 6:01 a.m. UTC | #8
Hello Patrick,

Am 14.05.2020 um 15:47 schrieb Patrick DELAUNAY:
> Hi Heiko
> 
>> From: Heiko Schocher <hs@denx.de>
>> Sent: mardi 12 mai 2020 09:32
>>
>> Hello tom, Patrick,
>>
>> Am 12.05.2020 um 08:26 schrieb Heiko Schocher:
>>> Hello Tom, Patrick,
>>>
>>> Am 27.04.2020 um 08:47 schrieb Heiko Schocher:
>>>> Hello Tom, Patrick,
>>>>
>>>> Am 27.04.2020 um 07:16 schrieb Heiko Schocher:
>>>>> Hello Tom,
>>>>>
>>>>> Am 24.04.2020 um 19:45 schrieb Tom Rini:
>>>>>> On Wed, Feb 05, 2020 at 07:19:58AM +0100, Heiko Schocher wrote:
>>>>>>
>>>>>>> currently gpio hog function is not tested with "ut dm gpio"
>>>>>>> so add some basic tests for gpio hog functionality.
>>>>>>>
>>>>>>> For this enable GPIO_HOG in sandbox_defconfig, add in DTS some
>>>>>>> gpio hog entries, and add testcase in "ut dm gpio" command.
>>>>>>>
>>>>>>> Signed-off-by: Heiko Schocher <hs@denx.de>
>>>>>>> Reviewed-by: Simon Glass <sjg@chromium.org>
>>>>>>
>>>>>> This no longer applies cleanly/obviously, please rebase, thanks!
>>>>>
>>>>> Done, unfortunately, aristainetos2 does not boot anymore... got:
>>>>>
>>>>>      ├─UBOOT (ari-ub)
>>>>> │   │    <> ### Connect to "aristainetos" using command:
>>>>> /usr/bin/telnet ts2 7015 │   │    <> Trying 192.168.1.202...
>>>>> │   │    <> Connected to ts2.
>>>>> │   │    <> Escape character is '^]'.
>>>>> │   │    <> <debug_uart> unrecognized JEDEC id bytes: 00, 00, 00 │
>>>>> │    <> *** Warning - spi_flash_probe_bus_cs() failed, using default
>>>>> environment │   │    <> │   │    <> alloc space exhausted │   │
>>>>> <> alloc space exhausted │   │    <> alloc space exhausted │   │
>>>>> <> himport_r: can't insert "loadbootscriptUSB=ext4load usb 0 ${loadaddr}
>> ${script};"
>>>>> into hash table
>>>>> │   │    <> alloc space exhausted
>>>>> │   │    <> alloc space exhausted
>>>>>
>>>>> Seems early SPI NOR detection fails ...
>>>>>
>>>>> Have to start bisect, try to find some time...
>>>>
>>>> Ok, commit:
>>>>
>>>> commit 788ea834124bd6169ea10b2d37d5de48a2dd28a0 (bisect-788ea83412)
>>>> Author: Patrick Delaunay <patrick.delaunay@st.com>
>>>> Date:   Mon Jan 13 11:35:03 2020 +0100
>>>>
>>>>       gpio: add function _dm_gpio_set_dir_flags
>>>>
>>>>       Introduce the function _dm_gpio_set_dir_flags to set dir flags
>>>>       without check if the GPIO is reserved.
>>>>
>>>>       Separate the reserved check for "set_dir" and "set_dir_flags".
>>>>
>>>>       This patch is a preliminary step to add new ops.
>>>>
>>>>       Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
>>>>       Reviewed-by: Simon Glass <sjg@chromium.org>
>>>>
>>>> breaks the aristainetos2 board ... reverting this patch (and
>>>> therefore I needed some more patches to revert as it was a patchseries):
>>>>
>>>> * dbf06f0e6c - (HEAD -> aristainetos-denx) Revert "gpio: add function
>>>> _gpio_get_value" (vor 5
>>>> Minuten) <Heiko Schocher>
>>>> * 5c85a7cc26 - Revert "gpio: add function _dm_gpio_set_dir_flags"
>>>> (vor 5 Minuten) <Heiko Schocher>
>>>> * c226d65d88 - Revert "gpio: add function check_dir_flags" (vor 5
>>>> Minuten) <Heiko Schocher>
>>>> * 1423a40c69 - Revert "gpio: add helper GPIOD_FLAGS_OUTPUT" (vor 5
>>>> Minuten) <Heiko Schocher>
>>>> * fb0176450f - Revert "gpio: update dir_flags management" (vor 5
>>>> Minuten) <Heiko Schocher>
>>>> * 9d74cc5ecb - Revert "gpio: add support of new GPIO direction flag"
>>>> (vor 5 Minuten) <Heiko Schocher>
>>>> * 3bf361c206 - Revert "gpio: add ops to get dir flags" (vor 5
>>>> Minuten) <Heiko Schocher>
>>>> * beb6d3c2d9 - Revert "gpio: add ops to set dir flags" (vor 5
>>>> Minuten) <Heiko Schocher>
>>>>
>>>> And board boots again fine ...
>>>>
>>>> I do not see, why commit 788ea834124bd6169ea10b2d37d5de48a2dd28a0
>>>> makes SPI not working anymore ...
>>>>
>>>> Any ideas?
>>>
>>> Just looking with sandbox into it ... added debug patch:
>>>
>>> diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c
>>> index 3fb6b6e69c..2e68f558bd 100644
>>> --- a/drivers/gpio/gpio-uclass.c
>>> +++ b/drivers/gpio/gpio-uclass.c
>>> @@ -273,9 +273,11 @@ static int gpio_hog_probe(struct udevice *dev)
>>>           struct gpio_hog_priv *priv = dev_get_priv(dev);
>>>           int ret;
>>>
>>> +       printf("%s: --------- dev->name: %s nr: %d flag: %d platflags:
>>> +%d\n", __func__, dev->name,
>>> plat->val[0], plat->val[1], plat->gpiod_flags);
>>>           ret = gpio_dev_request_index(dev->parent, dev->name,
>>> "gpio-hog",
>>>                                        plat->val[0], plat->gpiod_flags,
>>>                                        plat->val[1], &priv->gpiod);
>>> +       printf("%s: --------- gpiod: %p\n", __func__, &priv->gpiod);
>>>           if (ret < 0) {
>>>                   debug("%s: node %s could not get gpio.\n", __func__,
>>>                         dev->name);
>>> @@ -291,6 +293,10 @@ static int gpio_hog_probe(struct udevice *dev)
>>>                   }
>>>           }
>>>
>>> +       if (1) {
>>> +               struct gpio_desc *gpiod = &priv->gpiod;
>>> +               printf("%s: gpiod_flags: %x\n", __func__,
>>> +gpiod->flags);
>>> +       }
>>>           return 0;
>>>    }
>>>
>>>
>>> and see:
>>>
>>> => ut dm gpio
>>> Test: dm_test_gpio: gpio.c
>>> gpio_hog_probe_all: ---------
>>> gpio_hog_probe: --------- dev->name: hog_input_active_low nr: 0 flag:
>>> 1 platflags: 4
>>> gpio_hog_probe: --------- gpiod: 0000000015901050
>>> gpio_hog_probe: gpiod_flags: 8
>>> gpio_hog_probe: --------- dev->name: hog_input_active_high nr: 1 flag:
>>> 0 platflags: 4
>>> gpio_hog_probe: --------- gpiod: 00000000159010a0
>>> gpio_hog_probe: gpiod_flags: 0
>>> gpio_hog_probe: --------- dev->name: hog_output_low nr: 2 flag: 0
>>> platflags: 2
>>> gpio_hog_probe: --------- gpiod: 00000000159010f0
>>> gpio_hog_probe: gpiod_flags: 0
>>> gpio_hog_probe: --------- dev->name: hog_output_high nr: 3 flag: 0
>>> platflags: 2
>>> gpio_hog_probe: --------- gpiod: 0000000015901130
>>> gpio_hog_probe: gpiod_flags: 0
>>> gpio_hog_lookup_name: name: hog_input_active_low
>>> gpio_hog_lookup_name: --------- gpiod: 15901050 test/dm/gpio.c:115,
>>> dm_test_gpio(): GPIOD_IS_IN | GPIOD_ACTIVE_LOW == desc->flags:
>>> Expected 0xc (12), got 0x8 (8)
>>>
>>> It looks like the  plat->gpiod_flags are not written anymore into
>>> gpiod through the gpio_dev_request_index() function ...
>>
>> Ok, I did now the following change:
>>
>> https://github.com/hsdenx/u-boot-test/commits/aristainetos-gpio-v4
>>
>> $ git show c4a3295fa6
>> commit c4a3295fa67f23408ba3ff5552532222f48142f6
>> Author: Heiko Schocher <hs@denx.de>
>> Date:   Tue May 12 08:56:40 2020 +0200
>>
>>       gpio-uclass.c: save the GPIOD flags also in the gpio descriptor
>>
>>       save the GPIOD_ flags also in the gpio descriptor.
>>
>>       Signed-off-by: Heiko Schocher <hs@denx.de>
>>
>>       Patch-cc: Patrick Delaunay <patrick.delaunay@st.com>
>>
>>       Series-changes: 4
>>       - new in version 4
>>
>> diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c index
>> 757ab7106e..fc94334160 100644
>> --- a/drivers/gpio/gpio-uclass.c
>> +++ b/drivers/gpio/gpio-uclass.c
>> @@ -572,6 +572,9 @@ static int _dm_gpio_set_dir_flags(struct gpio_desc
>> *desc, ulong flags)
>>                   return ret;
>>           }
>>
>> +       /* save the flags also in descriptor */
>> +       desc->flags = flags;
>> +
>>           /* GPIOD_ are directly managed by driver in set_dir_flags*/
>>           if (ops->set_dir_flags) {
>>                   ret = ops->set_dir_flags(dev, desc->offset, flags);
>>
>> and with it, the sandbox tests and the aristainetos2 board works fine again. I have
>> just started a travis build for it:
>>
>> https://travis-ci.org/github/hsdenx/u-boot-test/builds/685995112
>>
>> If no errors pop up, I send v4 version of my patchseries.
> 
> In my serie, normally the update of the desc->flags was done in  dm_gpio_set_dir_flags()
> 
> with the line
> 
> 	/* update the descriptor flags */
> 	if (ret)
> 		desc->flags = flags;
> 
> not needed in dm_gpio_set_dir (as requested with desc->flags)
> 
> At first lok, I don't understood the execution path to have desc->flags not updated...
> 
> But in fact I inverse the test (again :-<)
> 
> 	/* update the descriptor flags */
> +	if (!ret)
> -	if (ret)
> 		desc->flags = flags;

Ok, this fix works also, thanks!

> but this test could move in _ dm_gpio_set_deit to be more clear,
> but I think we need continue to test ret value before to update descriptor

Moved this into _dm_gpio_set_dir_flags()
> Sorry for the issue.

No problem, more problematic was, that I missed to add sandbox
tests before and patch which adds them is pending for a while!
> Do you prefer that send a sperate patch to correct this error ?

I would see this in this patchseries, travis build runs, and I post
v5 if all is fine, thanks!

https://travis-ci.org/github/hsdenx/u-boot-test/builds/687305014

bye,
Heiko
Patrick DELAUNAY May 15, 2020, 7:13 a.m. UTC | #9
Hi Heiko,

> From: Heiko Schocher <hs@denx.de>
> Sent: vendredi 15 mai 2020 08:01
> 
> Hello Patrick,
> 
> Am 14.05.2020 um 15:47 schrieb Patrick DELAUNAY:
> > Hi Heiko
> >
> >> From: Heiko Schocher <hs@denx.de>
> >> Sent: mardi 12 mai 2020 09:32
> >>
> >> Hello tom, Patrick,
> >>
[...]
> >>>
> >>> It looks like the  plat->gpiod_flags are not written anymore into
> >>> gpiod through the gpio_dev_request_index() function ...
> >>
> >> Ok, I did now the following change:
> >>
> >> https://github.com/hsdenx/u-boot-test/commits/aristainetos-gpio-v4
> >>
> >> $ git show c4a3295fa6
> >> commit c4a3295fa67f23408ba3ff5552532222f48142f6
> >> Author: Heiko Schocher <hs@denx.de>
> >> Date:   Tue May 12 08:56:40 2020 +0200
> >>
> >>       gpio-uclass.c: save the GPIOD flags also in the gpio descriptor
> >>
> >>       save the GPIOD_ flags also in the gpio descriptor.
> >>
> >>       Signed-off-by: Heiko Schocher <hs@denx.de>
> >>
> >>       Patch-cc: Patrick Delaunay <patrick.delaunay@st.com>
> >>
> >>       Series-changes: 4
> >>       - new in version 4
> >>
> >> diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c
> >> index
> >> 757ab7106e..fc94334160 100644
> >> --- a/drivers/gpio/gpio-uclass.c
> >> +++ b/drivers/gpio/gpio-uclass.c
> >> @@ -572,6 +572,9 @@ static int _dm_gpio_set_dir_flags(struct
> >> gpio_desc *desc, ulong flags)
> >>                   return ret;
> >>           }
> >>
> >> +       /* save the flags also in descriptor */
> >> +       desc->flags = flags;
> >> +
> >>           /* GPIOD_ are directly managed by driver in set_dir_flags*/
> >>           if (ops->set_dir_flags) {
> >>                   ret = ops->set_dir_flags(dev, desc->offset, flags);
> >>
> >> and with it, the sandbox tests and the aristainetos2 board works fine
> >> again. I have just started a travis build for it:
> >>
> >> https://travis-ci.org/github/hsdenx/u-boot-test/builds/685995112
> >>
> >> If no errors pop up, I send v4 version of my patchseries.
> >
> > In my serie, normally the update of the desc->flags was done in
> > dm_gpio_set_dir_flags()
> >
> > with the line
> >
> > 	/* update the descriptor flags */
> > 	if (ret)
> > 		desc->flags = flags;
> >
> > not needed in dm_gpio_set_dir (as requested with desc->flags)
> >
> > At first lok, I don't understood the execution path to have desc->flags not
> updated...
> >
> > But in fact I inverse the test (again :-<)
> >
> > 	/* update the descriptor flags */
> > +	if (!ret)
> > -	if (ret)
> > 		desc->flags = flags;
> 
> Ok, this fix works also, thanks!
> 
> > but this test could move in _ dm_gpio_set_deit to be more clear, but I
> > think we need continue to test ret value before to update descriptor
> 
> Moved this into _dm_gpio_set_dir_flags()
> > Sorry for the issue.
> 
> No problem, more problematic was, that I missed to add sandbox tests before and
> patch which adds them is pending for a while!
> > Do you prefer that send a sperate patch to correct this error ?
> 
> I would see this in this patchseries, travis build runs, and I post
> v5 if all is fine, thanks!
> 
> https://travis-ci.org/github/hsdenx/u-boot-test/builds/687305014

Ok, your patch is good for me.

Thanks 
Patrick
diff mbox series

Patch

diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
index e529c54d8d..cff05dcf7c 100644
--- a/arch/sandbox/dts/test.dts
+++ b/arch/sandbox/dts/test.dts
@@ -1,5 +1,7 @@ 
 /dts-v1/;
 
+#include <dt-bindings/gpio/gpio.h>
+
 / {
 	model = "sandbox";
 	compatible = "sandbox";
@@ -284,6 +286,28 @@ 
 		#gpio-cells = <1>;
 		gpio-bank-name = "a";
 		sandbox,gpio-count = <20>;
+
+		hog_input_active_low {
+			gpio-hog;
+			input;
+			gpios = <0 GPIO_ACTIVE_LOW>;
+		};
+		hog_input_active_high {
+			gpio-hog;
+			input;
+			gpios = <1 GPIO_ACTIVE_HIGH>;
+		};
+		hog_output_low {
+			gpio-hog;
+			output-low;
+			gpios = <2 GPIO_ACTIVE_HIGH>;
+		};
+		hog_output_high {
+			gpio-hog;
+			output-high;
+			gpios = <3 GPIO_ACTIVE_HIGH>;
+		};
+
 	};
 
 	gpio_b: extra-gpios {
diff --git a/configs/sandbox64_defconfig b/configs/sandbox64_defconfig
index 7b80033c3b..f614b23666 100644
--- a/configs/sandbox64_defconfig
+++ b/configs/sandbox64_defconfig
@@ -92,6 +92,7 @@  CONFIG_DM_DEMO_SIMPLE=y
 CONFIG_DM_DEMO_SHAPE=y
 CONFIG_BOARD=y
 CONFIG_BOARD_SANDBOX=y
+CONFIG_GPIO_HOG=y
 CONFIG_PM8916_GPIO=y
 CONFIG_SANDBOX_GPIO=y
 CONFIG_I2C_CROS_EC_TUNNEL=y
diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
index fc018bdd2c..afce8050b4 100644
--- a/configs/sandbox_defconfig
+++ b/configs/sandbox_defconfig
@@ -108,6 +108,7 @@  CONFIG_BOARD_SANDBOX=y
 CONFIG_DMA=y
 CONFIG_DMA_CHANNELS=y
 CONFIG_SANDBOX_DMA=y
+CONFIG_GPIO_HOG=y
 CONFIG_PM8916_GPIO=y
 CONFIG_SANDBOX_GPIO=y
 CONFIG_DM_HWSPINLOCK=y
diff --git a/configs/sandbox_flattree_defconfig b/configs/sandbox_flattree_defconfig
index 2c90639ecb..0518b56fd9 100644
--- a/configs/sandbox_flattree_defconfig
+++ b/configs/sandbox_flattree_defconfig
@@ -78,6 +78,7 @@  CONFIG_DM_DEMO_SIMPLE=y
 CONFIG_DM_DEMO_SHAPE=y
 CONFIG_BOARD=y
 CONFIG_BOARD_SANDBOX=y
+CONFIG_GPIO_HOG=y
 CONFIG_PM8916_GPIO=y
 CONFIG_SANDBOX_GPIO=y
 CONFIG_I2C_CROS_EC_TUNNEL=y
diff --git a/configs/sandbox_spl_defconfig b/configs/sandbox_spl_defconfig
index b78115af61..e70f2b4aa8 100644
--- a/configs/sandbox_spl_defconfig
+++ b/configs/sandbox_spl_defconfig
@@ -98,6 +98,7 @@  CONFIG_DM_DEMO_SHAPE=y
 CONFIG_BOARD=y
 CONFIG_BOARD_SANDBOX=y
 CONFIG_SPL_FIRMWARE=y
+CONFIG_GPIO_HOG=y
 CONFIG_PM8916_GPIO=y
 CONFIG_SANDBOX_GPIO=y
 CONFIG_I2C_CROS_EC_TUNNEL=y
diff --git a/test/dm/gpio.c b/test/dm/gpio.c
index bb4b20cea9..9003ea82c7 100644
--- a/test/dm/gpio.c
+++ b/test/dm/gpio.c
@@ -18,6 +18,7 @@  static int dm_test_gpio(struct unit_test_state *uts)
 	unsigned int offset, gpio;
 	struct dm_gpio_ops *ops;
 	struct udevice *dev;
+	struct gpio_desc *desc;
 	const char *name;
 	int offset_count;
 	char buf[80];
@@ -102,6 +103,28 @@  static int dm_test_gpio(struct unit_test_state *uts)
 	ut_asserteq_str("a", name);
 	ut_asserteq(20, offset_count);
 
+	/* add gpio hog tests */
+	ut_assertok(gpio_hog_lookup_name("hog_input_active_low", &desc));
+	ut_asserteq(GPIOD_IS_IN | GPIOD_ACTIVE_LOW, desc->flags);
+	ut_asserteq(0, desc->offset);
+	ut_asserteq(1, dm_gpio_get_value(desc));
+	ut_assertok(gpio_hog_lookup_name("hog_input_active_high", &desc));
+	ut_asserteq(GPIOD_IS_IN, desc->flags);
+	ut_asserteq(1, desc->offset);
+	ut_asserteq(0, dm_gpio_get_value(desc));
+	ut_assertok(gpio_hog_lookup_name("hog_output_low", &desc));
+	ut_asserteq(GPIOD_IS_OUT, desc->flags);
+	ut_asserteq(2, desc->offset);
+	ut_asserteq(0, dm_gpio_get_value(desc));
+	ut_assertok(dm_gpio_set_value(desc, 1));
+	ut_asserteq(1, dm_gpio_get_value(desc));
+	ut_assertok(gpio_hog_lookup_name("hog_output_high", &desc));
+	ut_asserteq(GPIOD_IS_OUT, desc->flags);
+	ut_asserteq(3, desc->offset);
+	ut_asserteq(1, dm_gpio_get_value(desc));
+	ut_assertok(dm_gpio_set_value(desc, 0));
+	ut_asserteq(0, dm_gpio_get_value(desc));
+
 	return 0;
 }
 DM_TEST(dm_test_gpio, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);