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.protse...@linaro.org> --- arch/arm/include/asm/omap_common.h | 2 + arch/arm/mach-omap2/utils.c | 134 +++++++++++++++++++++++++++++++++++++ 2 files changed, 136 insertions(+) diff --git a/arch/arm/include/asm/omap_common.h b/arch/arm/include/asm/omap_common.h index c1a70b15d0..cede2f7b28 100644 --- a/arch/arm/include/asm/omap_common.h +++ b/arch/arm/include/asm/omap_common.h @@ -643,6 +643,8 @@ void omap_die_id_get_board_serial(struct tag_serialnr *serialnr); void omap_die_id_usbethaddr(void); void omap_die_id_display(void); +void omap_set_fastboot_vars(void); + 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..0689c879b0 100644 --- a/arch/arm/mach-omap2/utils.c +++ b/arch/arm/mach-omap2/utils.c @@ -6,6 +6,16 @@ */ #include <common.h> #include <asm/arch/sys_proto.h> + +/* Device type bits in CONTROL_STATUS register */ +#define DEVICETYPE_OFFSET 6 +#define DEVICETYPE_MASK (0x7 << DEVICETYPE_OFFSET) +#define OMAP_TYPE_TEST 0x0 +#define OMAP_TYPE_EMU 0x1 +#define OMAP_TYPE_SEC 0x2 +#define OMAP_TYPE_GP 0x3 +#define OMAP_TYPE_BAD 0x4 + static void do_cancel_out(u32 *num, u32 *den, u32 factor) { while (1) { @@ -18,6 +28,122 @@ static void do_cancel_out(u32 *num, u32 *den, u32 factor) } } +static const char *omap_get_cpu_type(void) +{ + u32 type; + + type = readl((*ctrl)->control_status); + type &= DEVICETYPE_MASK; + type >>= DEVICETYPE_OFFSET; + + switch (type) { + case OMAP_TYPE_EMU: + return "EMU"; + case OMAP_TYPE_SEC: + return "HS"; + case OMAP_TYPE_GP: + return "GP"; + default: + return NULL; + } +} + +static void omap_set_fastboot_cpu(void) +{ + u32 cpu_rev; + char *cpu; + + cpu_rev = omap_revision(); + + switch (cpu_rev) { + case DRA752_ES1_0: + case DRA752_ES1_1: + case DRA752_ES2_0: + cpu = "J6"; + break; + case DRA722_ES1_0: + case DRA722_ES2_0: + cpu = "J6ECO"; + break; + default: + cpu = NULL; + printf("Warning: fastboot.cpu: unknown cpu type %u\n", cpu_rev); + } + + setenv("fastboot.cpu", cpu); +} + +static void omap_set_fastboot_secure(void) +{ + const char *secure; + + secure = omap_get_cpu_type(); + if (secure == NULL) + printf("Warning: fastboot.secure: unknown CPU type\n"); + + 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 + /* * Cancel out the denominator and numerator of a fraction * to get smaller numerator and denominator. @@ -111,3 +237,11 @@ void omap_die_id_display(void) printf("OMAP die ID: %08x%08x%08x%08x\n", die_id[3], die_id[2], die_id[1], die_id[0]); } + +void omap_set_fastboot_vars(void) +{ + omap_set_fastboot_cpu(); + omap_set_fastboot_secure(); + omap_set_fastboot_board_rev(); + omap_set_fastboot_userdata_size(); +} -- 2.11.0 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot