1*73ec4e03SJoseph Chen /* 2*73ec4e03SJoseph Chen * (C) Copyright 2019 Rockchip Electronics Co., Ltd 3*73ec4e03SJoseph Chen * 4*73ec4e03SJoseph Chen * SPDX-License-Identifier: GPL-2.0+ 5*73ec4e03SJoseph Chen */ 6*73ec4e03SJoseph Chen 7*73ec4e03SJoseph Chen #include <common.h> 8*73ec4e03SJoseph Chen #include <malloc.h> 9*73ec4e03SJoseph Chen 10*73ec4e03SJoseph Chen static int do_rkimg_test(cmd_tbl_t *cmdtp, int flag, 11*73ec4e03SJoseph Chen int argc, char *const argv[]) 12*73ec4e03SJoseph Chen { 13*73ec4e03SJoseph Chen struct blk_desc *dev_desc; 14*73ec4e03SJoseph Chen u32 *buffer; 15*73ec4e03SJoseph Chen int ret; 16*73ec4e03SJoseph Chen 17*73ec4e03SJoseph Chen if (argc != 3) 18*73ec4e03SJoseph Chen return CMD_RET_USAGE; 19*73ec4e03SJoseph Chen 20*73ec4e03SJoseph Chen dev_desc = blk_get_dev(argv[1], simple_strtoul(argv[2], NULL, 16)); 21*73ec4e03SJoseph Chen if (!dev_desc) { 22*73ec4e03SJoseph Chen printf("%s: dev_desc is NULL!\n", __func__); 23*73ec4e03SJoseph Chen return CMD_RET_FAILURE; 24*73ec4e03SJoseph Chen } 25*73ec4e03SJoseph Chen 26*73ec4e03SJoseph Chen /* read one block from beginning of IDB data */ 27*73ec4e03SJoseph Chen buffer = memalign(ARCH_DMA_MINALIGN, 1024); 28*73ec4e03SJoseph Chen ret = blk_dread(dev_desc, 64, 2, buffer); 29*73ec4e03SJoseph Chen if (ret != 2) { 30*73ec4e03SJoseph Chen printf("%s: Failed to read data from IDB\n", __func__); 31*73ec4e03SJoseph Chen free(buffer); 32*73ec4e03SJoseph Chen return CMD_RET_FAILURE; 33*73ec4e03SJoseph Chen } 34*73ec4e03SJoseph Chen 35*73ec4e03SJoseph Chen if (buffer[0] == 0xFCDC8C3B) { 36*73ec4e03SJoseph Chen ret = CMD_RET_SUCCESS; 37*73ec4e03SJoseph Chen 38*73ec4e03SJoseph Chen if (!strcmp("mmc", argv[1])) 39*73ec4e03SJoseph Chen printf("Found IDB in SDcard\n"); 40*73ec4e03SJoseph Chen else 41*73ec4e03SJoseph Chen printf("Found IDB in U-disk\n"); 42*73ec4e03SJoseph Chen 43*73ec4e03SJoseph Chen /* TAG in IDB */ 44*73ec4e03SJoseph Chen if (0 == buffer[128 + 104 / 4]) { 45*73ec4e03SJoseph Chen if (!strcmp("mmc", argv[1])) 46*73ec4e03SJoseph Chen env_update("bootargs", "sdfwupdate"); 47*73ec4e03SJoseph Chen else 48*73ec4e03SJoseph Chen env_update("bootargs", "usbfwupdate"); 49*73ec4e03SJoseph Chen } 50*73ec4e03SJoseph Chen } else { 51*73ec4e03SJoseph Chen ret = CMD_RET_FAILURE; 52*73ec4e03SJoseph Chen } 53*73ec4e03SJoseph Chen 54*73ec4e03SJoseph Chen free(buffer); 55*73ec4e03SJoseph Chen 56*73ec4e03SJoseph Chen return ret; 57*73ec4e03SJoseph Chen } 58*73ec4e03SJoseph Chen 59*73ec4e03SJoseph Chen U_BOOT_CMD( 60*73ec4e03SJoseph Chen rkimgtest, 3, 0, do_rkimg_test, 61*73ec4e03SJoseph Chen "Test if storage media have rockchip image", 62*73ec4e03SJoseph Chen "<devtype> <devnum>" 63*73ec4e03SJoseph Chen ); 64