i2S6ULY2: eMMC variant use GPT partition

This commit is contained in:
SteveChen
2018-04-30 11:02:13 +08:00
parent 731900fa3c
commit 5a6218a7d5
3 changed files with 131 additions and 25 deletions

View File

@ -469,16 +469,12 @@ void board_late_mmc_env_init(void)
if (!check_mmc_autodetect())
return;
#if 0
setenv_ulong("mmcdev", dev_no);
/* Set mmcblk env */
sprintf(mmcblk, "/dev/mmcblk%dp2 rootwait rw",
mmc_map_to_kernel_blk(dev_no));
setenv("mmcroot", mmcblk);
sprintf(cmd, "mmc dev %d", dev_no);
run_command(cmd, 0);
#endif
}
int board_mmc_init(bd_t *bis)
{
@ -871,6 +867,7 @@ static const struct boot_mode board_boot_modes[] = {
};
#endif
#ifdef CONFIG_SYS_BOOT_NAND
void create_partition_table(void)
{
struct mtd_info *nand = &nand_info[0];
@ -886,9 +883,50 @@ void create_partition_table(void)
break;
}
}
#endif
#ifdef CONFIG_SYS_BOOT_EMMC
void generate_partition_table(void)
{
struct mmc *mmc = find_mmc_device(1);
unsigned int capacity_gb = 0;
#if 0
/*
* Todo: will use random uuid for gpt
*/
if(!getenv("uuid_disk"))
run_command("uuid uuid_disk", 0);
if(!getenv("part1_uuid"))
run_command("uuid part1_uuid", 0);
if(!getenv("part2_uuid"))
run_command("uuid part2_uuid", 0);
if(!getenv("part3_uuid"))
run_command("uuid part3_uuid", 0);
if(!getenv("part4_uuid"))
run_command("uuid part4_uuid", 0);
if(!getenv("part5_uuid"))
run_command("uuid part5_uuid", 0);
if(!getenv("part6_uuid"))
run_command("uuid part6_uuid", 0);
if(!getenv("part7_uuid"))
run_command("uuid part7_uuid", 0);
#endif
/* Retrieve eMMC size in GiB */
if (mmc)
capacity_gb = mmc->capacity / SZ_1G;
/* eMMC capacity is not exact, so asume 8GB if larger than 7GB */
if (capacity_gb >= 7)
setenv("parts_linux", LINUX_8GB_PARTITION_TABLE);
else
setenv("parts_linux", LINUX_4GB_PARTITION_TABLE);
}
#endif
int board_late_init(void)
{
char* parttable;
#ifdef CONFIG_CMD_BMODE
add_board_boot_modes(board_boot_modes);
#endif
@ -915,6 +953,15 @@ int board_late_init(void)
set_wdog_reset((struct wdog_regs *)WDOG1_BASE_ADDR);
#ifdef CONFIG_SYS_BOOT_EMMC
/*
* If there is no defined partition table generate one dynamically
* basing on the available eMMC size.
*/
parttable = getenv("parts_linux");
if (!parttable)
generate_partition_table();
#endif
return 0;
}

View File

@ -114,19 +114,52 @@
#elif defined(CONFIG_SYS_BOOT_EMMC)
/* i2S-6ULL eMMC variant */
#define CONFIG_ENV_IS_IN_MMC
#ifdef CONFIG_SDCARD
#define CONFIG_SYS_MMC_ENV_DEV 0 /* USDHC1 */
#else
#define CONFIG_SYS_MMC_ENV_DEV 1 /* USDHC2 */
#endif
#define CONFIG_SYS_MMC_ENV_PART 1 /* user area */
#define CONFIG_BOOT_PARTITION "1"
#define CONFIG_RECOVERY_PARTITION "2"
#define CONFIG_CMD_UUID
#define CONFIG_CMD_UPDATE_MMC
#define RANDOM_UUIDS \
"uuid_disk=075e2a9b-6af6-448c-a52a-3a6e69f0afff\0" \
"part1_uuid=43f1961b-ce4c-4e6c-8f22-2230c5d532bd\0" \
"part2_uuid=f241b915-4241-47fd-b4de-ab5af832a0f6\0" \
"part3_uuid=1c606ef5-f1ac-43b9-9bb5-d5c578580b6b\0" \
"part4_uuid=c7d8648b-76f7-4e2b-b829-e95a83cc7b32\0" \
"part5_uuid=ebae5694-6e56-497c-83c6-c4455e12d727\0" \
"part6_uuid=3845c9fc-e581-49f3-999f-86c9bab515ef\0" \
"part7_uuid=3fcf7bf1-b6fe-419d-9a14-f87950727bc0\0" \
"part8_uuid=12c08a28-fb40-430a-a5bc-7b4f015b0b3c\0" \
"part9_uuid=dc83dea8-c467-45dc-84eb-5e913daec17e\0"
#define LINUX_4GB_PARTITION_TABLE \
"\"uuid_disk=${uuid_disk};" \
"start=2MiB," \
"name=linux,size=64MiB,uuid=${part1_uuid};" \
"name=recovery,size=64MiB,uuid=${part2_uuid};" \
"name=rootfs,size=1536MiB,uuid=${part3_uuid},type=linux;" \
"name=data,size=-,uuid=${part4_uuid},type=linux;" \
"\""
#define LINUX_8GB_PARTITION_TABLE \
"\"uuid_disk=${uuid_disk};" \
"start=2MiB," \
"name=linux,size=64MiB,uuid=${part1_uuid};" \
"name=recovery,size=64MiB,uuid=${part2_uuid};" \
"name=rootfs,size=3GiB,uuid=${part3_uuid};" \
"name=data,size=-,uuid=${part4_uuid};" \
"\""
#endif
#if defined(CONFIG_ENV_IS_IN_MMC) || defined(CONFIG_SDCARD)
#define CONFIG_ENV_OFFSET (8 * SZ_64K)
#define CONFIG_ENV_SIZE SZ_8K
#if defined(CONFIG_ENV_IS_IN_MMC)
#define CONFIG_ENV_OFFSET SZ_1M
#define CONFIG_ENV_SIZE SZ_16K
#elif defined(CONFIG_ENV_IS_IN_SPI_FLASH)
#define CONFIG_ENV_OFFSET (768 * 1024)
#define CONFIG_ENV_SIZE SZ_8K
#define CONFIG_ENV_SECT_SIZE (64 * 1024)
@ -134,10 +167,13 @@
#define CONFIG_ENV_SPI_CS CONFIG_SF_DEFAULT_CS
#define CONFIG_ENV_SPI_MODE CONFIG_SF_DEFAULT_MODE
#define CONFIG_ENV_SPI_MAX_HZ CONFIG_SF_DEFAULT_SPEED
#elif defined(CONFIG_ENV_IS_IN_NAND)
#define CONFIG_ENV_OFFSET (SZ_1M * 5)
#define CONFIG_ENV_SECT_SIZE SZ_1M
#define CONFIG_ENV_SIZE CONFIG_ENV_SECT_SIZE
#endif
@ -161,6 +197,12 @@
#define CONFIG_PARTITION_UUIDS
#define CONFIG_CMD_PART
#define CONFIG_SUPPORT_EMMC_BOOT /* eMMC specific */
/* MMC device and partition where U-Boot image is */
#define CONFIG_SYS_BOOT_PART_EMMC 1 /* Boot part 1 on eMMC */
#define CONFIG_SYS_BOOT_PART_OFFSET SZ_1K
#define CONFIG_SYS_BOOT_PART_SIZE (SZ_2M - CONFIG_SYS_BOOT_PART_OFFSET)
#endif
#define CONFIG_SYS_MMC_IMG_LOAD_PART 1
@ -291,6 +333,7 @@
#endif /* endif CONFIG_CMD_USB */
/* MTD (NAND) */
#if defined(CONFIG_SYS_BOOT_NAND)
#define CONFIG_SKIP_NAND_BBT_SCAN
#define CONFIG_UBOOT_PARTITION "bootloader"
#define CONFIG_LINUX_PARTITION "linux"
@ -322,6 +365,7 @@
/* Max percentage of reserved blocks for bad block management per partition */
#define CONFIG_MTD_UBI_MAXRSVDPEB_PCNT 4
#endif
/* Supported sources for update */
#define CONFIG_SUPPORTED_SOURCES ((1 << SRC_TFTP) | \

View File

@ -75,6 +75,7 @@
"if test $fdt_file = undefined; then " \
"echo WARNING: Could not determine dtb to use; fi; " \
"fi;\0"
#elif defined(CONFIG_SYS_BOOT_EMMC)
/* i2S-6ULL eMMC Variant */
#define CONFIG_MFG_NAND_PARTITION ""
@ -175,6 +176,7 @@
#define CONFIG_EXTRA_ENV_SETTINGS \
CONFIG_MFG_ENV_SETTINGS \
RANDOM_UUIDS \
"script=boot.scr\0" \
"zimage=zImage\0" \
"console=ttymxc0\0" \
@ -185,15 +187,28 @@
"boot_fdt=try\0" \
"ip_dyn=yes\0" \
"panel=TFT43AB\0" \
"default_bootargs=console=ttymxc0,115200\0" \
"opt_args=quiet \0" \
"bootargs_linux=\0" \
"mmcdev="__stringify(CONFIG_SYS_MMC_ENV_DEV)"\0" \
"mmcpart=" __stringify(CONFIG_SYS_MMC_IMG_LOAD_PART) "\0" \
"mmcroot=" CONFIG_MMCROOT " rootwait rw\0" \
"mmcpart=" CONFIG_BOOT_PARTITION "\0" \
"mmcroot=PARTUUID=1c606ef5-f1ac-43b9-9bb5-d5c578580b6b\0" \
"mmcautodetect=yes\0" \
"mmcargs=setenv bootargs ${default_bootargs} " \
"partition_mmc_linux=mmc rescan;" \
"if mmc dev ${mmcdev} 0; then " \
"gpt write mmc ${mmcdev} ${parts_linux};" \
"mmc rescan;" \
"else " \
"if mmc dev ${mmcdev};then " \
"gpt write mmc ${mmcdev} ${parts_linux};" \
"mmc rescan;" \
"else;" \
"fi;" \
"fi;\0" \
"mmcargs=setenv bootargs console=${console},${baudrate} " \
CONFIG_BOOTARGS_CMA_SIZE \
"root=${mmcroot} ${opt_args}\0" \
"root=${mmcroot} ${bootargs_linux}\0" \
"bootargs_mmc_linux=setenv bootargs console=${console},${baudrate} " \
"${bootargs_linux} root=${mmcroot} rootwait rw " \
"${bootargs_once} ${extra_bootargs}\0" \
"loadbootscript=" \
"fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};\0" \
"bootscript=echo Running bootscript from mmc ...; " \
@ -243,9 +258,7 @@
CONFIG_FDT_FILE \
#define CONFIG_BOOTCOMMAND \
"run findfdt;" \
"mmc dev ${mmcdev} ${mmcpart};" \
"mmc dev ${mmcdev} ${mmcpart}; if mmc rescan; then " \
"if mmc rescan; then " \
"if run loadbootscript; then " \
"run bootscript; " \
"else " \
@ -255,14 +268,16 @@
"fi; " \
"fi; " \
"else run netboot; fi"
#endif
#define CONFIG_SYS_STORAGE_MEDIA "mmc"
#endif /* end of CONFIG_SYS_BOOT_EMMC */
/* Miscellaneous configurable options */
#define CONFIG_CMD_MEMTEST
#define CONFIG_SYS_MEMTEST_START 0x80000000
#define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_MEMTEST_START + 0x8000000)
#define CONFIG_MMCROOT "/dev/mmcblk1p2" /* USDHC2 */
#define CONFIG_MMCROOT "/dev/mmcblk1p3" /* USDHC2, part 3 */
#define CONFIG_IMX_THERMAL
@ -286,7 +301,7 @@
#define CONFIG_IMX_VIDEO_SKIP
#define CONFIG_IMX6_LCD_DAT16
/*#define CONFIG_IMX6_LCD_DAT24*/
#endif
#endif /* End of CONFIG_VIDEO */
#endif
#define CONFIG_IOMUX_LPSR