Message ID | 20170522161642.13058-2-semen.protsenko@linaro.org |
---|---|
State | Accepted |
Commit | fa24eca1f20a037d2dcbd1eae7ac8b2ecb1b0423 |
Headers | show |
Series | omap: Provide fastboot variables for fastboot.sh | expand |
On Mon, May 22, 2017 at 07:16:40PM +0300, Sam Protsenko wrote: > This patch reuses new option, which allows us to expose variables > from environment to "fastboot getvar" command. Those variables must be > of "fastboot.%s" format. > > Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org> > --- > Changes in v2: > - use get_device_type() instead of omap_get_cpu_type() > - guard omap_set_fastboot_vars() with CONFIG_FASTBOOT_FLASH > - use correct board names > > arch/arm/include/asm/omap_common.h | 6 ++ > arch/arm/mach-omap2/utils.c | 115 +++++++++++++++++++++++++++++++++++++ > 2 files changed, 121 insertions(+) > > diff --git a/arch/arm/include/asm/omap_common.h b/arch/arm/include/asm/omap_common.h > index c1a70b15d0..a4bfa0c451 100644 > --- a/arch/arm/include/asm/omap_common.h > +++ b/arch/arm/include/asm/omap_common.h > @@ -643,6 +643,12 @@ void omap_die_id_get_board_serial(struct tag_serialnr *serialnr); > void omap_die_id_usbethaddr(void); > void omap_die_id_display(void); > > +#ifdef CONFIG_FASTBOOT_FLASH > +void omap_set_fastboot_vars(void); > +#else > +static inline void omap_set_fastboot_vars(void) { } > +#endif > + > void recalibrate_iodelay(void); > > void omap_smc1(u32 service, u32 val); > diff --git a/arch/arm/mach-omap2/utils.c b/arch/arm/mach-omap2/utils.c > index 2d03ebfbd3..1d0b63350a 100644 > --- a/arch/arm/mach-omap2/utils.c > +++ b/arch/arm/mach-omap2/utils.c > @@ -18,6 +18,121 @@ static void do_cancel_out(u32 *num, u32 *den, u32 factor) > } > } > > +#ifdef CONFIG_FASTBOOT_FLASH > +static void omap_set_fastboot_cpu(void) > +{ > + char *cpu; > + u32 cpu_rev = omap_revision(); > + > + switch (cpu_rev) { > + case DRA752_ES1_0: > + case DRA752_ES1_1: > + case DRA752_ES2_0: > + cpu = "DRA752"; > + break; > + case DRA722_ES1_0: > + case DRA722_ES2_0: > + cpu = "DRA722"; > + break; > + default: > + cpu = NULL; > + printf("Warning: fastboot.cpu: unknown CPU rev: %u\n", cpu_rev); > + } > + > + setenv("fastboot.cpu", cpu); > +} > + > +static void omap_set_fastboot_secure(void) > +{ > + const char *secure; > + u32 dev = get_device_type(); > + > + switch (dev) { > + case EMU_DEVICE: > + secure = "EMU"; > + break; > + case HS_DEVICE: > + secure = "HS"; > + break; > + case GP_DEVICE: > + secure = "GP"; > + break; > + default: > + secure = NULL; > + printf("Warning: fastboot.secure: unknown CPU sec: %u\n", dev); > + } > + > + setenv("fastboot.secure", secure); > +} OK, this shows that the code we have in arch/arm/mach-omap2/am33xx/sys_info.c and arch/arm/mach-omap2/hwinit-common.c and arch/arm/mach-omap2/omap3/sys_info.c needs to get re-worked a bit so that we: - Don't bloat families that we won't have (since we know at build time what's possible) - Don't repeat the same code in N places to check device type / family / PG. Yes, this will require a little more work as the fastboot side is OK with "DRA722", the question I have is can we construct that similar to what omap_rev_string() does? Thanks! -- Tom
On Mon, May 22, 2017 at 07:16:40PM +0300, Semen Protsenko wrote: > This patch reuses new option, which allows us to expose variables > from environment to "fastboot getvar" command. Those variables must be > of "fastboot.%s" format. > > Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org> Applied to u-boot/master, thanks! -- Tom
diff --git a/arch/arm/include/asm/omap_common.h b/arch/arm/include/asm/omap_common.h index c1a70b15d0..a4bfa0c451 100644 --- a/arch/arm/include/asm/omap_common.h +++ b/arch/arm/include/asm/omap_common.h @@ -643,6 +643,12 @@ void omap_die_id_get_board_serial(struct tag_serialnr *serialnr); void omap_die_id_usbethaddr(void); void omap_die_id_display(void); +#ifdef CONFIG_FASTBOOT_FLASH +void omap_set_fastboot_vars(void); +#else +static inline void omap_set_fastboot_vars(void) { } +#endif + void recalibrate_iodelay(void); void omap_smc1(u32 service, u32 val); diff --git a/arch/arm/mach-omap2/utils.c b/arch/arm/mach-omap2/utils.c index 2d03ebfbd3..1d0b63350a 100644 --- a/arch/arm/mach-omap2/utils.c +++ b/arch/arm/mach-omap2/utils.c @@ -18,6 +18,121 @@ static void do_cancel_out(u32 *num, u32 *den, u32 factor) } } +#ifdef CONFIG_FASTBOOT_FLASH +static void omap_set_fastboot_cpu(void) +{ + char *cpu; + u32 cpu_rev = omap_revision(); + + switch (cpu_rev) { + case DRA752_ES1_0: + case DRA752_ES1_1: + case DRA752_ES2_0: + cpu = "DRA752"; + break; + case DRA722_ES1_0: + case DRA722_ES2_0: + cpu = "DRA722"; + break; + default: + cpu = NULL; + printf("Warning: fastboot.cpu: unknown CPU rev: %u\n", cpu_rev); + } + + setenv("fastboot.cpu", cpu); +} + +static void omap_set_fastboot_secure(void) +{ + const char *secure; + u32 dev = get_device_type(); + + switch (dev) { + case EMU_DEVICE: + secure = "EMU"; + break; + case HS_DEVICE: + secure = "HS"; + break; + case GP_DEVICE: + secure = "GP"; + break; + default: + secure = NULL; + printf("Warning: fastboot.secure: unknown CPU sec: %u\n", dev); + } + + setenv("fastboot.secure", secure); +} + +static void omap_set_fastboot_board_rev(void) +{ + const char *board_rev; + + board_rev = getenv("board_rev"); + if (board_rev == NULL) + printf("Warning: fastboot.board_rev: unknown board revision\n"); + + setenv("fastboot.board_rev", board_rev); +} + +#ifdef CONFIG_FASTBOOT_FLASH_MMC_DEV +static u32 omap_mmc_get_part_size(const char *part) +{ + int res; + struct blk_desc *dev_desc; + disk_partition_t info; + u64 sz = 0; + + dev_desc = blk_get_dev("mmc", CONFIG_FASTBOOT_FLASH_MMC_DEV); + if (!dev_desc || dev_desc->type == DEV_TYPE_UNKNOWN) { + error("invalid mmc device\n"); + return 0; + } + + res = part_get_info_by_name(dev_desc, part, &info); + if (res < 0) { + error("cannot find partition: '%s'\n", part); + return 0; + } + + /* Calculate size in bytes */ + sz = (info.size * (u64)info.blksz); + /* to KiB */ + sz >>= 10; + + return (u32)sz; +} + +static void omap_set_fastboot_userdata_size(void) +{ + char buf[16]; + u32 sz_kb; + + sz_kb = omap_mmc_get_part_size("userdata"); + if (sz_kb == 0) { + buf[0] = '\0'; + printf("Warning: fastboot.userdata_size: unable to calc\n"); + } else { + sprintf(buf, "%u", sz_kb); + } + + setenv("fastboot.userdata_size", buf); +} +#else +static inline void omap_set_fastboot_userdata_size(void) +{ +} +#endif /* CONFIG_FASTBOOT_FLASH_MMC_DEV */ +void omap_set_fastboot_vars(void) +{ + omap_set_fastboot_cpu(); + omap_set_fastboot_secure(); + omap_set_fastboot_board_rev(); + omap_set_fastboot_userdata_size(); +} +#endif /* CONFIG_FASTBOOT_FLASH */ + /* * Cancel out the denominator and numerator of a fraction * to get smaller numerator and denominator.
This patch reuses new option, which allows us to expose variables from environment to "fastboot getvar" command. Those variables must be of "fastboot.%s" format. Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org> --- Changes in v2: - use get_device_type() instead of omap_get_cpu_type() - guard omap_set_fastboot_vars() with CONFIG_FASTBOOT_FLASH - use correct board names arch/arm/include/asm/omap_common.h | 6 ++ arch/arm/mach-omap2/utils.c | 115 +++++++++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+)