diff mbox series

[u-boot,v2,8/8] mtd: rawnand: omap_elm: u-boot driver model support

Message ID 20221220102203.52398-9-rogerq@kernel.org
State Accepted
Delegated to: Dario Binacchi
Headers show
Series rawnand: omap_gpmc: driver model support | expand

Commit Message

Roger Quadros Dec. 20, 2022, 10:22 a.m. UTC
Support u-boot driver model. We still retain
support legacy way of doing things if ELM_BASE
is defined in <asm/arch/hardware.h>

We could completely get rid of that if all
platforms defining ELM_BASE get rid of that definition
and enable CONFIG_SYS_NAND_SELF_INIT and are verified
to work.

Signed-off-by: Roger Quadros <rogerq@kernel.org>
---
 drivers/mtd/nand/raw/omap_elm.c               | 35 ++++++++++++++++++-
 .../mtd => drivers/mtd/nand/raw}/omap_elm.h   |  6 ++++
 drivers/mtd/nand/raw/omap_gpmc.c              | 12 ++++++-
 3 files changed, 51 insertions(+), 2 deletions(-)
 rename {include/linux/mtd => drivers/mtd/nand/raw}/omap_elm.h (97%)

Comments

Michael Nazzareno Trimarchi Dec. 21, 2022, 5:56 p.m. UTC | #1
Hi Roger

On Tue, Dec 20, 2022 at 11:22 AM Roger Quadros <rogerq@kernel.org> wrote:
>
> Support u-boot driver model. We still retain
> support legacy way of doing things if ELM_BASE
> is defined in <asm/arch/hardware.h>
>
> We could completely get rid of that if all
> platforms defining ELM_BASE get rid of that definition
> and enable CONFIG_SYS_NAND_SELF_INIT and are verified
> to work.
>
> Signed-off-by: Roger Quadros <rogerq@kernel.org>
> ---

When you post please include the relative changelog

Michael

>  drivers/mtd/nand/raw/omap_elm.c               | 35 ++++++++++++++++++-
>  .../mtd => drivers/mtd/nand/raw}/omap_elm.h   |  6 ++++
>  drivers/mtd/nand/raw/omap_gpmc.c              | 12 ++++++-
>  3 files changed, 51 insertions(+), 2 deletions(-)
>  rename {include/linux/mtd => drivers/mtd/nand/raw}/omap_elm.h (97%)
>
> diff --git a/drivers/mtd/nand/raw/omap_elm.c b/drivers/mtd/nand/raw/omap_elm.c
> index 35c6dd1f1bc..e528a5348d5 100644
> --- a/drivers/mtd/nand/raw/omap_elm.c
> +++ b/drivers/mtd/nand/raw/omap_elm.c
> @@ -15,9 +15,14 @@
>  #include <common.h>
>  #include <asm/io.h>
>  #include <linux/errno.h>
> -#include <linux/mtd/omap_elm.h>
>  #include <asm/arch/hardware.h>
>
> +#include <dm.h>
> +#include <linux/ioport.h>
> +#include <linux/io.h>
> +
> +#include "omap_elm.h"
> +
>  #define DRIVER_NAME            "omap-elm"
>  #define ELM_DEFAULT_POLY (0)
>
> @@ -180,6 +185,7 @@ void elm_reset(void)
>                 ;
>  }
>
> +#ifdef ELM_BASE
>  /**
>   * elm_init - Initialize ELM module
>   *
> @@ -191,3 +197,30 @@ void elm_init(void)
>         elm_cfg = (struct elm *)ELM_BASE;
>         elm_reset();
>  }
> +#endif
> +
> +static int elm_probe(struct udevice *dev)
> +{
> +#ifndef ELM_BASE
> +       struct resource res;
> +
> +       dev_read_resource(dev, 0, &res);
> +       elm_cfg = devm_ioremap(dev, res.start, resource_size(&res));
> +       elm_reset();
> +#endif
> +
> +       return 0;
> +}
> +
> +static const struct udevice_id elm_ids[] = {
> +       { .compatible = "ti,am3352-elm" },
> +       { .compatible = "ti,am64-elm" },
> +       { }
> +};
> +
> +U_BOOT_DRIVER(gpmc_elm) = {
> +       .name           = DRIVER_NAME,
> +       .id             = UCLASS_MTD,
> +       .of_match       = elm_ids,
> +       .probe          = elm_probe,
> +};
> diff --git a/include/linux/mtd/omap_elm.h b/drivers/mtd/nand/raw/omap_elm.h
> similarity index 97%
> rename from include/linux/mtd/omap_elm.h
> rename to drivers/mtd/nand/raw/omap_elm.h
> index f3db00d55de..a7f7bacb154 100644
> --- a/include/linux/mtd/omap_elm.h
> +++ b/drivers/mtd/nand/raw/omap_elm.h
> @@ -74,6 +74,12 @@ int elm_check_error(u8 *syndrome, enum bch_level bch_type, u32 *error_count,
>                 u32 *error_locations);
>  int elm_config(enum bch_level level);
>  void elm_reset(void);
> +#ifdef ELM_BASE
>  void elm_init(void);
> +#else
> +static inline void elm_init(void)
> +{
> +}
> +#endif
>  #endif /* __ASSEMBLY__ */
>  #endif /* __ASM_ARCH_ELM_H */
> diff --git a/drivers/mtd/nand/raw/omap_gpmc.c b/drivers/mtd/nand/raw/omap_gpmc.c
> index ed6cdf93ad0..9692b78da3c 100644
> --- a/drivers/mtd/nand/raw/omap_gpmc.c
> +++ b/drivers/mtd/nand/raw/omap_gpmc.c
> @@ -20,7 +20,8 @@
>  #include <linux/bch.h>
>  #include <linux/compiler.h>
>  #include <nand.h>
> -#include <linux/mtd/omap_elm.h>
> +
> +#include "omap_elm.h"
>
>  #ifndef GPMC_MAX_CS
>  #define GPMC_MAX_CS    4
> @@ -1249,6 +1250,15 @@ void board_nand_init(void)
>         struct udevice *dev;
>         int ret;
>
> +#ifdef CONFIG_NAND_OMAP_ELM
> +       ret = uclass_get_device_by_driver(UCLASS_MTD,
> +                                         DM_DRIVER_GET(gpmc_elm), &dev);
> +       if (ret && ret != -ENODEV) {
> +               pr_err("%s: Failed to get ELM device: %d\n", __func__, ret);
> +               return;
> +       }
> +#endif
> +
>         ret = uclass_get_device_by_driver(UCLASS_MTD,
>                                           DM_DRIVER_GET(gpmc_nand), &dev);
>         if (ret && ret != -ENODEV)
> --
> 2.34.1
>
Roger Quadros Dec. 21, 2022, 7:57 p.m. UTC | #2
Hi Michael,

On 21/12/2022 19:56, Michael Nazzareno Trimarchi wrote:
> Hi Roger
> 
> On Tue, Dec 20, 2022 at 11:22 AM Roger Quadros <rogerq@kernel.org> wrote:
>>
>> Support u-boot driver model. We still retain
>> support legacy way of doing things if ELM_BASE
>> is defined in <asm/arch/hardware.h>
>>
>> We could completely get rid of that if all
>> platforms defining ELM_BASE get rid of that definition
>> and enable CONFIG_SYS_NAND_SELF_INIT and are verified
>> to work.
>>
>> Signed-off-by: Roger Quadros <rogerq@kernel.org>
>> ---
> 
> When you post please include the relative changelog

I put the changelog in the cover-letter.


cheers,
-roger

> 
> Michael
> 
>>  drivers/mtd/nand/raw/omap_elm.c               | 35 ++++++++++++++++++-
>>  .../mtd => drivers/mtd/nand/raw}/omap_elm.h   |  6 ++++
>>  drivers/mtd/nand/raw/omap_gpmc.c              | 12 ++++++-
>>  3 files changed, 51 insertions(+), 2 deletions(-)
>>  rename {include/linux/mtd => drivers/mtd/nand/raw}/omap_elm.h (97%)
>>
>> diff --git a/drivers/mtd/nand/raw/omap_elm.c b/drivers/mtd/nand/raw/omap_elm.c
>> index 35c6dd1f1bc..e528a5348d5 100644
>> --- a/drivers/mtd/nand/raw/omap_elm.c
>> +++ b/drivers/mtd/nand/raw/omap_elm.c
>> @@ -15,9 +15,14 @@
>>  #include <common.h>
>>  #include <asm/io.h>
>>  #include <linux/errno.h>
>> -#include <linux/mtd/omap_elm.h>
>>  #include <asm/arch/hardware.h>
>>
>> +#include <dm.h>
>> +#include <linux/ioport.h>
>> +#include <linux/io.h>
>> +
>> +#include "omap_elm.h"
>> +
>>  #define DRIVER_NAME            "omap-elm"
>>  #define ELM_DEFAULT_POLY (0)
>>
>> @@ -180,6 +185,7 @@ void elm_reset(void)
>>                 ;
>>  }
>>
>> +#ifdef ELM_BASE
>>  /**
>>   * elm_init - Initialize ELM module
>>   *
>> @@ -191,3 +197,30 @@ void elm_init(void)
>>         elm_cfg = (struct elm *)ELM_BASE;
>>         elm_reset();
>>  }
>> +#endif
>> +
>> +static int elm_probe(struct udevice *dev)
>> +{
>> +#ifndef ELM_BASE
>> +       struct resource res;
>> +
>> +       dev_read_resource(dev, 0, &res);
>> +       elm_cfg = devm_ioremap(dev, res.start, resource_size(&res));
>> +       elm_reset();
>> +#endif
>> +
>> +       return 0;
>> +}
>> +
>> +static const struct udevice_id elm_ids[] = {
>> +       { .compatible = "ti,am3352-elm" },
>> +       { .compatible = "ti,am64-elm" },
>> +       { }
>> +};
>> +
>> +U_BOOT_DRIVER(gpmc_elm) = {
>> +       .name           = DRIVER_NAME,
>> +       .id             = UCLASS_MTD,
>> +       .of_match       = elm_ids,
>> +       .probe          = elm_probe,
>> +};
>> diff --git a/include/linux/mtd/omap_elm.h b/drivers/mtd/nand/raw/omap_elm.h
>> similarity index 97%
>> rename from include/linux/mtd/omap_elm.h
>> rename to drivers/mtd/nand/raw/omap_elm.h
>> index f3db00d55de..a7f7bacb154 100644
>> --- a/include/linux/mtd/omap_elm.h
>> +++ b/drivers/mtd/nand/raw/omap_elm.h
>> @@ -74,6 +74,12 @@ int elm_check_error(u8 *syndrome, enum bch_level bch_type, u32 *error_count,
>>                 u32 *error_locations);
>>  int elm_config(enum bch_level level);
>>  void elm_reset(void);
>> +#ifdef ELM_BASE
>>  void elm_init(void);
>> +#else
>> +static inline void elm_init(void)
>> +{
>> +}
>> +#endif
>>  #endif /* __ASSEMBLY__ */
>>  #endif /* __ASM_ARCH_ELM_H */
>> diff --git a/drivers/mtd/nand/raw/omap_gpmc.c b/drivers/mtd/nand/raw/omap_gpmc.c
>> index ed6cdf93ad0..9692b78da3c 100644
>> --- a/drivers/mtd/nand/raw/omap_gpmc.c
>> +++ b/drivers/mtd/nand/raw/omap_gpmc.c
>> @@ -20,7 +20,8 @@
>>  #include <linux/bch.h>
>>  #include <linux/compiler.h>
>>  #include <nand.h>
>> -#include <linux/mtd/omap_elm.h>
>> +
>> +#include "omap_elm.h"
>>
>>  #ifndef GPMC_MAX_CS
>>  #define GPMC_MAX_CS    4
>> @@ -1249,6 +1250,15 @@ void board_nand_init(void)
>>         struct udevice *dev;
>>         int ret;
>>
>> +#ifdef CONFIG_NAND_OMAP_ELM
>> +       ret = uclass_get_device_by_driver(UCLASS_MTD,
>> +                                         DM_DRIVER_GET(gpmc_elm), &dev);
>> +       if (ret && ret != -ENODEV) {
>> +               pr_err("%s: Failed to get ELM device: %d\n", __func__, ret);
>> +               return;
>> +       }
>> +#endif
>> +
>>         ret = uclass_get_device_by_driver(UCLASS_MTD,
>>                                           DM_DRIVER_GET(gpmc_nand), &dev);
>>         if (ret && ret != -ENODEV)
>> --
>> 2.34.1
>>
> 
>
Michael Nazzareno Trimarchi Dec. 21, 2022, 8:08 p.m. UTC | #3
Hi

On Wed, Dec 21, 2022 at 8:57 PM Roger Quadros <rogerq@kernel.org> wrote:
>
> Hi Michael,
>
> On 21/12/2022 19:56, Michael Nazzareno Trimarchi wrote:
> > Hi Roger
> >
> > On Tue, Dec 20, 2022 at 11:22 AM Roger Quadros <rogerq@kernel.org> wrote:
> >>
> >> Support u-boot driver model. We still retain
> >> support legacy way of doing things if ELM_BASE
> >> is defined in <asm/arch/hardware.h>
> >>
> >> We could completely get rid of that if all
> >> platforms defining ELM_BASE get rid of that definition
> >> and enable CONFIG_SYS_NAND_SELF_INIT and are verified
> >> to work.
> >>
> >> Signed-off-by: Roger Quadros <rogerq@kernel.org>
> >> ---
> >
> > When you post please include the relative changelog
>
> I put the changelog in the cover-letter.
>

My bad, I'm always start from patch 1 and look on changes in every single patch

Michael

>
> cheers,
> -roger
>
> >
> > Michael
> >
> >>  drivers/mtd/nand/raw/omap_elm.c               | 35 ++++++++++++++++++-
> >>  .../mtd => drivers/mtd/nand/raw}/omap_elm.h   |  6 ++++
> >>  drivers/mtd/nand/raw/omap_gpmc.c              | 12 ++++++-
> >>  3 files changed, 51 insertions(+), 2 deletions(-)
> >>  rename {include/linux/mtd => drivers/mtd/nand/raw}/omap_elm.h (97%)
> >>
> >> diff --git a/drivers/mtd/nand/raw/omap_elm.c b/drivers/mtd/nand/raw/omap_elm.c
> >> index 35c6dd1f1bc..e528a5348d5 100644
> >> --- a/drivers/mtd/nand/raw/omap_elm.c
> >> +++ b/drivers/mtd/nand/raw/omap_elm.c
> >> @@ -15,9 +15,14 @@
> >>  #include <common.h>
> >>  #include <asm/io.h>
> >>  #include <linux/errno.h>
> >> -#include <linux/mtd/omap_elm.h>
> >>  #include <asm/arch/hardware.h>
> >>
> >> +#include <dm.h>
> >> +#include <linux/ioport.h>
> >> +#include <linux/io.h>
> >> +
> >> +#include "omap_elm.h"
> >> +
> >>  #define DRIVER_NAME            "omap-elm"
> >>  #define ELM_DEFAULT_POLY (0)
> >>
> >> @@ -180,6 +185,7 @@ void elm_reset(void)
> >>                 ;
> >>  }
> >>
> >> +#ifdef ELM_BASE
> >>  /**
> >>   * elm_init - Initialize ELM module
> >>   *
> >> @@ -191,3 +197,30 @@ void elm_init(void)
> >>         elm_cfg = (struct elm *)ELM_BASE;
> >>         elm_reset();
> >>  }
> >> +#endif
> >> +
> >> +static int elm_probe(struct udevice *dev)
> >> +{
> >> +#ifndef ELM_BASE
> >> +       struct resource res;
> >> +
> >> +       dev_read_resource(dev, 0, &res);
> >> +       elm_cfg = devm_ioremap(dev, res.start, resource_size(&res));
> >> +       elm_reset();
> >> +#endif
> >> +
> >> +       return 0;
> >> +}
> >> +
> >> +static const struct udevice_id elm_ids[] = {
> >> +       { .compatible = "ti,am3352-elm" },
> >> +       { .compatible = "ti,am64-elm" },
> >> +       { }
> >> +};
> >> +
> >> +U_BOOT_DRIVER(gpmc_elm) = {
> >> +       .name           = DRIVER_NAME,
> >> +       .id             = UCLASS_MTD,
> >> +       .of_match       = elm_ids,
> >> +       .probe          = elm_probe,
> >> +};
> >> diff --git a/include/linux/mtd/omap_elm.h b/drivers/mtd/nand/raw/omap_elm.h
> >> similarity index 97%
> >> rename from include/linux/mtd/omap_elm.h
> >> rename to drivers/mtd/nand/raw/omap_elm.h
> >> index f3db00d55de..a7f7bacb154 100644
> >> --- a/include/linux/mtd/omap_elm.h
> >> +++ b/drivers/mtd/nand/raw/omap_elm.h
> >> @@ -74,6 +74,12 @@ int elm_check_error(u8 *syndrome, enum bch_level bch_type, u32 *error_count,
> >>                 u32 *error_locations);
> >>  int elm_config(enum bch_level level);
> >>  void elm_reset(void);
> >> +#ifdef ELM_BASE
> >>  void elm_init(void);
> >> +#else
> >> +static inline void elm_init(void)
> >> +{
> >> +}
> >> +#endif
> >>  #endif /* __ASSEMBLY__ */
> >>  #endif /* __ASM_ARCH_ELM_H */
> >> diff --git a/drivers/mtd/nand/raw/omap_gpmc.c b/drivers/mtd/nand/raw/omap_gpmc.c
> >> index ed6cdf93ad0..9692b78da3c 100644
> >> --- a/drivers/mtd/nand/raw/omap_gpmc.c
> >> +++ b/drivers/mtd/nand/raw/omap_gpmc.c
> >> @@ -20,7 +20,8 @@
> >>  #include <linux/bch.h>
> >>  #include <linux/compiler.h>
> >>  #include <nand.h>
> >> -#include <linux/mtd/omap_elm.h>
> >> +
> >> +#include "omap_elm.h"
> >>
> >>  #ifndef GPMC_MAX_CS
> >>  #define GPMC_MAX_CS    4
> >> @@ -1249,6 +1250,15 @@ void board_nand_init(void)
> >>         struct udevice *dev;
> >>         int ret;
> >>
> >> +#ifdef CONFIG_NAND_OMAP_ELM
> >> +       ret = uclass_get_device_by_driver(UCLASS_MTD,
> >> +                                         DM_DRIVER_GET(gpmc_elm), &dev);
> >> +       if (ret && ret != -ENODEV) {
> >> +               pr_err("%s: Failed to get ELM device: %d\n", __func__, ret);
> >> +               return;
> >> +       }
> >> +#endif
> >> +
> >>         ret = uclass_get_device_by_driver(UCLASS_MTD,
> >>                                           DM_DRIVER_GET(gpmc_nand), &dev);
> >>         if (ret && ret != -ENODEV)
> >> --
> >> 2.34.1
> >>
> >
> >
Michael Nazzareno Trimarchi Dec. 22, 2022, 9:35 p.m. UTC | #4
Hi Roger

On Wed, Dec 21, 2022 at 9:08 PM Michael Nazzareno Trimarchi
<michael@amarulasolutions.com> wrote:
>
> Hi
>
> On Wed, Dec 21, 2022 at 8:57 PM Roger Quadros <rogerq@kernel.org> wrote:
> >
> > Hi Michael,
> >
> > On 21/12/2022 19:56, Michael Nazzareno Trimarchi wrote:
> > > Hi Roger
> > >
> > > On Tue, Dec 20, 2022 at 11:22 AM Roger Quadros <rogerq@kernel.org> wrote:
> > >>
> > >> Support u-boot driver model. We still retain
> > >> support legacy way of doing things if ELM_BASE
> > >> is defined in <asm/arch/hardware.h>
> > >>
> > >> We could completely get rid of that if all
> > >> platforms defining ELM_BASE get rid of that definition
> > >> and enable CONFIG_SYS_NAND_SELF_INIT and are verified
> > >> to work.
> > >>
> > >> Signed-off-by: Roger Quadros <rogerq@kernel.org>
> > >> ---
> > >
> > > When you post please include the relative changelog
> >
> > I put the changelog in the cover-letter.
> >
>
> My bad, I'm always start from patch 1 and look on changes in every single patch
>

Pipeline is running, I have fixed another minor problem in the build

Michael

> Michael
>
> >
> > cheers,
> > -roger
> >
> > >
> > > Michael
> > >
> > >>  drivers/mtd/nand/raw/omap_elm.c               | 35 ++++++++++++++++++-
> > >>  .../mtd => drivers/mtd/nand/raw}/omap_elm.h   |  6 ++++
> > >>  drivers/mtd/nand/raw/omap_gpmc.c              | 12 ++++++-
> > >>  3 files changed, 51 insertions(+), 2 deletions(-)
> > >>  rename {include/linux/mtd => drivers/mtd/nand/raw}/omap_elm.h (97%)
> > >>
> > >> diff --git a/drivers/mtd/nand/raw/omap_elm.c b/drivers/mtd/nand/raw/omap_elm.c
> > >> index 35c6dd1f1bc..e528a5348d5 100644
> > >> --- a/drivers/mtd/nand/raw/omap_elm.c
> > >> +++ b/drivers/mtd/nand/raw/omap_elm.c
> > >> @@ -15,9 +15,14 @@
> > >>  #include <common.h>
> > >>  #include <asm/io.h>
> > >>  #include <linux/errno.h>
> > >> -#include <linux/mtd/omap_elm.h>
> > >>  #include <asm/arch/hardware.h>
> > >>
> > >> +#include <dm.h>
> > >> +#include <linux/ioport.h>
> > >> +#include <linux/io.h>
> > >> +
> > >> +#include "omap_elm.h"
> > >> +
> > >>  #define DRIVER_NAME            "omap-elm"
> > >>  #define ELM_DEFAULT_POLY (0)
> > >>
> > >> @@ -180,6 +185,7 @@ void elm_reset(void)
> > >>                 ;
> > >>  }
> > >>
> > >> +#ifdef ELM_BASE
> > >>  /**
> > >>   * elm_init - Initialize ELM module
> > >>   *
> > >> @@ -191,3 +197,30 @@ void elm_init(void)
> > >>         elm_cfg = (struct elm *)ELM_BASE;
> > >>         elm_reset();
> > >>  }
> > >> +#endif
> > >> +
> > >> +static int elm_probe(struct udevice *dev)
> > >> +{
> > >> +#ifndef ELM_BASE
> > >> +       struct resource res;
> > >> +
> > >> +       dev_read_resource(dev, 0, &res);
> > >> +       elm_cfg = devm_ioremap(dev, res.start, resource_size(&res));
> > >> +       elm_reset();
> > >> +#endif
> > >> +
> > >> +       return 0;
> > >> +}
> > >> +
> > >> +static const struct udevice_id elm_ids[] = {
> > >> +       { .compatible = "ti,am3352-elm" },
> > >> +       { .compatible = "ti,am64-elm" },
> > >> +       { }
> > >> +};
> > >> +
> > >> +U_BOOT_DRIVER(gpmc_elm) = {
> > >> +       .name           = DRIVER_NAME,
> > >> +       .id             = UCLASS_MTD,
> > >> +       .of_match       = elm_ids,
> > >> +       .probe          = elm_probe,
> > >> +};
> > >> diff --git a/include/linux/mtd/omap_elm.h b/drivers/mtd/nand/raw/omap_elm.h
> > >> similarity index 97%
> > >> rename from include/linux/mtd/omap_elm.h
> > >> rename to drivers/mtd/nand/raw/omap_elm.h
> > >> index f3db00d55de..a7f7bacb154 100644
> > >> --- a/include/linux/mtd/omap_elm.h
> > >> +++ b/drivers/mtd/nand/raw/omap_elm.h
> > >> @@ -74,6 +74,12 @@ int elm_check_error(u8 *syndrome, enum bch_level bch_type, u32 *error_count,
> > >>                 u32 *error_locations);
> > >>  int elm_config(enum bch_level level);
> > >>  void elm_reset(void);
> > >> +#ifdef ELM_BASE
> > >>  void elm_init(void);
> > >> +#else
> > >> +static inline void elm_init(void)
> > >> +{
> > >> +}
> > >> +#endif
> > >>  #endif /* __ASSEMBLY__ */
> > >>  #endif /* __ASM_ARCH_ELM_H */
> > >> diff --git a/drivers/mtd/nand/raw/omap_gpmc.c b/drivers/mtd/nand/raw/omap_gpmc.c
> > >> index ed6cdf93ad0..9692b78da3c 100644
> > >> --- a/drivers/mtd/nand/raw/omap_gpmc.c
> > >> +++ b/drivers/mtd/nand/raw/omap_gpmc.c
> > >> @@ -20,7 +20,8 @@
> > >>  #include <linux/bch.h>
> > >>  #include <linux/compiler.h>
> > >>  #include <nand.h>
> > >> -#include <linux/mtd/omap_elm.h>
> > >> +
> > >> +#include "omap_elm.h"
> > >>
> > >>  #ifndef GPMC_MAX_CS
> > >>  #define GPMC_MAX_CS    4
> > >> @@ -1249,6 +1250,15 @@ void board_nand_init(void)
> > >>         struct udevice *dev;
> > >>         int ret;
> > >>
> > >> +#ifdef CONFIG_NAND_OMAP_ELM
> > >> +       ret = uclass_get_device_by_driver(UCLASS_MTD,
> > >> +                                         DM_DRIVER_GET(gpmc_elm), &dev);
> > >> +       if (ret && ret != -ENODEV) {
> > >> +               pr_err("%s: Failed to get ELM device: %d\n", __func__, ret);
> > >> +               return;
> > >> +       }
> > >> +#endif
> > >> +
> > >>         ret = uclass_get_device_by_driver(UCLASS_MTD,
> > >>                                           DM_DRIVER_GET(gpmc_nand), &dev);
> > >>         if (ret && ret != -ENODEV)
> > >> --
> > >> 2.34.1
> > >>
> > >
> > >
>
>
>
> --
> Michael Nazzareno Trimarchi
> Co-Founder & Chief Executive Officer
> M. +39 347 913 2170
> michael@amarulasolutions.com
> __________________________________
>
> Amarula Solutions BV
> Joop Geesinkweg 125, 1114 AB, Amsterdam, NL
> T. +31 (0)85 111 9172
> info@amarulasolutions.com
> www.amarulasolutions.com
Roger Quadros Dec. 23, 2022, 9:34 a.m. UTC | #5
Hi Michael,

On 22/12/2022 23:35, Michael Nazzareno Trimarchi wrote:
> Hi Roger
> 
> On Wed, Dec 21, 2022 at 9:08 PM Michael Nazzareno Trimarchi
> <michael@amarulasolutions.com> wrote:
>>
>> Hi
>>
>> On Wed, Dec 21, 2022 at 8:57 PM Roger Quadros <rogerq@kernel.org> wrote:
>>>
>>> Hi Michael,
>>>
>>> On 21/12/2022 19:56, Michael Nazzareno Trimarchi wrote:
>>>> Hi Roger
>>>>
>>>> On Tue, Dec 20, 2022 at 11:22 AM Roger Quadros <rogerq@kernel.org> wrote:
>>>>>
>>>>> Support u-boot driver model. We still retain
>>>>> support legacy way of doing things if ELM_BASE
>>>>> is defined in <asm/arch/hardware.h>
>>>>>
>>>>> We could completely get rid of that if all
>>>>> platforms defining ELM_BASE get rid of that definition
>>>>> and enable CONFIG_SYS_NAND_SELF_INIT and are verified
>>>>> to work.
>>>>>
>>>>> Signed-off-by: Roger Quadros <rogerq@kernel.org>
>>>>> ---
>>>>
>>>> When you post please include the relative changelog
>>>
>>> I put the changelog in the cover-letter.
>>>
>>
>> My bad, I'm always start from patch 1 and look on changes in every single patch
>>
> 
> Pipeline is running, I have fixed another minor problem in the build

Thanks. You mean __maybe_unused for omap_calculate_ecc_bch()?

cheers,
-roger

> 
> Michael
> 
>> Michael
>>
>>>
>>> cheers,
>>> -roger
>>>
>>>>
>>>> Michael
>>>>
>>>>>  drivers/mtd/nand/raw/omap_elm.c               | 35 ++++++++++++++++++-
>>>>>  .../mtd => drivers/mtd/nand/raw}/omap_elm.h   |  6 ++++
>>>>>  drivers/mtd/nand/raw/omap_gpmc.c              | 12 ++++++-
>>>>>  3 files changed, 51 insertions(+), 2 deletions(-)
>>>>>  rename {include/linux/mtd => drivers/mtd/nand/raw}/omap_elm.h (97%)
>>>>>
>>>>> diff --git a/drivers/mtd/nand/raw/omap_elm.c b/drivers/mtd/nand/raw/omap_elm.c
>>>>> index 35c6dd1f1bc..e528a5348d5 100644
>>>>> --- a/drivers/mtd/nand/raw/omap_elm.c
>>>>> +++ b/drivers/mtd/nand/raw/omap_elm.c
>>>>> @@ -15,9 +15,14 @@
>>>>>  #include <common.h>
>>>>>  #include <asm/io.h>
>>>>>  #include <linux/errno.h>
>>>>> -#include <linux/mtd/omap_elm.h>
>>>>>  #include <asm/arch/hardware.h>
>>>>>
>>>>> +#include <dm.h>
>>>>> +#include <linux/ioport.h>
>>>>> +#include <linux/io.h>
>>>>> +
>>>>> +#include "omap_elm.h"
>>>>> +
>>>>>  #define DRIVER_NAME            "omap-elm"
>>>>>  #define ELM_DEFAULT_POLY (0)
>>>>>
>>>>> @@ -180,6 +185,7 @@ void elm_reset(void)
>>>>>                 ;
>>>>>  }
>>>>>
>>>>> +#ifdef ELM_BASE
>>>>>  /**
>>>>>   * elm_init - Initialize ELM module
>>>>>   *
>>>>> @@ -191,3 +197,30 @@ void elm_init(void)
>>>>>         elm_cfg = (struct elm *)ELM_BASE;
>>>>>         elm_reset();
>>>>>  }
>>>>> +#endif
>>>>> +
>>>>> +static int elm_probe(struct udevice *dev)
>>>>> +{
>>>>> +#ifndef ELM_BASE
>>>>> +       struct resource res;
>>>>> +
>>>>> +       dev_read_resource(dev, 0, &res);
>>>>> +       elm_cfg = devm_ioremap(dev, res.start, resource_size(&res));
>>>>> +       elm_reset();
>>>>> +#endif
>>>>> +
>>>>> +       return 0;
>>>>> +}
>>>>> +
>>>>> +static const struct udevice_id elm_ids[] = {
>>>>> +       { .compatible = "ti,am3352-elm" },
>>>>> +       { .compatible = "ti,am64-elm" },
>>>>> +       { }
>>>>> +};
>>>>> +
>>>>> +U_BOOT_DRIVER(gpmc_elm) = {
>>>>> +       .name           = DRIVER_NAME,
>>>>> +       .id             = UCLASS_MTD,
>>>>> +       .of_match       = elm_ids,
>>>>> +       .probe          = elm_probe,
>>>>> +};
>>>>> diff --git a/include/linux/mtd/omap_elm.h b/drivers/mtd/nand/raw/omap_elm.h
>>>>> similarity index 97%
>>>>> rename from include/linux/mtd/omap_elm.h
>>>>> rename to drivers/mtd/nand/raw/omap_elm.h
>>>>> index f3db00d55de..a7f7bacb154 100644
>>>>> --- a/include/linux/mtd/omap_elm.h
>>>>> +++ b/drivers/mtd/nand/raw/omap_elm.h
>>>>> @@ -74,6 +74,12 @@ int elm_check_error(u8 *syndrome, enum bch_level bch_type, u32 *error_count,
>>>>>                 u32 *error_locations);
>>>>>  int elm_config(enum bch_level level);
>>>>>  void elm_reset(void);
>>>>> +#ifdef ELM_BASE
>>>>>  void elm_init(void);
>>>>> +#else
>>>>> +static inline void elm_init(void)
>>>>> +{
>>>>> +}
>>>>> +#endif
>>>>>  #endif /* __ASSEMBLY__ */
>>>>>  #endif /* __ASM_ARCH_ELM_H */
>>>>> diff --git a/drivers/mtd/nand/raw/omap_gpmc.c b/drivers/mtd/nand/raw/omap_gpmc.c
>>>>> index ed6cdf93ad0..9692b78da3c 100644
>>>>> --- a/drivers/mtd/nand/raw/omap_gpmc.c
>>>>> +++ b/drivers/mtd/nand/raw/omap_gpmc.c
>>>>> @@ -20,7 +20,8 @@
>>>>>  #include <linux/bch.h>
>>>>>  #include <linux/compiler.h>
>>>>>  #include <nand.h>
>>>>> -#include <linux/mtd/omap_elm.h>
>>>>> +
>>>>> +#include "omap_elm.h"
>>>>>
>>>>>  #ifndef GPMC_MAX_CS
>>>>>  #define GPMC_MAX_CS    4
>>>>> @@ -1249,6 +1250,15 @@ void board_nand_init(void)
>>>>>         struct udevice *dev;
>>>>>         int ret;
>>>>>
>>>>> +#ifdef CONFIG_NAND_OMAP_ELM
>>>>> +       ret = uclass_get_device_by_driver(UCLASS_MTD,
>>>>> +                                         DM_DRIVER_GET(gpmc_elm), &dev);
>>>>> +       if (ret && ret != -ENODEV) {
>>>>> +               pr_err("%s: Failed to get ELM device: %d\n", __func__, ret);
>>>>> +               return;
>>>>> +       }
>>>>> +#endif
>>>>> +
>>>>>         ret = uclass_get_device_by_driver(UCLASS_MTD,
>>>>>                                           DM_DRIVER_GET(gpmc_nand), &dev);
>>>>>         if (ret && ret != -ENODEV)
>>>>> --
>>>>> 2.34.1
>>>>>
>>>>
>>>>
>>
>>
>>
>> --
>> Michael Nazzareno Trimarchi
>> Co-Founder & Chief Executive Officer
>> M. +39 347 913 2170
>> michael@amarulasolutions.com
>> __________________________________
>>
>> Amarula Solutions BV
>> Joop Geesinkweg 125, 1114 AB, Amsterdam, NL
>> T. +31 (0)85 111 9172
>> info@amarulasolutions.com
>> www.amarulasolutions.com
> 
> 
>
Michael Nazzareno Trimarchi Dec. 23, 2022, 9:43 a.m. UTC | #6
Hi

On Fri, Dec 23, 2022 at 10:34 AM Roger Quadros <rogerq@kernel.org> wrote:
>
> Hi Michael,
>
> On 22/12/2022 23:35, Michael Nazzareno Trimarchi wrote:
> > Hi Roger
> >
> > On Wed, Dec 21, 2022 at 9:08 PM Michael Nazzareno Trimarchi
> > <michael@amarulasolutions.com> wrote:
> >>
> >> Hi
> >>
> >> On Wed, Dec 21, 2022 at 8:57 PM Roger Quadros <rogerq@kernel.org> wrote:
> >>>
> >>> Hi Michael,
> >>>
> >>> On 21/12/2022 19:56, Michael Nazzareno Trimarchi wrote:
> >>>> Hi Roger
> >>>>
> >>>> On Tue, Dec 20, 2022 at 11:22 AM Roger Quadros <rogerq@kernel.org> wrote:
> >>>>>
> >>>>> Support u-boot driver model. We still retain
> >>>>> support legacy way of doing things if ELM_BASE
> >>>>> is defined in <asm/arch/hardware.h>
> >>>>>
> >>>>> We could completely get rid of that if all
> >>>>> platforms defining ELM_BASE get rid of that definition
> >>>>> and enable CONFIG_SYS_NAND_SELF_INIT and are verified
> >>>>> to work.
> >>>>>
> >>>>> Signed-off-by: Roger Quadros <rogerq@kernel.org>
> >>>>> ---
> >>>>
> >>>> When you post please include the relative changelog
> >>>
> >>> I put the changelog in the cover-letter.
> >>>
> >>
> >> My bad, I'm always start from patch 1 and look on changes in every single patch
> >>
> >
> > Pipeline is running, I have fixed another minor problem in the build
>
> Thanks. You mean __maybe_unused for omap_calculate_ecc_bch()?
>

Yes, now the pipeline is clean

Michael

> cheers,
> -roger
>
> >
> > Michael
> >
> >> Michael
> >>
> >>>
> >>> cheers,
> >>> -roger
> >>>
> >>>>
> >>>> Michael
> >>>>
> >>>>>  drivers/mtd/nand/raw/omap_elm.c               | 35 ++++++++++++++++++-
> >>>>>  .../mtd => drivers/mtd/nand/raw}/omap_elm.h   |  6 ++++
> >>>>>  drivers/mtd/nand/raw/omap_gpmc.c              | 12 ++++++-
> >>>>>  3 files changed, 51 insertions(+), 2 deletions(-)
> >>>>>  rename {include/linux/mtd => drivers/mtd/nand/raw}/omap_elm.h (97%)
> >>>>>
> >>>>> diff --git a/drivers/mtd/nand/raw/omap_elm.c b/drivers/mtd/nand/raw/omap_elm.c
> >>>>> index 35c6dd1f1bc..e528a5348d5 100644
> >>>>> --- a/drivers/mtd/nand/raw/omap_elm.c
> >>>>> +++ b/drivers/mtd/nand/raw/omap_elm.c
> >>>>> @@ -15,9 +15,14 @@
> >>>>>  #include <common.h>
> >>>>>  #include <asm/io.h>
> >>>>>  #include <linux/errno.h>
> >>>>> -#include <linux/mtd/omap_elm.h>
> >>>>>  #include <asm/arch/hardware.h>
> >>>>>
> >>>>> +#include <dm.h>
> >>>>> +#include <linux/ioport.h>
> >>>>> +#include <linux/io.h>
> >>>>> +
> >>>>> +#include "omap_elm.h"
> >>>>> +
> >>>>>  #define DRIVER_NAME            "omap-elm"
> >>>>>  #define ELM_DEFAULT_POLY (0)
> >>>>>
> >>>>> @@ -180,6 +185,7 @@ void elm_reset(void)
> >>>>>                 ;
> >>>>>  }
> >>>>>
> >>>>> +#ifdef ELM_BASE
> >>>>>  /**
> >>>>>   * elm_init - Initialize ELM module
> >>>>>   *
> >>>>> @@ -191,3 +197,30 @@ void elm_init(void)
> >>>>>         elm_cfg = (struct elm *)ELM_BASE;
> >>>>>         elm_reset();
> >>>>>  }
> >>>>> +#endif
> >>>>> +
> >>>>> +static int elm_probe(struct udevice *dev)
> >>>>> +{
> >>>>> +#ifndef ELM_BASE
> >>>>> +       struct resource res;
> >>>>> +
> >>>>> +       dev_read_resource(dev, 0, &res);
> >>>>> +       elm_cfg = devm_ioremap(dev, res.start, resource_size(&res));
> >>>>> +       elm_reset();
> >>>>> +#endif
> >>>>> +
> >>>>> +       return 0;
> >>>>> +}
> >>>>> +
> >>>>> +static const struct udevice_id elm_ids[] = {
> >>>>> +       { .compatible = "ti,am3352-elm" },
> >>>>> +       { .compatible = "ti,am64-elm" },
> >>>>> +       { }
> >>>>> +};
> >>>>> +
> >>>>> +U_BOOT_DRIVER(gpmc_elm) = {
> >>>>> +       .name           = DRIVER_NAME,
> >>>>> +       .id             = UCLASS_MTD,
> >>>>> +       .of_match       = elm_ids,
> >>>>> +       .probe          = elm_probe,
> >>>>> +};
> >>>>> diff --git a/include/linux/mtd/omap_elm.h b/drivers/mtd/nand/raw/omap_elm.h
> >>>>> similarity index 97%
> >>>>> rename from include/linux/mtd/omap_elm.h
> >>>>> rename to drivers/mtd/nand/raw/omap_elm.h
> >>>>> index f3db00d55de..a7f7bacb154 100644
> >>>>> --- a/include/linux/mtd/omap_elm.h
> >>>>> +++ b/drivers/mtd/nand/raw/omap_elm.h
> >>>>> @@ -74,6 +74,12 @@ int elm_check_error(u8 *syndrome, enum bch_level bch_type, u32 *error_count,
> >>>>>                 u32 *error_locations);
> >>>>>  int elm_config(enum bch_level level);
> >>>>>  void elm_reset(void);
> >>>>> +#ifdef ELM_BASE
> >>>>>  void elm_init(void);
> >>>>> +#else
> >>>>> +static inline void elm_init(void)
> >>>>> +{
> >>>>> +}
> >>>>> +#endif
> >>>>>  #endif /* __ASSEMBLY__ */
> >>>>>  #endif /* __ASM_ARCH_ELM_H */
> >>>>> diff --git a/drivers/mtd/nand/raw/omap_gpmc.c b/drivers/mtd/nand/raw/omap_gpmc.c
> >>>>> index ed6cdf93ad0..9692b78da3c 100644
> >>>>> --- a/drivers/mtd/nand/raw/omap_gpmc.c
> >>>>> +++ b/drivers/mtd/nand/raw/omap_gpmc.c
> >>>>> @@ -20,7 +20,8 @@
> >>>>>  #include <linux/bch.h>
> >>>>>  #include <linux/compiler.h>
> >>>>>  #include <nand.h>
> >>>>> -#include <linux/mtd/omap_elm.h>
> >>>>> +
> >>>>> +#include "omap_elm.h"
> >>>>>
> >>>>>  #ifndef GPMC_MAX_CS
> >>>>>  #define GPMC_MAX_CS    4
> >>>>> @@ -1249,6 +1250,15 @@ void board_nand_init(void)
> >>>>>         struct udevice *dev;
> >>>>>         int ret;
> >>>>>
> >>>>> +#ifdef CONFIG_NAND_OMAP_ELM
> >>>>> +       ret = uclass_get_device_by_driver(UCLASS_MTD,
> >>>>> +                                         DM_DRIVER_GET(gpmc_elm), &dev);
> >>>>> +       if (ret && ret != -ENODEV) {
> >>>>> +               pr_err("%s: Failed to get ELM device: %d\n", __func__, ret);
> >>>>> +               return;
> >>>>> +       }
> >>>>> +#endif
> >>>>> +
> >>>>>         ret = uclass_get_device_by_driver(UCLASS_MTD,
> >>>>>                                           DM_DRIVER_GET(gpmc_nand), &dev);
> >>>>>         if (ret && ret != -ENODEV)
> >>>>> --
> >>>>> 2.34.1
> >>>>>
> >>>>
> >>>>
> >>
> >>
> >>
> >> --
> >> Michael Nazzareno Trimarchi
> >> Co-Founder & Chief Executive Officer
> >> M. +39 347 913 2170
> >> michael@amarulasolutions.com
> >> __________________________________
> >>
> >> Amarula Solutions BV
> >> Joop Geesinkweg 125, 1114 AB, Amsterdam, NL
> >> T. +31 (0)85 111 9172
> >> info@amarulasolutions.com
> >> www.amarulasolutions.com
> >
> >
> >
diff mbox series

Patch

diff --git a/drivers/mtd/nand/raw/omap_elm.c b/drivers/mtd/nand/raw/omap_elm.c
index 35c6dd1f1bc..e528a5348d5 100644
--- a/drivers/mtd/nand/raw/omap_elm.c
+++ b/drivers/mtd/nand/raw/omap_elm.c
@@ -15,9 +15,14 @@ 
 #include <common.h>
 #include <asm/io.h>
 #include <linux/errno.h>
-#include <linux/mtd/omap_elm.h>
 #include <asm/arch/hardware.h>
 
+#include <dm.h>
+#include <linux/ioport.h>
+#include <linux/io.h>
+
+#include "omap_elm.h"
+
 #define DRIVER_NAME		"omap-elm"
 #define ELM_DEFAULT_POLY (0)
 
@@ -180,6 +185,7 @@  void elm_reset(void)
 		;
 }
 
+#ifdef ELM_BASE
 /**
  * elm_init - Initialize ELM module
  *
@@ -191,3 +197,30 @@  void elm_init(void)
 	elm_cfg = (struct elm *)ELM_BASE;
 	elm_reset();
 }
+#endif
+
+static int elm_probe(struct udevice *dev)
+{
+#ifndef ELM_BASE
+	struct resource res;
+
+	dev_read_resource(dev, 0, &res);
+	elm_cfg = devm_ioremap(dev, res.start, resource_size(&res));
+	elm_reset();
+#endif
+
+	return 0;
+}
+
+static const struct udevice_id elm_ids[] = {
+	{ .compatible = "ti,am3352-elm" },
+	{ .compatible = "ti,am64-elm" },
+	{ }
+};
+
+U_BOOT_DRIVER(gpmc_elm) = {
+	.name           = DRIVER_NAME,
+	.id             = UCLASS_MTD,
+	.of_match       = elm_ids,
+	.probe          = elm_probe,
+};
diff --git a/include/linux/mtd/omap_elm.h b/drivers/mtd/nand/raw/omap_elm.h
similarity index 97%
rename from include/linux/mtd/omap_elm.h
rename to drivers/mtd/nand/raw/omap_elm.h
index f3db00d55de..a7f7bacb154 100644
--- a/include/linux/mtd/omap_elm.h
+++ b/drivers/mtd/nand/raw/omap_elm.h
@@ -74,6 +74,12 @@  int elm_check_error(u8 *syndrome, enum bch_level bch_type, u32 *error_count,
 		u32 *error_locations);
 int elm_config(enum bch_level level);
 void elm_reset(void);
+#ifdef ELM_BASE
 void elm_init(void);
+#else
+static inline void elm_init(void)
+{
+}
+#endif
 #endif /* __ASSEMBLY__ */
 #endif /* __ASM_ARCH_ELM_H */
diff --git a/drivers/mtd/nand/raw/omap_gpmc.c b/drivers/mtd/nand/raw/omap_gpmc.c
index ed6cdf93ad0..9692b78da3c 100644
--- a/drivers/mtd/nand/raw/omap_gpmc.c
+++ b/drivers/mtd/nand/raw/omap_gpmc.c
@@ -20,7 +20,8 @@ 
 #include <linux/bch.h>
 #include <linux/compiler.h>
 #include <nand.h>
-#include <linux/mtd/omap_elm.h>
+
+#include "omap_elm.h"
 
 #ifndef GPMC_MAX_CS
 #define GPMC_MAX_CS	4
@@ -1249,6 +1250,15 @@  void board_nand_init(void)
 	struct udevice *dev;
 	int ret;
 
+#ifdef CONFIG_NAND_OMAP_ELM
+	ret = uclass_get_device_by_driver(UCLASS_MTD,
+					  DM_DRIVER_GET(gpmc_elm), &dev);
+	if (ret && ret != -ENODEV) {
+		pr_err("%s: Failed to get ELM device: %d\n", __func__, ret);
+		return;
+	}
+#endif
+
 	ret = uclass_get_device_by_driver(UCLASS_MTD,
 					  DM_DRIVER_GET(gpmc_nand), &dev);
 	if (ret && ret != -ENODEV)