nt9856x/BSP/u-boot/board/novatek/common/nvt_nand_xbootdat.c
2023-03-28 15:07:53 +08:00

197 lines
3.9 KiB
C

#include <asm-generic/errno.h>
//#include <asm/global_data.h>
#include <nvt_nand_partition.h>
#include <nvt_nand_xbootdat.h>
#include <common.h>
#if defined(CONFIG_NT72673_A32_NAND_EVB)
#include "../nt72673_a32_nand_evb/nt72673_nand_nvt_xbootdat.c"
#elif defined(CONFIG_NT72673_N33005_NAND)
#include "../nt72673_n33005_nand/n33005_nand_nvt_xbootdat.c"
#else
#error "You should define your production xbootdat info first !"
#endif
nvt_nand_xbootdat_info* nvt_nand_get_xdat_by_name(char *name)
{
int i, total_cnt = sizeof(xdat_info) / sizeof(nvt_nand_xbootdat_info);
for(i=0;i < total_cnt;i++) {
if(strcmp(xdat_info[i].xdat_name, name) == 0)
break;
}
if(i >= total_cnt)
return NULL;
else
return (&(xdat_info[i]));
}
static u32 nvt_nand_get_xdat_size(void)
{
return sizeof(xdat_info) / sizeof(nvt_nand_xbootdat_info);
}
static nvt_nand_xbootdat_info* nvt_nand_get_xdat_by_index(u32 idx)
{
int total_cnt = sizeof(xdat_info) / sizeof(nvt_nand_xbootdat_info);
if (idx >= total_cnt)
return NULL;
else
return(&(xdat_info[idx]));
}
void nvt_nand_xbootdat_init(void)
{
int i;
unsigned int xbootdat_start_block;
xbootdat_start_block=nand_calc_partition_block(nvt_nand_get_ptn_index("xbootdat"));
for(i=0; i < (sizeof(xdat_info) / sizeof(nvt_nand_xbootdat_info)); i++)
xdat_info[i].start_block += xbootdat_start_block;
}
int do_nvt_xsave(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
nvt_nand_xbootdat_info *pxdat_info;
int ret = 0;
if(argc < 2) {
ret = CMD_RET_USAGE;
goto out;
}
if(strcmp(argv[1], "help") == 0) {
int i, total_cnt;
total_cnt = nvt_nand_get_xdat_size();
for(i = 0; i < total_cnt;i++) {
pxdat_info = nvt_nand_get_xdat_by_index(i);
if(pxdat_info != NULL)
pxdat_info->xdathelp(pxdat_info, XDAT_HELP_SAVE);
}
goto out;
}
pxdat_info = nvt_nand_get_xdat_by_name(argv[1]);
if(pxdat_info == NULL) {
ret = CMD_RET_USAGE;
goto out;
}
ret = pxdat_info->xdatsave(pxdat_info, argc, argv);
out:
return ret;
}
U_BOOT_CMD(
xsave, 4, 1, do_nvt_xsave,
"save parameter to xbootdat",
"xsave panel index idx_id - save panel index for xboot use\n"
"xsave kercmd - save kernel command line for xboot use\n"
"xsave panel config config_file_name\n"
);
int do_nvt_xdump(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
nvt_nand_xbootdat_info *pxdat_info;
int ret = 0;
if(argc != 2) {
ret = CMD_RET_USAGE;
goto out;
}
if(strcmp(argv[1], "help") == 0) {
int i, total_cnt;
total_cnt = nvt_nand_get_xdat_size();
for(i = 0; i < total_cnt;i++) {
pxdat_info = nvt_nand_get_xdat_by_index(i);
if(pxdat_info != NULL)
pxdat_info->xdathelp(pxdat_info, XDAT_HELP_DUMP);
}
goto out;
}
pxdat_info = nvt_nand_get_xdat_by_name(argv[1]);
if(pxdat_info == NULL) {
ret = CMD_RET_USAGE;
goto out;
}
ret = pxdat_info->xdatdump(pxdat_info, argc, argv);
out:
return ret;
}
U_BOOT_CMD(
xdump, 2, 1, do_nvt_xdump,
"dump xbootdat parameter",
"xdump panel - dump panel parameters in xbootdat\n"
"xdump kercmd - dump kernel command in xbootdat\n"
);
int do_nvt_xerase(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
nvt_nand_xbootdat_info *pxdat_info;
int ret = 0;
if(argc != 2) {
ret = CMD_RET_USAGE;
goto out;
}
if(strcmp(argv[1], "help") == 0) {
int i, total_cnt;
total_cnt = nvt_nand_get_xdat_size();
for(i = 0; i < total_cnt;i++) {
pxdat_info = nvt_nand_get_xdat_by_index(i);
if(pxdat_info != NULL)
pxdat_info->xdathelp(pxdat_info, XDAT_HELP_ERASE);
}
goto out;
}
pxdat_info = nvt_nand_get_xdat_by_name(argv[1]);
if(pxdat_info == NULL) {
ret = CMD_RET_USAGE;
goto out;
}
ret = pxdat_info->xdaterase(pxdat_info, argc, argv);
out:
return ret;
}
U_BOOT_CMD(
xerase, 2, 1, do_nvt_xerase,
"erase xbootdat parameter",
"xerase panel - erase panel parameters in xbootdat\n"
"xerase kercmd -erase kernel command line in xbootdat\n"
);