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:
Gurumoorthy Santhakumar 2024-04-02 12:32:04 +05:30
parent cb261702f3
commit a103e37bd1
12 changed files with 103 additions and 23 deletions

View file

@ -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;
} }

View file

@ -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);

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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);

View file

@ -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
*/ */

View file

@ -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);

View file

@ -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;