Message ID | 20221220102203.52398-9-rogerq@kernel.org |
---|---|
State | Accepted |
Delegated to: | Dario Binacchi |
Headers | show |
Series | rawnand: omap_gpmc: driver model support | expand |
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 >
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 >> > >
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 > >> > > > >
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
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 > > >
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 --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)
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%)