From 6f34a9d109a48e5bc1c36f097e3ea2171f68a513 Mon Sep 17 00:00:00 2001 From: Zhihuan He Date: Mon, 25 Jul 2022 16:32:14 +0800 Subject: [PATCH] tool: ddrbin_tool: update to v1.12 20221031 build from: ddbee40 updata to version v1.12 20221031 update feature: ddbee40 updata to version v1.12 20221031 7e21690 updata to version v1.12 20221027 0ff7f43 tool: add pstore, boot_fsp etc info ce4ec38 updata to version v1.11 20220729 27ae957 tool: rename res_space_remap to res_space_remap_partion 5f4e2f3 updata to version v1.11 20220725 c6bf61f tool: add support extended temperature refresh, auto precharge etc. 13464e2 tools: add sdram.h Signed-off-by: Zhihuan He Change-Id: Ie93bc49d1f0c2550495861ba333e3cbca115e2bd --- tools/ddrbin_param.txt | 22 ++- tools/ddrbin_tool | Bin 73398 -> 74070 bytes tools/ddrbin_tool_user_guide.txt | 232 +++++++++++++++++++++---------- 3 files changed, 179 insertions(+), 75 deletions(-) diff --git a/tools/ddrbin_param.txt b/tools/ddrbin_param.txt index 04c275c7..eb6b0313 100644 --- a/tools/ddrbin_param.txt +++ b/tools/ddrbin_param.txt @@ -21,12 +21,20 @@ channel mask= stride type= standby_idle= +ext_temp_ref_en= +link_ecc_en= +per_bank_ref_en= +derate_en= +auto_precharge_en= + +res_space_remap_all= +res_space_remap_portion= + rd_vref_scan_en= wr_vref_scan_en= eye_2d_scan_en= -res_space_remap= -dis_printf_training= +dis_train_print= ssmod_downspread= ssmod_div= @@ -34,6 +42,16 @@ ssmod_spread= ddr_2t= +pstore_base_addr= +pstore_buf_size= +uboot_log_en= +atf_log_en= +optee_log_en= +spl_log_en= +tpl_log_en= + +boot_fsp= + ddr2_f1_freq_mhz= ddr2_f2_freq_mhz= ddr2_f3_freq_mhz= diff --git a/tools/ddrbin_tool b/tools/ddrbin_tool index cd0d0b54dfe80d6384ed4257997e763703033341..6e8474fe5c322014f2fad4e331b567c4979c7fa7 100755 GIT binary patch delta 22855 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 delta 21849 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 dTRg`BoEm!cBD^1#3vKhw%c~XDo|2+*|@3SWA3A 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