* imx: Save boot source into env during init @ 2011-01-10 4:36 Marc Reilly 2011-01-10 4:36 ` [PATCH 1/3] Init env context a bit earlier in initalization sequence Marc Reilly ` (2 more replies) 0 siblings, 3 replies; 5+ messages in thread From: Marc Reilly @ 2011-01-10 4:36 UTC (permalink / raw) To: barebox Hi, This series saves the boot location into an environment variable $boot_loc for use in init/boot scripts etc. on imx25 and imx35. Could someone comment as to whether the first patch is strictly necessary? - env_push_context() needs to be called before imx_boot_save_loc() (which calls export()), and I'm not sure whether it would always be guaranteed if they are both late_initcalls. I assume it comes down to linking order.. Cheers, Marc _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/3] Init env context a bit earlier in initalization sequence. 2011-01-10 4:36 imx: Save boot source into env during init Marc Reilly @ 2011-01-10 4:36 ` Marc Reilly 2011-01-10 4:36 ` [PATCH 2/3] imx: add reg definitions for imx25 and imx35 boot source Marc Reilly 2011-01-10 4:36 ` [PATCH 3/3] imx(25,35): save boot location into $boot_loc env Marc Reilly 2 siblings, 0 replies; 5+ messages in thread From: Marc Reilly @ 2011-01-10 4:36 UTC (permalink / raw) To: barebox Ensures subsequent init functions to export environment variables during init without having to rely on linking order being correct. Signed-off-by: Marc Reilly <marc@cpdesign.com.au> --- common/env.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/common/env.c b/common/env.c index f81bd46..b72b5d1 100644 --- a/common/env.c +++ b/common/env.c @@ -81,7 +81,7 @@ int env_push_context(void) return 0; } -late_initcall(env_push_context); +device_initcall(env_push_context); /** * FIXME -- 1.7.1 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/3] imx: add reg definitions for imx25 and imx35 boot source. 2011-01-10 4:36 imx: Save boot source into env during init Marc Reilly 2011-01-10 4:36 ` [PATCH 1/3] Init env context a bit earlier in initalization sequence Marc Reilly @ 2011-01-10 4:36 ` Marc Reilly 2011-01-10 4:36 ` [PATCH 3/3] imx(25,35): save boot location into $boot_loc env Marc Reilly 2 siblings, 0 replies; 5+ messages in thread From: Marc Reilly @ 2011-01-10 4:36 UTC (permalink / raw) To: barebox Signed-off-by: Marc Reilly <marc@cpdesign.com.au> --- arch/arm/mach-imx/include/mach/imx25-regs.h | 2 ++ arch/arm/mach-imx/include/mach/imx35-regs.h | 2 ++ 2 files changed, 4 insertions(+), 0 deletions(-) diff --git a/arch/arm/mach-imx/include/mach/imx25-regs.h b/arch/arm/mach-imx/include/mach/imx25-regs.h index ac590d9..e01fa86 100644 --- a/arch/arm/mach-imx/include/mach/imx25-regs.h +++ b/arch/arm/mach-imx/include/mach/imx25-regs.h @@ -79,6 +79,8 @@ #define PDR0_AUTO_CON (1 << 0) #define PDR0_PER_SEL (1 << 26) +#define CCM_RCSR_MEM_CTRL_SHIFT 30 + /* * Adresses and ranges of the external chip select lines */ diff --git a/arch/arm/mach-imx/include/mach/imx35-regs.h b/arch/arm/mach-imx/include/mach/imx35-regs.h index 75825e5..7da911b 100644 --- a/arch/arm/mach-imx/include/mach/imx35-regs.h +++ b/arch/arm/mach-imx/include/mach/imx35-regs.h @@ -79,6 +79,8 @@ #define CCM_CGR1_SDHC1_SHIFT 26 #define CCM_CGR2_USB_SHIFT 22 +#define CCM_RCSR_MEM_CTRL_SHIFT 25 + #define PDR0_AUTO_MUX_DIV(x) (((x) & 0x7) << 9) #define PDR0_CCM_PER_AHB(x) (((x) & 0x7) << 12) #define PDR0_CON_MUX_DIV(x) (((x) & 0xf) << 16) -- 1.7.1 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 3/3] imx(25,35): save boot location into $boot_loc env. 2011-01-10 4:36 imx: Save boot source into env during init Marc Reilly 2011-01-10 4:36 ` [PATCH 1/3] Init env context a bit earlier in initalization sequence Marc Reilly 2011-01-10 4:36 ` [PATCH 2/3] imx: add reg definitions for imx25 and imx35 boot source Marc Reilly @ 2011-01-10 4:36 ` Marc Reilly 2011-01-10 19:13 ` Sascha Hauer 2 siblings, 1 reply; 5+ messages in thread From: Marc Reilly @ 2011-01-10 4:36 UTC (permalink / raw) To: barebox Saves the boot source into an environment variable so env scripts can more easily use boot source information. We could also look at the extra information in the MEM_TYPE bits if needed in future, but this is good enough for my purposes. Note only tested on imx35. I haven't added support for any other variants because I'm not familiar with them. (And can't test them anyway). Signed-off-by: Marc Reilly <marc@cpdesign.com.au> --- arch/arm/mach-imx/Makefile | 1 + arch/arm/mach-imx/boot.c | 57 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 0 deletions(-) create mode 100644 arch/arm/mach-imx/boot.c diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile index d000683..3b2deaf 100644 --- a/arch/arm/mach-imx/Makefile +++ b/arch/arm/mach-imx/Makefile @@ -11,3 +11,4 @@ obj-$(CONFIG_IMX_IIM) += iim.o obj-$(CONFIG_NAND_IMX) += nand.o obj-y += speed.o obj-y += devices.o +obj-y += boot.o diff --git a/arch/arm/mach-imx/boot.c b/arch/arm/mach-imx/boot.c new file mode 100644 index 0000000..a9bce4b --- /dev/null +++ b/arch/arm/mach-imx/boot.c @@ -0,0 +1,57 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include <common.h> +#include <environment.h> +#include <init.h> + +#include <asm/io.h> +#include <mach/imx-regs.h> + +#if defined(CONFIG_ARCH_IMX25) || defined(CONFIG_ARCH_IMX35) +static int imx_boot_save_loc(void) +{ + uint32_t reg; + reg = readl(IMX_CCM_BASE + CCM_RCSR); + + switch ((reg >> CCM_RCSR_MEM_CTRL_SHIFT) & 0x3) { + case 0x03: /* SD/MMC is the source */ + setenv("boot_loc", "mmc"); + export("boot_loc"); + break; + case 0x01: /* NAND is the source */ + setenv("boot_loc", "nand"); + export("boot_loc"); + break; + case 0x00: /* NOR is the source */ + setenv("boot_loc", "nor"); + export("boot_loc"); + break; + default: + break; + } + + return 0; +} + +/* + * This can only be called after env_push_context() has been called + * so it is a late_initcall. + */ +late_initcall(imx_boot_save_loc); + +#endif -- 1.7.1 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 3/3] imx(25,35): save boot location into $boot_loc env. 2011-01-10 4:36 ` [PATCH 3/3] imx(25,35): save boot location into $boot_loc env Marc Reilly @ 2011-01-10 19:13 ` Sascha Hauer 0 siblings, 0 replies; 5+ messages in thread From: Sascha Hauer @ 2011-01-10 19:13 UTC (permalink / raw) To: Marc Reilly; +Cc: barebox Hi Marc, On Mon, Jan 10, 2011 at 03:36:52PM +1100, Marc Reilly wrote: > Saves the boot source into an environment variable so env scripts > can more easily use boot source information. We could also > look at the extra information in the MEM_TYPE bits if needed in future, > but this is good enough for my purposes. > > Note only tested on imx35. I haven't added support for any other variants > because I'm not familiar with them. (And can't test them anyway). > > Signed-off-by: Marc Reilly <marc@cpdesign.com.au> > --- > arch/arm/mach-imx/Makefile | 1 + > arch/arm/mach-imx/boot.c | 57 ++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 58 insertions(+), 0 deletions(-) > create mode 100644 arch/arm/mach-imx/boot.c > > diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile > index d000683..3b2deaf 100644 > --- a/arch/arm/mach-imx/Makefile > +++ b/arch/arm/mach-imx/Makefile > @@ -11,3 +11,4 @@ obj-$(CONFIG_IMX_IIM) += iim.o > obj-$(CONFIG_NAND_IMX) += nand.o > obj-y += speed.o > obj-y += devices.o > +obj-y += boot.o > diff --git a/arch/arm/mach-imx/boot.c b/arch/arm/mach-imx/boot.c > new file mode 100644 > index 0000000..a9bce4b > --- /dev/null > +++ b/arch/arm/mach-imx/boot.c > @@ -0,0 +1,57 @@ > +/* > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License as > + * published by the Free Software Foundation; either version 2 of > + * the License, or (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, > + * MA 02111-1307 USA > + */ > + > +#include <common.h> > +#include <environment.h> > +#include <init.h> > + > +#include <asm/io.h> > +#include <mach/imx-regs.h> > + > +#if defined(CONFIG_ARCH_IMX25) || defined(CONFIG_ARCH_IMX35) > +static int imx_boot_save_loc(void) > +{ > + uint32_t reg; > + reg = readl(IMX_CCM_BASE + CCM_RCSR); > + > + switch ((reg >> CCM_RCSR_MEM_CTRL_SHIFT) & 0x3) { > + case 0x03: /* SD/MMC is the source */ > + setenv("boot_loc", "mmc"); > + export("boot_loc"); > + break; > + case 0x01: /* NAND is the source */ > + setenv("boot_loc", "nand"); > + export("boot_loc"); > + break; > + case 0x00: /* NOR is the source */ > + setenv("boot_loc", "nor"); > + export("boot_loc"); > + break; > + default: > + break; > + } > + > + return 0; > +} We can safe some instructions by doing: char *bootloc = NULL; switch ((reg >> CCM_RCSR_MEM_CTRL_SHIFT) & 0x3) { case 0x03: /* SD/MMC is the source */ bootloc = "mmc"; break; ... } if (bootloc) { setenv("boot_loc", bootloc); export("boot_loc"); } Other than that we might want to add a comment that mmc is not necessarily correct, because it might also be i2c/spi eeprom determined by the BT_MEM_TYPE bits. Sascha -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2011-01-10 19:16 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2011-01-10 4:36 imx: Save boot source into env during init Marc Reilly 2011-01-10 4:36 ` [PATCH 1/3] Init env context a bit earlier in initalization sequence Marc Reilly 2011-01-10 4:36 ` [PATCH 2/3] imx: add reg definitions for imx25 and imx35 boot source Marc Reilly 2011-01-10 4:36 ` [PATCH 3/3] imx(25,35): save boot location into $boot_loc env Marc Reilly 2011-01-10 19:13 ` Sascha Hauer
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox