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

Roger Quadros rogerq at kernel.org
Wed Dec 21 20:57:38 CET 2022


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 at 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 at 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
>>
> 
> 


More information about the U-Boot mailing list