mirror of
https://git.codelinaro.org/clo/qsdk/oss/boot/u-boot-2016.git
synced 2026-03-06 01:11:47 +01:00
ipq: support for mibib reload
Adding a new command mibib_reload to populate the partition table info from mibib binary Change-Id: I3f08fc07ea55f1bbd90dc28d8f459d108f86bc0e Signed-off-by: Timple Raj M <quic_timple@quicinc.com>
This commit is contained in:
parent
361518f76c
commit
40c1f3f4b3
4 changed files with 122 additions and 0 deletions
|
|
@ -490,6 +490,30 @@ int smem_ptable_init(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* mibib_ptable_init - initializes SMEM partition table
|
||||
*
|
||||
* Initialize partition table from MIBIB.
|
||||
*/
|
||||
#ifdef CONFIG_IPQ_MIBIB_RELOAD
|
||||
int mibib_ptable_init(unsigned int* addr)
|
||||
{
|
||||
struct smem_ptable* ptable;
|
||||
|
||||
ptable = (struct smem_ptable*) addr;
|
||||
if (ptable->magic[0] != _SMEM_PTABLE_MAGIC_1 ||
|
||||
ptable->magic[1] != _SMEM_PTABLE_MAGIC_2)
|
||||
return -ENOMSG;
|
||||
|
||||
debug("smem ptable found: ver: %d len: %d\n",
|
||||
smem_ptable.version, smem_ptable.len);
|
||||
|
||||
memcpy(&smem_ptable, addr, sizeof(smem_ptable));
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* smem_bootconfig_info - retrieve bootconfig flags
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -55,6 +55,9 @@ struct version_entry
|
|||
|
||||
unsigned int smem_get_board_platform_type(void);
|
||||
int smem_ptable_init(void);
|
||||
#ifdef CONFIG_IPQ_MIBIB_RELOAD
|
||||
int mibib_ptable_init(unsigned int* load_addr);
|
||||
#endif
|
||||
int smem_get_boot_flash(uint32_t *flash_type,
|
||||
uint32_t *flash_index,
|
||||
uint32_t *flash_chip_select,
|
||||
|
|
|
|||
|
|
@ -35,6 +35,17 @@ extern struct sdhci_host mmc_host;
|
|||
#define GPT_PART_NAME "0:GPT"
|
||||
#define GPT_BACKUP_PART_NAME "0:GPTBACKUP"
|
||||
|
||||
#ifdef CONFIG_IPQ_MIBIB_RELOAD
|
||||
#define HEADER_MAGIC1 0xFE569FAC
|
||||
#define HEADER_MAGIC2 0xCD7F127A
|
||||
#define HEADER_VERSION 4
|
||||
|
||||
struct header {
|
||||
unsigned magic[2];
|
||||
unsigned version;
|
||||
} __attribute__ ((__packed__));
|
||||
#endif
|
||||
|
||||
int write_to_flash(int flash_type, uint32_t address, uint32_t offset,
|
||||
uint32_t part_size, uint32_t file_size, char *layout)
|
||||
{
|
||||
|
|
@ -418,6 +429,77 @@ char * const argv[])
|
|||
return ret;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_IPQ_MIBIB_RELOAD
|
||||
static int do_mibib_reload(cmd_tbl_t *cmdtp, int flag, int argc,
|
||||
char * const argv[])
|
||||
{
|
||||
uint32_t load_addr, file_size;
|
||||
uint32_t page_size = 256;
|
||||
uint8_t flash_type = 0;
|
||||
struct header* mibib_hdr;
|
||||
qca_smem_flash_info_t *sfi = &qca_smem_flash_info;
|
||||
int nand_dev = 0;
|
||||
|
||||
nand_dev = nand_dev;
|
||||
if (argc == 4) {
|
||||
flash_type = simple_strtoul(argv[1], NULL, 16);
|
||||
load_addr = simple_strtoul(argv[2], NULL, 16);
|
||||
file_size = simple_strtoul(argv[3], NULL, 16);
|
||||
} else
|
||||
return CMD_RET_USAGE;
|
||||
|
||||
if (flash_type > 1 ) {
|
||||
printf("Invalid flash type \n");
|
||||
return CMD_RET_FAILURE;
|
||||
}
|
||||
|
||||
if (flash_type == 0) {
|
||||
/*NAND 2K or 4K*/
|
||||
nand_dev = CONFIG_NAND_FLASH_INFO_IDX;
|
||||
#ifdef CONFIG_QPIC_SERIAL
|
||||
sfi->flash_type = SMEM_BOOT_QSPI_NAND_FLASH;
|
||||
#else
|
||||
sfi->flash_type = SMEM_BOOT_NAND_FLASH;
|
||||
#endif
|
||||
} else {
|
||||
/* NOR*/
|
||||
nand_dev = CONFIG_SPI_FLASH_INFO_IDX;
|
||||
sfi->flash_type = SMEM_BOOT_SPI_FLASH;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CMD_NAND
|
||||
nand_info_t *nand = &nand_info[nand_dev];
|
||||
sfi->flash_block_size = nand->erasesize;
|
||||
sfi->flash_density = nand->size;
|
||||
page_size = nand->writesize;
|
||||
#endif
|
||||
|
||||
if (file_size < 2 * page_size) {
|
||||
printf("Invalid filesize \n");
|
||||
return CMD_RET_FAILURE;
|
||||
}
|
||||
|
||||
mibib_hdr = (struct header*) load_addr;
|
||||
if (mibib_hdr->magic[0] == HEADER_MAGIC1 &&
|
||||
mibib_hdr->magic[1] == HEADER_MAGIC2 &&
|
||||
mibib_hdr->version == HEADER_VERSION) {
|
||||
|
||||
load_addr += page_size;
|
||||
}
|
||||
else {
|
||||
printf("Header magic/version is invalid\n");
|
||||
return CMD_RET_FAILURE;
|
||||
}
|
||||
|
||||
if (mibib_ptable_init((unsigned int*) load_addr)) {
|
||||
printf("Table magic is invalid\n");
|
||||
return CMD_RET_FAILURE;
|
||||
}
|
||||
|
||||
return CMD_RET_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
|
||||
U_BOOT_CMD(
|
||||
flash, 4, 0, do_flash,
|
||||
"flash part_name \n"
|
||||
|
|
@ -430,3 +512,11 @@ U_BOOT_CMD(
|
|||
"flerase part_name \n",
|
||||
"erases on flash the given partition \n"
|
||||
);
|
||||
|
||||
#ifdef CONFIG_IPQ_MIBIB_RELOAD
|
||||
U_BOOT_CMD(
|
||||
mibib_reload, 4, 0, do_mibib_reload,
|
||||
"mibib_reload flash_type [fileaddr] [filesize]\n",
|
||||
"reloads the smem partition info from mibib \n"
|
||||
);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -48,6 +48,11 @@
|
|||
|
||||
#define CONFIG_ENV_SIZE_MAX (256 << 10) /* 256 KB */
|
||||
|
||||
/*
|
||||
* Enable MIBIB reload
|
||||
*/
|
||||
#define CONFIG_IPQ_MIBIB_RELOAD
|
||||
|
||||
/*
|
||||
* Enable Flashwrite command
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue