From 6caa0333659101835ed60c5102c81b3c71e7affe Mon Sep 17 00:00:00 2001 From: Kever Yang Date: Sat, 28 Apr 2018 16:54:21 +0800 Subject: [PATCH] rockchip: add rkimgtest cmd to get boot dev We need to check if the storage(sdmmc) have IDB data so that we can use it as boot device. Change-Id: I7373b8f1a6c4c41c1d2cb1c94cd5d20c0780b5db Signed-off-by: Kever Yang --- cmd/bootrkp.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/cmd/bootrkp.c b/cmd/bootrkp.c index 1fe4fe3d3a..cf8d2f81a2 100644 --- a/cmd/bootrkp.c +++ b/cmd/bootrkp.c @@ -5,6 +5,7 @@ */ #include +#include #include #include #include @@ -79,3 +80,39 @@ U_BOOT_CMD( "boot.img: ramdisk\n" "resource.img: dtb, u-boot logo, kernel logo" ); + +static int do_rkimg_test(cmd_tbl_t *cmdtp, int flag, int argc, + char * const argv[]) +{ + struct blk_desc *dev_desc; + u32* buffer; + int ret = 0; + + dev_desc = blk_get_dev(argv[1], simple_strtoul(argv[2], NULL, 16)); + + buffer = memalign(ARCH_DMA_MINALIGN, 1024); + /* Read one block from begining of IDB data */ + ret = blk_dread(dev_desc, 64, 2, buffer); + if (ret != 1) { + printf("%s fail to read data from IDB\n", __func__); + free(buffer); + return CMD_RET_FAILURE; + } + + if (buffer[0] == 0xFCDC8C3B){ + printf("%s found IDB in SDcard\n", __func__); + ret = CMD_RET_SUCCESS; + if (0 == buffer[128 + 104 / 4]) /* TAG in IDB */ + env_update("bootargs", "sdfwupdate"); + } + + free(buffer); + + return ret; +} + +U_BOOT_CMD( + rkimgtest, 3, 0, do_rkimg_test, + "Test if storage media have rockchip image", + "" +);