mirror of
https://git.codelinaro.org/clo/qsdk/oss/boot/u-boot-2016.git
synced 2025-12-10 07:44:53 +01:00
board: common: enable list fuse command for IPQ9574.
cmd: 'list_fuse' for ipq5332 list fuse cmd changed from list_ipq5332_fuse to list_fuse. Change-Id: I79fa89bd9499d13aad194d62d3e099e9d6051516 Signed-off-by: Gurumoorthy Santhakumar <quic_gsanthak@quicinc.com>
This commit is contained in:
parent
cb261702f3
commit
a103e37bd1
12 changed files with 103 additions and 23 deletions
|
|
@ -493,7 +493,8 @@ int qca_scm_fuseipq(u32 svc_id, u32 cmd_id, void *buf, size_t len)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int qca_scm_list_ipq5332_fuse(u32 svc_id, u32 cmd_id,
|
#ifdef CONFIG_LIST_FUSE
|
||||||
|
int qca_scm_list_fuse(u32 svc_id, u32 cmd_id,
|
||||||
struct fuse_payload *fuse, size_t len)
|
struct fuse_payload *fuse, size_t len)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
@ -515,6 +516,7 @@ int qca_scm_list_ipq5332_fuse(u32 svc_id, u32 cmd_id,
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int qca_scm_part_info(void *cmd_buf,
|
int qca_scm_part_info(void *cmd_buf,
|
||||||
size_t cmd_len)
|
size_t cmd_len)
|
||||||
|
|
@ -777,7 +779,7 @@ int qca_scm_fuseipq(u32 svc_id, u32 cmd_id, void *buf, size_t len)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int qca_scm_list_ipq5332_fuse(u32 svc_id, u32 cmd_id, void *buf, size_t len)
|
int qca_scm_list_fuse(u32 svc_id, u32 cmd_id, void *buf, size_t len)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -119,12 +119,6 @@ struct scm_response {
|
||||||
u32 is_complete;
|
u32 is_complete;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct fuse_payload {
|
|
||||||
u32 fuse_addr;
|
|
||||||
u32 lsb_val;
|
|
||||||
u32 msb_val;
|
|
||||||
};
|
|
||||||
|
|
||||||
int scm_init(void);
|
int scm_init(void);
|
||||||
extern int scm_call(u32 svc_id, u32 cmd_id, const void *cmd_buf, size_t cmd_len,
|
extern int scm_call(u32 svc_id, u32 cmd_id, const void *cmd_buf, size_t cmd_len,
|
||||||
void *resp_buf, size_t resp_len);
|
void *resp_buf, size_t resp_len);
|
||||||
|
|
@ -140,7 +134,9 @@ int qca_scm_clear_key(u32, u32);
|
||||||
int qca_scm_sdi(void);
|
int qca_scm_sdi(void);
|
||||||
int qca_scm_dload(u32);
|
int qca_scm_dload(u32);
|
||||||
int qca_scm_fuseipq(u32, u32, void *, size_t);
|
int qca_scm_fuseipq(u32, u32, void *, size_t);
|
||||||
int qca_scm_list_ipq5332_fuse(u32, u32, struct fuse_payload *, size_t);
|
#ifdef CONFIG_LIST_FUSE
|
||||||
|
int qca_scm_list_fuse(u32, u32, struct fuse_payload *, size_t);
|
||||||
|
#endif
|
||||||
bool is_scm_armv8(void);
|
bool is_scm_armv8(void);
|
||||||
int qca_scm_secure_authenticate(void *cmd_buf, size_t cmd_len);
|
int qca_scm_secure_authenticate(void *cmd_buf, size_t cmd_len);
|
||||||
int qca_scm_part_info(void *cmd_buf, size_t cmd_len);
|
int qca_scm_part_info(void *cmd_buf, size_t cmd_len);
|
||||||
|
|
|
||||||
|
|
@ -57,4 +57,8 @@ config BOARD_TYPES
|
||||||
|
|
||||||
config LIST_OF_CONFIG_NAMES_SUPPORT
|
config LIST_OF_CONFIG_NAMES_SUPPORT
|
||||||
bool "List of config names support"
|
bool "List of config names support"
|
||||||
|
|
||||||
|
config LIST_FUSE
|
||||||
|
bool "Enable fuse list command"
|
||||||
|
default n
|
||||||
endif
|
endif
|
||||||
|
|
|
||||||
|
|
@ -67,4 +67,8 @@ config LIST_OF_CONFIG_NAMES_SUPPORT
|
||||||
config IPQ_TINY2
|
config IPQ_TINY2
|
||||||
select IPQ_TINY
|
select IPQ_TINY
|
||||||
bool "Enable tiny2 profile"
|
bool "Enable tiny2 profile"
|
||||||
|
|
||||||
|
config LIST_FUSE
|
||||||
|
bool "Enable fuse list command"
|
||||||
|
default y
|
||||||
endif
|
endif
|
||||||
|
|
|
||||||
|
|
@ -27,4 +27,8 @@ config BOARD_TYPES
|
||||||
|
|
||||||
config LIST_OF_CONFIG_NAMES_SUPPORT
|
config LIST_OF_CONFIG_NAMES_SUPPORT
|
||||||
bool "List of config names support"
|
bool "List of config names support"
|
||||||
|
|
||||||
|
config LIST_FUSE
|
||||||
|
bool "Enable fuse list command"
|
||||||
|
default n
|
||||||
endif
|
endif
|
||||||
|
|
|
||||||
|
|
@ -37,3 +37,7 @@ config BOARD_TYPES
|
||||||
|
|
||||||
config LIST_OF_CONFIG_NAMES_SUPPORT
|
config LIST_OF_CONFIG_NAMES_SUPPORT
|
||||||
bool "List of config names support"
|
bool "List of config names support"
|
||||||
|
|
||||||
|
config LIST_FUSE
|
||||||
|
bool "Enable fuse list command"
|
||||||
|
default n
|
||||||
|
|
|
||||||
|
|
@ -24,4 +24,8 @@ config BOARD_TYPES
|
||||||
|
|
||||||
config LIST_OF_CONFIG_NAMES_SUPPORT
|
config LIST_OF_CONFIG_NAMES_SUPPORT
|
||||||
bool "List of config names support"
|
bool "List of config names support"
|
||||||
|
|
||||||
|
config LIST_FUSE
|
||||||
|
bool "Enable fuse list command"
|
||||||
|
default y
|
||||||
endif
|
endif
|
||||||
|
|
|
||||||
|
|
@ -66,34 +66,46 @@ int do_fuseipq(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_IPQ5332
|
#ifdef CONFIG_LIST_FUSE
|
||||||
int do_list_ipq5332_fuse(cmd_tbl_t *cmdtp, int flag, int argc,
|
int do_list_fuse(cmd_tbl_t *cmdtp, int flag, int argc,
|
||||||
char *const argv[])
|
char *const argv[])
|
||||||
{
|
{
|
||||||
|
extern unsigned long fuse_addr[];
|
||||||
int ret;
|
int ret;
|
||||||
int index, next = 0;
|
int index;
|
||||||
unsigned long addr = 0xA00E8;
|
|
||||||
struct fuse_payload *fuse = NULL;
|
struct fuse_payload *fuse = NULL;
|
||||||
|
size_t fuse_cnt = FUSE_CNT;
|
||||||
|
|
||||||
fuse = malloc(sizeof(struct fuse_payload ) * MAX_FUSE_ADDR_SIZE);
|
fuse = malloc(sizeof(struct fuse_payload ) * fuse_cnt);
|
||||||
if (fuse == NULL) {
|
if (fuse == NULL) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(fuse, 0, MAX_FUSE_ADDR_SIZE * sizeof(struct fuse_payload));
|
memset(fuse, 0, fuse_cnt * sizeof(struct fuse_payload));
|
||||||
|
|
||||||
fuse[0].fuse_addr = 0xA00D0;
|
for (index = 0; index < fuse_cnt; index++) {
|
||||||
for (index = 1; index < MAX_FUSE_ADDR_SIZE; index++) {
|
fuse[index].fuse_addr = fuse_addr[index];
|
||||||
fuse[index].fuse_addr = addr + next;
|
|
||||||
next += 0x8;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = qca_scm_list_ipq5332_fuse(SCM_SVC_FUSE, TZ_READ_FUSE_VALUE, fuse,
|
ret = qca_scm_list_fuse(SCM_SVC_FUSE, TZ_READ_FUSE_VALUE, fuse,
|
||||||
sizeof(struct fuse_payload ) * MAX_FUSE_ADDR_SIZE);
|
sizeof(struct fuse_payload ) * fuse_cnt);
|
||||||
|
|
||||||
printf("Fuse Name\tAddress\t\tValue\n");
|
printf("Fuse Name\tAddress\t\tValue\n");
|
||||||
printf("------------------------------------------------\n");
|
printf("------------------------------------------------\n");
|
||||||
|
|
||||||
|
#ifdef CONFIG_ARCH_IPQ9574
|
||||||
|
printf("TME_AUTH_EN\t0x%08X\t0x%08X\n", fuse[0].fuse_addr,
|
||||||
|
fuse[0].val & 0x41);
|
||||||
|
printf("TME_OEM_ID\t0x%08X\t0x%08X\n", fuse[0].fuse_addr,
|
||||||
|
fuse[0].val & 0xFFFF0000);
|
||||||
|
printf("TME_PRODUCT_ID\t0x%08X\t0x%08X\n", fuse[1].fuse_addr,
|
||||||
|
fuse[1].val & 0xFFFF);
|
||||||
|
|
||||||
|
for (index = 2; index < fuse_cnt; index++) {
|
||||||
|
printf("TME_MRC_HASH\t0x%08X\t0x%08X\n",
|
||||||
|
fuse[index].fuse_addr, fuse[index].val);
|
||||||
|
}
|
||||||
|
#elif CONFIG_ARCH_IPQ5332
|
||||||
printf("TME_AUTH_EN\t0x%08X\t0x%08X\n", fuse[0].fuse_addr,
|
printf("TME_AUTH_EN\t0x%08X\t0x%08X\n", fuse[0].fuse_addr,
|
||||||
fuse[0].lsb_val & 0x41);
|
fuse[0].lsb_val & 0x41);
|
||||||
printf("TME_OEM_ID\t0x%08X\t0x%08X\n", fuse[0].fuse_addr,
|
printf("TME_OEM_ID\t0x%08X\t0x%08X\n", fuse[0].fuse_addr,
|
||||||
|
|
@ -101,12 +113,13 @@ int do_list_ipq5332_fuse(cmd_tbl_t *cmdtp, int flag, int argc,
|
||||||
printf("TME_PRODUCT_ID\t0x%08X\t0x%08X\n", fuse[0].fuse_addr + 0x4,
|
printf("TME_PRODUCT_ID\t0x%08X\t0x%08X\n", fuse[0].fuse_addr + 0x4,
|
||||||
fuse[0].msb_val & 0xFFFF);
|
fuse[0].msb_val & 0xFFFF);
|
||||||
|
|
||||||
for (index = 1; index < MAX_FUSE_ADDR_SIZE; index++) {
|
for (index = 1; index < fuse_cnt; index++) {
|
||||||
printf("TME_MRC_HASH\t0x%08X\t0x%08X\n",
|
printf("TME_MRC_HASH\t0x%08X\t0x%08X\n",
|
||||||
fuse[index].fuse_addr, fuse[index].lsb_val);
|
fuse[index].fuse_addr, fuse[index].lsb_val);
|
||||||
printf("TME_MRC_HASH\t0x%08X\t0x%08X\n",
|
printf("TME_MRC_HASH\t0x%08X\t0x%08X\n",
|
||||||
fuse[index].fuse_addr + 0x4, fuse[index].msb_val);
|
fuse[index].fuse_addr + 0x4, fuse[index].msb_val);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
printf("Failed to read OEM parameters at Address 0x%X\n", ret);
|
printf("Failed to read OEM parameters at Address 0x%X\n", ret);
|
||||||
|
|
@ -115,7 +128,7 @@ int do_list_ipq5332_fuse(cmd_tbl_t *cmdtp, int flag, int argc,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
U_BOOT_CMD(list_ipq5332_fuse, 1, 0, do_list_ipq5332_fuse,
|
U_BOOT_CMD(list_fuse, 1, 0, do_list_fuse,
|
||||||
"fuse set of QFPROM registers from memory\n",
|
"fuse set of QFPROM registers from memory\n",
|
||||||
"");
|
"");
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,17 @@
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
unsigned long fuse_addr[FUSE_CNT] = {
|
||||||
|
0x000A00D0,
|
||||||
|
0x000A00E8,
|
||||||
|
0x000A00F0,
|
||||||
|
0x000A00F8,
|
||||||
|
0x000A0100,
|
||||||
|
0x000A0108,
|
||||||
|
0x000A0110,
|
||||||
|
0x000A0118,
|
||||||
|
};
|
||||||
|
|
||||||
static int aq_phy_initialised = 0;
|
static int aq_phy_initialised = 0;
|
||||||
extern int ipq5332_edma_init(void *cfg);
|
extern int ipq5332_edma_init(void *cfg);
|
||||||
extern int ipq_spi_init(u16);
|
extern int ipq_spi_init(u16);
|
||||||
|
|
|
||||||
|
|
@ -315,6 +315,13 @@ typedef enum {
|
||||||
SMEM_MAX_SIZE = SMEM_RUNTIME_FAILSAFE_INFO + 1,
|
SMEM_MAX_SIZE = SMEM_RUNTIME_FAILSAFE_INFO + 1,
|
||||||
} smem_mem_type_t;
|
} smem_mem_type_t;
|
||||||
|
|
||||||
|
#define FUSE_CNT 8
|
||||||
|
struct fuse_payload {
|
||||||
|
u32 fuse_addr;
|
||||||
|
u32 lsb_val;
|
||||||
|
u32 msb_val;
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* function declaration
|
* function declaration
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,31 @@
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
unsigned long fuse_addr[FUSE_CNT] = {
|
||||||
|
0x000A00C0,
|
||||||
|
0x000A00C4,
|
||||||
|
0x000A00D8,
|
||||||
|
0x000A00DC,
|
||||||
|
0x000A00E0,
|
||||||
|
0x000A00E4,
|
||||||
|
0x000A00E8,
|
||||||
|
0x000A00EC,
|
||||||
|
0x000A00F0,
|
||||||
|
0x000A00F4,
|
||||||
|
0x000A00F8,
|
||||||
|
0x000A00FC,
|
||||||
|
0x000A0100,
|
||||||
|
0x000A0104,
|
||||||
|
0x000A0108,
|
||||||
|
0x000A010C,
|
||||||
|
0x000A0110,
|
||||||
|
0x000A0114,
|
||||||
|
0x000A0118,
|
||||||
|
0x000A011C,
|
||||||
|
0x000A0120,
|
||||||
|
0x000A0124,
|
||||||
|
};
|
||||||
|
|
||||||
struct sdhci_host mmc_host;
|
struct sdhci_host mmc_host;
|
||||||
extern int ipq9574_edma_init(void *cfg);
|
extern int ipq9574_edma_init(void *cfg);
|
||||||
extern int ipq_spi_init(u16);
|
extern int ipq_spi_init(u16);
|
||||||
|
|
|
||||||
|
|
@ -379,6 +379,12 @@ typedef enum {
|
||||||
#define MSM_SDC1_BASE 0x7800000
|
#define MSM_SDC1_BASE 0x7800000
|
||||||
#define MSM_SDC1_SDHCI_BASE 0x7804000
|
#define MSM_SDC1_SDHCI_BASE 0x7804000
|
||||||
|
|
||||||
|
#define FUSE_CNT 22
|
||||||
|
struct fuse_payload {
|
||||||
|
u32 fuse_addr;
|
||||||
|
u32 val;
|
||||||
|
};
|
||||||
|
|
||||||
__weak void qgic_init(void) {}
|
__weak void qgic_init(void) {}
|
||||||
__weak void handle_noc_err(void) {}
|
__weak void handle_noc_err(void) {}
|
||||||
extern const char *rsvd_node;
|
extern const char *rsvd_node;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue