patch

调试串口115200

--- a/platform/ac8257/default.mak
+++ b/platform/ac8257/default.mak
@@ -40,7 +40,7 @@ CFG_USB_DOWNLOAD :=1CFG_FUNCTION_PICACHU_SUPPORT :=1CFG_PMT_SUPPORT :=0CFG_UART_COMMON :=1
-CFG_LOG_BAUDRATE :=921600
+CFG_LOG_BAUDRATE :=115200CFG_EVB_UART_CLOCK :=26000000CFG_FPGA_UART_CLOCK :=12000000CFG_META_BAUDRATE :=115200
@@ -111,7 +111,7 @@ CFG_PMIC_FULL_RESET :=0# dynamic switch UART log and profile boot time in user loadifeq ("$(TARGET_BUILD_VARIANT)","user")
-	CFG_UART_DYNAMIC_SWITCH :=1
+	CFG_UART_DYNAMIC_SWITCH :=0CFG_BOOT_TIME_PROFILE :=0elseCFG_UART_DYNAMIC_SWITCH :=0

GPIO

--- a/platform/ac8257/src/core/load_arm2_image.c
+++ b/platform/ac8257/src/core/load_arm2_image.c
@@ -851,6 +851,11 @@ static void preloader_setup_display_gpio(void)mt_set_gpio_out (GPIO159, GPIO_OUT_ZERO);//mt_set_gpio_pull_select(GPIO159, GPIO_PULL_DOWN);#else
+	/* 5V */
+	mt_set_gpio_mode(GPIO16, GPIO_MODE_00);
+	mt_set_gpio_dir (GPIO16, GPIO_DIR_OUT);
+	mt_set_gpio_out (GPIO16, GPIO_OUT_ONE);
+
+	/* 12V */
+	mt_set_gpio_mode(GPIO175, GPIO_MODE_GPIO);
+	mt_set_gpio_dir(GPIO175,GPIO_DIR_OUT);
+	mt_set_gpio_out(GPIO175, GPIO_OUT_ONE);
+
+	/* 12V */
+	mt_set_gpio_mode(GPIO167, GPIO_MODE_GPIO);
+	mt_set_gpio_dir(GPIO167,GPIO_DIR_OUT);
+	mt_set_gpio_out(GPIO167, GPIO_OUT_ONE);mt_set_gpio_mode(GPIO151, GPIO_MODE_00);mt_set_gpio_dir (GPIO151, GPIO_DIR_OUT);mt_set_gpio_out (GPIO151, GPIO_OUT_ONE);

watchdog

--- a/platform/ac8257/default.mak
+++ b/platform/ac8257/default.mak
@@ -80,7 +80,7 @@ CFG_APWDT :=V2#   0       : Disable watchdog#   1       : Enable watchdog#
-CFG_APWDT_DISABLE :=0
+CFG_APWDT_DISABLE :=1CFG_BOOT_ARGUMENT :=1CFG_BOOT_ARGUMENT_BY_ATAG := 1CFG_RAM_CONSOLE :=1
@@ -135,7 +135,7 @@ endif# LOG_LEVEL_DEBUG      (4)# Any log messages with levels less than and equal to this will be printed.ifeq ("$(TARGET_BUILD_VARIANT)","user")
-CFG_LOG_LEVEL :=0
+CFG_LOG_LEVEL :=3elseCFG_LOG_LEVEL :=0endif
--- a/platform/ac8257/src/core/main.c
+++ b/platform/ac8257/src/core/main.c
@@ -1385,6 +1385,11 @@ void main(u32 *arg)jump_arg = (u32)&bootarg;#endif+	for (;;) {
+		if (get_timer(0) > 120000) {
+			break;
+		}
+	}/* 64S3,32S1,32S1 (MTK_ATF_BOOT_OPTION = 0)* re-loader jump to LK directly and then LK jump to kernel directly */#if CFG_ATF_SUPPORT

UART DYNAMIC SWITCH

--- a/platform/ac8257/src/drivers/platform.c
+++ b/platform/ac8257/src/drivers/platform.c
@@ -1498,7 +1498,7 @@ void platform_init(void)pal_log_info("Vol Up detected. Log Keep on.\n");} else {pal_log_err("Log Turned Off.\n");
-        set_log_switch(0);
+        //set_log_switch(0);}BOOTING_TIME_PROFILING_LOG("UART DYNAMIC SWITCH");#endif

gpt debug

--- a/platform/ac8257/default.mak
+++ b/platform/ac8257/default.mak
@@ -135,7 +135,7 @@ endif# LOG_LEVEL_DEBUG      (4)# Any log messages with levels less than and equal to this will be printed.ifeq ("$(TARGET_BUILD_VARIANT)","user")
-CFG_LOG_LEVEL :=0
+CFG_LOG_LEVEL :=4elseCFG_LOG_LEVEL :=0endif
--- a/platform/ac8257/src/drivers/platform.c
+++ b/platform/ac8257/src/drivers/platform.c
@@ -1498,7 +1498,7 @@ void platform_init(void)pal_log_info("Vol Up detected. Log Keep on.\n");} else {pal_log_err("Log Turned Off.\n");
-        set_log_switch(0);
+        //set_log_switch(0);}BOOTING_TIME_PROFILING_LOG("UART DYNAMIC SWITCH");#endif
--- a/platform/common/partition/efi.c
+++ b/platform/common/partition/efi.c
@@ -189,7 +189,7 @@ static int read_data(u8 *buf, u32 part_id, u64 lba, u64 size)err = blkdev_read(dev, lba * dev->blksz, (u32)size, buf, part_id);if (err) {
-        pal_log_err("%sread data, err(%d)\n", TAG, err);
+        pal_log_err("%sread data lba 0x%llx, err(%d)\n", TAG, lba, err);return err;}@@ -252,8 +252,13 @@ static u64 get_part_ptr_by_gpt(u32 part_id, u64 header_lba, u8 *entries_buf, parreturn 1;}+    if (header->sizeof_partition_entry < sizeof(gpt_entry)) {
+        pal_log_err("%s invalid sizeof_partition_entry 0x%llx, default sizeof(gpt_entry)\n", TAG, header->sizeof_partition_entry);
+        header->sizeof_partition_entry = sizeof(gpt_entry);
+    }num_block_entry = (u64)(blksz / header->sizeof_partition_entry);entries_read_size = (u64)((header->num_partition_entries + (num_block_entry - 1)) / num_block_entry) * blksz;
+    pal_log_info("%s num_block_entry 0x%llx, entries_read_size 0x%llx\n", TAG, num_block_entry, entries_read_size);calc_crc = ~0L;read_lba = header->partition_entry_lba;
@@ -276,11 +281,15 @@ static u64 get_part_ptr_by_gpt(u32 part_id, u64 header_lba, u8 *entries_buf, par}calc_crc = efi_crc32_finalize(calc_crc);if (header->partition_entry_array_crc32 != calc_crc) {
-        pal_log_err("%scheck header, err(entries crc 0x%x!=0x%x(calc))\n",
-            TAG, header->partition_entry_array_crc32, calc_crc);
+        pal_log_err("%scheck header, err(entries crc 0x%x!=0x%x(calc)) 0x%llx\n",
+            TAG, header->partition_entry_array_crc32, calc_crc, header_lba);memset(part_ptr, 0, sizeof(part_t));return 1;}
+
+    pal_log_err("%scheck header, err(entries crc 0x%x 0x%x(calc)) 0x%llx\n",
+        TAG, header->partition_entry_array_crc32, calc_crc, header_lba);
+if (found == 0)memset(part_ptr, 0, sizeof(part_t));@@ -304,6 +313,7 @@ int mt_get_part_info_by_name(const char *name, struct part_info_t *part_info)}gpt_sram_part_info.info = &gpt_sram_part_meta_info;if (get_part_ptr_by_gpt(part_id, 1, gpt_sram_buf, &gpt_sram_part_info, name, dev->blksz) != 0) {
+        gpt_sram_part_info.info = &gpt_sram_part_meta_info;if (get_part_ptr_by_gpt(part_id, last_lba(part_id), gpt_sram_buf, &gpt_sram_part_info, name, dev->blksz) != 0) {pal_log_err("%sFailure to find valid GPT.\n", TAG);return 1;
@@ -317,10 +327,12 @@ int mt_get_part_info_by_name(const char *name, struct part_info_t *part_info)u64 get_part_addr(const char *name) {struct part_info_t part_info;+    pal_log_err("%sget_part_addr %s\n", TAG, name);if (mt_get_part_info_by_name(name, &part_info) != 0) {pal_log_err("%smt_get_part_info_by_name fail\n", TAG);return 0;} else {
+        pal_log_err("%sget_part_addr %s: 0x%llx\n", TAG, name, (u64)part_info.addr);return (u64)part_info.addr;}}
--- a/platform/common/partition/part_common.c
+++ b/platform/common/partition/part_common.c
@@ -45,6 +45,7 @@#include <bootctrl.h>#include <platform.h>+#define MOD     "[PART]"#ifdef MTK_PARTITION_COMMON#include "dram_buffer.h"#include "partition.h"
--- a/platform/common/storage/mmc/msdc_dma.c
+++ b/platform/common/storage/mmc/msdc_dma.c
@@ -949,7 +949,7 @@ done:if (derr != MMC_ERR_NONE) {/* crc error find in data transfer. need reset host & send cmd12 *//* if autocmd crc occur, will enter here too */
-		msdc_pr_err("[SD%d] <CMD%d> DMA data error (%d)\n", host->id, cmd->opcode, derr);
+		msdc_pr_err("[SD%d] <CMD%d> 0x%x DMA data error (%d)\n", host->id, cmd->opcode, cmd->arg, derr);msdc_abort_handler(host, 1);return derr;

parition

--- a/platform/common/partition/efi.c
+++ b/platform/common/partition/efi.c
@@ -252,6 +252,10 @@ static u64 get_part_ptr_by_gpt(u32 part_id, u64 header_lba, u8 *entries_buf, parreturn 1;}+    if (header->sizeof_partition_entry < sizeof(gpt_entry)) {
+        header->sizeof_partition_entry = sizeof(gpt_entry);
+    }
+num_block_entry = (u64)(blksz / header->sizeof_partition_entry);entries_read_size = (u64)((header->num_partition_entries + (num_block_entry - 1)) / num_block_entry) * blksz;@@ -260,6 +264,9 @@ static u64 get_part_ptr_by_gpt(u32 part_id, u64 header_lba, u8 *entries_buf, parfound = 0;while (entries_read_size > 0) {err = read_data((u8*)entries_buf, part_id, read_lba, GPT_SRAM_BUF_SIZE);
+        if (err) {
+            break;
+        }read_lba = read_lba + GPT_SRAM_BUF_SIZE/blksz;calc_crc = efi_crc32(calc_crc, (u8 *)entries_buf, (u32)GPT_SRAM_BUF_SIZE, gpt_sram_crc32_table);entries_read_size -= GPT_SRAM_BUF_SIZE;
@@ -304,6 +311,7 @@ int mt_get_part_info_by_name(const char *name, struct part_info_t *part_info)}gpt_sram_part_info.info = &gpt_sram_part_meta_info;if (get_part_ptr_by_gpt(part_id, 1, gpt_sram_buf, &gpt_sram_part_info, name, dev->blksz) != 0) {
+        gpt_sram_part_info.info = &gpt_sram_part_meta_info;if (get_part_ptr_by_gpt(part_id, last_lba(part_id), gpt_sram_buf, &gpt_sram_part_info, name, dev->blksz) != 0) {pal_log_err("%sFailure to find valid GPT.\n", TAG);return 1;
@@ -349,6 +357,11 @@ static int parse_gpt_header(u32 part_id, u64 header_lba, u8 *header_buf, u8 *entreturn 1;}+    if (header->sizeof_partition_entry != sizeof(gpt_entry)) {
+        pal_log_err("%sinvalid sizeof_partition_entry %d, default to %d\n",
+            TAG, header->sizeof_partition_entry, sizeof(gpt_entry));
+        header->sizeof_partition_entry = sizeof(gpt_entry);
+    }entries_real_size = (u64)header->num_partition_entries * header->sizeof_partition_entry;num_block_entry = (u64)(dev->blksz / header->sizeof_partition_entry);entries_read_size = (u64)((header->num_partition_entries + (num_block_entry - 1)) / num_block_entry) * dev->blksz;

boot time profile

--- a/platform/ac8257/default.mak
+++ b/platform/ac8257/default.mak
@@ -112,7 +112,7 @@ CFG_PMIC_FULL_RESET :=0# dynamic switch UART log and profile boot time in user loadifeq ("$(TARGET_BUILD_VARIANT)","user")CFG_UART_DYNAMIC_SWITCH :=1
-	CFG_BOOT_TIME_PROFILE :=0
+	CFG_BOOT_TIME_PROFILE :=1elseCFG_UART_DYNAMIC_SWITCH :=0CFG_BOOT_TIME_PROFILE :=0
@@ -135,7 +135,7 @@ endif# LOG_LEVEL_DEBUG      (4)# Any log messages with levels less than and equal to this will be printed.ifeq ("$(TARGET_BUILD_VARIANT)","user")
-CFG_LOG_LEVEL :=0
+CFG_LOG_LEVEL :=2elseCFG_LOG_LEVEL :=0endif
--- a/platform/ac8257/src/core/print.c
+++ b/platform/ac8257/src/core/print.c
@@ -198,6 +198,10 @@ void vprint(char *fmt, va_list vl)unsigned char c;unsigned int reg = 1; /* argument register number (32-bit) */+    outchar('[');
+    outdec(get_timer(0));
+    outstr("] ");
+while (*fmt) {c = *fmt++;switch (c)

SBOOT ENABLE

--- a/custom/ac8257_car/ac8257_car.mk
+++ b/custom/ac8257_car/ac8257_car.mk
@@ -3,8 +3,8 @@ TARGET=ac8257_carARM2_PROJECT=ac8257_carMTK_PLATFORM=AC8257MTK_SEC_CHIP_SUPPORT=yes
-MTK_SEC_USBDL=ATTR_SUSBDL_DISABLE
-MTK_SEC_BOOT=ATTR_SBOOT_DISABLE
+MTK_SEC_USBDL=ATTR_SUSBDL_ENABLE
+MTK_SEC_BOOT=ATTR_SBOOT_ENABLEMTK_SEC_MODEM_AUTH=noMTK_SEC_SECRO_AC_SUPPORT=yes# Platform
--- a/custom/ac8257_demo/ac8257_demo.mk
+++ b/custom/ac8257_demo/ac8257_demo.mk
@@ -3,8 +3,8 @@ TARGET=ac8257_demoARM2_PROJECT=ac8257_demoMTK_PLATFORM=AC8257MTK_SEC_CHIP_SUPPORT=yes
-MTK_SEC_USBDL=ATTR_SUSBDL_DISABLE
-MTK_SEC_BOOT=ATTR_SBOOT_DISABLE
+MTK_SEC_USBDL=ATTR_SUSBDL_ENABLE
+MTK_SEC_BOOT=ATTR_SBOOT_ENABLEMTK_SEC_MODEM_AUTH=noMTK_SEC_SECRO_AC_SUPPORT=yes# Platform
--- a/custom/ac8257_demo_1g_32/ac8257_demo_1g_32.mk
+++ b/custom/ac8257_demo_1g_32/ac8257_demo_1g_32.mk
@@ -3,8 +3,8 @@ TARGET=ac8257_demo_1g_32ARM2_PROJECT=ac8257_demo_1g_32MTK_PLATFORM=AC8257MTK_SEC_CHIP_SUPPORT=yes
-MTK_SEC_USBDL=ATTR_SUSBDL_DISABLE
-MTK_SEC_BOOT=ATTR_SBOOT_DISABLE
+MTK_SEC_USBDL=ATTR_SUSBDL_ENABLE
+MTK_SEC_BOOT=ATTR_SBOOT_ENABLEMTK_SEC_MODEM_AUTH=noMTK_SEC_SECRO_AC_SUPPORT=yes# Platform

usbdl_verify_da

--- a/platform/ac8257/src/core/download.c
+++ b/platform/ac8257/src/core/download.c
@@ -472,6 +472,8 @@ static u16 usbdl_verify_da(u8* da_addr, u32 da_len, u32 sig_len)if (FALSE == seclib_sec_usbdl_enabled(TRUE)) {pal_log_info("usbdl_vfy_da:disabled\n");} else {
+		status = 0;
+#if 0/* init download agent authentication key */if (da_auth_init() != 0) {status = E_DAA_SIG_VERIFY_FAILED;
@@ -490,6 +492,7 @@ static u16 usbdl_verify_da(u8* da_addr, u32 da_len, u32 sig_len)if (sec_auth(da_addr, (da_len - sig_len), sig_addr, sig_len) != 0) {status = E_DAA_SIG_VERIFY_FAILED;}
+#endif}#elseif (FALSE == seclib_sec_usbdl_enabled(TRUE)) {

SBOOT ENABLE_ON_SCHIP

--- a/custom/ac8257_car/ac8257_car.mk
+++ b/custom/ac8257_car/ac8257_car.mk
@@ -3,8 +3,8 @@ TARGET=ac8257_carARM2_PROJECT=ac8257_carMTK_PLATFORM=AC8257MTK_SEC_CHIP_SUPPORT=yes
-MTK_SEC_USBDL=ATTR_SUSBDL_DISABLE
-MTK_SEC_BOOT=ATTR_SBOOT_DISABLE
+MTK_SEC_USBDL=ATTR_SUSBDL_ONLY_ENABLE_ON_SCHIP
+MTK_SEC_BOOT=ATTR_SBOOT_ONLY_ENABLE_ON_SCHIPMTK_SEC_MODEM_AUTH=noMTK_SEC_SECRO_AC_SUPPORT=yes# Platform
--- a/custom/ac8257_demo/ac8257_demo.mk
+++ b/custom/ac8257_demo/ac8257_demo.mk
@@ -3,8 +3,8 @@ TARGET=ac8257_demoARM2_PROJECT=ac8257_demoMTK_PLATFORM=AC8257MTK_SEC_CHIP_SUPPORT=yes
-MTK_SEC_USBDL=ATTR_SUSBDL_DISABLE
-MTK_SEC_BOOT=ATTR_SBOOT_DISABLE
+MTK_SEC_USBDL=ATTR_SUSBDL_ONLY_ENABLE_ON_SCHIP
+MTK_SEC_BOOT=ATTR_SBOOT_ONLY_ENABLE_ON_SCHIPMTK_SEC_MODEM_AUTH=noMTK_SEC_SECRO_AC_SUPPORT=yes# Platform
--- a/custom/ac8257_demo_1g_32/ac8257_demo_1g_32.mk
+++ b/custom/ac8257_demo_1g_32/ac8257_demo_1g_32.mk
@@ -3,8 +3,8 @@ TARGET=ac8257_demo_1g_32ARM2_PROJECT=ac8257_demo_1g_32MTK_PLATFORM=AC8257MTK_SEC_CHIP_SUPPORT=yes
-MTK_SEC_USBDL=ATTR_SUSBDL_DISABLE
-MTK_SEC_BOOT=ATTR_SBOOT_DISABLE
+MTK_SEC_USBDL=ATTR_SUSBDL_ONLY_ENABLE_ON_SCHIP
+MTK_SEC_BOOT=ATTR_SBOOT_ONLY_ENABLE_ON_SCHIPMTK_SEC_MODEM_AUTH=noMTK_SEC_SECRO_AC_SUPPORT=yes# Platform

memory test

--- a/platform/ac8257/src/drivers/dramc_pi_main.c
+++ b/platform/ac8257/src/drivers/dramc_pi_main.c
@@ -114,8 +114,8 @@#endifDRAM_DFS_FREQUENCY_TABLE_T gFreqTbl[DRAM_DFS_SHUFFLE_MAX] = {
-    {LP4_HIGHEST_FREQSEL, LP4_HIGHEST_FREQ, DRAM_DFS_SHUFFLE_1},
-    {LP4_MIDDLE_FREQSEL, LP4_MIDDLE_FREQ, DRAM_DFS_SHUFFLE_2},
+    {LP4_HIGHEST_FREQSEL, LP4_LOWEST_FREQ, DRAM_DFS_SHUFFLE_1},
+    {LP4_MIDDLE_FREQSEL, LP4_LOWEST_FREQ, DRAM_DFS_SHUFFLE_2},{LP4_LOWEST_FREQSEL,  LP4_LOWEST_FREQ, DRAM_DFS_SHUFFLE_3},};--- a/platform/ac8257/src/drivers/memory.c
+++ b/platform/ac8257/src/drivers/memory.c
@@ -137,6 +137,7 @@ void mt_mem_init(void)#endif/* CFG_UBOOT_MEMADDR is LK base addr */
+#if 0if ((i = complex_mem_test(CFG_UBOOT_MEMADDR, MEM_TEST_SIZE)) == 0) {print ("[%s] 1st complex R/W mem test pass (start addr:0x%x)\n", MOD, CFG_UBOOT_MEMADDR);} else {
@@ -147,6 +148,16 @@ void mt_mem_init(void)ASSERT(0);#endif}
+#else
+	#define TEST_ADDR 0x40000000
+	#define TEST_SIZE CUSTOM_CONFIG_MAX_DRAM_SIZE	//3GB
+	if ((i = simple_mem_test(TEST_ADDR, TEST_SIZE)) == 0){
+		print("[%s] 1st simple R/W mem test pass (start addr:0x%X, size:0x%X)\n", MOD, TEST_ADDR, TEST_SIZE);
+	}else{
+		print("[%s] 1st simple R/W mem test fail :%X (start addr:0x%X, size:0x%X)\n", MOD, i, TEST_ADDR, TEST_SIZE);
+		ASSERT(0);
+	}
+#endif#if DUAL_RANK_ENABLEif (get_dram_rank_nr() >= 2) {
@@ -200,22 +211,35 @@ void mt_mem_init(void)#define PATTERN1 0x5A5A5A5A#define PATTERN2 0xA5A5A5A5+extern void mtk_wdt_disable(void);
+extern void mtk_wdt_enable(void);
+static int simple_mem_test(unsigned int start, unsigned int len){unsigned int *MEM32_BASE = (unsigned int *) start;unsigned int i, orig_val, new_val;+	mtk_wdt_disable();
+	print("simple mem test. start addr=0x%X, size=0x%X\n", start, len);
+for (i = 0; i < (len >> 2); ++i) {
+		if((start+i*4) % 0xA00000 == 0){
+			print("simple mem test. addr=0x%X\n", start+i*4);
+		}orig_val = MEM32_BASE[i];dsb();MEM32_BASE[i] = PATTERN1;dsb();new_val = MEM32_BASE[i];
-		if (new_val != PATTERN1)
+		if (new_val != PATTERN1){
+			print("simple mem test failed. addr=0x%X, value=0x%X\n", start+i*4, new_val);
+			mtk_wdt_enable();return -1;
+		}dsb();MEM32_BASE[i] = orig_val;}
+	mtk_wdt_enable();return 0;}
--- a/platform/ac8257/src/drivers/pmic.c
+++ b/platform/ac8257/src/drivers/pmic.c
@@ -619,6 +619,7 @@ U32 pmic_init (void)int ret_val = 0, val;print("[PMIC]Preloader Start\n");
+	print("Mem test Preloader Start!\n");print("[PMIC]AC8257 CHIP Code = 0x%x, mrv=%d\n", get_PMIC_chip_version()

gpio dump

--- a/platform/ac8257/src/drivers/gpio.c
+++ b/platform/ac8257/src/drivers/gpio.c
@@ -886,11 +886,32 @@ S32 mt_get_gpio_drving(u32 pin)return mt_get_gpio_driving_chip(pin);}#endif
+
+void gpio_dump(void)
+{
+	int i = 0;
+
+	print("gpio,mode,dir,pull_en,pull_sel,out,smt,ies,in\n");
+	for (i = 0; i < MAX_GPIO_PIN; i++) {
+		print("%d,%d,%d,%d,%d,%d,%d,%d,%d\n", i,
+			mt_get_gpio_mode(0x80000000 + i),
+			mt_get_gpio_dir(0x80000000 + i),
+			mt_get_gpio_pull_enable(0x80000000 + i),
+			mt_get_gpio_pull_select(0x80000000 + i),
+			mt_get_gpio_out(0x80000000 + i),
+			mt_get_gpio_smt(0x80000000 + i),
+			mt_get_gpio_ies(0x80000000 + i),
+			mt_get_gpio_in(0x80000000 + i));
+	}
+
+	print("\n");
+}/*****************************************************************************//* sysfs operation                                                           *//*****************************************************************************/void mt_gpio_init(void){
+	gpio_dump();#ifdef DUMMY_APmt_gpio_set_default();#endif

CFG_LOG_LEVEL 4

--- a/platform/ac8257/default.mak
+++ b/platform/ac8257/default.mak
@@ -111,8 +111,8 @@ CFG_PMIC_FULL_RESET :=0# dynamic switch UART log and profile boot time in user loadifeq ("$(TARGET_BUILD_VARIANT)","user")
-	CFG_UART_DYNAMIC_SWITCH :=1
-	CFG_BOOT_TIME_PROFILE :=0
+	CFG_UART_DYNAMIC_SWITCH :=0
+	CFG_BOOT_TIME_PROFILE :=1elseCFG_UART_DYNAMIC_SWITCH :=0CFG_BOOT_TIME_PROFILE :=0
@@ -135,7 +135,7 @@ endif# LOG_LEVEL_DEBUG      (4)# Any log messages with levels less than and equal to this will be printed.ifeq ("$(TARGET_BUILD_VARIANT)","user")
-CFG_LOG_LEVEL :=0
+CFG_LOG_LEVEL :=4elseCFG_LOG_LEVEL :=0endif
--- a/platform/common/partition/part_common.c
+++ b/platform/common/partition/part_common.c
@@ -56,6 +56,7 @@#define AB_TAG_SZ     (2)+#define MOD     "[PART]"#ifdef MTK_PARTITION_COMMONstatic u8 g_cur_part_name[32] = {0};

固定频率800MHz

--- a/platform/ac8257/src/drivers/inc/dramc_pi_api.h
+++ b/platform/ac8257/src/drivers/inc/dramc_pi_api.h
@@ -108,19 +108,19 @@#define LP4_LOWEST_FREQSEL   (LP4_DDR1600)#else //LP4_HIGHEST_DDR3200#define LP4_HIGHEST_FREQ      (1600)
-    #define LP4_MIDDLE_FREQ        (1200)
+    #define LP4_MIDDLE_FREQ        (800)#define LP4_LOWEST_FREQ        (800)#define LP4_HIGHEST_FREQSEL   (LP4_DDR3200)
-    #define LP4_MIDDLE_FREQSEL     (LP4_DDR2400)
+    #define LP4_MIDDLE_FREQSEL     (LP4_DDR1600)#define LP4_LOWEST_FREQSEL   (LP4_DDR1600)#endif// 2400 workaround for fcMerlot only#ifdef MTK_LP4_HIGHEST_DDR2400#undef LP4_HIGHEST_FREQ
-    #define LP4_HIGHEST_FREQ 1200
+    #define LP4_HIGHEST_FREQ 800#undef LP4_HIGHEST_FREQSEL
-    #define LP4_HIGHEST_FREQSEL (LP4_DDR2400)
+    #define LP4_HIGHEST_FREQSEL (LP4_DDR1600)#endif

BWMZFX32H2A-8G-X

--- a/platform/ac8257/src/drivers/dramc_pi_basic_api.c
+++ b/platform/ac8257/src/drivers/dramc_pi_basic_api.c
@@ -7754,6 +7754,9 @@ void vDramcACTimingOptimize(DRAMC_CTX_T *p)case 0x1:   //6Gb per die  (3Gb per channel),  tRFCab=180case 0x2:   //8Gb per die  (4Gb per channel),  tRFCab=180u1RFCabGrpIdx = tRFCAB_180;
+                if (p->support_rank_num == RANK_SINGLE && p->density == 2 && p->vendor_id == 0xff && p->revision_id == 0x87) {
+                    u1RFCabGrpIdx = tRFCAB_280; // for BW case
+                }break;case 0x3:   //12Gb per die (6Gb per channel),  tRFCab=280case 0x4:   //16Gb per die (8Gb per channel),  tRFCab=280

CFG_USB_UART_SWITCH

platform/ac8257/src/drivers/platform.c platform_pre_init

1340 #if !CFG_FPGA_PLATFORM
1341     #if (CFG_USB_UART_SWITCH)
1342     if (is_uart_cable_inserted()) {
1343         pal_log_info("\n%s Switch to UART Mode\n", MOD);
1344         set_to_uart_mode();
1345     } else {
1346         pal_log_info("\n%s Keep stay in USB Mode\n", MOD);
1347     }
1348     BOOTING_TIME_PROFILING_LOG("USB SWITCH to UART");
1349     #endif
1350 #endif

日志

串口号

--- a/custom/ac8257_demo_1g_32/cust_bldr.mak
+++ b/custom/ac8257_demo_1g_32/cust_bldr.mak
@@ -3,8 +3,8 @@###################################################################CFG_BOOT_DEV :=BOOTDEV_SDMMC-CFG_UART_LOG :=UART1
-CFG_UART_META :=UART1
+CFG_UART_LOG :=UART3
+CFG_UART_META :=UART3#ATF log only enable in eng modeifeq ("$(TARGET_BUILD_VARIANT)","eng")

开关、等级

--- a/platform/ac8257/default.mak
+++ b/platform/ac8257/default.mak
@@ -111,7 +111,7 @@ CFG_PMIC_FULL_RESET :=0# dynamic switch UART log and profile boot time in user loadifeq ("$(TARGET_BUILD_VARIANT)","user")
-       CFG_UART_DYNAMIC_SWITCH :=1
+       CFG_UART_DYNAMIC_SWITCH :=0CFG_BOOT_TIME_PROFILE :=0elseCFG_UART_DYNAMIC_SWITCH :=0
@@ -135,7 +135,7 @@ endif# LOG_LEVEL_DEBUG      (4)# Any log messages with levels less than and equal to this will be printed.ifeq ("$(TARGET_BUILD_VARIANT)","user")
-CFG_LOG_LEVEL :=0
+CFG_LOG_LEVEL :=3elseCFG_LOG_LEVEL :=0endif

/proc/pl_lk

PL_LOG_STORE

--- a/custom/ac8257_demo_1g_32/ac8257_demo_1g_32.mk
+++ b/custom/ac8257_demo_1g_32/ac8257_demo_1g_32.mk
@@ -39,7 +39,7 @@ endifATC_AOSP_ENHANCEMENT=yesATC_USBHANDSHAKE_DIS=no
-ATC_BOOTTIME_ENHANCEMENT=yes
+ATC_BOOTTIME_ENHANCEMENT=noMTK_LP4_HIGHEST_DDR2400=yesifeq ($(ENABLE_AB_UPDATE), yes)

memory test

触发方式

UART

输入字符串

USB ttyACM0

/dev/ttyACM0发送FASTBOOT,preloader判断g_boot_mode == FASTBOOT。

USB adb

adb reboot recovery,preloader判断g_boot_reason == BR_RTC。

GPIO

根据3秒内GPIO管脚跳变次数来决定模式。

#define GPIO_ACC    GPIO5
#define GPIO_DRV_VBUS   GPIO42
#define GPIO_VOL_A	GPIO110
#define GPIO_VOL_B	GPIO112
#define GPIO_LED    GPIO152
#define GPIO_LCD_BL GPIO173
#define CHECK_INTERVAL  100int get_mode_by_gpio(u32 timeout)
{ulong start_time, current_time;int last_state, current_state;int change_count = 0;mt_set_gpio_mode(GPIO_ACC, GPIO_MODE_00);mt_set_gpio_dir(GPIO_ACC, GPIO_DIR_IN);mt_set_gpio_mode(GPIO_VOL_A, GPIO_MODE_00);mt_set_gpio_dir(GPIO_VOL_A, GPIO_DIR_IN);mt_set_gpio_mode(GPIO_VOL_B, GPIO_MODE_00);mt_set_gpio_dir(GPIO_VOL_B, GPIO_DIR_IN);mt_set_gpio_mode(GPIO_LED, GPIO_MODE_00);mt_set_gpio_dir(GPIO_LED, GPIO_DIR_OUT);mt_set_gpio_mode(GPIO_LCD_BL, GPIO_MODE_00);mt_set_gpio_dir(GPIO_LCD_BL, GPIO_DIR_OUT);last_state = mt_get_gpio_in(GPIO_ACC);mt_set_gpio_out(GPIO_LED, !last_state);mt_set_gpio_out(GPIO_LCD_BL, !last_state);print("detection for %d ms...\n", timeout);start_time = get_timer(0);while (1) {current_time = get_timer(0);if (current_time - start_time >= timeout) {break;}current_state = mt_get_gpio_in(GPIO_ACC);current_state |= mt_get_gpio_in(GPIO_VOL_A)<<1;current_state |= mt_get_gpio_in(GPIO_VOL_B)<<2;if (current_state != last_state) {mt_set_gpio_out(GPIO_LED, change_count&0x1);mt_set_gpio_out(GPIO_LCD_BL, change_count&0x1);change_count++;last_state = current_state;print("%dms: %d 0x%x\n", current_time - start_time,change_count, current_state);}mdelay(CHECK_INTERVAL);}return change_count>>1;
}

memory.c

--- a/platform/ac8257/src/drivers/memory.c
+++ b/platform/ac8257/src/drivers/memory.c
@@ -36,6 +36,8 @@#include "typedefs.h"#include "platform.h"
+#include "gpio.h"
+#include "gpio_const.h"#include "memory.h"#include "emi.h"
@@ -190,6 +192,7 @@ void mt_mem_init(void)dram_fatal_exception_detection_end();#endif+memory_test();#endif}
int memory_test(void)
{int i;u64 rank_size[2] = {0, 0};int rval;int mode;/* disable external watchdog */mt_set_gpio_mode(GPIO_DRV_VBUS, GPIO_MODE_00);mt_set_gpio_dir (GPIO_DRV_VBUS, GPIO_DIR_OUT);mt_set_gpio_out (GPIO_DRV_VBUS, GPIO_OUT_ZERO);mode = get_mode_by_gpio();print("mode: %d\n", mode);if (mode < 1) return 0;get_dram_rank_size(rank_size);print("%d: memory test start, rank size 0x%x 0x%x\n", get_timer(0), rank_size[0], rank_size[1]);mtk_wdt_disable();if (1 == mode) {rval = memory_pattern_test(0x40000000, rank_size[0]+rank_size[1]);} else {rval = complex_mem_test(0x40000000, rank_size[0]+rank_size[1]);}mtk_wdt_enable();mt_set_gpio_out (GPIO_LED, GPIO_OUT_ZERO);print("%d: memory test end\n", get_timer(0));print ("[%s] test %s\n", MOD, 0==rval?"pass":"fail");return 0;
}

debug UART log

complex test

11908: complex test, rank size 0x40000000 0x00000000
11908: loop 0 sectional
11908: offset 0x00000000 ... pass, 0
73457: offset 0x02000000 ... pass, 0
135005: offset 0x04000000 ... pass, 0
196553: offset 0x06000000 ... pass, 0
258101: offset 0x08000000 ... pass, 0
319649: offset 0x0A000000 ... pass, 0
381197: offset 0x0C000000 ... fail, -22
438827: offset 0x0E000000 ... fail, -23
499618: offset 0x10000000 ... pass, 0
561166: offset 0x12000000 ... pass, 0
622713: offset 0x14000000 ... pass, 0
684260: offset 0x16000000 ... pass, 0
745808: offset 0x18000000 ... fail, -6
767027: offset 0x1A000000 ... pass, 0
828574: offset 0x1C000000 ... pass, 0
890122: offset 0x1E000000 ... pass, 0
951669: offset 0x20000000 ... fail, -4
963435: offset 0x22000000 ... fail, -23
1023699: offset 0x24000000 ... fail, -1
1024651: offset 0x26000000 ... fail, -4
1035677: offset 0x28000000 ... pass, 0
1097224: offset 0x2A000000 ... fail, -18
1139873: offset 0x2C000000 ... fail, -22
1195989: offset 0x2E000000 ... pass, 0
1257536: offset 0x30000000 ... pass, 0
1319082: offset 0x32000000 ... pass, 0
1380629: offset 0x34000000 ... fail, -4
1395075: offset 0x36000000 ... pass, 0
1456622: offset 0x38000000 ... fail, -4
1473516: offset 0x3A000000 ... pass, 0
1535063: offset 0x3C000000 ... fail, -4
1548061: offset 0x3E000000 ... fail, -4

pattern test

flip test

12896: bitflip test, rank size 0x40000000 0x00000000
12897: loop 0
12897: offset 0x00000000 ...
259019: offset 0x02000000 ...
505141: offset 0x04000000 ...
751263: offset 0x06000000 ...
997384: offset 0x08000000 ...
1243506: offset 0x0A000000 ...
1489627: offset 0x0C000000 ...
1735749: offset 0x0E000000 ...
1981871: offset 0x10000000 ...
2227992: offset 0x12000000 ...
2474113: offset 0x14000000 ...
2720234: offset 0x16000000 ...
2966356: offset 0x18000000 ...
3212477: offset 0x1A000000 ...
3458599: offset 0x1C000000 ...
3704721: offset 0x1E000000 ...
3950841: offset 0x20000000 ...
4196962: offset 0x22000000 ...
4443082: offset 0x24000000 ...
4689203: offset 0x26000000 ...
4935323: offset 0x28000000 ...
5181443: offset 0x2A000000 ...
5427564: offset 0x2C000000 ...
5673686: offset 0x2E000000 ...
5919807: offset 0x30000000 ...
6165929: offset 0x32000000 ...
6412050: offset 0x34000000 ...
6658170: offset 0x36000000 ...
6904291: offset 0x38000000 ...
7150412: offset 0x3A000000 ...
7396534: offset 0x3C000000 ...
0x00000001 != 0x00000000
check again: 0x00000001, 0x00000000
bitflip error at bit 0, pattern 0x00000001, offset 0x7CC00000
7402389: offset 0x3E000000 ...
0x00000001 != 0x00000000
check again: 0x00000001, 0x00000000
bitflip error at bit 0, pattern 0x00000001, offset 0x7E400000

normal

sel = 0, si_ck_sel = 0, si_sample_ctrl = 0, rdata = 96A9
[PWRAP] si_en_sel = 0, si_ck_sel = 1, si_sample_ctrl = 20, rdata = 5AA5, Pass
[PWRAP] InitSiStrobe (5, 5, DA65) Data Boundary Is Found !!
[PWRAP] SI Strobe Calibration For PMIC 0 Done, (40, 5)
[PWRAP] Read Test pass, return_value=0x0
[PWRAP] Write Test pass
[PWRAP] RECORD_CMD0:  0x152A (Last one command addr)
[PWRAP] RECORD_WDATA0:0x2D (Last one command wdata)
[PWRAP] RECORD_CMD1:  0x170E (Last second command addr)
[PWRAP] RECORD_WDATA1:0x78 (Last second command wdata)
[PWRAP] RECORD_CMD2:  0x152A (Last third command addr)
[PWRAP] RECORD_WDATA2:0x1D (Last third command wdata)
[PWRAP] init pass, ret=0.DATE_CODE_YY:0, DATE_CODE_WW:0
[SegCode] Segment Code:0x0, PROJECT_CODE:0x0, FAB_CODE:0x0, RW_STA:0x0, CTL:0x0, DCM:0x4
[PMIC]Preloader Start
[PMIC]AC8257 CHIP Code = 0x5721, mrv=1
[PMIC]POWER_HOLD :0x1
[PMIC]TOP_RST_STATUS[0x152]=0x4B
[PMIC]PONSTS[0xC]=0xE
[PMIC]POFFSTS[0xE]=0x1
[PMIC]PGSTATUS0[0x14]=0xFFFE
[PMIC]PSOCSTATUS[0x16]=0x0
[PMIC]BUCK_OC_SDN_STATUS[0x1434]=0x0
[PMIC]BUCK_OC_SDN_EN[0x1444]=0x11F
[PMIC]THERMALSTATUS[0x18]=0x0
[PMIC]STRUP_CON4[0xA1C]=0x0
[PMIC]TOP_RST_MISC[0x14C]=0x1304
[PMIC]TOP_CLK_TRIM[0x38E]=0x6CC0
latch VPROC 650000 uV
latch VSRAM_PROC 900000 uV
latch VSRAM_OTHERS 800000 uV
latch VCORE 800000 uV
latch VMODEM 800000 uV
[pmic_check_rst] UVLO_RSTB
[PMIC]just_rst = 0
No EFUSE SW Load
battery exists
[PMIC]disable usbdl wo battery
[PMIC]pmic_wdt_set Reg[0x14C]=0x1325
register vs1 OK
register vmodem OK
register vcore OK
register vproc OK
register vpa OK
register vsram_others OK
register vsram_proc OK
register vdram OK
[PMIC]Init done
[PMIC] pmic_init_setting end. v180413
[AC8257] 1 6,61
[AC8257] 1 2,45
[AC8257] 1 1,48
[AC8257] get volt 5, 61, 900000
vsram_others = 900000 uV
[AC8257] get volt 3, 45, 800000
vproc = 800000 uV
[AC8257] get volt 6, 61, 900000
vsram_proc = 900000 uV
[AC8257] get volt 2, 45, 800000
vcore = 800000 uV
[AC8257] get volt 1, 48, 800000
vmodem = 800000 uV
[AC8257] 2 6,1
[AC8257] 2 5,1
[AC8257] 2 3,1
[AC8257] 2 2,1
[AC8257] 2 1,1
[DDR Reserve] ddr reserve mode not be enabled yet
[PMIC]POWER_HOLD :0x1
Enter mtk_kpd_gpio_set!
mtk detect key function pmic_detect_homekey MTK_PMIC_RST_KEY = 17welcome to lk/MPboot args 0x12c0000 0x47da3ee0 0x7c 0x0
INIT: cpu 0, calling hook 0x55b54075 (vm_preheap) at level 0x3ffff, flags 0x1
initializing heap
calling constructors
initializing kernel
INIT: cpu 0, calling hook 0x55b541b1 (vm) at level 0x50000, flags 0x1
INIT: cpu 0, calling hook 0x55b403d5 (bootargs_init) at level 0x50001, flags 0x1
tee_args->magic: 0x4b54444d
tee_args->version: 0x1
tee_args->NWEntry: 0x0
tee_args->NWBootArgs: 0x0
tee_args->NWBootArgsSize: 0x0
tee_args->dRamBase: 0x40000000
tee_args->dRamSize: 0x40000000
tee_args->secDRamBase: 0x55b40000
tee_args->secDRamSize: 0x12c0000
tee_args->sRamBase: 0x0
tee_args->sRamSize: 0x0
tee_args->secSRamBase: 0x0
tee_args->secSRamSize: 0x0
tee_args->gicd_base: 0xc000000
tee_args->gicr_base: 0xc080000
tee_args->gic_ver: 0x0
tee_args->log_port: 0x11002000
tee_args->log_baudrate: 0xe1000
INIT: cpu 0, calling hook 0x55b405c3 (platform_after_vm) at level 0x50002, flags 0x1
gicd 0xc000000, gicr 0xc080000
gicdv 0xff200000, gicrv 0xff000000
INIT: cpu 0, calling hook 0x55b455d5 (platform_after_vm_hacc_init) at level 0x50003, flags 0x1
Enable mmap for HACC!
INIT: cpu 0, calling hook 0x55b456f9 (platform_after_vm_trng_init) at level 0x50003, flags 0x1
Enable mmap for HWTRNG!
INIT: cpu 0, calling hook 0x55b52d8b (platform_after_vm_hkdf_unittest) at level 0x50004, flags 0x1
HKDF-SHA256 Verification: PASS
initializing mp
initializing threads
initializing timers
initializing ports
creating bootstrap completion thread
top of bootstrap2()
creating bootstrap completion thread for cpu 1
creating bootstrap completion thread for cpu 2
creating bootstrap completion thread for cpu 3
releasing 3 secondary cpus
initializing platform
INIT: cpu 0, calling hook 0x55b4988b (libsm_cpu) at level 0x8fffe, flags 0x3
INIT: cpu 0, calling hook 0x55b49985 (libsm) at level 0x8ffff, flags 0x1
initializing target
calling apps_init()
INIT: cpu 0, calling hook 0x55b567b5 (LibTomCryptInit) at level 0xa0020, flags 0x1
INIT: cpu 0, calling hook 0x55b4c98b (uctx) at level 0xafffe, flags 0x1
als_slot_cnt 1 ret 1
INIT: cpu 0, calling hook 0x55b51cf1 (tipc_init) at level 0xafffe, flags 0x1
INIT: cpu 0, calling hook 0x55b4a2df (libtrusty) at level 0xaffff, flags 0x1
initializing trusty (Built: 03:35:41 Mar 13 2025)
trusty_app: start 0x55b82000 size 0x0000f000 end 0x55b91000
trusty_app 0 uuid: 0x38ba0cdc 0xdf0e 0x11e4 0x9869 0x233fb6ae4795
trusty_app: start 0x55b91000 size 0x00086000 end 0x55c17000
trusty_app 1 uuid: 0x5f902ace 0x5e5c 0x4cd8 0xae54 0x87b88c22ddaf
trusty_app: start 0x55c17000 size 0x00027000 end 0x55c3e000
trusty_app 2 uuid: 0xcea8706d 0x6cb4 0x49f3 0xb994 0x29e0e478bd29
trusty_app: start 0x55c3e000 size 0x00019000 end 0x55c57000
trusty_app 3 uuid: 0x7445ca05 0x35d5 0x4698 0xbb9a 0xd84f9a5fcf
INIT: cpu 0, calling hook 0x55b431df (atceinfo) at level 0xb0000, flags 0x1
Info:atceinfo:init...
Debug:atccrypt:import_rsakey success!
Info:atceinfo:init finished
INIT: cpu 0, calling hook 0x55b43f27 (atcencrypt_service) at level 0xb0000, flags 0x1
init_atcencrypt_service enter
Info: atcencrypt_ipc_thread waiting
init_atcencrypt_service finish
INIT: cpu 0, calling hook 0x55b49635 (memlog) at level 0xb0000, flags 0x1
INIT: cpu 0, calling hook 0x55b501d7 (trusty_smcall) at level 0xb0000, flags 0x1
Initializing Trusted OS SMC handler
INIT: cpu 0, calling hook 0x55b51e29 (kmgetboot_service) at level 0xb0000, flags 0x1
status_t init_kmgetboot_ipc(void):569: com.mediatek.kmgetboot created
INIT: cpu 0, calling hook 0x55b5219d (mtcrypto_service) at level 0xb0000, flags 0x1
INIT: cpu 0, calling hook 0x55b53263 (trusty_mt_smcall) at level 0xb0000, flags 0x1
Initializing MTK SMC handler
INIT: cpu 0, calling hook 0x55b4aae1 (libtrusty_apps) at level 0xb0001, flags 0x1
INIT: cpu 0, calling hook 0x55b406ad (disable_uart_after_bootup) at level 0xffffffff, flags 0x1
Disable UART after Trusty bootup!

fatal dram exception

sel = 0, si_ck_sel = 0, si_sample_ctrl = 0, rdata = 96A9
[PWRAP] si_en_sel = 0, si_ck_sel = 1, si_sample_ctrl = 20, rdata = 5AA5, Pass
[PWRAP] InitSiStrobe (5, 5, 9A65) Data Boundary Is Found !!
[PWRAP] SI Strobe Calibration For PMIC 0 Done, (40, 5)
[PWRAP] Read Test pass, return_value=0x0
[PWRAP] Write Test pass
[PWRAP] RECORD_CMD0:  0x0 (Last one command addr)
[PWRAP] RECORD_WDATA0:0x0 (Last one command wdata)
[PWRAP] RECORD_CMD1:  0x0 (Last second command addr)
[PWRAP] RECORD_WDATA1:0x0 (Last second command wdata)
[PWRAP] RECORD_CMD2:  0x0 (Last third command addr)
[PWRAP] RECORD_WDATA2:0x0 (Last third command wdata)
[PWRAP] init pass, ret=0.DATE_CODE_YY:0, DATE_CODE_WW:0
[SegCode] Segment Code:0x0, PROJECT_CODE:0x0, FAB_CODE:0x0, RW_STA:0x0, CTL:0x0, DCM:0x4
[PMIC]Preloader Start
[PMIC]AC8257 CHIP Code = 0x5721, mrv=1
[PMIC]POWER_HOLD :0x1
[PMIC]TOP_RST_STATUS[0x152]=0x0
[PMIC]PONSTS[0xC]=0x4
[PMIC]POFFSTS[0xE]=0x0
[PMIC]PGSTATUS0[0x14]=0xFFFE
[PMIC]PSOCSTATUS[0x16]=0x0
[PMIC]BUCK_OC_SDN_STATUS[0x1434]=0x0
[PMIC]BUCK_OC_SDN_EN[0x1444]=0x21F
[PMIC]THERMALSTATUS[0x18]=0x0
[PMIC]STRUP_CON4[0xA1C]=0x0
[PMIC]TOP_RST_MISC[0x14C]=0x200
[PMIC]TOP_CLK_TRIM[0x38E]=0x6CC0
latch VPROC 800000 uV
latch VSRAM_PROC 1068750 uV
latch VSRAM_OTHERS 900000 uV
latch VCORE 800000 uV
latch VMODEM 800000 uV
[pmic_check_rst] PORSTB
[PMIC]just_rst = 0
No EFUSE SW Load
battery exists
[PMIC]disable usbdl wo battery
[PMIC]pmic_wdt_set Reg[0x14C]=0x221
register vs1 OK
register vmodem OK
register vcore OK
register vproc OK
register vpa OK
register vsram_others OK
register vsram_proc OK
register vdram OK
[PMIC]Init done
[PMIC] pmic_init_setting end. v180413
[AC8257] 1 6,61
[AC8257] 1 2,45
[AC8257] 1 1,48
[AC8257] get volt 5, 61, 900000
vsram_others = 900000 uV
[AC8257] get volt 3, 45, 800000
vproc = 800000 uV
[AC8257] get volt 6, 61, 900000
vsram_proc = 900000 uV
[AC8257] get volt 2, 45, 800000
vcore = 800000 uV
[AC8257] get volt 1, 48, 800000
vmodem = 800000 uV
[AC8257] 2 6,1
[AC8257] 2 5,1
[AC8257] 2 3,1
[AC8257] 2 2,1
[AC8257] 2 1,1
[DDR Reserve] ddr reserve mode not be enabled yet
[PMIC]POWER_HOLD :0x1
Enter mtk_kpd_gpio_set! 
mtk detect key function pmic_detect_homekey MTK_PMIC_RST_KEY = 17mtk detect key function pmic_detect_homekey pressed
[dramc] init partition address is 0x0000000000008000
[dramc] init SRAM region for DRAM exception detection
[dramc] LAST_DRAM_FATAL_ERR_FLAG = 0x0
for cold boot, always return 0
[AC8257] 4 2,1
[AC8257] 2 7,0
enable RT5738_VDD2 fail (ret = 0)
[EMI] mcp_dram_num:0,discrete_dram_num:6,enable_combo_dis:1
[MDL]index:0, MR5:1, type:5, vender_id:13
[MDL]index:1, MR5:1, type:5, vender_id:13
[MDL]index:2, MR5:FF, type:5, vender_id:13
[MDL]index:3, MR5:13, type:5, vender_id:13
found:1,i:3
[EMI] MDL number = 3
[AC8257] 1 2,25
Read voltage for 800
Vio18 = 1810000
[AC8257] get volt 2, 25, 675000
Vcore = 675000
Vdram = 0
[AC8257] 1 2,37
Read voltage for 1200
Vio18 = 1810000
[AC8257] get volt 2, 37, 750000
Vcore = 750000
Vdram = 0
[AC8257] 1 2,37
Read voltage for 1200
Vio18 = 1810000
[AC8257] get volt 2, 37, 750000
Vcore = 750000
Vdram = 0
[AC8257] 4 2,0
[AC8257] 1 2,45
[AC8257] get volt 2, 45, 800000
Vcore = 800000
[MEM] 1st complex R/W mem test fail :FFFFFFFF (start addr:0x48000000)
[LastDRAMC] 0x10E40C: 0x19870611
[LastDRAMC] 0x10E410: 0x0
[LastDRAMC] 0x10E414: 0x0
[LastDRAMC] 0x10E418: 0x19870611
[LastDRAMC] 0x10E41C: 0x0
[LastDRAMC] 0x10E420: 0x0
[LastDRAMC] 0x10E424: 0x80000000
[LastDRAMC] 0x10E428: 0x0
[LastDRAMC] 0x10E42C: 0x402AD3B2
[LastDRAMC] 0x10E430: 0x886F36EC
[LastDRAMC] 0x10E434: 0x118578A
[LastDRAMC] 0x10E438: 0x35DE10FC
[LastDRAMC] 0x10E43C: 0x0
[LastDRAMC] 0x10E440: 0x0
[LastDRAMC] 0x10E444: 0x0
[LastDRAMC] 0x10E448: 0x0
[LastDRAMC] 0x10E44C: 0xFB5CFEEA
[LastDRAMC] 0x10E450: 0xB71B0
[LastDRAMC] 0x10E454: 0xA4CB8
[dramc] DRAM_FATAL_ERR_FLAG = 0x80000020
[dramc] fatal dram exception found! reset system..

android 11

Pll init start...
Pll init Done!
[PWRAP] si_en_sel = 0, si_ck_sel = 0, si_sample_ctrl = 0, rdata = 96A9
[PWRAP] si_en_sel = 0, si_ck_sel = 1, si_sample_ctrl = 20, rdata = 5AA5, Pass
[PWRAP] InitSiStrobe (5, 5, DA65) Data Boundary Is Found !!
[PWRAP] SI Strobe Calibration For PMIC 0 Done, (40, 5)
[PWRAP] Read Test pass, return_value=0x0
[PWRAP] Write Test pass
[PWRAP] RECORD_CMD0:  0x0 (Last one command addr)
[PWRAP] RECORD_WDATA0:0x0 (Last one command wdata)
[PWRAP] RECORD_CMD1:  0x0 (Last second command addr)
[PWRAP] RECORD_WDATA1:0x0 (Last second command wdata)
[PWRAP] RECORD_CMD2:  0x0 (Last third command addr)
[PWRAP] RECORD_WDATA2:0x0 (Last third command wdata)
[PWRAP] init pass, ret=0.DATE_CODE_YY:0, DATE_CODE_WW:0
[SegCode] Segment Code:0x0, PROJECT_CODE:0x0, FAB_CODE:0x0, RW_STA:0x0, CTL:0x0, DCM:0x4
[PMIC]Preloader Start
[PMIC]AC8X CHIP Code = 0x5721, mrv=1
[PMIC]POWER_HOLD :0x1
[PMIC]TOP_RST_STATUS[0x152]=0x0
[PMIC]PONSTS[0xC]=0x4
[PMIC]POFFSTS[0xE]=0x0
[PMIC]PGSTATUS0[0x14]=0xFFFE
[PMIC]PSOCSTATUS[0x16]=0x0
[PMIC]BUCK_OC_SDN_STATUS[0x1434]=0x0
[PMIC]BUCK_OC_SDN_EN[0x1444]=0x29F
[PMIC]THERMALSTATUS[0x18]=0x0
[PMIC]STRUP_CON4[0xA1C]=0x0
[PMIC]TOP_RST_MISC[0x14C]=0x200
[PMIC]TOP_CLK_TRIM[0x38E]=0x6CC0
latch VPROC 800000 uV
latch VSRAM_PROC 1068750 uV
latch VSRAM_OTHERS 900000 uV
latch VCORE 800000 uV
latch VMODEM 800000 uV
[pmic_check_rst] PORSTB
[PMIC]just_rst = 0
No EFUSE SW Load
ignore bat check
[PMIC]disable usbdl wo battery
[PMIC]pmic_wdt_set Reg[0x14C]=0x221
register vs1 OK
register vmodem OK
register vcore OK
register vproc OK
register vpa OK
register vsram_others OK
register vsram_proc OK
register vdram OK
[PMIC]Init done
clk_buf_dump_dts_log: PMIC_CLK_BUF?_STATUS=2 1 1 2 0 0 0
clk_buf_dump_dts_log: PMIC_CLK_BUF?_DRV_CURR=1 1 1 1 1 1 1
clk_buf_dump_clkbuf_log DCXO_CW00/02/11/13/14/15/16/20/top_spi_con1=0x6B6D 386A AD00 9829 A2B5 A19A A8AA 11 1
clk_buf_dump_clkbuf_log DCXO_CW00/02/11/13/14/15/16/20/top_spi_con1=0x4F1D 386A 8000 98E9 A2B5 A2AA 9455 11 0
clk_buf_init_pmic_wrap: DCXO_CONN_ADR0/WDATA0/ADR1/WDATA1=0x44A/0/44A/1
clk_buf_init_pmic_wrap: DCXO_NFC_ADR0/WDATA0/ADR1/WDATA1/EN=0x78C/100/78A/100/3
[PMIC] pmic_init_setting end. v180413
[AC8X] 1 6,61
[AC8X] 1 2,45
[AC8X] 1 1,48
[AC8X] get volt 5, 61, 900000
vsram_others = 900000 uV
[AC8X] get volt 3, 45, 800000
vproc = 800000 uV
[AC8X] get volt 6, 61, 900000
vsram_proc = 900000 uV
[AC8X] get volt 2, 45, 800000
vcore = 800000 uV
[AC8X] get volt 1, 48, 800000
vmodem = 800000 uV
[AC8X] 2 6,1
[AC8X] 2 5,1
[AC8X] 2 3,1
[AC8X] 2 2,1
[AC8X] 2 1,1
[DDR Reserve] ddr reserve mode not be enabled yet
Enter mtk_kpd_gpio_set!
after set KP enable: KP_SEL = 0x1C70 !
[PMIC]POWER_HOLD :0x1
pl chr:1 monitor:1 plchr:1 gain:1042
mtk_kpd_gpio_set Already!
mtk detect key function pmic_detect_homekey MTK_PMIC_RST_KEY = 17
I/TC:
I/TC: OP-TEE version: 7f97f9e (gcc version 9.2.1 20191025 (GNU Toolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10))) #1 Wed Jun 25 04:02:38 UTC 2025 aarch64
I/TC: Primary CPU initializing
I/TC: Primary CPU switching to normal world boot
I/TC: Secondary CPU 1 initializing
I/TC: Secondary CPU 1 switching to normal world boot
I/TC: Secondary CPU 2 initializing
I/TC: Secondary CPU 2 switching to normal world boot
I/TC: Secondary CPU 3 initializing
I/TC: Secondary CPU 3 switching to normal world boot
E/TC:2 0 std_smc_entry:169 Unknown SMC 0x32000014
E/TC:2 0 std_smc_entry:169 Unknown SMC 0x32000016
I/TC: RPMB: Using AutoChips customized key
E/TC:? 0 tee_rpmb_verify_key_sync_counter:1031 Verify key returning 0xffff000f
I/TC: Verify uuid derived key failed!, try to use common key
D/TA:  TA_CreateEntryPoint:48 TA_CreateEntryPoint 48
D/TA:  TA_create_secret_key:100 TA_create_secret_key 100
D/TA:  TA_InitializeAuthTokenKey:37 Checking auth_token key secret
D/TA:  TA_InitializeAuthTokenKey:72 auth_token key secret is already created
D/TA:  TA_OpenSessionEntryPoint:90 TA_OpenSessionEntryPoint 90
D/TA:  TA_InvokeCommandEntryPoint:1464 KM_CONFIGURE
D/TA:  TA_configure:153 TA_configure 153
D/TA:  TA_serialize_rsp_err:432 res: 0
D/TA:  TA_CreateEntryPoint:89 eTA: CreateEntryPoint
D/TA:  TA_OpenSessionEntryPoint:118 eTA: OpenSessionEntryPoint
I/TA: eTA: OpenSession Success!
D/TA:  TA_InvokeCommandEntryPoint:156 eTA: InvokeCommand 4
D/TA:  plat_check_approve:124 eTA: plat_check_approve entry
I/TA: eTA: plat check module-AVM-00 result-0x0
D/TA:  atceinfo_handle_approve:288 eTA: Put AVM-00 in 1
D/TA:  TA_InvokeCommandEntryPoint:156 eTA: InvokeCommand 6
I/TA: eTA: Say Goodbye!
D/TA:  TA_DestroyEntryPoint:100 eTA: DestroyEntryPoint
D/TA:  TA_CreateEntryPoint:33 Checking master key secret
D/TA:  TA_CreateEntryPoint:55 Secret is already created

download

CMD

platform/ac8257/src/core/inc/download.h

 48 #define CMD_ZEROIZATION            0xf049 #define CMD_GET_PL_CAP             0xfb50 #define CMD_GET_HW_SW_VER          0xfc51 #define CMD_GET_HW_CODE            0xfd52 #define CMD_GET_BL_VER             0xfe5354 #define CMD_LEGACY_WRITE           0xa155 #define CMD_LEGACY_READ            0xa25657 #define CMD_I2C_INIT               0xB058 #define CMD_I2C_DEINIT             0xB159 #define CMD_I2C_WRITE8             0xB260 #define CMD_I2C_READ8              0xB361 #define CMD_I2C_SET_SPEED          0xB46263 #define CMD_PWR_INIT               0xC464 #define CMD_PWR_DEINIT             0xC565 #define CMD_PWR_READ16             0xC666 #define CMD_PWR_WRITE16            0xC76768 #define CMD_READ16                 0xD069 #define CMD_READ32                 0xD170 #define CMD_WRITE16                0xD271 #define CMD_WRITE16_NO_ECHO        0xD372 #define CMD_WRITE32                0xD473 #define CMD_JUMP_DA                0xD574 #define CMD_JUMP_BL                0xD675 #define CMD_SEND_DA                0xD776 #define CMD_GET_TARGET_CONFIG      0xD877 #define CMD_UART1_LOG_EN           0xDB7879 #define CMD_GET_ME_ID              0xE180 #define CMD_GET_SOC_ID             0xE78182 #if CFG_PRELOADER_AS_DA83 #define CMD_SEND_IMAGE             0x7084 #define CMD_BOOT_IMAGE             0x7185 #endif8687 #define CMD_STAY_STILL            0x80

ac82757发READY,主机发a00a5005 ,ac82757发5ff5affa。获取到BL_VER preloader mode,命令回显brom mode,brom mode会获取ME ID、SOC ID。

CMD
feCMD_GET_BL_VERver
e1CMD_GET_ME_IDlenME IDstatus
fdCMD_GET_HW_CODEhwcodestatus
fcCMD_GET_HW_SW_VERAPHW_SUBCODEAPHW_VERAPSW_VERstatus
d1CMD_READ32addrlenstatusdatastatus
dfBROM log messagelenlogstatus
e7CMD_GET_SOC_IDlenSOC IDstatus
d8CMD_GET_TARGET_CONFIGsecurity configstatus
d7CMD_SEND_DAda_addrda_lensig_lendatachksum16status
d5CMD_JUMP_DAda_addrstatus

DA CMD

CMDcontrol codeCC_debug UART
0x10100SPECIAL_CMD_SETUP_ENVIRONMENT
0x10101SPECIAL_CMD_SETUP_HW_INIT_PARAMS
0x10009CMD_DEVICE_CTRL
0x100090x40011GET_EXPIRE_DATE
0x20004SET_RESET_KEY
0x20002SET_BATTERY_OPTdevc_set_battery_opt
0x20003SET_CHECKSUM_LEVELdevc_set_checksum_level
0x4000aGET_CONNECTION_AGENTdevc_get_connection_agent
0x4000cGET_RAM_INFOdevc_get_ram_info
0x40001GET_EMMC_INFOdevc_get_emmc_info
0x40002GET_NAND_INFO
0x40003GET_NOR_INFO
0x40004GET_UFS_INFOdevc_get_ufs_info
0x4000dGET_CHIP_IDdevc_get_chip_baseband
0xe0003CTRL_READ_REGISTER
0xe0008GET_RAMDOM_ID
0x4000bGET_USB_SPEEDdevc_get_usb_speed
0xe0002CTRL_RAM_TESTdevc_ctrl_ram_test
0x10007CMD_SHUTDOWN

usbdl

1041 void platform_safe_mode(int en, u32 timeout)
1042 {
1043 #if !CFG_FPGA_PLATFORM
1044
1045     U32 usbdlreg = 0;
1046
1047     /* if anything is wrong and caused wdt reset, enter bootrom download mode */
1048     timeout = !timeout ? USBDL_TIMEOUT_MAX : timeout / 1000;
1049     timeout <<= 2;
1050     timeout &= USBDL_TIMEOUT_MASK; /* usbdl timeout cannot exceed max value */
1051
1052     usbdlreg |= timeout;
1053     if (en)
1054         usbdlreg |= USBDL_BIT_EN;
1055     else
1056         usbdlreg &= ~USBDL_BIT_EN;
1057
1058     usbdlreg &= ~USBDL_BROM ;
1059     /*Add magic number for AC8257*/
1060     usbdlreg |= USBDL_MAGIC;
1061
1062     // set BOOT_MISC0 as watchdog resettable
1063     DRV_WriteReg32(MISC_LOCK_KEY,MISC_LOCK_KEY_MAGIC);
1064     DRV_SetReg32(RST_CON,1);
1065     DRV_WriteReg32(MISC_LOCK_KEY,0);
1066
1067     DRV_WriteReg32(USBDL_FLAG,usbdlreg);
1068
1069     return;
1070 #endif
1071
1072 }
1073
1074 #if CFG_EMERGENCY_DL_SUPPORT
1075 void platform_emergency_download(u32 timeout)
1076 {
1077     /* enter download mode */
1078     pal_log_info("%s emergency download mode(timeout: %ds).\n", MOD, timeout / 1000);
1079     platform_safe_mode(1, timeout);
1080
1081 #if !CFG_FPGA_PLATFORM
1082     mtk_arch_reset(0); /* don't bypass power key */
1083 #endif
1084
1085     while(1);
1086 }
1087 #endif

 PAL_ASSERT

platform/pal/inc/pal_assert.hPAL_ASSERTplatform_assert
platform/ac8257/src/drivers/platform.cplatform_assertpal_log_errplatform_error_handlerplatform_emergency_download

DRAM CALIBRATION

调试串口日志

[dramc] PL_VERSION is updated, erase the DRAM shu_data

header

platform/ac8257/src/drivers/inc/emi.h

493 #define DRAM_CALIBRATION_DATA_MAGIC 0x9502
494
495 typedef struct _DRAM_CALIBRATION_HEADER_T
496 {
497     u32 pl_version;
498     u16 magic_number;
499     u32 calib_err_code;
500 } DRAM_CALIBRATION_HEADER_T;
501
502 typedef struct _DRAM_CALIBRATION_MRR_DATA_T
503 {
504     u16 checksum;
505     u16 emi_checksum;
506     DRAM_INFO_BY_MRR_T DramInfo;
507 } DRAM_CALIBRATION_MRR_DATA_T;
508
509 typedef struct _DRAM_CALIBRATION_SHU_DATA_T
510 {
511     u16 checksum;
512     SAVE_TIME_FOR_CALIBRATION_T calibration_data;
513 } DRAM_CALIBRATION_SHU_DATA_T;
514
515 typedef struct _DRAM_CALIBRATION_DATA_T
516 {
517     DRAM_CALIBRATION_HEADER_T header;
518     DRAM_CALIBRATION_MRR_DATA_T mrr_info;
519     DRAM_CALIBRATION_SHU_DATA_T data[DRAM_DFS_SHUFFLE_MAX];
520 } DRAM_CALIBRATION_DATA_T;
521
522
523 /*
524  * g_dram_storage_api_err_code:
525  *  bit[0:3] -> read api
526  *  bit[4:7] -> write api
527  *  bit[8:11] -> clean api
528  *  bit[12:12] -> data formatted due to fatal exception
529  */
530 #define ERR_NULL_POINTER    (0x1)
531 #define ERR_MAGIC_NUMBER    (0x2)
532 #define ERR_CHECKSUM        (0x3)
533 #define ERR_PL_UPDATED      (0x4)
534 #define ERR_BLKDEV_NOT_FOUND    (0x5)
535 #define ERR_BLKDEV_READ_FAIL    (0x6)
536 #define ERR_BLKDEV_WRITE_FAIL   (0x7)
537 #define ERR_BLKDEV_NO_PART  (0x8)

PL_VERSION

platform/ac8257/src/core/inc/pl_version.h

38 #define PL_VERSION    0x02053215

platform/ac8257/src/drivers/inc/dramc_pi_api.h

dram info by mrr 

  56 #define CHANNEL_NUM      2   // 1 single channel, 2 dual channel, 4 4 channel766 typedef enum767 {768     RANK_0= 0,769     RANK_1,770     RANK_MAX771 } DRAM_RANK_T;1251 typedef struct _DRAM_INFO_BY_MRR_T
1252 {
1253     U16 u2MR5VendorID;
1254     U16 u2MR6RevisionID;
1255     U64 u8MR8Density[CHANNEL_NUM][RANK_MAX];
1256 } DRAM_INFO_BY_MRR_T;

save time for calibration

1110 typedef struct _SAVE_TIME_FOR_CALIBRATION_T
1111 {
1112     //U8 femmc_Ready;
1113
1114     // Calibration or not
1115     //U8 Bypass_TXWINDOW;
1116     //U8 Bypass_RXWINDOW;
1117     //U8 Bypass_RDDQC;
1118
1119     // delay cell time
1120     //U8 ucg_num_dlycell_perT_all[DRAM_DFS_SHUFFLE_MAX][CHANNEL_NUM];
1121     //U16 u2gdelay_cell_ps_all[DRAM_DFS_SHUFFLE_MAX][CHANNEL_NUM];
1122     U8 ucnum_dlycell_perT;
1123     U16 u2DelayCellTimex100;
1124
1125     // CLK & DQS duty
1126     S8 s1ClockDuty_clk_delay_cell[CHANNEL_NUM][RANK_MAX];
1127     U8 u1clk_use_rev_bit;
1128     S8 s1DQSDuty_clk_delay_cell[CHANNEL_NUM][DQS_NUMBER_LP4];
1129     U8 u1dqs_use_rev_bit;
1130
1131     // CBT
1132     U8 u1CBTVref_Save[CHANNEL_NUM][RANK_MAX];
1133     U8 u1CBTClkDelay_Save[CHANNEL_NUM][RANK_MAX];
1134     U8 u1CBTCmdDelay_Save[CHANNEL_NUM][RANK_MAX];
1135     U8 u1CBTCsDelay_Save[CHANNEL_NUM][RANK_MAX];
1136     #if CA_PER_BIT_DELAY_CELL
1137     U8 u1CBTCA_PerBit_DelayLine_Save[CHANNEL_NUM][RANK_MAX][DQS_BIT_NUMBER];
1138     #endif
1139
1140     // Write leveling
1141     U8 u1WriteLeveling_bypass_Save[CHANNEL_NUM][RANK_MAX][DQS_NUMBER_LP4];  //for bypass writeleveling
1142
1143     // Gating
1144     U8 u1Gating2T_Save[CHANNEL_NUM][RANK_MAX][DQS_NUMBER_LP4];
1145     U8 u1Gating05T_Save[CHANNEL_NUM][RANK_MAX][DQS_NUMBER_LP4];
1146     U8 u1Gatingfine_tune_Save[CHANNEL_NUM][RANK_MAX][DQS_NUMBER_LP4];
1147     U8 u1Gatingucpass_count_Save[CHANNEL_NUM][RANK_MAX][DQS_NUMBER_LP4];
1148
1149     // TX perbit
1150     U8 u1TxWindowPerbitVref_Save[CHANNEL_NUM][RANK_MAX];
1151     U16 u1TxCenter_min_Save[CHANNEL_NUM][RANK_MAX][DQS_NUMBER_LP4];
1152     U16 u1TxCenter_max_Save[CHANNEL_NUM][RANK_MAX][DQS_NUMBER_LP4];
1153     U16 u1Txwin_center_Save[CHANNEL_NUM][RANK_MAX][DQ_DATA_WIDTH_LP4];
1154     //U16 u1Txfirst_pass_Save[CHANNEL_NUM][RANK_MAX][DQ_DATA_WIDTH_LP4];
1155     //U16 u1Txlast_pass_Save[CHANNEL_NUM][RANK_MAX][DQ_DATA_WIDTH_LP4];
1156     //U8 u1TX_PerBit_DelayLine_Save[CHANNEL_NUM][RANK_MAX][DQ_DATA_WIDTH_LP4];
1157
1158     // Datlat
1159     U8 u1RxDatlat_Save[CHANNEL_NUM][RANK_MAX];
1160
1161     // RX perbit
1162     U8 u1RxWinPerbitVref_Save[CHANNEL_NUM];
1163     U8 u1RxWinPerbit_DQS[CHANNEL_NUM][RANK_MAX][DQS_NUMBER_LP4];
1164     U8 u1RxWinPerbit_DQM[CHANNEL_NUM][RANK_MAX][DQS_NUMBER_LP4];
1165     U8 u1RxWinPerbit_DQ[CHANNEL_NUM][RANK_MAX][DQ_DATA_WIDTH_LP4];
1166     //S16 u1RxWinPerbitDQ_firsbypass_Save[CHANNEL_NUM][RANK_MAX][DQ_DATA_WIDTH_LP4];  //for bypass rxwindow
1167     //U8 u1RxWinPerbitDQ_lastbypass_Save[CHANNEL_NUM][RANK_MAX][DQ_DATA_WIDTH_LP4];  //for bypass rxwindow
1168
1169     //TX OE
1170     U8 u1TX_OE_DQ_MCK[CHANNEL_NUM][RANK_MAX][DQS_NUMBER_LP4];
1171     U8 u1TX_OE_DQ_UI[CHANNEL_NUM][RANK_MAX][DQS_NUMBER_LP4];
1172
1173
1174 #if RUNTIME_SHMOO_RELEATED_FUNCTION
1175     U8 u1SwImpedanceResule[2][4];
1176     U32 u4TXRG_Backup[CHANNEL_NUM][RUNTIME_SHMOO_RG_BACKUP_NUM];
1177
1178     RUNTIME_SHMOO_SAVE_PARAMETER_T Runtime_Shmoo_para;
1179 #endif
1180 } SAVE_TIME_FOR_CALIBRATION_T;

platform/ac8257/src/drivers/emi.c 

read_offline_dram_mdl_data
write_offline_dram_mdl_data
read_offline_dram_calibration_dataInit_DRAMDramcSave_Time_For_Cal_Endwrite_offline_dram_calibration_datamt_mem_initclean_dram_calibration_data

read_offline_dram_mdl_data 

2269     if (hdr.pl_version != PL_VERSION) {
2270         /* current preloader version does not match the calibration hdr in storage -> erase the partition */
2271         dramc_crit("[dramc] PL_VERSION is updated, erase the DRAM shu_data\n");
2272
2273         shu_data.checksum = 0;
2274
2275         /* clear each shuffle */
2276         for (i = 0; i < DRAM_DFS_SHUFFLE_MAX; i++) {
2277             ret = blkdev_write(bootdev, part_dram_data_addr + ((unsigned long) &datap->data[i]), sizeof(shu_data), (u8*)&shu_data, PART_ID_DRAM_DATA     );
2278             if (ret != 0) {
2279                 dramc_crit("[dramc] blkdev_write failed\n");
2280                 dram_offline_data_flags = ERR_BLKDEV_WRITE_FAIL;
2281                 goto exit;
2282             }
2283         }
2284
2285         dram_offline_data_flags = ERR_PL_UPDATED;
2286         goto exit;
2287     }
2288
2289     /* check magic number */
2290     if (hdr.magic_number != DRAM_CALIBRATION_DATA_MAGIC) {
2291         dramc_crit("[dramc] magic number mismatch\n");
2292         dram_offline_data_flags = ERR_MAGIC_NUMBER;
2293         goto exit;
2294     }
2295
2296     ret = blkdev_read(bootdev, part_dram_data_addr + ((unsigned long) &datap->mrr_info), sizeof(mrr_info), (u8*)&mrr_info, PART_ID_DRAM_DATA);
2297     if (ret != 0) {
2298         dramc_crit("[dramc] blkdev_read %s failed\n", "data");
2299         dram_offline_data_flags = ERR_BLKDEV_READ_FAIL;
2300         goto exit;
2301     }
2302
2303     /* check checksum */
2304     if (check_checksum_for_mdl_data(&mrr_info) != 1) {
2305         dramc_crit("[dramc] checksum failed\n");
2306         dram_offline_data_flags = ERR_CHECKSUM;
2307
2308         goto exit;
2309     }
2310
2311     emi_checksum = crc16((u8*)emi_settings, sizeof(emi_settings));
2312
2313     if (emi_checksum != mrr_info.emi_checksum) {
2314         dramc_crit("[dramc] emi checksum failed\n");
2315         dram_offline_data_flags = ERR_CHECKSUM;
2316
2317         goto exit;
2318     }
2319
2320     /* copy the data stored in storage to the data structure for calibration */
2321     memcpy(DramInfo, &(mrr_info.DramInfo), sizeof(*DramInfo));
2322
2323 exit:
2324     if (dram_offline_data_flags)
2325         SET_DRAM_STORAGE_API_ERR(dram_offline_data_flags, DRAM_STORAGE_API_READ);
2326
2327     return 0 - dram_offline_data_flags;
2328 }

config

platform/ac8257/src/drivers/inc/dramc_pi_api.h

 363 // Preloader: using config CFG_DRAM_CALIB_OPTIMIZATION to identify364 #if (FOR_DV_SIMULATION_USED==0)365 // Preloader: using config CFG_DRAM_CALIB_OPTIMIZATION to identify366 #define SUPPORT_SAVE_TIME_FOR_CALIBRATION       CFG_DRAM_CALIB_OPTIMIZATION367 #else368 // DV simulation, use full calibration flow369 #define SUPPORT_SAVE_TIME_FOR_CALIBRATION       0370 #endif

platform/ac8257/default.mak

 19 # DRAM Calibration Optimization:20 # DRAM calib data will be stored to storage device to enhance DRAM init speed.21 CFG_DRAM_CALIB_OPTIMIZATION :=1

 ddr_info

# cat /proc/ddr_info
ddr_info:     0x213
DRAM density: 2048 MB
vendor ID:    0x13

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/91608.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/91608.shtml
英文地址,请注明出处:http://en.pswp.cn/web/91608.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux基础(三)——Bash基础

1、Bash基础1.1 Bash简介从前边操作系统的组成介绍中&#xff0c;我们可以知道操作系统为上层用户提供的与内核进行交互的接口称为shell&#xff0c;其在系统中的位置如下图所示&#xff0c;shell作为内核和用户之间的中介&#xff0c;接收用户发送的指令&#xff0c;将其解析为…

Python 元编程实战:动态属性与数据结构转换技巧

在处理复杂嵌套的 JSON 数据源时&#xff0c;我们常面临访问不便、结构不灵活、字段关联性差等问题。本文将以 O’Reilly 为 OSCON 2014 提供的 JSON 数据源为例&#xff0c;系统讲解如何通过 动态属性转换、对象封装、数据库映射与特性&#xff08;property&#xff09;机制&a…

Android-侧边导航栏的使用

在学习之前&#xff0c;我们先得知道侧边导航栏是什么&#xff1f;它是一个 可以让内容从屏幕边缘滑出的布局容器&#xff0c;由安卓官方提供&#xff0c;用于创建侧边菜单&#xff0c;通常搭配 NavigationView 使用&#xff1b;添加依赖&#xff1a;在app下的build.gradle中添…

lesson30:Python迭代三剑客:可迭代对象、迭代器与生成器深度解析

目录 一、可迭代对象&#xff1a;迭代的起点 可迭代对象的本质特征 可迭代对象的工作原理 自定义可迭代对象 二、迭代器&#xff1a;状态化的迭代工具 迭代器协议与核心方法 迭代器的状态管理 内置迭代器的应用 三、生成器&#xff1a;简洁高效的迭代器 生成器函数&a…

实时语音流分段识别技术解析:基于WebRTC VAD的智能分割策略

引言 在现代语音识别应用中&#xff0c;实时处理音频流是一项关键技术挑战。不同于传统的文件式语音识别&#xff0c;流式处理需要面对音频数据的不确定性、网络延迟以及实时性要求等问题。本文将深入解析一个基于WebRTC VAD&#xff08;Voice Activity Detection&#xff09;…

word中rtf格式介绍

RTF&#xff08;Rich Text Format&#xff0c;富文本格式&#xff09;是一种由微软开发的跨平台文档文件格式&#xff0c;用于在不同应用程序和操作系统之间交换格式化文本。以下是对RTF格式的简要说明&#xff1a; RTF格式特点 跨平台兼容性&#xff1a;RTF文件可以在多种文字…

Springboot 配置 doris 连接

Springboot 配置 doris 连接 一. 使用 druid 连接池 因为 Doris 的前端&#xff08;FE&#xff09;兼容了 MySQL 协议&#xff0c;可以像连 MySQL 一样连 Doris。这是 Doris 的一个核心设计特性&#xff0c;目的是方便接入、简化生态兼容。 首先需要引入 pom 依赖:<dependen…

Linux 系统启动与 GRUB2 核心操作指南

Linux 系统启动与 GRUB2 核心操作指南 Linux 系统的启动过程是一个环环相扣的链条&#xff0c;从硬件自检到用户登录&#xff0c;每一步都依赖关键组件的协作。其中&#xff0c;GRUB2 引导器和systemd 进程是核心枢纽&#xff0c;而运行级别则决定了系统的启动状态。以下是系统…

供应链分销代发源码:一站式打通供应商供货、平台定价、经销商批发及零售环节

在当前复杂的市场环境中&#xff0c;供应链管理成为企业发展的关键。尤其对于电商平台来说&#xff0c;高效、精准的供应链管理不仅能提升运营效率&#xff0c;还能增强市场竞争力。为了应对日益复杂的供应链挑战&#xff0c;核货宝供应链分销代发系统应运而生&#xff0c;旨在…

机器学习、深度学习与数据挖掘:核心技术差异、应用场景与工程实践指南

技术原理与核心概念数据挖掘作为知识发现的关键技术&#xff0c;其核心在于通过算法自动探索数据中的潜在模式。关联规则挖掘可以发现项目之间的有趣关联&#xff0c;如经典的"啤酒与尿布"案例&#xff1b;聚类分析能够将相似对象自动分组&#xff0c;常用于客户细分…

《C++初阶之STL》【stack/queue/priority_queue容器适配器:详解 + 实现】(附加:deque容器介绍)

【stack/queue/priority_queue容器适配器&#xff1a;详解 实现】目录前言&#xff1a;------------标准接口介绍------------一、栈&#xff1a;stack标准模板库中的stack容器适配器是什么样的呢&#xff1f;1. 栈的基本操作std::stack::topstd::stack::pushstd::stack::pop2…

Thymeleaf 模板引擎原理

Thymeleaf 的模板文件&#xff0c;本质上是标准的 HTML 文件&#xff0c;只是“加了标记&#xff08; th&#xff1a;&#xff09;的属性”&#xff0c;让模板引擎在服务端渲染时能 识别并处理 这些属性&#xff0c;从而完成数据&#xff08;model&#xff09; 的填充。<!DO…

5、生产Redis高并发分布式锁实战

一、核心问题与解决方案 问题本质 #mermaid-svg-W1SnVWZe1AotTtDy {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-W1SnVWZe1AotTtDy .error-icon{fill:#552222;}#mermaid-svg-W1SnVWZe1AotTtDy .error-text{fill:#5…

CS231n-2017 Lecture8深度学习框架笔记

深度学习硬件&#xff1a;CPU:CPU有数个核心&#xff0c;每个核心可以独立工作&#xff0c;同时进行多个线程&#xff0c;内存与系统共享GPU&#xff1a;GPU有上千个核心&#xff0c;但每个核心运行速度很慢&#xff0c;适合并行做类似的工作&#xff0c;不能独立工作&#xff…

以ros的docker镜像为例,探讨docker镜像的使用

标题以ros的docker镜像为例&#xff0c;探讨docker镜像的使用&#xff08;待完善&#xff09; 1. docker介绍&#xff08;以ros工程距离&#xff09; &#xff08;1&#xff09;个人理解&#xff1a;docker就是一个容器&#xff0c;主要的作用就是将环境打包好&#xff0c;方…

Android Audio实战——TimeCheck机制解析(十三)

上一篇文章我们虽然通过 tombstoned Log 推断出 audioserver 崩溃的原因就是系统调用内核接口时发生阻塞,导致 TimeCheck 检测超时异常而崩溃,但并没有实质性的证据证明是 kernel 层出现问题导致的崩溃,因此这里我们继续看一下 TimeCheck 的检测原理。 一、TimeCheck机制 T…

飞机大战小游戏

1.视觉设计&#xff1a;采用柔和的蓝紫色渐变背景&#xff0c;营造梦幻感飞机、敌机和子弹使用柔和的糖果色调添加了粒子爆炸效果&#xff0c;增强视觉反馈星星收集物增加游戏趣味性2.游戏机制&#xff1a;玩家使用左右方向键控制飞机移动空格键发射子弹P键暂停游戏击落敌机获得…

Linux 启动服务脚本

1. 创建命令文件# 创建可执行文件 touch 文件名称 例&#xff1a; touch stopServer.sh2. 命令文件授权# 授权文件可执行权限 chmod 777 文件名称 例&#xff1a; chmod 777 stopServer.sh3. 停止服务命令编写#!/bin/bash# 获取进程号 pidps -ef | grep -- /mnt/apache-tomcat-…

【华为机试】34. 在排序数组中查找元素的第一个和最后一个位置

文章目录34. 在排序数组中查找元素的第一个和最后一个位置描述示例 1&#xff1a;示例 2&#xff1a;示例 3&#xff1a;提示&#xff1a;解题思路算法分析问题本质分析双重二分查找详解左边界查找过程右边界查找过程算法流程图边界情况分析各种解法对比二分查找变种详解时间复…

【网络编程】WebSocket 实现简易Web多人聊天室

一、实现思路 Web端就是使用html JavaScript来实现页面&#xff0c;通过WebSocket长连接和服务器保持通讯&#xff0c;协议的payload使用JSON格式封装 服务端使用C配合第三方库WebSocket和nlonlohmann库来实现 二、Web端 2.1 界面显示 首先&#xff0c;使用html来设计一个…