diff mbox series

[v2,1/1] mtd: nand: raw: atmel: Add error handling when rb-gpios missing

Message ID 20230922090856.920303-2-ada@thorsis.com
State Accepted
Commit d6b4359e50bb1dc567f6596c67b25a3c7a8ff130
Delegated to: Eugen Hristev
Headers show
Series mtd: nand: raw: atmel: R/B gpio on sam9x60 | expand

Commit Message

Alexander Dahl Sept. 22, 2023, 9:08 a.m. UTC
Adapt behaviour to Linux kernel driver.

The return value of gpio_request_by_name_nodev() was not checked before,
and thus in case 'rb-gpios' was missing in DT, rb.type was set to
ATMEL_NAND_GPIO_RB nevertheless, leading to output like this for
example (on sam9x60-curiosity with the line removed from dts):

    NAND:  Could not find valid ONFI parameter page; aborting
    device found, Manufacturer ID: 0xc2, Chip ID: 0xdc
    Macronix NAND 512MiB 3,3V 8-bit
    512 MiB, SLC, erase size: 256 KiB, page size: 4096, OOB size: 64
    atmel-nand-controller nand-controller: NAND scan failed: -22
    Failed to probe nand driver (err = -22)
    Failed to initialize NAND controller. (error -22)
    0 MiB

Note: not having that gpio assigned in dts is possible, the driver does
not override nand_chip->dev_ready() then and a generic solution is used.

Fixes: 6a8dfd57220d ("nand: atmel: Add DM based NAND driver")
Signed-off-by: Alexander Dahl <ada@thorsis.com>
---

Notes:
    v1 -> v2:
    
    - Only issue error message if error is not ENOENT.  If the node just is
      missing, move on without error message.

 drivers/mtd/nand/raw/atmel/nand-controller.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

Comments

Eugen Hristev Sept. 22, 2023, 9:40 a.m. UTC | #1
On 9/22/23 12:08, Alexander Dahl wrote:
> Adapt behaviour to Linux kernel driver.
> 
> The return value of gpio_request_by_name_nodev() was not checked before,
> and thus in case 'rb-gpios' was missing in DT, rb.type was set to
> ATMEL_NAND_GPIO_RB nevertheless, leading to output like this for
> example (on sam9x60-curiosity with the line removed from dts):
> 
>      NAND:  Could not find valid ONFI parameter page; aborting
>      device found, Manufacturer ID: 0xc2, Chip ID: 0xdc
>      Macronix NAND 512MiB 3,3V 8-bit
>      512 MiB, SLC, erase size: 256 KiB, page size: 4096, OOB size: 64
>      atmel-nand-controller nand-controller: NAND scan failed: -22
>      Failed to probe nand driver (err = -22)
>      Failed to initialize NAND controller. (error -22)
>      0 MiB
> 
> Note: not having that gpio assigned in dts is possible, the driver does
> not override nand_chip->dev_ready() then and a generic solution is used.
> 
> Fixes: 6a8dfd57220d ("nand: atmel: Add DM based NAND driver")
> Signed-off-by: Alexander Dahl <ada@thorsis.com>
> ---

Reviewed-by: Eugen Hristev <eugen.hristev@collabora.com>

> 
> Notes:
>      v1 -> v2:
>      
>      - Only issue error message if error is not ENOENT.  If the node just is
>        missing, move on without error message.
> 
>   drivers/mtd/nand/raw/atmel/nand-controller.c | 11 +++++++----
>   1 file changed, 7 insertions(+), 4 deletions(-)
>
Michael Nazzareno Trimarchi Sept. 23, 2023, 4:50 p.m. UTC | #2
On Fri, Sep 22, 2023 at 11:40 AM Eugen Hristev
<eugen.hristev@collabora.com> wrote:
>
> On 9/22/23 12:08, Alexander Dahl wrote:
> > Adapt behaviour to Linux kernel driver.
> >
> > The return value of gpio_request_by_name_nodev() was not checked before,
> > and thus in case 'rb-gpios' was missing in DT, rb.type was set to
> > ATMEL_NAND_GPIO_RB nevertheless, leading to output like this for
> > example (on sam9x60-curiosity with the line removed from dts):
> >
> >      NAND:  Could not find valid ONFI parameter page; aborting
> >      device found, Manufacturer ID: 0xc2, Chip ID: 0xdc
> >      Macronix NAND 512MiB 3,3V 8-bit
> >      512 MiB, SLC, erase size: 256 KiB, page size: 4096, OOB size: 64
> >      atmel-nand-controller nand-controller: NAND scan failed: -22
> >      Failed to probe nand driver (err = -22)
> >      Failed to initialize NAND controller. (error -22)
> >      0 MiB
> >
> > Note: not having that gpio assigned in dts is possible, the driver does
> > not override nand_chip->dev_ready() then and a generic solution is used.
> >
> > Fixes: 6a8dfd57220d ("nand: atmel: Add DM based NAND driver")
> > Signed-off-by: Alexander Dahl <ada@thorsis.com>
> > ---
>
> Reviewed-by: Eugen Hristev <eugen.hristev@collabora.com>
>
> >
> > Notes:
> >      v1 -> v2:
> >
> >      - Only issue error message if error is not ENOENT.  If the node just is
> >        missing, move on without error message.
> >
> >   drivers/mtd/nand/raw/atmel/nand-controller.c | 11 +++++++----
> >   1 file changed, 7 insertions(+), 4 deletions(-)
> >
>
Acked-by: Michael Trimarchi <michael@amarulasolutions.com>
Eugen Hristev Sept. 28, 2023, 6:22 a.m. UTC | #3
On 9/23/23 19:50, Michael Nazzareno Trimarchi wrote:
> On Fri, Sep 22, 2023 at 11:40 AM Eugen Hristev
> <eugen.hristev@collabora.com> wrote:
>>
>> On 9/22/23 12:08, Alexander Dahl wrote:
>>> Adapt behaviour to Linux kernel driver.
>>>
>>> The return value of gpio_request_by_name_nodev() was not checked before,
>>> and thus in case 'rb-gpios' was missing in DT, rb.type was set to
>>> ATMEL_NAND_GPIO_RB nevertheless, leading to output like this for
>>> example (on sam9x60-curiosity with the line removed from dts):
>>>
>>>       NAND:  Could not find valid ONFI parameter page; aborting
>>>       device found, Manufacturer ID: 0xc2, Chip ID: 0xdc
>>>       Macronix NAND 512MiB 3,3V 8-bit
>>>       512 MiB, SLC, erase size: 256 KiB, page size: 4096, OOB size: 64
>>>       atmel-nand-controller nand-controller: NAND scan failed: -22
>>>       Failed to probe nand driver (err = -22)
>>>       Failed to initialize NAND controller. (error -22)
>>>       0 MiB
>>>
>>> Note: not having that gpio assigned in dts is possible, the driver does
>>> not override nand_chip->dev_ready() then and a generic solution is used.
>>>
>>> Fixes: 6a8dfd57220d ("nand: atmel: Add DM based NAND driver")
>>> Signed-off-by: Alexander Dahl <ada@thorsis.com>
>>> ---
>>
>> Reviewed-by: Eugen Hristev <eugen.hristev@collabora.com>
>>
>>>
>>> Notes:
>>>       v1 -> v2:
>>>
>>>       - Only issue error message if error is not ENOENT.  If the node just is
>>>         missing, move on without error message.
>>>
>>>    drivers/mtd/nand/raw/atmel/nand-controller.c | 11 +++++++----
>>>    1 file changed, 7 insertions(+), 4 deletions(-)
>>>
>>
> Acked-by: Michael Trimarchi <michael@amarulasolutions.com>
> 


Applied to u-boot-at91/master, thanks !
diff mbox series

Patch

diff --git a/drivers/mtd/nand/raw/atmel/nand-controller.c b/drivers/mtd/nand/raw/atmel/nand-controller.c
index 2b29c8def6..fa962ba591 100644
--- a/drivers/mtd/nand/raw/atmel/nand-controller.c
+++ b/drivers/mtd/nand/raw/atmel/nand-controller.c
@@ -1600,10 +1600,13 @@  static struct atmel_nand *atmel_nand_create(struct atmel_nand_controller *nc,
 			nand->cs[i].rb.type = ATMEL_NAND_NATIVE_RB;
 			nand->cs[i].rb.id = val;
 		} else {
-			gpio_request_by_name_nodev(np, "rb-gpios", 0,
-						   &nand->cs[i].rb.gpio,
-						   GPIOD_IS_IN);
-			nand->cs[i].rb.type = ATMEL_NAND_GPIO_RB;
+			ret = gpio_request_by_name_nodev(np, "rb-gpios", 0,
+							 &nand->cs[i].rb.gpio,
+							 GPIOD_IS_IN);
+			if (ret && ret != -ENOENT)
+				dev_err(nc->dev, "Failed to get R/B gpio (err = %d)\n", ret);
+			if (!ret)
+				nand->cs[i].rb.type = ATMEL_NAND_GPIO_RB;
 		}
 
 		gpio_request_by_name_nodev(np, "cs-gpios", 0,