From 049676e8a801e970815a063f41c5f2cdde8ce164 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8F=AF=E4=BA=AE?= Date: Fri, 14 Mar 2025 16:31:58 +0800 Subject: [PATCH] v1.1.2:add audio and efuse patch --- bsp/Kconfig | 18 ++++ bsp/artinchip/drv/efuse/Kconfig.dev | 8 +- bsp/artinchip/drv/efuse/drv_efuse.c | 52 +++++++++++- bsp/artinchip/drv/efuse/efuse_cmds.c | 14 +++- bsp/artinchip/drv_bare/efuse/efuse.c | 52 +++++++++++- bsp/artinchip/hal/efuse/hal_efuse.c | 32 ++++++- bsp/artinchip/hal/mac/aicmac_macaddr.c | 40 ++++++--- bsp/artinchip/hal/syscfg/syscfg_hw_v1.1.h | 4 +- bsp/artinchip/hal/syscfg/syscfg_hw_v1.2.h | 4 +- bsp/artinchip/hal/tsen/hal_tsen.c | 8 +- bsp/artinchip/include/drv/drv_efuse.h | 4 +- bsp/artinchip/include/drv_bare/efuse.h | 4 +- bsp/artinchip/include/hal/hal_efuse.h | 6 +- bsp/artinchip/sys/d12x/d12x.pbp | Bin 23472 -> 23552 bytes bsp/artinchip/sys/d12x/ram_param.c | 29 +++++-- bsp/artinchip/sys/d13x/d13x.pbp | Bin 27616 -> 27632 bytes bsp/artinchip/sys/d13x/ram_param.c | 15 +++- bsp/artinchip/sys/d21x/d21x.pbp | Bin 27600 -> 29408 bytes bsp/artinchip/sys/d21x/ram_param.c | 6 +- bsp/artinchip/sys/g73x/g73x.pbp | Bin 27616 -> 27632 bytes bsp/artinchip/sys/g73x/ram_param.c | 12 ++- bsp/examples_bare/test-efuse/SConscript | 5 +- .../test-efuse/efuse_burn_spienc_key_cmd.c | 79 ++++++++++-------- bsp/examples_bare/test-efuse/efuse_cmds.c | 14 +++- kernel/common/include/osal/aic_osal.h | 3 +- kernel/common/osal/aic_osal.c | 21 ++++- packages/artinchip/mpp/base/memory/mpp_mem.c | 69 ++++++++------- 27 files changed, 380 insertions(+), 119 deletions(-) diff --git a/bsp/Kconfig b/bsp/Kconfig index 8a0f4688..9fd15bbc 100644 --- a/bsp/Kconfig +++ b/bsp/Kconfig @@ -451,6 +451,24 @@ config AIC_SID_BARE_TEST default n depends on AIC_SID_DRV +config AIC_SID_BURN_SPIENC_KEY_TEST + bool "Enable SID burn spienc key command" + default n + depends on AIC_SID_DRV + depends on EFUSE_WRITE_SUPPORT + depends on DRIVER_BARE_DRV_EN + +if AIC_SID_BURN_SPIENC_KEY_TEST + + config AIC_SID_BURN_SIMULATED + bool "Enable SID simulated burning" + default n + + config AIC_SID_CONTINUE_BOOT_BURN_AFTER + bool "Enable SID continue to boot after burning" + default n +endif + config AIC_DM_LIB_TEST bool "Enable DM Lib test command" default n diff --git a/bsp/artinchip/drv/efuse/Kconfig.dev b/bsp/artinchip/drv/efuse/Kconfig.dev index 52ce8222..91454ced 100644 --- a/bsp/artinchip/drv/efuse/Kconfig.dev +++ b/bsp/artinchip/drv/efuse/Kconfig.dev @@ -4,14 +4,20 @@ menu "SID Parameter" depends on AIC_USING_SID + config EFUSE_WRITE_SUPPORT + bool "support efuse write" + default n + config EFUSE_MAX_WORD int "set efuse max word" - default 64 + default 16 if AIC_CHIP_D12X + default 64 if AIC_CHIP_D21X || AIC_CHIP_D13X || AIC_CHIP_G73X config EFUSE_TIMING_VALUE hex "set timing value" default 0x0402FFD8 if AIC_CHIP_D21X default 0x0402FFD8 if AIC_CHIP_D13X || AIC_CHIP_G73X default 0x04021FF1 if AIC_CHIP_D12X + default 0x04021FF1 if AIC_CHIP_AIC1606SE endmenu diff --git a/bsp/artinchip/drv/efuse/drv_efuse.c b/bsp/artinchip/drv/efuse/drv_efuse.c index 091a962a..d8470d8d 100644 --- a/bsp/artinchip/drv/efuse/drv_efuse.c +++ b/bsp/artinchip/drv/efuse/drv_efuse.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024, ArtInChip Technology Co., Ltd + * Copyright (c) 2022-2025, ArtInChip Technology Co., Ltd * * SPDX-License-Identifier: Apache-2.0 * @@ -26,13 +26,28 @@ static int drv_efuse_init(void) return RT_TRUE; } +void drv_efuse_write_enable(void) +{ + hal_efuse_write_enable(); +} + +void drv_efuse_write_disable(void) +{ + hal_efuse_write_disable(); +} + int drv_efuse_read(u32 addr, void *data, u32 size) { u32 wid, wval, rest, cnt; u8 *pd, *pw; int ret; + if (hal_efuse_clk_enable()) { + return RT_FALSE; + } + if (hal_efuse_wait_ready()) { + hal_efuse_clk_disable(); LOG_E("eFuse is not ready.\n"); return RT_FALSE; } @@ -60,6 +75,8 @@ int drv_efuse_read(u32 addr, void *data, u32 size) rest -= cnt; } + hal_efuse_clk_disable(); + return (int)(size - rest); } @@ -125,6 +142,7 @@ int drv_efuse_read_reserved_2(void *data) return 0; } +#ifdef EFUSE_WRITE_SUPPORT int drv_efuse_program(u32 addr, const void *data, u32 size) { u32 wid, wval, rest, cnt; @@ -132,7 +150,12 @@ int drv_efuse_program(u32 addr, const void *data, u32 size) u8 *pw; int ret; + if (hal_efuse_clk_enable()) { + return RT_FALSE; + } + if (hal_efuse_wait_ready()) { + hal_efuse_clk_disable(); LOG_E("eFuse is not ready.\n"); return RT_FALSE; } @@ -162,17 +185,40 @@ int drv_efuse_program(u32 addr, const void *data, u32 size) rest -= cnt; } + hal_efuse_clk_disable(); + return (int)(size - rest); } +#endif int drv_sjtag_auth(u32 *key, u32 kwlen) { - return hal_sjtag_auth(key, kwlen); + int ret; + + if (hal_efuse_clk_enable()) { + return RT_FALSE; + } + + ret = hal_sjtag_auth(key, kwlen); + + hal_efuse_clk_disable(); + + return ret; } int drv_szone_auth(u32 *key, u32 kwlen) { - return hal_szone_auth(key, kwlen); + int ret; + + if (hal_efuse_clk_enable()) { + return RT_FALSE; + } + + ret = hal_szone_auth(key, kwlen); + + hal_efuse_clk_disable(); + + return ret; } INIT_DEVICE_EXPORT(drv_efuse_init); diff --git a/bsp/artinchip/drv/efuse/efuse_cmds.c b/bsp/artinchip/drv/efuse/efuse_cmds.c index b006443e..48dc759c 100644 --- a/bsp/artinchip/drv/efuse/efuse_cmds.c +++ b/bsp/artinchip/drv/efuse/efuse_cmds.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024, ArtInChip Technology Co., Ltd + * Copyright (c) 2022-2025, ArtInChip Technology Co., Ltd * * SPDX-License-Identifier: Apache-2.0 * @@ -16,9 +16,11 @@ static void cmd_efuse_help(void) printf(" efuse help : Get this help.\n"); printf(" efuse dump offset len : Dump data from eFuse offset.\n"); printf(" efuse read addr offset len : Read eFuse data to RAM addr.\n"); +#ifdef EFUSE_WRITE_SUPPORT printf(" efuse write addr offset len : Write data to eFuse from RAM addr.\n"); printf(" efuse writehex offset data : Write data to eFuse from input hex string.\n"); printf(" efuse writestr offset data : Write data to eFuse from input string.\n"); +#endif printf(" efuse authenticate sjtag key : Authenticate secure jtag from hex string key.\n"); printf(" efuse authenticate szone key : Authenticate secure zone from hex string key.\n"); } @@ -80,6 +82,7 @@ static void cmd_efuse_dump(int argc, char **argv) printf("\n"); } +#ifdef EFUSE_WRITE_SUPPORT static void cmd_efuse_write(int argc, char **argv) { ulong addr, offset, len; @@ -155,6 +158,7 @@ static void cmd_efuse_writestr(int argc, char **argv) printf("Program efuse done.\n"); } +#endif static void cmd_efuse_authenticate(int argc, char **argv) { @@ -203,18 +207,26 @@ static void cmd_efuse_do(int argc, char **argv) cmd_efuse_dump(argc - 1, &argv[1]); return; } +#ifdef EFUSE_WRITE_SUPPORT if (!strcmp(argv[1], "write")) { + drv_efuse_write_enable(); cmd_efuse_write(argc - 1, &argv[1]); + drv_efuse_write_disable(); return; } if (!strcmp(argv[1], "writehex")) { + drv_efuse_write_enable(); cmd_efuse_writehex(argc - 1, &argv[1]); + drv_efuse_write_disable(); return; } if (!strcmp(argv[1], "writestr")) { + drv_efuse_write_enable(); cmd_efuse_writestr(argc - 1, &argv[1]); + drv_efuse_write_disable(); return; } +#endif if (!strcmp(argv[1], "authenticate")) { cmd_efuse_authenticate(argc - 1, &argv[1]); return; diff --git a/bsp/artinchip/drv_bare/efuse/efuse.c b/bsp/artinchip/drv_bare/efuse/efuse.c index 36151a47..a33e7764 100644 --- a/bsp/artinchip/drv_bare/efuse/efuse.c +++ b/bsp/artinchip/drv_bare/efuse/efuse.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024, ArtInChip Technology Co., Ltd + * Copyright (c) 2022-2025, ArtInChip Technology Co., Ltd * * SPDX-License-Identifier: Apache-2.0 * @@ -24,13 +24,28 @@ int efuse_init(void) return 0; } +void efuse_write_enable(void) +{ + hal_efuse_write_enable(); +} + +void efuse_write_disable(void) +{ + hal_efuse_write_disable(); +} + int efuse_read(u32 addr, void *data, u32 size) { u32 wid, wval, rest, cnt; u8 *pd, *pw; int ret; + if (hal_efuse_clk_enable()) { + return -1; + } + if (hal_efuse_wait_ready()) { + hal_efuse_clk_disable(); pr_err("eFuse is not ready.\n"); return -1; } @@ -58,6 +73,8 @@ int efuse_read(u32 addr, void *data, u32 size) rest -= cnt; } + hal_efuse_clk_disable(); + return (int)(size - rest); } @@ -82,6 +99,7 @@ int efuse_read_chip_id(void *data) return 0; } +#ifdef EFUSE_WRITE_SUPPORT int efuse_program(u32 addr, const void *data, u32 size) { u32 wid, wval, rest, cnt; @@ -89,7 +107,12 @@ int efuse_program(u32 addr, const void *data, u32 size) u8 *pw; int ret; + if (hal_efuse_clk_enable()) { + return -1; + } + if (hal_efuse_wait_ready()) { + hal_efuse_clk_disable(); pr_err("eFuse is not ready.\n"); return -1; } @@ -119,15 +142,38 @@ int efuse_program(u32 addr, const void *data, u32 size) rest -= cnt; } + hal_efuse_clk_disable(); + return (int)(size - rest); } +#endif int sjtag_auth(u32 *key, u32 kwlen) { - return hal_sjtag_auth(key, kwlen); + int ret; + + if (hal_efuse_clk_enable()) { + return -1; + } + + ret = hal_sjtag_auth(key, kwlen); + + hal_efuse_clk_disable(); + + return ret; } int szone_auth(u32 *key, u32 kwlen) { - return hal_szone_auth(key, kwlen); + int ret; + + if (hal_efuse_clk_enable()) { + return -1; + } + + ret = hal_szone_auth(key, kwlen); + + hal_efuse_clk_disable(); + + return ret; } diff --git a/bsp/artinchip/hal/efuse/hal_efuse.c b/bsp/artinchip/hal/efuse/hal_efuse.c index ae19e97b..d1f49a4e 100644 --- a/bsp/artinchip/hal/efuse/hal_efuse.c +++ b/bsp/artinchip/hal/efuse/hal_efuse.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024, ArtInChip Technology Co., Ltd + * Copyright (c) 2022-2025, ArtInChip Technology Co., Ltd * * SPDX-License-Identifier: Apache-2.0 * @@ -43,7 +43,19 @@ #define EFUSE_STS_WRITING 3 #define EFUSE_STS_READING 4 +static u32 opcode = 0; + int hal_efuse_init(void) +{ + return 0; +} + +int hal_efuse_deinit(void) +{ + return 0; +} + +int hal_efuse_clk_enable(void) { int ret = 0, val = EFUSE_TIMING_VALUE; @@ -64,7 +76,7 @@ int hal_efuse_init(void) return 0; } -int hal_efuse_deinit(void) +int hal_efuse_clk_disable(void) { hal_clk_disable_assertrst(CLK_SID); hal_clk_disable(CLK_SID); @@ -72,6 +84,16 @@ int hal_efuse_deinit(void) return 0; } +void hal_efuse_write_enable(void) +{ + opcode = EFUSE_OP_CODE; +} + +void hal_efuse_write_disable(void) +{ + opcode = 0; +} + int hal_efuse_get_version(void) { return readl(EFUSE_REG_VER); @@ -126,6 +148,7 @@ int hal_efuse_read(u32 wid, u32 *wval) return 0; } +#ifdef EFUSE_WRITE_SUPPORT int hal_efuse_write(u32 wid, u32 wval) { u32 addr, val, i; @@ -134,7 +157,7 @@ int hal_efuse_write(u32 wid, u32 wval) hal_log_err("Error, word id is too large.\n"); return -EINVAL; } - + for (i = 0; i < 2; i++) { addr = (wid + EFUSE_MAX_WORD * i) << 2; writel(addr, EFUSE_REG_ADDR); @@ -146,7 +169,7 @@ int hal_efuse_write(u32 wid, u32 wval) */ val = readl(EFUSE_REG_CTL); val &= ~((0xFFF << 16) | (1 << 0)); - val |= ((EFUSE_OP_CODE << 16) | (1 << 0)); + val |= ((opcode << 16) | (1 << 0)); writel(val, EFUSE_REG_CTL); /* Wait write finish */ @@ -157,6 +180,7 @@ int hal_efuse_write(u32 wid, u32 wval) return 0; } +#endif int hal_write_auth_key(u32 *key, u32 kwlen) { diff --git a/bsp/artinchip/hal/mac/aicmac_macaddr.c b/bsp/artinchip/hal/mac/aicmac_macaddr.c index f6be4f75..464c34db 100644 --- a/bsp/artinchip/hal/mac/aicmac_macaddr.c +++ b/bsp/artinchip/hal/mac/aicmac_macaddr.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024, ArtInChip Technology Co., Ltd + * Copyright (c) 2022-2025, ArtInChip Technology Co., Ltd * * SPDX-License-Identifier: Apache-2.0 */ @@ -9,7 +9,12 @@ #include "aic_log.h" #include -#define AICMAC_CHIPID_LENGTH 6 +#include +#include +#include + +#include "md5.h" +#define AICMAC_CHIPID_LENGTH 8 static int aicmac_efuse_read(u32 addr, void *data, u32 size) @@ -18,6 +23,10 @@ static int aicmac_efuse_read(u32 addr, void *data, u32 size) u8 *pd, *pw; int ret; + if (hal_efuse_clk_enable()) { + return -1; + } + if (hal_efuse_wait_ready()) { pr_err("eFuse is not ready.\n"); return -1; @@ -46,6 +55,8 @@ static int aicmac_efuse_read(u32 addr, void *data, u32 size) rest -= cnt; } + hal_efuse_clk_disable(); + return (int)(size - rest); } @@ -56,22 +67,29 @@ static inline int aicmac_get_chipid(unsigned char out_chipid[AICMAC_CHIPID_LENGT void aicmac_get_macaddr_from_chipid(int port, unsigned char out_addr[6]) { - unsigned char chipid[AICMAC_CHIPID_LENGTH]; - unsigned char key[AICMAC_CHIPID_LENGTH] = {'a', 'i', 'c', 'k', 'e', 'y'}; + unsigned char hex_chipid[AICMAC_CHIPID_LENGTH] = { 0 }; + char char_chipid[AICMAC_CHIPID_LENGTH * 2 + 1] = { 0 }; + uint8_t md5_ahash[16] = { 0 }; int i; - if (!aicmac_get_chipid(chipid)) + if (!aicmac_get_chipid(hex_chipid)) return; - for (i = 0; i < AICMAC_CHIPID_LENGTH; i++) { - out_addr[AICMAC_CHIPID_LENGTH - 1 - i] = chipid[i] ^ key[i]; + for (i = 0; i < AICMAC_CHIPID_LENGTH ; i++) { + sprintf(&char_chipid[i * 2], "%02X", hex_chipid[i]); } if (port) - out_addr[1] ^= 0x55; + char_chipid[15] = 'a'; else - out_addr[1] ^= 0xAA; + char_chipid[15] = 'A'; - out_addr[0] &= 0xFE; - out_addr[0] |= 0x02; + MD5Buffer(char_chipid, 16, md5_ahash); + + /* Choose md5 result's [0][2][4][6][8][10] byte as mac address */ + for (i = 0; i < 6; i++) + out_addr[i] = md5_ahash[2 * i]; + + out_addr[0] &= 0xfe; /* clear multicast bit */ + out_addr[0] |= 0x02; /* set local assignment bit (IEEE802) */ } diff --git a/bsp/artinchip/hal/syscfg/syscfg_hw_v1.1.h b/bsp/artinchip/hal/syscfg/syscfg_hw_v1.1.h index 925411f9..0b904079 100644 --- a/bsp/artinchip/hal/syscfg/syscfg_hw_v1.1.h +++ b/bsp/artinchip/hal/syscfg/syscfg_hw_v1.1.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024, ArtInChip Technology Co., Ltd + * Copyright (c) 2024-2025, ArtInChip Technology Co., Ltd * * SPDX-License-Identifier: Apache-2.0 * @@ -248,7 +248,9 @@ static inline void syscfg_hw_sip_flash_init(void) #if defined(AIC_USING_SID) u32 map; /* 1. Read eFuse to set SiP flash IO mapping */ + hal_efuse_clk_enable(); hal_efuse_read(IOMAP_EFUSE_WID, &val); + hal_efuse_clk_disable(); map = (val >> EFUSE_DATA_IOMAP_POS) & 0xFF; /* 2. Set the SiP flash's access Controller */ diff --git a/bsp/artinchip/hal/syscfg/syscfg_hw_v1.2.h b/bsp/artinchip/hal/syscfg/syscfg_hw_v1.2.h index aa0e10ef..09178cdc 100644 --- a/bsp/artinchip/hal/syscfg/syscfg_hw_v1.2.h +++ b/bsp/artinchip/hal/syscfg/syscfg_hw_v1.2.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024, ArtInChip Technology Co., Ltd + * Copyright (c) 2024-2025, ArtInChip Technology Co., Ltd * * SPDX-License-Identifier: Apache-2.0 * @@ -175,7 +175,9 @@ static inline void syscfg_hw_sip_flash_init(void) #if defined(AIC_USING_SID) u32 map; /* 1. Read eFuse to set SiP flash IO mapping */ + hal_efuse_clk_enable(); hal_efuse_read(IOMAP_EFUSE_WID, &val); + hal_efuse_clk_disable(); map = (val >> EFUSE_DATA_IOMAP_POS) & 0xFF; /* 2. Set the SiP flash's access Controller */ diff --git a/bsp/artinchip/hal/tsen/hal_tsen.c b/bsp/artinchip/hal/tsen/hal_tsen.c index ed6de324..eea69461 100644 --- a/bsp/artinchip/hal/tsen/hal_tsen.c +++ b/bsp/artinchip/hal/tsen/hal_tsen.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024, ArtInChip Technology Co., Ltd + * Copyright (c) 2022-2025, ArtInChip Technology Co., Ltd * * SPDX-License-Identifier: Apache-2.0 * @@ -233,6 +233,10 @@ int hal_tsen_efuse_read(u32 addr, u32 *data, u32 size) int ret; int length = TSEN_EFUSE_STANDARD_LENGTH; + if (hal_efuse_clk_enable()) { + return -1; + } + rest = size; while (rest > 0) { wid = addr >> 2; @@ -252,6 +256,8 @@ int hal_tsen_efuse_read(u32 addr, u32 *data, u32 size) rest -= cnt; } + hal_efuse_clk_disable(); + return (int)(size - rest); } #endif diff --git a/bsp/artinchip/include/drv/drv_efuse.h b/bsp/artinchip/include/drv/drv_efuse.h index d8caf345..ae099731 100644 --- a/bsp/artinchip/include/drv/drv_efuse.h +++ b/bsp/artinchip/include/drv/drv_efuse.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024, ArtInChip Technology Co., Ltd + * Copyright (c) 2022-2025, ArtInChip Technology Co., Ltd * * SPDX-License-Identifier: Apache-2.0 * @@ -15,6 +15,8 @@ extern "C" { #include +void drv_efuse_write_enable(void); +void drv_efuse_write_disable(void); int drv_efuse_read(u32 addr, void *data, u32 size); int drv_efuse_read_chip_id(void *data); int drv_efuse_read_reserved_1(void *data); diff --git a/bsp/artinchip/include/drv_bare/efuse.h b/bsp/artinchip/include/drv_bare/efuse.h index ff8ca115..6e8e6188 100644 --- a/bsp/artinchip/include/drv_bare/efuse.h +++ b/bsp/artinchip/include/drv_bare/efuse.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024, ArtInChip Technology Co., Ltd + * Copyright (c) 2022-2025, ArtInChip Technology Co., Ltd * * SPDX-License-Identifier: Apache-2.0 * @@ -16,6 +16,8 @@ extern "C" { #include int efuse_init(void); +void efuse_write_enable(void); +void efuse_write_disable(void); int efuse_read(u32 addr, void *data, u32 size); int efuse_read_chip_id(void *data); int efuse_program(u32 addr, const void *data, u32 size); diff --git a/bsp/artinchip/include/hal/hal_efuse.h b/bsp/artinchip/include/hal/hal_efuse.h index 8feb25a4..5f497792 100644 --- a/bsp/artinchip/include/hal/hal_efuse.h +++ b/bsp/artinchip/include/hal/hal_efuse.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024, ArtInChip Technology Co., Ltd + * Copyright (c) 2022-2025, ArtInChip Technology Co., Ltd * * SPDX-License-Identifier: Apache-2.0 * @@ -17,6 +17,10 @@ extern "C" { int hal_efuse_init(void); int hal_efuse_deinit(void); +int hal_efuse_clk_enable(void); +int hal_efuse_clk_disable(void); +void hal_efuse_write_enable(void); +void hal_efuse_write_disable(void); int hal_efuse_get_version(void); int hal_efuse_wait_ready(void); int hal_efuse_read(u32 wid, u32 *wval); diff --git a/bsp/artinchip/sys/d12x/d12x.pbp b/bsp/artinchip/sys/d12x/d12x.pbp index bf926f92894933e08b6e3459a4e5e737d8d75aed..8959c086c2933b613ca308ce2b85af21fe9900ab 100644 GIT binary patch delta 3262 zcmZuz3sh9)7Cz@NXJ8OT7+??(YRv_$b=pX(^Xe0$w$dS%d|4*?!ye-?pk-&+H?N>{rlT{ z|NGzP|Ibl7sXak@m98jVz~vvGx6|uk^5D*O60&3GmUCnal#&vWNwS(CJYpM6woPOK zMP9RYdt{O1nC*_>BuTQi9^nK@#(>3(BLksXbc1{a^xg|efWzMNL*XfhSTsP?#VQGb zQY<9q4l@!ZL5OJv;F5P_;I4AJORs9)=*Z8%z;JVA^C4{3b@DoR`>Z8T!4p2wWIyci zVaOf`n!Q?6BV`U|ch=L&ogc=kOlbrGj1sX|m!zb%5;x@)3VOXxo9ibWROXn}1X0&< z`BMo##hxASi6&elPg~2$E_p7g)4D89eQeI#mN%na9yRBkMve3no|T@787@3sJh-ZV z@eq;wNN!!MZF2SqMOxtfxxbRl(CxRKq(SL#7lq|+{)gD}Hup39;J-4UAw5i zOUOwvt@R0G=^S`OTucqT0|&$kYGW@fK)TH!VNi6K}obba5kFqsa0k@y1v; zo7Y!nY;1w*sNemqOcHO{PdwoG?cvHfba-VG9ZuQ;gFY5e*1K>eB#avQ1%#pT6n7g^ zLrbZVn_viyp-QIUNN5l>G6{pB$&~Rs+b^N*l#qUm8_#*e)*k-0N06^U%=9a{DPw(l zAQdd8X)QN3Vt`H3B%gF_qJ3Rm9OTBW7rNw!oqCM@l#nCF{2>4@kG`mdWf_zRp}PS zPle$TXpskRDe&ONYu-cNw5CAK*p0kt zO^=#Y^DYvn)qYe*PWY*iDnOzD1KKe)frSZ7cPECJ^|(iL17f5*Sv_Jk?_jcs-O6&= z^&^(}HgahTGm+-z(&(=Xxrlx2w$me~u^vM*f_-koegtcddPIwaSP?fS5TZjXIz()} zo2)>LdkY;Rw$g2mfhYRwM1P(Z4YO}1Lj<`4=nxG9 zXEH?0+JO!cqh}ICtfn0udRdsHnFPJiVH-L`Y+|`<%M^%lZw@nfK+NKMK}@%Og%y6i z{SOHJ6<^ZVz<*%^Wqci0EIdN(JqR}!$|y}cL@kP^jE%5r(HY?c%Z;x638G?E!iipP zbngw=6kAL=nt+XclDc>u65?3u&^?%n%ch*4gX~XNya#rP=_n;PdT|J(@r%5xn#FXg zoEvovLRtJG$~g@Giq8+J9yjOZ=k`3Pt0$E@?bfFs8aBn@*|WX#DvZbfNEKeNjV%r$ zss7V2nXrtC*kg-J^e3r{jgT!XqMQb3lD#0LJGfEbUtvztrI4Dbup;RPVxLm4?0!-K zK7@}X7S}Dhx*L3wcT+VJus?Z4NXggqt;nbXQKU3ORMngGbm4iI)xrAal&Ij6FW*ux zR+$3%BXA(9kcnLIvlj-q2$?C0ct*pGmYfrNljJIc%cLrznBk^;f9TZLs!3&Kqaauk zgs)x9x6i=g6uEF<3pZ;06mF(SlYPfl8RD8;ELy^|60d)0(J}BQR&lXOwY2 zTv}rA_ch<=Ub*sXo}IW0UPzZxBQ4OHo=+7fz_oN$fYsRU&a!O`a~5Di^`Kb#3{_GO zCzi^nkuJElG=!?rfiNRJKy!D!s#b{!vloALrCJ{hs*G?U(~r>i@I=N2&Ba^pMfjTY z?B#h2fC=1XR!bS3iSBdNgYMk*y6xrC~o&p~B;i)o_-F`|L0B_lagY-nr^E-KIvnCp@q$Eq}itOrEg4 zv%&nJ&eYk+Z(5lAixQoQ90-$}*Xm3d=P2`pJxU;pYa$C^ySEnf0{L%iB%!!pv+ggG z%*W^K2adt;vV;Z76CAtuQ&O>~Q!LbK+L=c&yz?tR)wSu7<^lvS52wB>f~Ct7mP}YV z)^P@RhRqrAvp|DL4&HslzhC9|@GSEXk6##b7d(33bivt(Pr$r9IGBDDOL(f>-u!5a zXlrhv!DSvX24|MX&!P8W4kz91v=4-t3H}lHIvZxYE2?b8iaJ1*8ACZggui7jr8a&I z2Qrt1_}c0giil4A-8`LX-hk8q^pr0)E9-Q?-OSXWq4WH7f`N2*-)~W$3a{yFX znE`vdXBvaqfq7C`@-En&C8cug(47?)?EEHh!nIA7GQJ;&`F>=bHkiz+$X4Po;tf*y zQmdcfx_$F!8@%`eSeO`Q$sn%skh?<$%z49znbkT|m&$LzwLE1Vyqq0O#pvNcc464W zi|;!4FBKQ#RF66D?pk}YKn6N$YUf-z6zBX!!)(S&lFixXvblV8TOP-*t(VaJyQkcY zg)_L>R({68;AJ{JM?aTK*02u!K6T}t4#JH+Tf^?HPn9F{eF$S_HvzCK3$Cn^YYk zgC0+*O0B5KAd=G-%Tg96B`ru=vMedX)|LM}d7merCn2ByAJPtKy-0qj{aqKq{KCX_ zJzE5_w^5!%c@E_T6fH^<$}SW$%6^o?C_MFqOdz}SJkFtP`KLhEf=^P;?NC;n{53Y~L7o=5)&>_s)g delta 3166 zcmZuz3se(l7M>Yq0s$04!lRH14FrWE1mq#eBS;b+8uJSO`R`YApy$BU~yOQYJ%{HY3;IZ zCJQO@rghjOizF{vAJC^r@`Ux6Xo@5s1Ctj|`a_ra4n`Tg7m}Uup7*0+ozK~%Vmr|o zqa|pqR7CiXvB6q`kTPs1-0+SJ>{>bG@@sZJV=E~5oaO!fYSMvs(;K2e;D9xM8| z(}!f6uAdZ`2R@mfMH1+nGV{3A($^MkagzB)w#8wb@&l#Qpz;= z%DL7w*d#5X&L4+isfK#-P?s#5I+S8n%gV^Im}P^y2KCYW>Kj*RsFe{y6r(kA;w4a< z{Iho{9cs7y?5*2%DN(x7c&7FeBb4GQ`bK<& zHz~oUhzYREMW^{m$JIe~uoB0V_E+Ht#buFQ!cW$nhs%+J-gZw#Q$Nd3T1KENs;k~| z(nDEDRuLxl#T<#w#7bEW$xoJ!cqq@1CblNc#7cBHJz{W%{=_7Iq~2S3?y4C7`!4SJRjF>cl~py#L`#=u#36kYzPM2Dd?2GTg; zQA~|Cv4Lss#1L}~c_>>EBi+dw5bHRM$s+b$mWwxvSm_~*WlZc;iaVA;y@MEw*x%he z17h`#K@3K4#7!JUu;YM-QY^xXxG`FUg8NYrvGwj?4Pt&46h!PdZk_=#$NQ*<7(15? zVjb_Ho~MaD;KpcA)O#28JWciN+jAKr=x0VjBnHl9h?rw93L?hLC5TwZ01A4U*u=R6 zy-=_p1reKC=4zP+F~7bs7LNfRVJ}D-`y^J_*#8SeIVqI%O^8|;Pg#smzVHLeW(InZ zis~7F)J1WWr5!ddIwxW{e!TuZq{iq(%yE9)b{F(9CDg6lBkfn>+k0;)^!I82i;U;5gQrty%)|f2_;K3aec4y z<8_}(y-9LKlZ(PGC}H^-zi-TjZTY0OdOIBw9E6`;w5SeFEK!T5w(#SQi$EtUk`k`0 zXo_ujMJa=XsD!V;lkhSdVwDLH-U1P+7b#00+)Hf=NZ9k3d*wC%5~54rfIp`xD1J8# zrWH_|V&P$$PUhIz@6OVG33H|~p%z%R^aZM}1;&=DDBcPWmxfXujS!L^C+qoXy>6Qp z6Xu)`U8xSppdx*NsP7a)w_$7gMz!;vdl5dyyrGqO5x@q%Zp>G(`fg^#RS)Gcp39lq zmVdA8>GI3vy48nQXR~6wcZ5P%-iC+_S+wm=z{<$pR-(G;9b$tH&o{1T#`M(4&})B^ zdfu;}o#0Ay1+2-)C>SN=>i9NutMN&Fw|TqJAi4TlslJ=E%hkq8eK%?zU^fj#(W=;X zvJl$58^A!Te_9(HhQ0CmU0Lv>_?-9Lez=wqA5k;JbGD15W{+7aYN+pL*Wk?IUr2Oc z&A#-Hvqb!IZc&qqo^u7RFN>S6?8O{L-CL&@LNen6a-8PYdG6}f z^kDTksK|__!p}oP=2EKlIt*uKgeDwpTqq{YhKG6j?nms3CSYd#aAR`eBQQTJIq23U zVL0B9)Mk9rY`|KzVrBM0MOLQF_Tk(n=oF8oke_J-^l1E$kMYIpQX=-WdtUfk#ZURIeS_K}mU`VK zuSL}FOLsw@=DE@-EKxtH<@e{@1o`p>^~yCo*D>uP^!@g@&Gp8vd&5Q$nI$WWi?azL z`=rxZcFO6DANjTYKP(e@dgK-Sg1;Bzh1l|6V8Xa6G0FPj@^m`%+I^=}u#g8%=RJH< z_!NBK2iE!dACN)mX~~H-8xo16>2f4ht8 P#GjRX!s!oHdCdO+s^AQk diff --git a/bsp/artinchip/sys/d12x/ram_param.c b/bsp/artinchip/sys/d12x/ram_param.c index 7520f279..5fbf1d17 100644 --- a/bsp/artinchip/sys/d12x/ram_param.c +++ b/bsp/artinchip/sys/d12x/ram_param.c @@ -1,5 +1,8 @@ /* - * Copyright (C) 2024 ArtInChip Technology Co.,Ltd + * Copyright (C) 2024-2025 ArtInChip Technology Co.,Ltd + * + * SPDX-License-Identifier: Apache-2.0 + * * Author: Xiong Hao */ @@ -8,6 +11,10 @@ #include #include +#define EFUSE_CMU_REG ((void *)0x18020904) +#define EFUSE_218_REG ((void *)0x19010218) +#define EFUSE_21C_REG ((void *)0x1901021c) + #define PSRAM_SINGLE 0 #define PSRAM_PARALLEL 1 @@ -42,20 +49,26 @@ struct _psram_info { /* D121BBV 8M */ \ {0x04, PSRAM_PARALLEL, 0x800000, {APS3208K, 0x80c980c9}}, \ /* D122BCV1 16M SCKW18X128160AAE1 */ \ - {0x05, PSRAM_PARALLEL, 0x1000000, {SCKW18_12816O, 0xc59ac59a}}, \ + {0x05, PSRAM_PARALLEL, 0x1000000, {SCKW18_12816O, 0xc59ac59a}}, \ /* D122BCV2 16M AP12816 */ \ - {0x05, PSRAM_PARALLEL, 0x1000000, {APS12816O, 0xdd8ddd8d}}, \ + {0x05, PSRAM_PARALLEL, 0x1000000, {APS12816O, 0xdd8ddd8d}}, \ + /* D123BAV 4M */ \ + {0x07, PSRAM_SINGLE, 0x400000, {APS3208K, 0x80c980c9}}, \ + /* D123BBV 8M */ \ + {0x08, PSRAM_PARALLEL, 0x800000, {APS3208K, 0x80c980c9}}, \ + /* D123BCV 16M */ \ + {0x09, PSRAM_PARALLEL, 0x1000000, {APS12816O, 0xdd8ddd8d}}, \ /* TR230 8M */ \ - {0xA1, PSRAM_PARALLEL, 0x800000, {APS3208K, 0x80c980c9}}, \ + {0xA1, PSRAM_PARALLEL, 0x800000, {APS3208K, 0x80c980c9}}, \ /* JYX58 8M */ \ - {0xB1, PSRAM_PARALLEL, 0x800000, {APS3208K, 0x80c980c9}}, \ + {0xB1, PSRAM_PARALLEL, 0x800000, {APS3208K, 0x80c980c9}}, \ } struct _psram_info psram_table_info[] = PSRAM_TABLE_INFO; u8 psram_get_mark_id(void) { - u32 fuse_218 = readl(0x19010218); + u32 fuse_218 = readl(EFUSE_218_REG); u8 mark_id = fuse_218 & 0xff; pr_info("fuse_218(0x19010218)=0x%x, mark_id=0x%x\n", fuse_218, mark_id); @@ -64,7 +77,7 @@ u8 psram_get_mark_id(void) u8 psram_get_psram_id(void) { - u32 fuse_21c = readl(0x1901021c); + u32 fuse_21c = readl(EFUSE_21C_REG); u8 psram_id = (fuse_21c & 0xff) >> 4; pr_info("fuse_21c(0x1901021c)=0x%x, psram_id=0x%x\n", fuse_21c, psram_id); @@ -90,9 +103,11 @@ u32 aic_get_ram_size(void) struct _psram_info *psram_info; u8 mark_id, psram_id; + writel(0x1100, EFUSE_CMU_REG); mark_id = psram_get_mark_id(); psram_id = psram_get_psram_id(); psram_info = psram_get_info(mark_id, psram_id); + writel(0x0, EFUSE_CMU_REG); return psram_info->psram_size; } diff --git a/bsp/artinchip/sys/d13x/d13x.pbp b/bsp/artinchip/sys/d13x/d13x.pbp index 397018b1e312ccb514538b7dec43f69a03cbf038..caee61acaa66223eb409f6a7fa0d3d5d39733ff3 100644 GIT binary patch delta 1408 zcmZvbeNa?Y6u{qE-lB`(qANZX7g=m^R+8Q2Q{+RI>`S;ke z7^bpyMI|+ zpawT3#DWHoCrpD6us>lTY{IFDc@ToD6FFE%suJ^LAmMP*TFAoeIrHEa**8ZC5Q8nr z(_j#Ll1oE%jb=xIIUI$My^UFsLWOPeC5~oN${q#JswF(hA?!c#4A?YrqUXA zwmC5@H5PhsQR+f?4G*TOp%Xh(qri?orfT3M2Bw*V?2@>o$rs6vMQO=!9P87p@E1Nw z+Xla4+1wInBCfd{z;1k;u7T?~#S|L4v)6HEG4T7lRn>pE)s|&%+-A9nv>boSF3dIM zDXSWs8{dw&!cCy}^xXEZ@Pw%l`Y<5lSm6eGhoXJh#(Bna#JR&PiI;~sx#uXt21!&7 zc`fHVJr?~nde={F{JSP774=sSWi5N$%J_8aOGV`sk3UvtoyA~t2yJYnS)*P{V_v3n zdY4YCsC3gKUWZHGJ@R$9+`Ji9qswfCDQL;mB(9*|9YyKyjZ|i_%>EHS%LFDnGlrMM z7jEWVLIps-Ai0#s4huO{>MwiaG+XgNW_Y%`_a*uunr?fQ)|HZ2>X5{yro<50B>HUk zNCTzi?fiT}w%1qk>on|XUn$hP=9DBl8-bTjY;)j~%&=|RS7|k8d^wghJG_5F$)`@{ z>6emIke!{zFwsu8J6&|U!#e-V|LLBmeru@T>}UMz>3+}N%x84ePHg-;tUBd)x7$M* zC7)94Td$#VCDF|%FflGJKFOLin~8~^Wr&?+G=>`!=ENAt!vz(xf}cKQ4Yw%ul!KH{ zC~cIp6p?a)GC;XO@f_-GI%{z4W(`{?#Wk#0F%KvURs>v$$k0`Eu_0x#!$_ z&V3I?!7~bz?V0u{{k@hX*W|S@?s}Dj+pc#;;Tqb3Q;cv03=^bRTq7G{sSIY3uYytm zSn`DJ1(+b`f^P$q;IYXPti}%&51|)#E9XNGo>XcgdP=+1iaw@N&oeBq4ramz1&(JJ zwVdz4AC>c_T*!C(b)872PtiflmrIveY%PJHpCnBv4R#`LMow|EC`(j8drJz6~SWjXLPtM@eBSbt@uvS~0y8`|@m>cGTo5U0L5TJ_;PnQFsMHyz zEeP(HJRPS`WpK1^kWN>R%XHT#MM@q+tDMI!!z|2etO zUlSeo$!5Jm2AA=@nB_1?F2!sI;D~KuIKXFE7;A!~SQEP)e#a2Qd3| zsKE;JB8b9vb0mC#SIjG*9A_uy!3=yWk%KK{Phy@7CU9)Y7O-JX(o*<=e3YaDFkwq_ zBz%kg$z>7GH(1^I)+iLh4>n{+3(mS{E_1Y!THZH+_LSAI6`NC%L4%%@1Vw4xYLTdFRjDh$fk#s{a2~r-W1t=HrD~xQL(;6F?UJ~zDUhih3)7OJ4eQe!@CW{t zwi6!Vj`SipLOkglzlvG*fCbe`JUx?SG83Vua0tZ-&KTdlBgQ> zdoG^$c?{ptS^wkX-?l)RXt?%icFB`gCScoICaOk!@mQ7Z#xQF*ZEUnvtJzF*UZwB! zC;D1Nm6u-ed${c1Bj1ASt?xo9daMpQ09%$e@iiKKzA)qc@ycwLX&eu-&0un};&@41 zdCM|@3Vamw;<>}8E3lxoTWN=V}5EU?DAm8`LFKh??gTu$>hCetQh diff --git a/bsp/artinchip/sys/d13x/ram_param.c b/bsp/artinchip/sys/d13x/ram_param.c index 21e65acb..635151af 100644 --- a/bsp/artinchip/sys/d13x/ram_param.c +++ b/bsp/artinchip/sys/d13x/ram_param.c @@ -1,5 +1,8 @@ /* - * Copyright (C) 2024 ArtInChip Technology Co.,Ltd + * Copyright (C) 2024-2025 ArtInChip Technology Co.,Ltd + * + * SPDX-License-Identifier: Apache-2.0 + * * Author: Xiong Hao */ @@ -8,6 +11,10 @@ #include #include +#define EFUSE_CMU_REG ((void *)0x18020904) +#define EFUSE_218_REG ((void *)0x19010218) +#define EFUSE_224_REG ((void *)0x19010224) + #define PSRAM_SINGLE 0 #define PSRAM_PARALLEL 1 @@ -65,7 +72,7 @@ struct _psram_info psram_table_info[] = PSRAM_TABLE_INFO; u8 psram_get_mark_id(void) { - u32 fuse_218 = readl(0x19010218); + u32 fuse_218 = readl(EFUSE_218_REG); u8 mark_id = fuse_218 & 0xff; pr_info("fuse_218(0x19010218)=0x%x, mark_id=0x%x\n", fuse_218, mark_id); @@ -74,7 +81,7 @@ u8 psram_get_mark_id(void) u8 psram_get_psram_id(void) { - u32 fuse_224 = readl(0x19010224); + u32 fuse_224 = readl(EFUSE_224_REG); u8 psram_id = (fuse_224 & 0xff0000) >> 20; pr_info("fuse_224(0x19010224)=0x%x, psram_id=0x%x\n", fuse_224, psram_id); @@ -100,9 +107,11 @@ u32 aic_get_ram_size(void) struct _psram_info *psram_info; u8 mark_id, psram_id; + writel(0x1100, EFUSE_CMU_REG); mark_id = psram_get_mark_id(); psram_id = psram_get_psram_id(); psram_info = psram_get_info(mark_id, psram_id); + writel(0x0, EFUSE_CMU_REG); return psram_info->psram_size; } diff --git a/bsp/artinchip/sys/d21x/d21x.pbp b/bsp/artinchip/sys/d21x/d21x.pbp index 1ff37971f347db4f547b3ea80add9704c0cdc5bd..cda262d2f2095923edacdd4421f6fb19a7496b96 100644 GIT binary patch delta 7347 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 A1^@s6 delta 6654 zcmZ`-2~<;O_J8jsFAGZv4VXZHgg^js0TD#p2uj$bfD6<*ZNbJsU1re#(7)r1{3FW) zK^;!})gnU0(t=7`nU>l(t*1#*+PWb+R@7n%LKIu{#SSVenE!owFVog@hI7KZ_kQ<& zzq@?9)rR->;i8>+t*-K;E zRY<^#BpNyUCN~`o8tT5CNNhxi6)D&&cADJC@0CU%n*o{q#OIk{Zt-))`x0mLgGrzI9Z6XwF zr=$Wcd3rpuCX5o;)Pp@^w0+q~5Bpb`#Mto-<@FW$K&V$9-;lnmyk4D$hc=QV zCevY8mNS#1v+ z6^vz!WDUz!LIPq#eb6zXmawYOW1)($1fc+tzdshZAlcnixu7f@Jrvrn)-5{#>ffP9e{qlV6yE2us_Q)b1v>8j8lilER34W_h69teP|WS< zsmFRjcN1;zc#Qt!`3K=r=xFD(|LyGcbi<$19NgJQ*_bXv-WMK1BhMA$%_!Sz#sYI! z=bg`RL}p49lqW{p&0pWxg2-JG>7Ht=Ym36K27hHY^lnKhEG(A#euK?6*g*TNgtjZq z=$MxpA3#5NX#$O35U(TB<9Vs?4p521!Q`L7$B;Vc5(P^9W-3h;;e5|{64RE2?=%TZ zUfGREz9*FBD0~$-=s7+E%4w1R848lfaWg8F1V#<~Bc9}Ah)njAlD>dD&~c*(IDul1 z5br8_WjC&YPL8-t9q5$AA<(U&?b)53J>C+WDAXY9^RWUlmA2RINB+`x0(9E0(O*X9 zOe`Arogpoq^rDv5WKtpfhiQ8;LT9Dr#LRgp$45&naYJwUqy@A_&G$Tqbxlwqzl`r2 z``o^N^ox;26GuS({C4!fCyltJMOxo&nvNfNnoI&wZUWj)U*~Dg;)tpxX?qmVyMWFB zx)=@mrs6c3Iwc%0M$4uoNY7tT_-5dD9`LoN{o=(rav9K4H#fz4incoXCE6Ye4=V&Zu|LO2 zzXr7N2T3v`e-&u+wHznCn$f>1Nn_-BjQ-UMO*(HmRrZ1g46fuj8)R|JoYu)`Ykr?3 zlTl?Q8aWtT&iRdm^rNlH?{ji~)v@`jYp*CL7^3iH~UI0zIo zTCL5fIWQlllOs?@D6b-UPy}?H6eRUY{GO-b%cWwz{50j96jtRW^m@>uIk)fS)*b6R z_97lG-6FJbR8cB+tPhgg6CWhONWBwXn5>B7y znOYH^9#a-R^zN;vOn73Al+3k57snBqu7N3KHGc_tKekKDREnoDtUwb=e?QwYri2O~ zKJFezE=YoTm@a^E2XREH-t#toyd&8pg!K*f44C>5`=BatmSzcU9rzB{=ysdM4trwGcNZ zwfTTWeoZ|17qFDtd4IsfXR6MRVbV8H4L&GWS9*S#!2`p=PVd(*7I`=tM23Fb%(vE77s!V(d#>gohr@yLmticHJpQp+=2-_;! zN>`R8o5&pb4jt6}>7)$TlHH4X(6=Y+c4kKrDE~+7K+p<_(-MU!(yP(M8W@DO}bm1mG#b+gbrz@ zgYbJz2&@o~G%Ji`GTp2E*+a_(23+D#9?2}H)6u>8w=+4;2ApxkBaLmNQt001TbUfE zNu_(uH$5`hwr=1CY?&NqNTYil!yY+o8<`Gx!@& z6$iK!0IiuEr^y7s0gsnCK;Q;`%;Y%33jlb1Iu{a|1%TH#x&j0)v46TNz-%J`{;<&% zVKx9>o9>D*2LP{bbVaxf0Iy7UMF`wL-$qx2%K`B6bXSBc0PylgSA@VNem~t6;7Y)| zw9ysdN;;|6_^;`%2y+4O;zn15c>s7}x+_B926{KXOss7wU}M(2n1mPiHlIgs5z62h z4}D<2zpmhuSbaPkU0Q`c-lJUJ0J8ZE%7~aJpuo@OZ&7W8mI&vgvk`?v^EW7VYS?q( zPnz`nDN_{vfRqd+ z>0Yl(Xl`@_QG6M_7M(08s%p~rZ$TeLmk=kbkb2fUfopqO>KSNnDnS|FrP*cn{ zfv$+|?Px_ov&-F1y~^&&8T(QD?9b+|w#%k5oArj}%g1?%Ko?KL4`OT|?3WZvY)mx( z>yNB|Zo^N1^M;c;)1LonmB)?Z%$SowFu+A7+Re z%->X#!bX7*8@gRJ{{0VBxcgDzwxpCYUDh7j;uy=SYIKJ&;>*ON`wIg|KV<+R10wf1 z{B8QNYD_A?M6UIZnhI8nu-wR`*ys+8!N9LnnI2Q6fksCad~~Cn8b$8 ziElDIBL@oPE%=2mrBb}067d0L<=Q@7^I|TBPd^o_1j{691`t@ zLHmvRaOOTBoYJIMQ%!#^uMdfC$H=3Mee<570CX`v^m+5nMhKcp#dZ3|F~0LsAeyT- zny=l=6|H5$AX7lQ8rSFpG;l<(o6yU3_|4o{EUOBz?B?@o!!HHP*M7S8`E_@@zSd?`4E&As6jC*Px+ys2|p(zEQw?TlYTZ-qW# ziolrdkVDxooc>kG9`zL040-Pvhx78k(Y3iMe?HMvpuU|k*fVi){PLLKjw0_J>`S-L zF_?-z2@yWcr%rRp>Rti8@@Y%r36zr%5YS(YDDp}cRbJmzKrrTM+G)SH`9O4>>m zQDR6fQ(onXveY;3Gr)S`2NjcQ-?4 zIpb`wAU>vIc*V*}tiK37SQzBvHPPmZa0)vrI_{&0MX|=Zhs#r(x`GE@io7b&FP#G? zKZydyR(bupd+exk?9xs03`s;TJg%G`?-^r#dN(z)=17e`;J#qS7SoGMR56t?^@E0Z zf!)Delu@^g+ac_ zZZ=sqH~i3MpP_*2$6U@~sm~t7b)JXfV%oXI^-uuZ)O=+Cd3SuhQMnK{W@ zFw8oc+5lVW-_To$hm5u-aBZ`6^e}47OBfXQ9Bb13gtkOEX^>~rmg2K;IB<@w*2i!- zuoRzpH&s7=5MyPwN5z)x)Aispst$j_z58Gx14moDPPwdfZb|q(a6)a3tYmF84RN&A36cL(Pix}qv7sX6X3~lf?4|h-9|BI*^Zx>ZG}U=<9m{&y6-|p zkF`)@&}cT3g)PiZ(c2796Q107)X=o04mRnZ3NqHVul0o4A1}n@0eu=1+e0h#P`{TwsC9KCQw`Ij#@3P>xo??eB$ zWJ+}6M-}02n0|-wc`n_zpe%dw1MteQ9ZW99`x4CM5@>o9Jhq^dOG1rgzrO00fJ+4U z5rxWhOa+wY|r#JQwL>6=XmPwg9Pj(lUX$bxN#oRb^eN)T3m8t z6Z7PHW8LEQE$fL5!E1{Dk!a)eF6c}(srsNX<~^<}vT{g3jQ$9NU4sOg8zXC8y2>n>b=9jm&pri%isekDs#uBU6KF1ni{T}>^IN=JYuX8j zpbV1vEoXND`0eoPX{7jA9z`^84)i9OIZW#O5xi{ql zJov4%4oAv4hhrxEnC~3!yNLTXb-t3;DfIgv+Tmb+ZSdOxzqdGkU+2`EZwcS{*ja^h z;-j&c*cs7rGh*hdW+lvv>m*k!!SVfQ%}N<@F&^z(xgXz%mgUNblXFpR?l&na+{`T+X5g_-*2+aOxPL8t{%!la*+wpsSFQ@*0SN;-tRj!&U+28WDt|98 z;N+rb|8>xk9_>J6^!tefzy!RP-FIS=~&&XXRvi?R6M{Eppje(KhG%#}47)Yy> OAUtnjr~M_X&;JAHn7>;9 diff --git a/bsp/artinchip/sys/d21x/ram_param.c b/bsp/artinchip/sys/d21x/ram_param.c index c00d481b..903f5226 100644 --- a/bsp/artinchip/sys/d21x/ram_param.c +++ b/bsp/artinchip/sys/d21x/ram_param.c @@ -1,5 +1,8 @@ /* - * Copyright (C) 2024 ArtInChip Technology Co.,Ltd + * Copyright (C) 2024-2025 ArtInChip Technology Co.,Ltd + * + * SPDX-License-Identifier: Apache-2.0 + * * Author: Xiong Hao */ @@ -43,6 +46,7 @@ static u32 efuse_get_ddr_size(void) default: pr_info("No DDR info\n"); } + writel(0x0, EFUSE_CMU_REG); return size; } diff --git a/bsp/artinchip/sys/g73x/g73x.pbp b/bsp/artinchip/sys/g73x/g73x.pbp index 397018b1e312ccb514538b7dec43f69a03cbf038..caee61acaa66223eb409f6a7fa0d3d5d39733ff3 100644 GIT binary patch delta 1408 zcmZvbeNa?Y6u{qE-lB`(qANZX7g=m^R+8Q2Q{+RI>`S;ke z7^bpyMI|+ zpawT3#DWHoCrpD6us>lTY{IFDc@ToD6FFE%suJ^LAmMP*TFAoeIrHEa**8ZC5Q8nr z(_j#Ll1oE%jb=xIIUI$My^UFsLWOPeC5~oN${q#JswF(hA?!c#4A?YrqUXA zwmC5@H5PhsQR+f?4G*TOp%Xh(qri?orfT3M2Bw*V?2@>o$rs6vMQO=!9P87p@E1Nw z+Xla4+1wInBCfd{z;1k;u7T?~#S|L4v)6HEG4T7lRn>pE)s|&%+-A9nv>boSF3dIM zDXSWs8{dw&!cCy}^xXEZ@Pw%l`Y<5lSm6eGhoXJh#(Bna#JR&PiI;~sx#uXt21!&7 zc`fHVJr?~nde={F{JSP774=sSWi5N$%J_8aOGV`sk3UvtoyA~t2yJYnS)*P{V_v3n zdY4YCsC3gKUWZHGJ@R$9+`Ji9qswfCDQL;mB(9*|9YyKyjZ|i_%>EHS%LFDnGlrMM z7jEWVLIps-Ai0#s4huO{>MwiaG+XgNW_Y%`_a*uunr?fQ)|HZ2>X5{yro<50B>HUk zNCTzi?fiT}w%1qk>on|XUn$hP=9DBl8-bTjY;)j~%&=|RS7|k8d^wghJG_5F$)`@{ z>6emIke!{zFwsu8J6&|U!#e-V|LLBmeru@T>}UMz>3+}N%x84ePHg-;tUBd)x7$M* zC7)94Td$#VCDF|%FflGJKFOLin~8~^Wr&?+G=>`!=ENAt!vz(xf}cKQ4Yw%ul!KH{ zC~cIp6p?a)GC;XO@f_-GI%{z4W(`{?#Wk#0F%KvURs>v$$k0`Eu_0x#!$_ z&V3I?!7~bz?V0u{{k@hX*W|S@?s}Dj+pc#;;Tqb3Q;cv03=^bRTq7G{sSIY3uYytm zSn`DJ1(+b`f^P$q;IYXPti}%&51|)#E9XNGo>XcgdP=+1iaw@N&oeBq4ramz1&(JJ zwVdz4AC>c_T*!C(b)872PtiflmrIveY%PJHpCnBv4R#`LMow|EC`(j8drJz6~SWjXLPtM@eBSbt@uvS~0y8`|@m>cGTo5U0L5TJ_;PnQFsMHyz zEeP(HJRPS`WpK1^kWN>R%XHT#MM@q+tDMI!!z|2etO zUlSeo$!5Jm2AA=@nB_1?F2!sI;D~KuIKXFE7;A!~SQEP)e#a2Qd3| zsKE;JB8b9vb0mC#SIjG*9A_uy!3=yWk%KK{Phy@7CU9)Y7O-JX(o*<=e3YaDFkwq_ zBz%kg$z>7GH(1^I)+iLh4>n{+3(mS{E_1Y!THZH+_LSAI6`NC%L4%%@1Vw4xYLTdFRjDh$fk#s{a2~r-W1t=HrD~xQL(;6F?UJ~zDUhih3)7OJ4eQe!@CW{t zwi6!Vj`SipLOkglzlvG*fCbe`JUx?SG83Vua0tZ-&KTdlBgQ> zdoG^$c?{ptS^wkX-?l)RXt?%icFB`gCScoICaOk!@mQ7Z#xQF*ZEUnvtJzF*UZwB! zC;D1Nm6u-ed${c1Bj1ASt?xo9daMpQ09%$e@iiKKzA)qc@ycwLX&eu-&0un};&@41 zdCM|@3Vamw;<>}8E3lxoTWN=V}5EU?DAm8`LFKh??gTu$>hCetQh diff --git a/bsp/artinchip/sys/g73x/ram_param.c b/bsp/artinchip/sys/g73x/ram_param.c index 1552ef94..763248a6 100644 --- a/bsp/artinchip/sys/g73x/ram_param.c +++ b/bsp/artinchip/sys/g73x/ram_param.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 ArtInChip Technology Co.,Ltd + * Copyright (C) 2024-2025 ArtInChip Technology Co.,Ltd * * SPDX-License-Identifier: Apache-2.0 * @@ -11,6 +11,10 @@ #include #include +#define EFUSE_CMU_REG ((void *)0x18020904) +#define EFUSE_218_REG ((void *)0x19010218) +#define EFUSE_224_REG ((void *)0x19010224) + #define PSRAM_SINGLE 0 #define PSRAM_PARALLEL 1 @@ -48,7 +52,7 @@ struct _psram_info psram_table_info[] = PSRAM_TABLE_INFO; u8 psram_get_mark_id(void) { - u32 fuse_218 = readl(0x19010218); + u32 fuse_218 = readl(EFUSE_218_REG); u8 mark_id = fuse_218 & 0xff; pr_info("fuse_218(0x19010218)=0x%x, mark_id=0x%x\n", fuse_218, mark_id); @@ -57,7 +61,7 @@ u8 psram_get_mark_id(void) u8 psram_get_psram_id(void) { - u32 fuse_224 = readl(0x19010224); + u32 fuse_224 = readl(EFUSE_224_REG); u8 psram_id = (fuse_224 & 0xff0000) >> 20; pr_info("fuse_224(0x19010224)=0x%x, psram_id=0x%x\n", fuse_224, psram_id); @@ -83,9 +87,11 @@ u32 aic_get_ram_size(void) struct _psram_info *psram_info; u8 mark_id, psram_id; + writel(0x1100, EFUSE_CMU_REG); mark_id = psram_get_mark_id(); psram_id = psram_get_psram_id(); psram_info = psram_get_info(mark_id, psram_id); + writel(0x0, EFUSE_CMU_REG); return psram_info->psram_size; } diff --git a/bsp/examples_bare/test-efuse/SConscript b/bsp/examples_bare/test-efuse/SConscript index 5309ecec..bffcb973 100644 --- a/bsp/examples_bare/test-efuse/SConscript +++ b/bsp/examples_bare/test-efuse/SConscript @@ -7,7 +7,10 @@ CPPPATH = [] src = [] if GetDepend('KERNEL_BAREMETAL') and GetDepend('AIC_SID_BARE_TEST'): - src += Glob('*.c') + src += Glob('efuse_cmds.c') + +if GetDepend('KERNEL_BAREMETAL') and GetDepend('AIC_SID_BURN_SPIENC_KEY_TEST'): + src += Glob('efuse_burn_spienc_key_cmd.c') group = DefineGroup('test-efuse', src, depend = [''], CPPPATH = CPPPATH) diff --git a/bsp/examples_bare/test-efuse/efuse_burn_spienc_key_cmd.c b/bsp/examples_bare/test-efuse/efuse_burn_spienc_key_cmd.c index 7c30fc54..5a33b4f0 100644 --- a/bsp/examples_bare/test-efuse/efuse_burn_spienc_key_cmd.c +++ b/bsp/examples_bare/test-efuse/efuse_burn_spienc_key_cmd.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024, ArtInChip Technology Co., Ltd + * Copyright (c) 2022-2025, ArtInChip Technology Co., Ltd * * SPDX-License-Identifier: Apache-2.0 * @@ -14,18 +14,9 @@ #include #include "spi_aes_key.h" -// #define D12X_BURN_SPIENC_KEY_ENABLE -// #define D13X_BURN_SPIENC_KEY_ENABLE -// #define DRY_RUN_TO_CONFIRM_KEY_VAL -// Enable one of the above as required - -/* The eFuse size */ -#define D12X_EFUSE_SIZE (512 / 8) -#define D13X_EFUSE_SIZE (2048 / 8) - int write_efuse(char *msg, u32 offset, const void *val, u32 size) { -#if defined(DRY_RUN_TO_CONFIRM_KEY_VAL) +#if defined(AIC_SID_BURN_SIMULATED) printf("eFuse %s:\n", msg); hexdump((unsigned char *)val, size, 1); return size; @@ -39,11 +30,11 @@ int burn_brom_spienc_bit(void) u32 offset = 0xFFFF, val; int ret; -#if defined(D12X_BURN_SPIENC_KEY_ENABLE) +#if defined(AIC_CHIP_D12X) offset = 0x4; val = 0; val |= (1 << 28); // SPIENC boot bit for brom -#elif defined(D13X_BURN_SPIENC_KEY_ENABLE) +#elif defined(AIC_CHIP_D13X) || defined(AIC_CHIP_D21X) || defined(AIC_CHIP_G73X) offset = 0x38; val = 0; val |= (1 << 16); // Secure boot bit for brom @@ -63,11 +54,11 @@ int check_brom_spienc_bit(void) u32 offset = 0xFFFF, val, mskval = 0; int ret; -#if defined(D12X_BURN_SPIENC_KEY_ENABLE) +#if defined(AIC_CHIP_D12X) offset = 4; mskval = 0; mskval |= (1 << 28); // SPIENC boot bit for brom -#elif defined(D13X_BURN_SPIENC_KEY_ENABLE) +#elif defined(AIC_CHIP_D13X) || defined(AIC_CHIP_D21X) || defined(AIC_CHIP_G73X) offset = 0x38; mskval = 0; mskval |= (1 << 16); // Secure boot bit for brom @@ -92,11 +83,11 @@ int burn_jtag_lock_bit(void) u32 offset = 0xFFFF, val; int ret; -#if defined(D12X_BURN_SPIENC_KEY_ENABLE) +#if defined(AIC_CHIP_D12X) offset = 4; val = 0; val |= (1 << 24); // JTAG LOCK -#elif defined(D13X_BURN_SPIENC_KEY_ENABLE) +#elif defined(AIC_CHIP_D13X) || defined(AIC_CHIP_D21X) || defined(AIC_CHIP_G73X) offset = 0x38; val = 0; val |= (1 << 0); // JTAG LOCK @@ -115,11 +106,11 @@ int check_jtag_lock_bit(void) u32 offset = 0xFFFF, val, mskval = 0; int ret; -#if defined(D12X_BURN_SPIENC_KEY_ENABLE) +#if defined(AIC_CHIP_D12X) offset = 4; mskval = 0; mskval |= (1 << 24); // JTAG LOCK -#elif defined(D13X_BURN_SPIENC_KEY_ENABLE) +#elif defined(AIC_CHIP_D13X) || defined(AIC_CHIP_D21X) || defined(AIC_CHIP_G73X) offset = 0x38; mskval = 0; mskval |= (1 << 0); // JTAG LOCK @@ -143,9 +134,9 @@ int burn_spienc_key(void) u32 offset = 0xFFFF; int ret; -#if defined(D12X_BURN_SPIENC_KEY_ENABLE) +#if defined(AIC_CHIP_D12X) offset = 0x20; -#elif defined(D13X_BURN_SPIENC_KEY_ENABLE) +#elif defined(AIC_CHIP_D13X) || defined(AIC_CHIP_D21X) || defined(AIC_CHIP_G73X) offset = 0xA0; #endif ret = write_efuse("spi_aes.key", offset, (const void *)spi_aes_key, spi_aes_key_len); @@ -163,9 +154,9 @@ int check_spienc_key(void) u8 data[256]; int ret; -#if defined(D12X_BURN_SPIENC_KEY_ENABLE) +#if defined(AIC_CHIP_D12X) offset = 0x20; -#elif defined(D13X_BURN_SPIENC_KEY_ENABLE) +#elif defined(AIC_CHIP_D13X) || defined(AIC_CHIP_D21X) || defined(AIC_CHIP_G73X) offset = 0xA0; #endif ret = efuse_read(offset, (void *)data, 16); @@ -181,7 +172,7 @@ int check_spienc_key(void) int burn_spienc_nonce(void) { -#ifdef D13X_BURN_SPIENC_KEY_ENABLE +#if defined(AIC_CHIP_D13X) || defined(AIC_CHIP_D21X) || defined(AIC_CHIP_G73X) u32 offset; int ret; @@ -197,7 +188,7 @@ int burn_spienc_nonce(void) int check_spienc_nonce(void) { -#ifdef D13X_BURN_SPIENC_KEY_ENABLE +#if defined(AIC_CHIP_D13X) || defined(AIC_CHIP_D21X) || defined(AIC_CHIP_G73X) u32 offset; u8 data[256]; int ret; @@ -215,13 +206,13 @@ int check_spienc_nonce(void) return 0; } -#if defined(D13X_BURN_SPIENC_KEY_ENABLE) +#if defined(AIC_CHIP_D13X) || defined(AIC_CHIP_D21X) || defined(AIC_CHIP_G73X) int burn_spienc_rotpk(void) { u32 offset = 0xFFFF; int ret; -#if defined(D13X_BURN_SPIENC_KEY_ENABLE) +#if defined(AIC_CHIP_D13X) || defined(AIC_CHIP_D21X) || defined(AIC_CHIP_G73X) offset = 0x40; #endif ret = write_efuse("rotpk.bin", offset, (const void *)rotpk_bin, rotpk_bin_len); @@ -239,7 +230,7 @@ int check_spienc_rotpk(void) u8 data[256]; int ret; -#if defined(D13X_BURN_SPIENC_KEY_ENABLE) +#if defined(AIC_CHIP_D13X) || defined(AIC_CHIP_D21X) || defined(AIC_CHIP_G73X) offset = 0x40; #endif ret = efuse_read(offset, (void *)data, 16); @@ -256,7 +247,7 @@ int check_spienc_rotpk(void) int burn_spienc_key_read_write_disable_bits(void) { -#if defined(D12X_BURN_SPIENC_KEY_ENABLE) +#if defined(AIC_CHIP_D12X) u32 offset, val; int ret; @@ -268,7 +259,7 @@ int burn_spienc_key_read_write_disable_bits(void) printf("Write r/w disable bit efuse error.\n"); return -1; } -#elif defined(D13X_BURN_SPIENC_KEY_ENABLE) +#elif defined(AIC_CHIP_D13X) || defined(AIC_CHIP_D21X) || defined(AIC_CHIP_G73X) u32 offset, val; int ret; @@ -308,7 +299,7 @@ int burn_spienc_key_read_write_disable_bits(void) int check_spienc_key_read_write_disable_bits(void) { -#if defined(D12X_BURN_SPIENC_KEY_ENABLE) +#if defined(AIC_CHIP_D12X) u32 offset, val, mskval; int ret; @@ -328,7 +319,7 @@ int check_spienc_key_read_write_disable_bits(void) printf("SPI ENC Key is write DISABLED\n"); else printf("SPI ENC Key is NOT write disabled\n"); -#elif defined(D13X_BURN_SPIENC_KEY_ENABLE) +#elif defined(AIC_CHIP_D13X) || defined(AIC_CHIP_D21X) || defined(AIC_CHIP_G73X) u32 offset, val, mskval; int ret; @@ -381,29 +372,34 @@ int cmd_efuse_do_spienc(int argc, char **argv) int ret; efuse_init(); + efuse_write_enable(); -#if defined(D12X_BURN_SPIENC_KEY_ENABLE) || defined(D13X_BURN_SPIENC_KEY_ENABLE) +#if defined(AIC_CHIP_D12X) || defined(AIC_CHIP_D13X) || defined(AIC_CHIP_D21X) || defined(AIC_CHIP_G73X) ret = burn_brom_spienc_bit(); if (ret) { + efuse_write_disable(); printf("Error\n"); return -1; } ret = burn_spienc_key(); if (ret) { + efuse_write_disable(); printf("Error\n"); return -1; } ret = burn_spienc_nonce(); if (ret) { + efuse_write_disable(); printf("Error\n"); return -1; } -#if defined(D13X_BURN_SPIENC_KEY_ENABLE) +#if defined(AIC_CHIP_D13X) || defined(AIC_CHIP_D21X) || defined(AIC_CHIP_G73X) ret = burn_spienc_rotpk(); if (ret) { + efuse_write_disable(); printf("Error\n"); return -1; } @@ -411,12 +407,14 @@ int cmd_efuse_do_spienc(int argc, char **argv) ret = burn_spienc_key_read_write_disable_bits(); if (ret) { + efuse_write_disable(); printf("Error\n"); return -1; } ret = burn_jtag_lock_bit(); if (ret) { + efuse_write_disable(); printf("Error\n"); return -1; } @@ -424,30 +422,35 @@ int cmd_efuse_do_spienc(int argc, char **argv) ret = check_brom_spienc_bit(); if (ret) { + efuse_write_disable(); printf("Error\n"); return -1; } ret = check_jtag_lock_bit(); if (ret) { + efuse_write_disable(); printf("Error\n"); return -1; } ret = check_spienc_key(); if (ret) { + efuse_write_disable(); printf("Error\n"); return -1; } ret = check_spienc_nonce(); if (ret) { + efuse_write_disable(); printf("Error\n"); return -1; } -#if defined(D13X_BURN_SPIENC_KEY_ENABLE) +#if defined(AIC_CHIP_D13X) || defined(AIC_CHIP_D21X) || defined(AIC_CHIP_G73X) ret = check_spienc_rotpk(); if (ret) { + efuse_write_disable(); printf("Error\n"); return -1; } @@ -455,17 +458,21 @@ int cmd_efuse_do_spienc(int argc, char **argv) ret = check_spienc_key_read_write_disable_bits(); if (ret) { + efuse_write_disable(); printf("Error\n"); return -1; } + efuse_write_disable(); printf("\n"); printf("Write SPI ENC eFuse done.\n"); -#if defined(DRY_RUN_TO_CONFIRM_KEY_VAL) +#if defined(AIC_SID_BURN_SIMULATED) printf("WARNING: This is a dry run to check the eFuse content, key is not burn to eFuse yet.\n"); #endif +#if !defined(AIC_SID_CONTINUE_BOOT_BURN_AFTER) while (1) continue; +#endif return 0; } diff --git a/bsp/examples_bare/test-efuse/efuse_cmds.c b/bsp/examples_bare/test-efuse/efuse_cmds.c index 97524618..12f7ab3b 100644 --- a/bsp/examples_bare/test-efuse/efuse_cmds.c +++ b/bsp/examples_bare/test-efuse/efuse_cmds.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024, ArtInChip Technology Co., Ltd + * Copyright (c) 2022-2025, ArtInChip Technology Co., Ltd * * SPDX-License-Identifier: Apache-2.0 * @@ -18,9 +18,11 @@ static void cmd_efuse_help(void) printf(" efuse help : Get this help.\n"); printf(" efuse dump offset len : Dump data from eFuse offset.\n"); printf(" efuse read addr offset len : Read eFuse data to RAM addr.\n"); +#ifdef EFUSE_WRITE_SUPPORT printf(" efuse write addr offset len : Write data to eFuse from RAM addr.\n"); printf(" efuse writehex offset data : Write data to eFuse from input hex string.\n"); printf(" efuse writestr offset data : Write data to eFuse from input string.\n"); +#endif printf(" efuse authenticate sjtag key : Authenticate secure jtag from hex string key.\n"); printf(" efuse authenticate szone key : Authenticate secure zone from hex string key.\n"); } @@ -82,6 +84,7 @@ static void cmd_efuse_dump(int argc, char **argv) printf("\n"); } +#ifdef EFUSE_WRITE_SUPPORT static void cmd_efuse_write(int argc, char **argv) { ulong addr, offset, len; @@ -157,6 +160,7 @@ static void cmd_efuse_writestr(int argc, char **argv) printf("Program efuse done.\n"); } +#endif static void cmd_efuse_authenticate(int argc, char **argv) { @@ -200,18 +204,26 @@ static int cmd_efuse_do(int argc, char **argv) cmd_efuse_dump(argc - 1, &argv[1]); return 0; } +#ifdef EFUSE_WRITE_SUPPORT if (!strcmp(argv[1], "write")) { + efuse_write_enable(); cmd_efuse_write(argc - 1, &argv[1]); + efuse_write_disable(); return 0; } if (!strcmp(argv[1], "writehex")) { + efuse_write_enable(); cmd_efuse_writehex(argc - 1, &argv[1]); + efuse_write_disable(); return 0; } if (!strcmp(argv[1], "writestr")) { + efuse_write_enable(); cmd_efuse_writestr(argc - 1, &argv[1]); + efuse_write_disable(); return 0; } +#endif if (!strcmp(argv[1], "authenticate")) { cmd_efuse_authenticate(argc - 1, &argv[1]); return 0; diff --git a/kernel/common/include/osal/aic_osal.h b/kernel/common/include/osal/aic_osal.h index a479ae7c..b64d0508 100644 --- a/kernel/common/include/osal/aic_osal.h +++ b/kernel/common/include/osal/aic_osal.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024, ArtInChip Technology Co., Ltd + * Copyright (c) 2022-2025, ArtInChip Technology Co., Ltd * * SPDX-License-Identifier: Apache-2.0 */ @@ -161,6 +161,7 @@ static inline void aicos_msleep(uint32_t delay) {} // memory void *aicos_malloc_try_cma(size_t size); +void *aicos_malloc_align_try_cma(size_t size, size_t align); #ifdef __cplusplus } diff --git a/kernel/common/osal/aic_osal.c b/kernel/common/osal/aic_osal.c index 07d866a6..a9bbdd96 100644 --- a/kernel/common/osal/aic_osal.c +++ b/kernel/common/osal/aic_osal.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, ArtInChip Technology Co., Ltd + * Copyright (c) 2022-2025, ArtInChip Technology Co., Ltd * * SPDX-License-Identifier: Apache-2.0 */ @@ -101,3 +101,22 @@ extern bool lv_drop_one_cached_image(); return aicos_malloc(MEM_CMA, size); #endif } + +void *aicos_malloc_align_try_cma(size_t size, size_t align) +{ +#if defined(LPKG_USING_LVGL) +extern bool lv_drop_one_cached_image(); + while (1) { + void *data = aicos_malloc_align(MEM_CMA, size, align); + if (data) + return data; + + bool res = lv_drop_one_cached_image(); + if (res == false) { + return NULL; + } + } +#else + return aicos_malloc_align(MEM_CMA, size, align); +#endif +} diff --git a/packages/artinchip/mpp/base/memory/mpp_mem.c b/packages/artinchip/mpp/base/memory/mpp_mem.c index ef80a458..95e176c8 100644 --- a/packages/artinchip/mpp/base/memory/mpp_mem.c +++ b/packages/artinchip/mpp/base/memory/mpp_mem.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024, ArtInChip Technology Co., Ltd + * Copyright (c) 2022-2025, ArtInChip Technology Co., Ltd * * SPDX-License-Identifier: Apache-2.0 * @@ -126,26 +126,33 @@ void show_mem_info_debug() } /***************************** physic memory *****************************************/ -#define ALIGN_1024B(x) ((x+1023)&(~1023)) -// base address of reserved buffer -#define BASE_ADDR 0x43a00000 -#define MEMORY_NUM 48 -//#define USE_CARVOUT +#define DEBUG_PHY_MEM (0) +#if DEBUG_PHY_MEM +#include +#define MEMORY_NUM 48 struct phy_mem_info { unsigned int addr; - unsigned int align_addr; // 8 bytes align int size; int used; }; - +static pthread_mutex_t g_phy_mem_mutex = PTHREAD_MUTEX_INITIALIZER; struct phy_mem_info info[MEMORY_NUM]; -unsigned int g_addr = BASE_ADDR; int total_cnt = 0; +#endif + unsigned int mpp_phy_alloc(size_t size) { - int i; + unsigned int addr = (unsigned long)aicos_malloc_align_try_cma(size, 1024); + if (addr == 0) { + loge("mpp_phy_alloc failed"); + return 0; + } + aicos_dcache_clean_invalid_range((unsigned long *)((unsigned long)addr), size); +#if DEBUG_PHY_MEM + int i; + pthread_mutex_lock(&g_phy_mem_mutex); for(i=0; i