xref: /rkbin/tools/ddrbin_tool.py (revision 4026ce53e355a8b3c88601a02058f56b529bda10)
155a95caaSYouMin Chen#!/usr/bin/env python3
255a95caaSYouMin Chen# -*-coding=utf-8-*-
355a95caaSYouMin Chen#
455a95caaSYouMin Chen# Copyright (C) 2024, Rockchip Electronics Co., Ltd.
555a95caaSYouMin Chen#
655a95caaSYouMin Chen
755a95caaSYouMin Chenimport os
855a95caaSYouMin Chenimport re
955a95caaSYouMin Chenimport sys
1055a95caaSYouMin Chenimport copy
1155a95caaSYouMin Chenimport getopt
1255a95caaSYouMin Chenimport platform
1355a95caaSYouMin Chenimport struct
1455a95caaSYouMin Chenfrom datetime import datetime
1555a95caaSYouMin Chen
16*4026ce53SZhihuan Heversion_max = 6
1755a95caaSYouMin Chenupdate_key_list = []
1855a95caaSYouMin Chen
1955a95caaSYouMin Chenchip_info = 'null'
2055a95caaSYouMin Chenchip_list = ['px30', 'px30s', 'px3se', 'px5', 'rk1808', 'rk2118', 'rk312x', 'rk3126', 'rk3128',
2155a95caaSYouMin Chen    'rk3128h', 'rk322x', 'rk3228a', 'rk3228b', 'rk3228h', 'rk322xh', 'rk3229', 'rk3308', 'rk3288',
2255a95caaSYouMin Chen    'rk3326', 'rk3326s', 'rk3328', 'rk3368', 'rk3399', 'rk3506', 'rk3528', 'rk356x', 'rk3562',
2355a95caaSYouMin Chen    'rk3566', 'rk3568', 'rk3576', 'rk3588', 'rv1103', 'rv1103b', 'rv1106', 'rv1108', 'rv1109',
2455a95caaSYouMin Chen    'rv1126']
2555a95caaSYouMin Chen
2655a95caaSYouMin Chenversion_old_list = ['rk322xh', 'rk3328', 'rk3318']
2755a95caaSYouMin Chen
2855a95caaSYouMin Chen# struct rk3528_ca_skew
2955a95caaSYouMin Chenrk3528_ca_skew = {
3055a95caaSYouMin Chen    'skew_freq': 0,
3155a95caaSYouMin Chen    'ca_skew_0': 0,
3255a95caaSYouMin Chen    'ca_skew_1': 0,
3355a95caaSYouMin Chen    'ca_skew_2': 0,
3455a95caaSYouMin Chen    'ca_skew_3': 0,
3555a95caaSYouMin Chen    'ca_skew_4': 0,
3655a95caaSYouMin Chen    'ca_skew_5': 0,
3755a95caaSYouMin Chen    'ca_skew_6': 0,
3855a95caaSYouMin Chen    'ca_skew_7': 0,
3955a95caaSYouMin Chen}
4055a95caaSYouMin Chen
4155a95caaSYouMin Chen# struct rk3528_skew_info
4255a95caaSYouMin Chenrk3528_skew_info = {
4355a95caaSYouMin Chen    'skew_sub_version': 0,
4455a95caaSYouMin Chen    'ddr3' : rk3528_ca_skew.copy(),
4555a95caaSYouMin Chen    'ddr4' : rk3528_ca_skew.copy(),
4655a95caaSYouMin Chen    'lp3' : rk3528_ca_skew.copy(),
4755a95caaSYouMin Chen}
4855a95caaSYouMin Chen
4955a95caaSYouMin Chen# struct index_info, u8
5055a95caaSYouMin Chenindex_info = {
5155a95caaSYouMin Chen    'offset' : 0,
5255a95caaSYouMin Chen    'size' : 0
5355a95caaSYouMin Chen}
5455a95caaSYouMin Chen
55*4026ce53SZhihuan He# struct perf_index_info, u16
56*4026ce53SZhihuan Heperf_index_info = {
57*4026ce53SZhihuan He    'offset' : 0,
58*4026ce53SZhihuan He    'size' : 0
59*4026ce53SZhihuan He}
60*4026ce53SZhihuan He
6155a95caaSYouMin Chen# struct sdram_head_info_index_v2
6255a95caaSYouMin Chensdram_head_info_index_v2 = {
6355a95caaSYouMin Chen    'cpu_gen_index' : index_info.copy(),
6455a95caaSYouMin Chen    'global_index' : index_info.copy(),
6555a95caaSYouMin Chen    'ddr2_index' : index_info.copy(),
6655a95caaSYouMin Chen    'ddr3_index' : index_info.copy(),
6755a95caaSYouMin Chen    'ddr4_index' : index_info.copy(),
6855a95caaSYouMin Chen    'ddr5_index' : index_info.copy(),
6955a95caaSYouMin Chen    'lp2_index' : index_info.copy(),
7055a95caaSYouMin Chen    'lp3_index' : index_info.copy(),
7155a95caaSYouMin Chen    'lp4_index' : index_info.copy(),
7255a95caaSYouMin Chen    'lp5_index' : index_info.copy(),
7355a95caaSYouMin Chen    'skew_index' : index_info.copy(),
7455a95caaSYouMin Chen    'dq_map_index' : index_info.copy(),
7555a95caaSYouMin Chen}
7655a95caaSYouMin Chen
7755a95caaSYouMin Chensdram_head_info_index_v2_3 = {
7855a95caaSYouMin Chen    'lp4x_index' : index_info.copy(),
7955a95caaSYouMin Chen    'lp4_4x_hash_index' : index_info.copy()
8055a95caaSYouMin Chen}
8155a95caaSYouMin Chen
8255a95caaSYouMin Chensdram_head_info_index_v3_4 = {
8355a95caaSYouMin Chen    'lp5_hash_index' : index_info.copy(),
8455a95caaSYouMin Chen    'ddr4_hash_index' : index_info.copy(),
8555a95caaSYouMin Chen    'lp3_hash_index' : index_info.copy(),
8655a95caaSYouMin Chen    'ddr3_hash_index' : index_info.copy(),
8755a95caaSYouMin Chen    'lp2_hash_index' : index_info.copy(),
8855a95caaSYouMin Chen    'ddr2_hash_index' : index_info.copy(),
8955a95caaSYouMin Chen    'ddr5_hash_index' : index_info.copy(),
90*4026ce53SZhihuan He    'reserved0_index' : index_info.copy(),
91*4026ce53SZhihuan He}
92*4026ce53SZhihuan He
93*4026ce53SZhihuan Hesdram_head_info_index_v5 = {
94*4026ce53SZhihuan He    'ch_perf_index_u16' : perf_index_info.copy(),
95*4026ce53SZhihuan He    'com_perf_index_u16' : perf_index_info.copy(),
96*4026ce53SZhihuan He}
97*4026ce53SZhihuan He
98*4026ce53SZhihuan Hesdram_head_info_index_v6 = {
99*4026ce53SZhihuan He    'uart_iomux_index_u16' : perf_index_info.copy(),
10055a95caaSYouMin Chen}
10155a95caaSYouMin Chen
10255a95caaSYouMin Chen# struct global_info
10355a95caaSYouMin Chenglobal_info = {
10455a95caaSYouMin Chen    'uart_info' : 0,
10555a95caaSYouMin Chen    'sr_pd_info' : 0,
10655a95caaSYouMin Chen    'ch_info' : 0,
10755a95caaSYouMin Chen    'info_2t' : 0,
10855a95caaSYouMin Chen    'reserved_0' : 0,
10955a95caaSYouMin Chen    'reserved_1' : 0,
11055a95caaSYouMin Chen    'reserved_2' : 0,
11155a95caaSYouMin Chen    'reserved_3' : 0,
11255a95caaSYouMin Chen}
11355a95caaSYouMin Chen
11455a95caaSYouMin Chen# struct ddr2_3_4_lp2_3_info
11555a95caaSYouMin Chenddr2_3_4_lp2_3_info = {
11655a95caaSYouMin Chen    'ddr_freq0_1' : 0,
11755a95caaSYouMin Chen    'ddr_freq2_3' : 0,
11855a95caaSYouMin Chen    'ddr_freq4_5' : 0,
11955a95caaSYouMin Chen    'drv_when_odten' : 0,
12055a95caaSYouMin Chen    'drv_when_odtoff' : 0,
12155a95caaSYouMin Chen    'odt_info' : 0,
12255a95caaSYouMin Chen    'odten_freq' : 0,
12355a95caaSYouMin Chen    'sr_when_odten' : 0,
12455a95caaSYouMin Chen    'sr_when_odtoff' : 0,
12555a95caaSYouMin Chen}
12655a95caaSYouMin Chen
12755a95caaSYouMin Chen# struct ddr2_3_4_lp2_3_info_v5
12855a95caaSYouMin Chenddr2_3_4_lp2_3_info_v5 = {
12955a95caaSYouMin Chen    'ddr_freq0_1' : 0,
13055a95caaSYouMin Chen    'ddr_freq2_3' : 0,
13155a95caaSYouMin Chen    'ddr_freq4_5' : 0,
13255a95caaSYouMin Chen    'drv_when_odten' : 0,
13355a95caaSYouMin Chen    'drv_when_odtoff' : 0,
13455a95caaSYouMin Chen    'odt_info' : 0,
13555a95caaSYouMin Chen    'odten_freq' : 0,
13655a95caaSYouMin Chen    'sr_when_odten' : 0,
13755a95caaSYouMin Chen    'sr_when_odtoff' : 0,
13855a95caaSYouMin Chen    'vref_when_odten' : 0,
13955a95caaSYouMin Chen    'vref_when_odtoff' : 0,
14055a95caaSYouMin Chen}
14155a95caaSYouMin Chen
14255a95caaSYouMin Chen# struct lp4_info
14355a95caaSYouMin Chenlp4_info = {
14455a95caaSYouMin Chen    'ddr_freq0_1' : 0,
14555a95caaSYouMin Chen    'ddr_freq2_3' : 0,
14655a95caaSYouMin Chen    'ddr_freq4_5' : 0,
14755a95caaSYouMin Chen    'drv_when_odten' : 0,
14855a95caaSYouMin Chen    'drv_when_odtoff' : 0,
14955a95caaSYouMin Chen    'odt_info' : 0,
15055a95caaSYouMin Chen    'dq_odten_freq' : 0,
15155a95caaSYouMin Chen    'sr_when_odten' : 0,
15255a95caaSYouMin Chen    'sr_when_odtoff' : 0,
15355a95caaSYouMin Chen    'ca_odten_freq' : 0,
15455a95caaSYouMin Chen    'cs_drv_ca_odt_info' : 0,
15555a95caaSYouMin Chen    'vref_when_odten' : 0,
15655a95caaSYouMin Chen    'vref_when_odtoff' : 0,
15755a95caaSYouMin Chen}
15855a95caaSYouMin Chen
15955a95caaSYouMin Chen# struct dq_map_info
16055a95caaSYouMin Chendq_map_info = {
16155a95caaSYouMin Chen    'byte_map_0' : 0,
16255a95caaSYouMin Chen    'byte_map_1' : 0,
16355a95caaSYouMin Chen    'lp3_dq0_7_map' : 0,
16455a95caaSYouMin Chen    'lp2_dq0_7_map' : 0,
16555a95caaSYouMin Chen    'ddr4_dq_map_0' : 0,
16655a95caaSYouMin Chen    'ddr4_dq_map_1' : 0,
16755a95caaSYouMin Chen    'ddr4_dq_map_2' : 0,
16855a95caaSYouMin Chen    'ddr4_dq_map_3' : 0,
16955a95caaSYouMin Chen}
17055a95caaSYouMin Chen
17155a95caaSYouMin Chen# struct hash_info
17255a95caaSYouMin Chenhash_info = {
17355a95caaSYouMin Chen    'ch_mask_0' : 0,
17455a95caaSYouMin Chen    'ch_mask_1' : 0,
17555a95caaSYouMin Chen    'bank_mask_0' : 0,
17655a95caaSYouMin Chen    'bank_mask_1' : 0,
17755a95caaSYouMin Chen    'bank_mask_2' : 0,
17855a95caaSYouMin Chen    'bank_mask_3' : 0,
17955a95caaSYouMin Chen    'rank_mask0' : 0,
18055a95caaSYouMin Chen    'rank_mask1' : 0,
18155a95caaSYouMin Chen}
18255a95caaSYouMin Chen
183*4026ce53SZhihuan Heuart_id_2_iomux = {
184*4026ce53SZhihuan He                # uart0 :    m0 :   addr,   iomux addr0, iomux mask0, iomux val0, iomux addr1, iomux mask1, iomux val1...
185*4026ce53SZhihuan He    ('rk3568', 'rk3566', 'rk356x') : {
186*4026ce53SZhihuan He                'uart0' : {'m0' : [0xfdd50000, 0xfdc20100, 0, 0x3000000, 0xfdc20010, 0, 0x770033, 0, 0, 0]},
187*4026ce53SZhihuan He                'uart1' : {'m0' : [0xfe650000, 0xfdc6030c, 0, 0x1000000, 0xfdc60028, 0, 0x70002000, 0xfdc6002c, 0, 0x70002],
188*4026ce53SZhihuan He                           'm1' : [0xfe650000, 0xfdc6030c, 0, 0x1000100, 0xfdc6005c, 0, 0x77004400, 0, 0, 0]},
189*4026ce53SZhihuan He                'uart2' : {'m0' : [0xfe660000, 0xfdc6030c, 0, 0x0c000000, 0xfdc20018, 0, 0x00770011, 0, 0, 0],
190*4026ce53SZhihuan He                           'm1' : [0xfe660000, 0xfdc6030c, 0, 0xc000400, 0xfdc6001c, 0, 0x7700220, 0, 0, 0]},
191*4026ce53SZhihuan He                'uart3' : {'m0' : [0xfe670000, 0xfdc6030c, 0, 0x10000000, 0xfdc60000, 0, 0x770022, 0, 0, 0],
192*4026ce53SZhihuan He                           'm1' : [0xfe670000, 0xfdc6030c, 0, 0x10001000, 0xfdc6004c, 0, 0x70004000, 0xfdc60050, 0, 0x70004]},
193*4026ce53SZhihuan He                'uart4' : {'m0' : [0xfe680000, 0xfdc6030c, 0, 0x40000000, 0xfdc60004, 0, 0x7070202, 0, 0, 0],
194*4026ce53SZhihuan He                           'm1' : [0xfe680000, 0xfdc6030c, 0, 0x40004000, 0xfdc60048, 0, 0x7700440, 0, 0, 0]},
195*4026ce53SZhihuan He                'uart5' : {'m0' : [0xfe690000, 0xfdc60310, 0, 0x10000, 0xfdc60020, 0, 0x7700330, 0, 0, 0],
196*4026ce53SZhihuan He                           'm1' : [0xfe690000, 0xfdc60310, 0, 0x10001, 0xfdc60050, 0, 0x77004400, 0, 0, 0]},
197*4026ce53SZhihuan He                'uart6' : {'m0' : [0xfe6a0000, 0xfdc60310, 0, 0x40000, 0xfdc60020, 0, 0x70003000, 0xfdc60024, 0, 0x70003],
198*4026ce53SZhihuan He                           'm1' : [0xfe6a0000, 0xfdc60310, 0, 0x40004, 0xfdc6001c, 0, 0x7700330, 0, 0, 0]},
199*4026ce53SZhihuan He                'uart7' : {'m0' : [0xfe6b0000, 0xfdc60310, 0, 0x300000, 0xfdc60024, 0, 0x7700330, 0, 0, 0],
200*4026ce53SZhihuan He                           'm1' : [0xfe6b0000, 0xfdc60310, 0, 0x300010, 0xfdc60054, 0, 0x770044, 0, 0, 0],
201*4026ce53SZhihuan He                           'm2' : [0xfe6b0000, 0xfdc60310, 0, 0x300020, 0xfdc60060, 0, 0x77004400, 0, 0, 0]},
202*4026ce53SZhihuan He                'uart8' : {'m0' : [0xfe6c0000, 0xfdc60310, 0, 0x400000, 0xfdc60034, 0, 0x7700230, 0, 0, 0],
203*4026ce53SZhihuan He                           'm1' : [0xfe6c0000, 0xfdc60310, 0, 0x400040, 0xfdc6003c, 0, 0x70074004, 0, 0, 0]},
204*4026ce53SZhihuan He                'uart9' : {'m0' : [0xfe6d0000, 0xfdc60310, 0, 0x3000000, 0xfdc60024, 0, 0x70003000, 0xfdc60028, 0, 0x70003],
205*4026ce53SZhihuan He                           'm1' : [0xfe6d0000, 0xfdc60310, 0, 0x3000100, 0xfdc60074, 0, 0x7700440, 0, 0, 0],
206*4026ce53SZhihuan He                           'm2' : [0xfe6d0000, 0xfdc60310, 0, 0x3000200, 0xfdc60064, 0, 0x770044, 0, 0, 0]},
207*4026ce53SZhihuan He                },
208*4026ce53SZhihuan He    ('rk3528') : {
209*4026ce53SZhihuan He                'uart0' : {'m0' : [0xff9f0000, 0xff550094, 0, 0xf0001000, 0xff550098, 0, 0xf0001, 0, 0, 0],
210*4026ce53SZhihuan He                           'm1' : [0xff9f0000, 0xff570040, 0, 0xf0002, 0xff570040, 0, 0xf00020, 0, 0, 0]},
211*4026ce53SZhihuan He                'uart1' : {'m0' : [0xff9f8000, 0xff560084, 0, 0xf0002000, 0xff560084, 0, 0xf000200, 0, 0, 0],
212*4026ce53SZhihuan He                           'm1' : [0xff9f8000, 0xff550094, 0, 0xf000200, 0xff550094, 0, 0xf00020, 0, 0, 0]},
213*4026ce53SZhihuan He                'uart2' : {'m0' : [0xffa00000, 0xff560060, 0, 0xf0001, 0xff560060, 0, 0xf00010, 0, 0, 0],
214*4026ce53SZhihuan He                           'm1' : [0xffa00000, 0xff560028, 0, 0xf0001, 0xff560028, 0, 0xf00010, 0, 0, 0]},
215*4026ce53SZhihuan He                'uart3' : {'m0' : [0xffa08000, 0xff550088, 0, 0xf0002, 0xff550088, 0, 0xf00020, 0, 0, 0],
216*4026ce53SZhihuan He                           'm1' : [0xffa08000, 0xff55008c, 0, 0xf0003000, 0xff550090, 0, 0xf0003, 0, 0, 0]},
217*4026ce53SZhihuan He                'uart4' : {'m0' : [0xffa10000, 0xff570040, 0, 0xf000300, 0xff570040, 0, 0xf0003000, 0, 0, 0]},
218*4026ce53SZhihuan He                'uart5' : {'m0' : [0xffa18000, 0xff560020, 0, 0xf000200, 0xff560020, 0, 0xf0002000, 0, 0, 0],
219*4026ce53SZhihuan He                           'm1' : [0xffa18000, 0xff56003c, 0, 0xf0002, 0xff56003c, 0, 0xf0002000, 0, 0, 0]},
220*4026ce53SZhihuan He                'uart6' : {'m0' : [0xffa20000, 0xff560064, 0, 0xf0004000, 0xff560064, 0, 0xf000400, 0, 0, 0],
221*4026ce53SZhihuan He                           'm1' : [0xffa20000, 0xff560070, 0, 0xf0004000, 0xff560070, 0, 0xf00040, 0, 0, 0]},
222*4026ce53SZhihuan He                'uart7' : {'m0' : [0xffa28000, 0xff560068, 0, 0xf0004000, 0xff560068, 0, 0xf000400, 0, 0, 0],
223*4026ce53SZhihuan He                           'm1' : [0xffa28000, 0xff560028, 0, 0xf0004000, 0xff560028, 0, 0xf000400, 0, 0, 0]},
224*4026ce53SZhihuan He
225*4026ce53SZhihuan He    },
226*4026ce53SZhihuan He}
227*4026ce53SZhihuan He
228*4026ce53SZhihuan Heuart_iomux_info = {
229*4026ce53SZhihuan He    'uart_addr' : 0,
230*4026ce53SZhihuan He}
231*4026ce53SZhihuan He
23255a95caaSYouMin Chen# struct sdram_head_info_v2
23355a95caaSYouMin Chensdram_head_info_v2 = {
23455a95caaSYouMin Chen    'global_info' : global_info.copy(),
23555a95caaSYouMin Chen    'ddr2_info' : ddr2_3_4_lp2_3_info.copy(),
23655a95caaSYouMin Chen    'ddr3_info' : ddr2_3_4_lp2_3_info.copy(),
23755a95caaSYouMin Chen    'ddr4_info' : ddr2_3_4_lp2_3_info.copy(),
23855a95caaSYouMin Chen    'ddr5_info' : ddr2_3_4_lp2_3_info.copy(),
23955a95caaSYouMin Chen    'lp2_info' : ddr2_3_4_lp2_3_info.copy(),
24055a95caaSYouMin Chen    'lp3_info' : ddr2_3_4_lp2_3_info.copy(),
24155a95caaSYouMin Chen    'lp4_info' : lp4_info.copy(),
24255a95caaSYouMin Chen    'dq_map_info' : dq_map_info.copy(),
24355a95caaSYouMin Chen    'lp4x_info' : lp4_info.copy(),
24455a95caaSYouMin Chen    'lp5_info' : lp4_info.copy(),
24555a95caaSYouMin Chen    'lp4_4x_hash_info' : hash_info.copy(),
24655a95caaSYouMin Chen    'lp5_hash_info' : hash_info.copy(),
24755a95caaSYouMin Chen    'ddr4_hash_info' : hash_info.copy(),
24855a95caaSYouMin Chen    'lp3_hash_info' : hash_info.copy(),
24955a95caaSYouMin Chen    'ddr3_hash_info' : hash_info.copy(),
25055a95caaSYouMin Chen    'lp2_hash_info' : hash_info.copy(),
25155a95caaSYouMin Chen    'ddr2_hash_info' : hash_info.copy(),
25255a95caaSYouMin Chen    'ddr5_hash_info' : hash_info.copy(),
25355a95caaSYouMin Chen}
25455a95caaSYouMin Chen
25555a95caaSYouMin Chen# struct sdram_head_info_v5
25655a95caaSYouMin Chensdram_head_info_v5 = {
25755a95caaSYouMin Chen    'global_info' : global_info.copy(),
25855a95caaSYouMin Chen    'ddr2_info' : ddr2_3_4_lp2_3_info_v5.copy(),
25955a95caaSYouMin Chen    'ddr3_info' : ddr2_3_4_lp2_3_info_v5.copy(),
26055a95caaSYouMin Chen    'ddr4_info' : ddr2_3_4_lp2_3_info_v5.copy(),
26155a95caaSYouMin Chen    'ddr5_info' : ddr2_3_4_lp2_3_info_v5.copy(),
26255a95caaSYouMin Chen    'lp2_info' : ddr2_3_4_lp2_3_info_v5.copy(),
26355a95caaSYouMin Chen    'lp3_info' : ddr2_3_4_lp2_3_info_v5.copy(),
26455a95caaSYouMin Chen    'lp4_info' : lp4_info.copy(),
26555a95caaSYouMin Chen    'dq_map_info' : dq_map_info.copy(),
26655a95caaSYouMin Chen    'lp4x_info' : lp4_info.copy(),
26755a95caaSYouMin Chen    'lp5_info' : lp4_info.copy(),
26855a95caaSYouMin Chen    'lp4_4x_hash_info' : hash_info.copy(),
26955a95caaSYouMin Chen    'lp5_hash_info' : hash_info.copy(),
27055a95caaSYouMin Chen    'ddr4_hash_info' : hash_info.copy(),
27155a95caaSYouMin Chen    'lp3_hash_info' : hash_info.copy(),
27255a95caaSYouMin Chen    'ddr3_hash_info' : hash_info.copy(),
27355a95caaSYouMin Chen    'lp2_hash_info' : hash_info.copy(),
27455a95caaSYouMin Chen    'ddr2_hash_info' : hash_info.copy(),
27555a95caaSYouMin Chen    'ddr5_hash_info' : hash_info.copy(),
27655a95caaSYouMin Chen}
27755a95caaSYouMin Chen
278*4026ce53SZhihuan He# struct sdram_head_info_v6
279*4026ce53SZhihuan Hesdram_head_info_v6 = {
280*4026ce53SZhihuan He    'global_info' : global_info.copy(),
281*4026ce53SZhihuan He    'ddr2_info' : ddr2_3_4_lp2_3_info_v5.copy(),
282*4026ce53SZhihuan He    'ddr3_info' : ddr2_3_4_lp2_3_info_v5.copy(),
283*4026ce53SZhihuan He    'ddr4_info' : ddr2_3_4_lp2_3_info_v5.copy(),
284*4026ce53SZhihuan He    'ddr5_info' : ddr2_3_4_lp2_3_info_v5.copy(),
285*4026ce53SZhihuan He    'lp2_info' : ddr2_3_4_lp2_3_info_v5.copy(),
286*4026ce53SZhihuan He    'lp3_info' : ddr2_3_4_lp2_3_info_v5.copy(),
287*4026ce53SZhihuan He    'lp4_info' : lp4_info.copy(),
288*4026ce53SZhihuan He    'dq_map_info' : dq_map_info.copy(),
289*4026ce53SZhihuan He    'lp4x_info' : lp4_info.copy(),
290*4026ce53SZhihuan He    'lp5_info' : lp4_info.copy(),
291*4026ce53SZhihuan He    'lp4_4x_hash_info' : hash_info.copy(),
292*4026ce53SZhihuan He    'lp5_hash_info' : hash_info.copy(),
293*4026ce53SZhihuan He    'ddr4_hash_info' : hash_info.copy(),
294*4026ce53SZhihuan He    'lp3_hash_info' : hash_info.copy(),
295*4026ce53SZhihuan He    'ddr3_hash_info' : hash_info.copy(),
296*4026ce53SZhihuan He    'lp2_hash_info' : hash_info.copy(),
297*4026ce53SZhihuan He    'ddr2_hash_info' : hash_info.copy(),
298*4026ce53SZhihuan He    'ddr5_hash_info' : hash_info.copy(),
299*4026ce53SZhihuan He    'uart_iomux_info' : uart_iomux_info.copy(),
300*4026ce53SZhihuan He}
301*4026ce53SZhihuan He
30255a95caaSYouMin Chensdram_head_info_v0 = [[0xc, 0], [0x10, 0], [0x14, 0], [0x18, 0], [0x1c, 0], [0x20, 0], [0x24, 0]]
30355a95caaSYouMin Chen
30455a95caaSYouMin Chen# struct base_info_full
30555a95caaSYouMin Chenbase_info_full = {
30655a95caaSYouMin Chen    'start tag': {'value': 0, 'num_base': 'hex', 'index': 'null', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 0, 'v0_info': [0x0, 0, 0xffffffff]},
30755a95caaSYouMin Chen
30855a95caaSYouMin Chen    'ddr2_freq': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'ddr_freq0_1', 'shift': 0, 'mask': 0xfff, 'version': 0, 'v0_info': [0xc, 16, 0xffff]},
30955a95caaSYouMin Chen    'lp2_freq': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'ddr_freq0_1', 'shift': 0, 'mask': 0xfff, 'version': 0, 'v0_info': [0xc, 0, 0xffff]},
31055a95caaSYouMin Chen    'ddr3_freq': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'ddr_freq0_1', 'shift': 0, 'mask': 0xfff, 'version': 0, 'v0_info': [0x10, 16, 0xffff]},
31155a95caaSYouMin Chen    'lp3_freq': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'ddr_freq0_1', 'shift': 0, 'mask': 0xfff, 'version': 0, 'v0_info': [0x10, 0, 0xffff]},
31255a95caaSYouMin Chen    'ddr4_freq': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'ddr_freq0_1', 'shift': 0, 'mask': 0xfff, 'version': 0, 'v0_info': [0x14, 16, 0xffff]},
31355a95caaSYouMin Chen    'lp4_freq': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'ddr_freq0_1', 'shift': 0, 'mask': 0xfff, 'version': 0, 'v0_info': [0x14, 0, 0xffff]},
31455a95caaSYouMin Chen    'lp4x_freq': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'ddr_freq0_1', 'shift': 0, 'mask': 0xfff, 'version': 2},
31555a95caaSYouMin Chen    'lp5_freq': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'ddr_freq0_1', 'shift': 0, 'mask': 0xfff, 'version': 2},
31655a95caaSYouMin Chen    'uart id': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'uart_info', 'shift': 28, 'mask': 0xf, 'version': 0, 'v0_info': [0x18, 28, 0xf]},
31755a95caaSYouMin Chen    'uart iomux': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'uart_info', 'shift': 24, 'mask': 0xf, 'version': 0, 'v0_info': [0x18, 24, 0xf]},
31855a95caaSYouMin Chen    'uart baudrate': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'uart_info', 'shift': 0, 'mask': 0xffffff, 'version': 0, 'v0_info': [0x18, 0, 0xffffff]},
31955a95caaSYouMin Chen    'sr_idle': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'sr_pd_info', 'shift': 16, 'mask': 0xffff, 'version': 0, 'v0_info': [0x1c, 16, 0xffff]},
32055a95caaSYouMin Chen    'pd_idle': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'sr_pd_info', 'shift': 0, 'mask': 0xffff, 'version': 0, 'v0_info': [0x1c, 0, 0xffff]},
32155a95caaSYouMin Chen    'first scan channel': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'ch_info', 'shift': 28, 'mask': 0xf, 'version': 0, 'v0_info': [0x20, 28, 0xf]},
32255a95caaSYouMin Chen    'channel mask': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'ch_info', 'shift': 24, 'mask': 0xf, 'version': 0, 'v0_info': [0x20, 24, 0xf]},
32355a95caaSYouMin Chen    'stride type': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'ch_info', 'shift': 16, 'mask': 0xff, 'version': 0, 'v0_info': [0x20, 16, 0xff]},
32455a95caaSYouMin Chen    'standby_idle': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'ch_info', 'shift': 0, 'mask': 0xffff, 'version': 0, 'v0_info': [0x20, 0, 0xffff]},
32555a95caaSYouMin Chen    'ext_temp_ref': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 29, 'mask': 0x3, 'version': 0, 'v0_info': [0x24, 29, 0x3]},
32655a95caaSYouMin Chen    'link_ecc_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 28, 'mask': 0x1, 'version': 2},
32755a95caaSYouMin Chen    'per_bank_ref_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 27, 'mask': 0x1, 'version': 2},
32855a95caaSYouMin Chen    'derate_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 26, 'mask': 0x1, 'version': 0, 'v0_info': [0x24, 26, 0x1]},
32955a95caaSYouMin Chen    'auto_precharge_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 25, 'mask': 0x1, 'version': 2},
33055a95caaSYouMin Chen    'res_space_remap_all': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 24, 'mask': 0x1, 'version': 2},
33155a95caaSYouMin Chen    'res_space_remap_portion': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 20, 'mask': 0x1, 'version': 2},
33255a95caaSYouMin Chen    'rd_vref_scan_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 21, 'mask': 0x1, 'version': 2},
33355a95caaSYouMin Chen    'wr_vref_scan_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 22, 'mask': 0x1, 'version': 2},
33455a95caaSYouMin Chen    'eye_2d_scan_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 23, 'mask': 0x1, 'version': 2},
33555a95caaSYouMin Chen    'dis_train_print': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 19, 'mask': 0x1, 'version': 2},
33655a95caaSYouMin Chen    'ssmod_downspread': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 17, 'mask': 0x3, 'version': 0, 'v0_info': [0x24, 17, 0x3]},
33755a95caaSYouMin Chen    'ssmod_div': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 9, 'mask': 0xff, 'version': 0, 'v0_info': [0x24, 9, 0xff]},
33855a95caaSYouMin Chen    'ssmod_spread': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 1, 'mask': 0xff, 'version': 0, 'v0_info': [0x24, 1, 0xff]},
33955a95caaSYouMin Chen    'ddr_2t': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 0, 'mask': 0x1, 'version': 0, 'v0_info': [0x24, 0, 0x1]},
34055a95caaSYouMin Chen    'reserved_global_info_2t_bit31': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 31, 'mask': 0x1, 'version': 2},
34155a95caaSYouMin Chen    'pstore_base_addr': {'value': 0, 'num_base': 'hex', 'index': 'global_index', 'position': 'reserved_0', 'shift': 16, 'mask': 0xffff, 'version': 2},
34255a95caaSYouMin Chen    'pstore_buf_size': {'value': 0, 'num_base': 'hex', 'index': 'global_index', 'position': 'reserved_0', 'shift': 12, 'mask': 0xf, 'version': 2},
34355a95caaSYouMin Chen    'uboot_log_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_0', 'shift': 4, 'mask': 0x1, 'version': 2},
34455a95caaSYouMin Chen    'atf_log_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_0', 'shift': 3, 'mask': 0x1, 'version': 2},
34555a95caaSYouMin Chen    'optee_log_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_0', 'shift': 2, 'mask': 0x1, 'version': 2},
34655a95caaSYouMin Chen    'spl_log_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_0', 'shift': 1, 'mask': 0x1, 'version': 2},
34755a95caaSYouMin Chen    'tpl_log_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_0', 'shift': 0, 'mask': 0x1, 'version': 2},
34855a95caaSYouMin Chen    'reserved_global_reserved_0_bit5_11': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_0', 'shift': 5, 'mask': 0x7f, 'version': 2},
349*4026ce53SZhihuan He    'periodic_interval': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_1', 'shift': 11, 'mask': 0x7f, 'version': 2},
350*4026ce53SZhihuan He    'trfc_mode': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_1', 'shift': 9, 'mask': 0x3, 'version': 2},
35155a95caaSYouMin Chen    'first_init_dram_type': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_1', 'shift': 5, 'mask': 0xf, 'version': 2},
35255a95caaSYouMin Chen    'dfs_disable': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_1', 'shift': 4, 'mask': 0x1, 'version': 2},
35355a95caaSYouMin Chen    'pageclose': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_1', 'shift': 3, 'mask': 0x1, 'version': 2},
35455a95caaSYouMin Chen    'boot_fsp': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_1', 'shift': 0, 'mask': 0x7, 'version': 2},
355*4026ce53SZhihuan He    'reserved_global_reserved_1_bit9_31': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_1', 'shift': 18, 'mask': 0x3fff, 'version': 2},
35655a95caaSYouMin Chen    'reserved_global_reserved_2_bit0_31': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_2', 'shift': 0, 'mask': 0xffffffff, 'version': 2},
35755a95caaSYouMin Chen    'reserved_global_reserved_3_bit0_31': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_3', 'shift': 0, 'mask': 0xffffffff, 'version': 2},
35855a95caaSYouMin Chen
35955a95caaSYouMin Chen    'ddr2_f1_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'ddr_freq0_1', 'shift': 12, 'mask': 0xfff, 'version': 2},
36055a95caaSYouMin Chen    'reserved_ddr2_ddr_freq0_1_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'ddr_freq0_1', 'shift': 24, 'mask': 0xff, 'version': 2},
36155a95caaSYouMin Chen    'ddr2_f2_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'ddr_freq2_3', 'shift': 0, 'mask': 0xfff, 'version': 2},
36255a95caaSYouMin Chen    'ddr2_f3_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'ddr_freq2_3', 'shift': 12, 'mask': 0xfff, 'version': 2},
36355a95caaSYouMin Chen    'reserved_ddr2_ddr_freq2_3_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'ddr_freq2_3', 'shift': 24, 'mask': 0xff, 'version': 2},
36455a95caaSYouMin Chen    'ddr2_f4_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'ddr_freq4_5', 'shift': 0, 'mask': 0xfff, 'version': 2},
36555a95caaSYouMin Chen    'ddr2_f5_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'ddr_freq4_5', 'shift': 12, 'mask': 0xfff, 'version': 2},
36655a95caaSYouMin Chen    'reserved_ddr2_ddr_freq4_5_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'ddr_freq4_5', 'shift': 24, 'mask': 0xff, 'version': 2},
36755a95caaSYouMin Chen    'phy_ddr2_dq_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'drv_when_odten', 'shift': 0, 'mask': 0xff, 'version': 2},
36855a95caaSYouMin Chen    'phy_ddr2_ca_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'drv_when_odten', 'shift': 8, 'mask': 0xff, 'version': 2},
36955a95caaSYouMin Chen    'phy_ddr2_clk_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'drv_when_odten', 'shift': 16, 'mask': 0xff, 'version': 2},
37055a95caaSYouMin Chen    'ddr2_dq_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'drv_when_odten', 'shift': 24, 'mask': 0xff, 'version': 2},
37155a95caaSYouMin Chen    'phy_ddr2_dq_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'drv_when_odtoff', 'shift': 0, 'mask': 0xff, 'version': 2},
37255a95caaSYouMin Chen    'phy_ddr2_ca_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'drv_when_odtoff', 'shift': 8, 'mask': 0xff, 'version': 2},
37355a95caaSYouMin Chen    'phy_ddr2_clk_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'drv_when_odtoff', 'shift': 16, 'mask': 0xff, 'version': 2},
37455a95caaSYouMin Chen    'ddr2_dq_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'drv_when_odtoff', 'shift': 24, 'mask': 0xff, 'version': 2},
37555a95caaSYouMin Chen    'phy_ddr2_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'odt_info', 'shift': 8, 'mask': 0x3ff, 'version': 2},
37655a95caaSYouMin Chen    'ddr2_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'odt_info', 'shift': 0, 'mask': 0xff, 'version': 2},
37755a95caaSYouMin Chen    'phy_ddr2_odt_pull_up_en': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'odt_info', 'shift': 18, 'mask': 0x1, 'version': 2},
37855a95caaSYouMin Chen    'phy_ddr2_odt_pull_dn_en': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'odt_info', 'shift': 19, 'mask': 0x1, 'version': 2},
37955a95caaSYouMin Chen    'reserved_ddr2_odt_info_bit20_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'odt_info', 'shift': 20, 'mask': 0xfff, 'version': 2},
38055a95caaSYouMin Chen    'phy_ddr2_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'odten_freq', 'shift': 12, 'mask': 0xfff, 'version': 2},
38155a95caaSYouMin Chen    'ddr2_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
38255a95caaSYouMin Chen    'reserved_ddr2_odten_freq_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'odten_freq', 'shift': 24, 'mask': 0xff, 'version': 2},
38355a95caaSYouMin Chen    'phy_ddr2_dq_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'sr_when_odten', 'shift': 0, 'mask': 0xff, 'version': 2},
38455a95caaSYouMin Chen    'phy_ddr2_ca_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'sr_when_odten', 'shift': 8, 'mask': 0xff, 'version': 2},
38555a95caaSYouMin Chen    'phy_ddr2_clk_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'sr_when_odten', 'shift': 16, 'mask': 0xff, 'version': 2},
38655a95caaSYouMin Chen    'reserved_ddr2_sr_when_odten_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'sr_when_odten', 'shift': 24, 'mask': 0xff, 'version': 2},
38755a95caaSYouMin Chen    'phy_ddr2_dq_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'sr_when_odtoff', 'shift': 0, 'mask': 0xff, 'version': 2},
38855a95caaSYouMin Chen    'phy_ddr2_ca_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'sr_when_odtoff', 'shift': 8, 'mask': 0xff, 'version': 2},
38955a95caaSYouMin Chen    'phy_ddr2_clk_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'sr_when_odtoff', 'shift': 16, 'mask': 0xff, 'version': 2},
39055a95caaSYouMin Chen    'reserved_ddr2_sr_when_odtoff_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'sr_when_odtoff', 'shift': 24, 'mask': 0xff, 'version': 2},
39155a95caaSYouMin Chen    'phy_ddr2_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'vref_when_odten', 'shift': 0, 'mask': 0x3ff, 'version': 5},
39255a95caaSYouMin Chen    'ddr2_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'vref_when_odten', 'shift': 10, 'mask': 0x3ff, 'version': 5},
39355a95caaSYouMin Chen    'ddr2_ca_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'vref_when_odten', 'shift': 20, 'mask': 0x3ff, 'version': 5},
39455a95caaSYouMin Chen    'reserved_ddr2_vref_when_odten_bit30_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'vref_when_odten', 'shift': 30, 'mask': 0x3, 'version': 5},
39555a95caaSYouMin Chen    'phy_ddr2_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'vref_when_odtoff', 'shift': 0, 'mask': 0x3ff, 'version': 5},
39655a95caaSYouMin Chen    'ddr2_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'vref_when_odtoff', 'shift': 10, 'mask': 0x3ff, 'version': 5},
39755a95caaSYouMin Chen    'ddr2_ca_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'vref_when_odtoff', 'shift': 20, 'mask': 0x3ff, 'version': 5},
39855a95caaSYouMin Chen    'reserved_ddr2_vref_when_odtoff_bit30_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'vref_when_odtoff', 'shift': 30, 'mask': 0x3, 'version': 5},
39955a95caaSYouMin Chen
40055a95caaSYouMin Chen    'ddr3_f1_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'ddr_freq0_1', 'shift': 12, 'mask': 0xfff, 'version': 2},
40155a95caaSYouMin Chen    'reserved_ddr3_ddr_freq0_1_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'ddr_freq0_1', 'shift': 24, 'mask': 0xff, 'version': 2},
40255a95caaSYouMin Chen    'ddr3_f2_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'ddr_freq2_3', 'shift': 0, 'mask': 0xfff, 'version': 2},
40355a95caaSYouMin Chen    'ddr3_f3_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'ddr_freq2_3', 'shift': 12, 'mask': 0xfff, 'version': 2},
40455a95caaSYouMin Chen    'reserved_ddr3_ddr_freq2_3_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'ddr_freq2_3', 'shift': 24, 'mask': 0xff, 'version': 2},
40555a95caaSYouMin Chen    'ddr3_f4_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'ddr_freq4_5', 'shift': 0, 'mask': 0xfff, 'version': 2},
40655a95caaSYouMin Chen    'ddr3_f5_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'ddr_freq4_5', 'shift': 12, 'mask': 0xfff, 'version': 2},
40755a95caaSYouMin Chen    'reserved_ddr3_ddr_freq4_5_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'ddr_freq4_5', 'shift': 24, 'mask': 0xff, 'version': 2},
40855a95caaSYouMin Chen    'phy_ddr3_dq_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'drv_when_odten', 'shift': 0, 'mask': 0xff, 'version': 2},
40955a95caaSYouMin Chen    'phy_ddr3_ca_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'drv_when_odten', 'shift': 8, 'mask': 0xff, 'version': 2},
41055a95caaSYouMin Chen    'phy_ddr3_clk_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'drv_when_odten', 'shift': 16, 'mask': 0xff, 'version': 2},
41155a95caaSYouMin Chen    'ddr3_dq_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'drv_when_odten', 'shift': 24, 'mask': 0xff, 'version': 2},
41255a95caaSYouMin Chen    'phy_ddr3_dq_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'drv_when_odtoff', 'shift': 0, 'mask': 0xff, 'version': 2},
41355a95caaSYouMin Chen    'phy_ddr3_ca_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'drv_when_odtoff', 'shift': 8, 'mask': 0xff, 'version': 2},
41455a95caaSYouMin Chen    'phy_ddr3_clk_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'drv_when_odtoff', 'shift': 16, 'mask': 0xff, 'version': 2},
41555a95caaSYouMin Chen    'ddr3_dq_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'drv_when_odtoff', 'shift': 24, 'mask': 0xff, 'version': 2},
41655a95caaSYouMin Chen    'phy_ddr3_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'odt_info', 'shift': 8, 'mask': 0x3ff, 'version': 2},
41755a95caaSYouMin Chen    'ddr3_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'odt_info', 'shift': 0, 'mask': 0xff, 'version': 2},
41855a95caaSYouMin Chen    'phy_ddr3_odt_pull_up_en': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'odt_info', 'shift': 18, 'mask': 0x1, 'version': 2},
41955a95caaSYouMin Chen    'phy_ddr3_odt_pull_dn_en': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'odt_info', 'shift': 19, 'mask': 0x1, 'version': 2},
42055a95caaSYouMin Chen    'reserved_ddr3_odt_info_bit20_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'odt_info', 'shift': 20, 'mask': 0xfff, 'version': 2},
42155a95caaSYouMin Chen    'phy_ddr3_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'odten_freq', 'shift': 12, 'mask': 0xfff, 'version': 2},
42255a95caaSYouMin Chen    'ddr3_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
42355a95caaSYouMin Chen    'reserved_ddr3_odten_freq_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'odten_freq', 'shift': 24, 'mask': 0xff, 'version': 2},
42455a95caaSYouMin Chen    'phy_ddr3_dq_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'sr_when_odten', 'shift': 0, 'mask': 0xff, 'version': 2},
42555a95caaSYouMin Chen    'phy_ddr3_ca_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'sr_when_odten', 'shift': 8, 'mask': 0xff, 'version': 2},
42655a95caaSYouMin Chen    'phy_ddr3_clk_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'sr_when_odten', 'shift': 16, 'mask': 0xff, 'version': 2},
42755a95caaSYouMin Chen    'reserved_ddr3_sr_when_odten_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'sr_when_odten', 'shift': 24, 'mask': 0xff, 'version': 2},
42855a95caaSYouMin Chen    'phy_ddr3_dq_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'sr_when_odtoff', 'shift': 0, 'mask': 0xff, 'version': 2},
42955a95caaSYouMin Chen    'phy_ddr3_ca_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'sr_when_odtoff', 'shift': 8, 'mask': 0xff, 'version': 2},
43055a95caaSYouMin Chen    'phy_ddr3_clk_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'sr_when_odtoff', 'shift': 16, 'mask': 0xff, 'version': 2},
43155a95caaSYouMin Chen    'reserved_ddr3_sr_when_odtoff_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'sr_when_odtoff', 'shift': 24, 'mask': 0xff, 'version': 2},
43255a95caaSYouMin Chen    'phy_ddr3_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'vref_when_odten', 'shift': 0, 'mask': 0x3ff, 'version': 5},
43355a95caaSYouMin Chen    'ddr3_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'vref_when_odten', 'shift': 10, 'mask': 0x3ff, 'version': 5},
43455a95caaSYouMin Chen    'ddr3_ca_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'vref_when_odten', 'shift': 20, 'mask': 0x3ff, 'version': 5},
43555a95caaSYouMin Chen    'reserved_ddr3_vref_when_odten_bit30_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'vref_when_odten', 'shift': 30, 'mask': 0x3, 'version': 5},
43655a95caaSYouMin Chen    'phy_ddr3_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'vref_when_odtoff', 'shift': 0, 'mask': 0x3ff, 'version': 5},
43755a95caaSYouMin Chen    'ddr3_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'vref_when_odtoff', 'shift': 10, 'mask': 0x3ff, 'version': 5},
43855a95caaSYouMin Chen    'ddr3_ca_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'vref_when_odtoff', 'shift': 20, 'mask': 0x3ff, 'version': 5},
43955a95caaSYouMin Chen    'reserved_ddr3_vref_when_odtoff_bit30_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'vref_when_odtoff', 'shift': 30, 'mask': 0x3, 'version': 5},
44055a95caaSYouMin Chen
44155a95caaSYouMin Chen    'ddr4_f1_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'ddr_freq0_1', 'shift': 12, 'mask': 0xfff, 'version': 2},
44255a95caaSYouMin Chen    'reserved_ddr4_ddr_freq0_1_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'ddr_freq0_1', 'shift': 24, 'mask': 0xff, 'version': 2},
44355a95caaSYouMin Chen    'ddr4_f2_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'ddr_freq2_3', 'shift': 0, 'mask': 0xfff, 'version': 2},
44455a95caaSYouMin Chen    'ddr4_f3_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'ddr_freq2_3', 'shift': 12, 'mask': 0xfff, 'version': 2},
44555a95caaSYouMin Chen    'reserved_ddr4_ddr_freq2_3_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'ddr_freq2_3', 'shift': 24, 'mask': 0xff, 'version': 2},
44655a95caaSYouMin Chen    'ddr4_f4_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'ddr_freq4_5', 'shift': 0, 'mask': 0xfff, 'version': 2},
44755a95caaSYouMin Chen    'ddr4_f5_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'ddr_freq4_5', 'shift': 12, 'mask': 0xfff, 'version': 2},
44855a95caaSYouMin Chen    'reserved_ddr4_ddr_freq4_5_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'ddr_freq4_5', 'shift': 24, 'mask': 0xff, 'version': 2},
44955a95caaSYouMin Chen    'phy_ddr4_dq_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'drv_when_odten', 'shift': 0, 'mask': 0xff, 'version': 2},
45055a95caaSYouMin Chen    'phy_ddr4_ca_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'drv_when_odten', 'shift': 8, 'mask': 0xff, 'version': 2},
45155a95caaSYouMin Chen    'phy_ddr4_clk_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'drv_when_odten', 'shift': 16, 'mask': 0xff, 'version': 2},
45255a95caaSYouMin Chen    'ddr4_dq_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'drv_when_odten', 'shift': 24, 'mask': 0xff, 'version': 2},
45355a95caaSYouMin Chen    'phy_ddr4_dq_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'drv_when_odtoff', 'shift': 0, 'mask': 0xff, 'version': 2},
45455a95caaSYouMin Chen    'phy_ddr4_ca_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'drv_when_odtoff', 'shift': 8, 'mask': 0xff, 'version': 2},
45555a95caaSYouMin Chen    'phy_ddr4_clk_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'drv_when_odtoff', 'shift': 16, 'mask': 0xff, 'version': 2},
45655a95caaSYouMin Chen    'ddr4_dq_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'drv_when_odtoff', 'shift': 24, 'mask': 0xff, 'version': 2},
45755a95caaSYouMin Chen    'phy_ddr4_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'odt_info', 'shift': 8, 'mask': 0x3ff, 'version': 2},
45855a95caaSYouMin Chen    'ddr4_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'odt_info', 'shift': 0, 'mask': 0xff, 'version': 2},
45955a95caaSYouMin Chen    'phy_ddr4_odt_pull_up_en': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'odt_info', 'shift': 18, 'mask': 0x1, 'version': 2},
46055a95caaSYouMin Chen    'phy_ddr4_odt_pull_dn_en': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'odt_info', 'shift': 19, 'mask': 0x1, 'version': 2},
46155a95caaSYouMin Chen    'reserved_ddr4_odt_info_bit20_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'odt_info', 'shift': 20, 'mask': 0xfff, 'version': 2},
46255a95caaSYouMin Chen    'phy_ddr4_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'odten_freq', 'shift': 12, 'mask': 0xfff, 'version': 2},
46355a95caaSYouMin Chen    'ddr4_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
46455a95caaSYouMin Chen    'reserved_ddr4_odten_freq_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'odten_freq', 'shift': 24, 'mask': 0xff, 'version': 2},
46555a95caaSYouMin Chen    'phy_ddr4_dq_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'sr_when_odten', 'shift': 0, 'mask': 0xff, 'version': 2},
46655a95caaSYouMin Chen    'phy_ddr4_ca_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'sr_when_odten', 'shift': 8, 'mask': 0xff, 'version': 2},
46755a95caaSYouMin Chen    'phy_ddr4_clk_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'sr_when_odten', 'shift': 16, 'mask': 0xff, 'version': 2},
46855a95caaSYouMin Chen    'reserved_ddr4_sr_when_odten_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'sr_when_odten', 'shift': 24, 'mask': 0xff, 'version': 2},
46955a95caaSYouMin Chen    'phy_ddr4_dq_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'sr_when_odtoff', 'shift': 0, 'mask': 0xff, 'version': 2},
47055a95caaSYouMin Chen    'phy_ddr4_ca_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'sr_when_odtoff', 'shift': 8, 'mask': 0xff, 'version': 2},
47155a95caaSYouMin Chen    'phy_ddr4_clk_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'sr_when_odtoff', 'shift': 16, 'mask': 0xff, 'version': 2},
47255a95caaSYouMin Chen    'reserved_ddr4_sr_when_odtoff_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'sr_when_odtoff', 'shift': 24, 'mask': 0xff, 'version': 2},
47355a95caaSYouMin Chen    'phy_ddr4_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'vref_when_odten', 'shift': 0, 'mask': 0x3ff, 'version': 5},
47455a95caaSYouMin Chen    'ddr4_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'vref_when_odten', 'shift': 10, 'mask': 0x3ff, 'version': 5},
47555a95caaSYouMin Chen    'ddr4_ca_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'vref_when_odten', 'shift': 20, 'mask': 0x3ff, 'version': 5},
47655a95caaSYouMin Chen    'reserved_ddr4_vref_when_odten_bit30_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'vref_when_odten', 'shift': 30, 'mask': 0x3, 'version': 5},
47755a95caaSYouMin Chen    'phy_ddr4_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'vref_when_odtoff', 'shift': 0, 'mask': 0x3ff, 'version': 5},
47855a95caaSYouMin Chen    'ddr4_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'vref_when_odtoff', 'shift': 10, 'mask': 0x3ff, 'version': 5},
47955a95caaSYouMin Chen    'ddr4_ca_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'vref_when_odtoff', 'shift': 20, 'mask': 0x3ff, 'version': 5},
48055a95caaSYouMin Chen    'reserved_ddr4_vref_when_odtoff_bit30_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'vref_when_odtoff', 'shift': 30, 'mask': 0x3, 'version': 5},
48155a95caaSYouMin Chen
48255a95caaSYouMin Chen    'lp2_f1_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'ddr_freq0_1', 'shift': 12, 'mask': 0xfff, 'version': 2},
48355a95caaSYouMin Chen    'reserved_lp2_ddr_freq0_1_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'ddr_freq0_1', 'shift': 24, 'mask': 0xff, 'version': 2},
48455a95caaSYouMin Chen    'lp2_f2_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'ddr_freq2_3', 'shift': 0, 'mask': 0xfff, 'version': 2},
48555a95caaSYouMin Chen    'lp2_f3_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'ddr_freq2_3', 'shift': 12, 'mask': 0xfff, 'version': 2},
48655a95caaSYouMin Chen    'reserved_lp2_ddr_freq2_3_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'ddr_freq2_3', 'shift': 24, 'mask': 0xff, 'version': 2},
48755a95caaSYouMin Chen    'lp2_f4_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'ddr_freq4_5', 'shift': 0, 'mask': 0xfff, 'version': 2},
48855a95caaSYouMin Chen    'lp2_f5_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'ddr_freq4_5', 'shift': 12, 'mask': 0xfff, 'version': 2},
48955a95caaSYouMin Chen    'reserved_lp2_ddr_freq4_5_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'ddr_freq4_5', 'shift': 24, 'mask': 0xff, 'version': 2},
49055a95caaSYouMin Chen    'phy_lp2_dq_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'drv_when_odten', 'shift': 0, 'mask': 0xff, 'version': 2},
49155a95caaSYouMin Chen    'phy_lp2_ca_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'drv_when_odten', 'shift': 8, 'mask': 0xff, 'version': 2},
49255a95caaSYouMin Chen    'phy_lp2_clk_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'drv_when_odten', 'shift': 16, 'mask': 0xff, 'version': 2},
49355a95caaSYouMin Chen    'lp2_dq_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'drv_when_odten', 'shift': 24, 'mask': 0xff, 'version': 2},
49455a95caaSYouMin Chen    'phy_lp2_dq_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'drv_when_odtoff', 'shift': 0, 'mask': 0xff, 'version': 2},
49555a95caaSYouMin Chen    'phy_lp2_ca_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'drv_when_odtoff', 'shift': 8, 'mask': 0xff, 'version': 2},
49655a95caaSYouMin Chen    'phy_lp2_clk_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'drv_when_odtoff', 'shift': 16, 'mask': 0xff, 'version': 2},
49755a95caaSYouMin Chen    'lp2_dq_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'drv_when_odtoff', 'shift': 24, 'mask': 0xff, 'version': 2},
49855a95caaSYouMin Chen    'phy_lp2_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'odt_info', 'shift': 8, 'mask': 0x3ff, 'version': 2},
49955a95caaSYouMin Chen    'lp2_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'odt_info', 'shift': 0, 'mask': 0xff, 'version': 2},
50055a95caaSYouMin Chen    'phy_lp2_odt_pull_up_en': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'odt_info', 'shift': 18, 'mask': 0x1, 'version': 2},
50155a95caaSYouMin Chen    'phy_lp2_odt_pull_dn_en': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'odt_info', 'shift': 19, 'mask': 0x1, 'version': 2},
50255a95caaSYouMin Chen    'reserved_lp2_odt_info_bit20_31': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'odt_info', 'shift': 20, 'mask': 0xfff, 'version': 2},
50355a95caaSYouMin Chen    'phy_lp2_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'odten_freq', 'shift': 12, 'mask': 0xfff, 'version': 2},
50455a95caaSYouMin Chen    'lp2_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
50555a95caaSYouMin Chen    'reserved_lp2_odten_freq_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'odten_freq', 'shift': 24, 'mask': 0xff, 'version': 2},
50655a95caaSYouMin Chen    'phy_lp2_dq_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'sr_when_odten', 'shift': 0, 'mask': 0xff, 'version': 2},
50755a95caaSYouMin Chen    'phy_lp2_ca_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'sr_when_odten', 'shift': 8, 'mask': 0xff, 'version': 2},
50855a95caaSYouMin Chen    'phy_lp2_clk_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'sr_when_odten', 'shift': 16, 'mask': 0xff, 'version': 2},
50955a95caaSYouMin Chen    'reserved_lp2_sr_when_odten_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'sr_when_odten', 'shift': 24, 'mask': 0xff, 'version': 2},
51055a95caaSYouMin Chen    'phy_lp2_dq_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'sr_when_odtoff', 'shift': 0, 'mask': 0xff, 'version': 2},
51155a95caaSYouMin Chen    'phy_lp2_ca_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'sr_when_odtoff', 'shift': 8, 'mask': 0xff, 'version': 2},
51255a95caaSYouMin Chen    'phy_lp2_clk_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'sr_when_odtoff', 'shift': 16, 'mask': 0xff, 'version': 2},
51355a95caaSYouMin Chen    'reserved_lp2_sr_when_odtoff_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'sr_when_odtoff', 'shift': 24, 'mask': 0xff, 'version': 2},
51455a95caaSYouMin Chen    'phy_lp2_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'vref_when_odten', 'shift': 0, 'mask': 0x3ff, 'version': 5},
51555a95caaSYouMin Chen    'lp2_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'vref_when_odten', 'shift': 10, 'mask': 0x3ff, 'version': 5},
51655a95caaSYouMin Chen    'lp2_ca_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'vref_when_odten', 'shift': 20, 'mask': 0x3ff, 'version': 5},
51755a95caaSYouMin Chen    'reserved_lp2_vref_when_odten_bit30_31': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'vref_when_odten', 'shift': 30, 'mask': 0x3, 'version': 5},
51855a95caaSYouMin Chen    'phy_lp2_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'vref_when_odtoff', 'shift': 0, 'mask': 0x3ff, 'version': 5},
51955a95caaSYouMin Chen    'lp2_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'vref_when_odtoff', 'shift': 10, 'mask': 0x3ff, 'version': 5},
52055a95caaSYouMin Chen    'lp2_ca_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'vref_when_odtoff', 'shift': 20, 'mask': 0x3ff, 'version': 5},
52155a95caaSYouMin Chen    'reserved_lp2_vref_when_odtoff_bit30_31': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'vref_when_odtoff', 'shift': 30, 'mask': 0x3, 'version': 5},
52255a95caaSYouMin Chen
52355a95caaSYouMin Chen    'lp3_f1_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'ddr_freq0_1', 'shift': 12, 'mask': 0xfff, 'version': 2},
52455a95caaSYouMin Chen    'reserved_lp3_ddr_freq0_1_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'ddr_freq0_1', 'shift': 24, 'mask': 0xff, 'version': 2},
52555a95caaSYouMin Chen    'lp3_f2_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'ddr_freq2_3', 'shift': 0, 'mask': 0xfff, 'version': 2},
52655a95caaSYouMin Chen    'lp3_f3_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'ddr_freq2_3', 'shift': 12, 'mask': 0xfff, 'version': 2},
52755a95caaSYouMin Chen    'reserved_lp3_ddr_freq2_3_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'ddr_freq2_3', 'shift': 24, 'mask': 0xff, 'version': 2},
52855a95caaSYouMin Chen    'lp3_f4_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'ddr_freq4_5', 'shift': 0, 'mask': 0xfff, 'version': 2},
52955a95caaSYouMin Chen    'lp3_f5_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'ddr_freq4_5', 'shift': 12, 'mask': 0xfff, 'version': 2},
53055a95caaSYouMin Chen    'reserved_lp3_ddr_freq4_5_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'ddr_freq4_5', 'shift': 24, 'mask': 0xff, 'version': 2},
53155a95caaSYouMin Chen    'phy_lp3_dq_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'drv_when_odten', 'shift': 0, 'mask': 0xff, 'version': 2},
53255a95caaSYouMin Chen    'phy_lp3_ca_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'drv_when_odten', 'shift': 8, 'mask': 0xff, 'version': 2},
53355a95caaSYouMin Chen    'phy_lp3_clk_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'drv_when_odten', 'shift': 16, 'mask': 0xff, 'version': 2},
53455a95caaSYouMin Chen    'lp3_dq_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'drv_when_odten', 'shift': 24, 'mask': 0xff, 'version': 2},
53555a95caaSYouMin Chen    'phy_lp3_dq_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'drv_when_odtoff', 'shift': 0, 'mask': 0xff, 'version': 2},
53655a95caaSYouMin Chen    'phy_lp3_ca_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'drv_when_odtoff', 'shift': 8, 'mask': 0xff, 'version': 2},
53755a95caaSYouMin Chen    'phy_lp3_clk_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'drv_when_odtoff', 'shift': 16, 'mask': 0xff, 'version': 2},
53855a95caaSYouMin Chen    'lp3_dq_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'drv_when_odtoff', 'shift': 24, 'mask': 0xff, 'version': 2},
53955a95caaSYouMin Chen    'phy_lp3_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'odt_info', 'shift': 8, 'mask': 0x3ff, 'version': 2},
54055a95caaSYouMin Chen    'lp3_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'odt_info', 'shift': 0, 'mask': 0xff, 'version': 2},
54155a95caaSYouMin Chen    'phy_lp3_odt_pull_up_en': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'odt_info', 'shift': 18, 'mask': 0x1, 'version': 2},
54255a95caaSYouMin Chen    'phy_lp3_odt_pull_dn_en': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'odt_info', 'shift': 19, 'mask': 0x1, 'version': 2},
54355a95caaSYouMin Chen    'reserved_lp3_odt_info_bit20_31': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'odt_info', 'shift': 20, 'mask': 0xfff, 'version': 2},
54455a95caaSYouMin Chen    'phy_lp3_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'odten_freq', 'shift': 12, 'mask': 0xfff, 'version': 2},
54555a95caaSYouMin Chen    'lp3_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
54655a95caaSYouMin Chen    'reserved_lp3_odten_freq_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'odten_freq', 'shift': 24, 'mask': 0xff, 'version': 2},
54755a95caaSYouMin Chen    'phy_lp3_dq_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'sr_when_odten', 'shift': 0, 'mask': 0xff, 'version': 2},
54855a95caaSYouMin Chen    'phy_lp3_ca_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'sr_when_odten', 'shift': 8, 'mask': 0xff, 'version': 2},
54955a95caaSYouMin Chen    'phy_lp3_clk_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'sr_when_odten', 'shift': 16, 'mask': 0xff, 'version': 2},
55055a95caaSYouMin Chen    'reserved_lp3_sr_when_odten_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'sr_when_odten', 'shift': 24, 'mask': 0xff, 'version': 2},
55155a95caaSYouMin Chen    'phy_lp3_dq_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'sr_when_odtoff', 'shift': 0, 'mask': 0xff, 'version': 2},
55255a95caaSYouMin Chen    'phy_lp3_ca_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'sr_when_odtoff', 'shift': 8, 'mask': 0xff, 'version': 2},
55355a95caaSYouMin Chen    'phy_lp3_clk_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'sr_when_odtoff', 'shift': 16, 'mask': 0xff, 'version': 2},
55455a95caaSYouMin Chen    'reserved_lp3_sr_when_odtoff_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'sr_when_odtoff', 'shift': 24, 'mask': 0xff, 'version': 2},
55555a95caaSYouMin Chen    'phy_lp3_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'vref_when_odten', 'shift': 0, 'mask': 0x3ff, 'version': 5},
55655a95caaSYouMin Chen    'lp3_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'vref_when_odten', 'shift': 10, 'mask': 0x3ff, 'version': 5},
55755a95caaSYouMin Chen    'lp3_ca_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'vref_when_odten', 'shift': 20, 'mask': 0x3ff, 'version': 5},
55855a95caaSYouMin Chen    'reserved_lp3_vref_when_odten_bit30_31': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'vref_when_odten', 'shift': 30, 'mask': 0x3, 'version': 5},
55955a95caaSYouMin Chen    'phy_lp3_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'vref_when_odtoff', 'shift': 0, 'mask': 0x3ff, 'version': 5},
56055a95caaSYouMin Chen    'lp3_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'vref_when_odtoff', 'shift': 10, 'mask': 0x3ff, 'version': 5},
56155a95caaSYouMin Chen    'lp3_ca_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'vref_when_odtoff', 'shift': 20, 'mask': 0x3ff, 'version': 5},
56255a95caaSYouMin Chen    'reserved_lp3_vref_when_odtoff_bit30_31': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'vref_when_odtoff', 'shift': 30, 'mask': 0x3, 'version': 5},
56355a95caaSYouMin Chen
56455a95caaSYouMin Chen    'lp4_f1_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'ddr_freq0_1', 'shift': 12, 'mask': 0xfff, 'version': 2},
56555a95caaSYouMin Chen    'reserved_lp4_ddr_freq0_1_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'ddr_freq0_1', 'shift': 24, 'mask': 0xff, 'version': 2},
56655a95caaSYouMin Chen    'lp4_f2_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'ddr_freq2_3', 'shift': 0, 'mask': 0xfff, 'version': 2},
56755a95caaSYouMin Chen    'lp4_f3_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'ddr_freq2_3', 'shift': 12, 'mask': 0xfff, 'version': 2},
56855a95caaSYouMin Chen    'reserved_lp4_ddr_freq2_3_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'ddr_freq2_3', 'shift': 24, 'mask': 0xff, 'version': 2},
56955a95caaSYouMin Chen    'lp4_f4_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'ddr_freq4_5', 'shift': 0, 'mask': 0xfff, 'version': 2},
57055a95caaSYouMin Chen    'lp4_f5_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'ddr_freq4_5', 'shift': 12, 'mask': 0xfff, 'version': 2},
57155a95caaSYouMin Chen    'reserved_lp4_ddr_freq4_5_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'ddr_freq4_5', 'shift': 24, 'mask': 0xff, 'version': 2},
57255a95caaSYouMin Chen    'phy_lp4_dq_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'drv_when_odten', 'shift': 0, 'mask': 0xff, 'version': 2},
57355a95caaSYouMin Chen    'phy_lp4_ca_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'drv_when_odten', 'shift': 8, 'mask': 0xff, 'version': 2},
57455a95caaSYouMin Chen    'phy_lp4_clk_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'drv_when_odten', 'shift': 16, 'mask': 0xff, 'version': 2},
57555a95caaSYouMin Chen    'lp4_dq_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'drv_when_odten', 'shift': 24, 'mask': 0xff, 'version': 2},
57655a95caaSYouMin Chen    'phy_lp4_dq_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'drv_when_odtoff', 'shift': 0, 'mask': 0xff, 'version': 2},
57755a95caaSYouMin Chen    'phy_lp4_ca_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'drv_when_odtoff', 'shift': 8, 'mask': 0xff, 'version': 2},
57855a95caaSYouMin Chen    'phy_lp4_clk_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'drv_when_odtoff', 'shift': 16, 'mask': 0xff, 'version': 2},
57955a95caaSYouMin Chen    'lp4_dq_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'drv_when_odtoff', 'shift': 24, 'mask': 0xff, 'version': 2},
58055a95caaSYouMin Chen    'phy_lp4_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'odt_info', 'shift': 8, 'mask': 0x3ff, 'version': 2},
58155a95caaSYouMin Chen    'lp4_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'odt_info', 'shift': 0, 'mask': 0xff, 'version': 2},
58255a95caaSYouMin Chen    'lp4_ca_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'odt_info', 'shift': 18, 'mask': 0xff, 'version': 2},
58355a95caaSYouMin Chen    'lp4_drv_pu_cal_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'odt_info', 'shift': 26, 'mask': 0x1, 'version': 2},
58455a95caaSYouMin Chen    'lp4_drv_pu_cal_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'odt_info', 'shift': 27, 'mask': 0x1, 'version': 2},
58555a95caaSYouMin Chen    'phy_lp4_drv_pull_dn_en_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'odt_info', 'shift': 28, 'mask': 0x1, 'version': 2},
58655a95caaSYouMin Chen    'phy_lp4_drv_pull_dn_en_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'odt_info', 'shift': 29, 'mask': 0x1, 'version': 2},
58755a95caaSYouMin Chen    'reserved_lp4_odt_info_bit31': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'odt_info', 'shift': 31, 'mask': 0x1, 'version': 2},
58855a95caaSYouMin Chen    'phy_lp4_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'dq_odten_freq', 'shift': 12, 'mask': 0xfff, 'version': 2},
58955a95caaSYouMin Chen    'lp4_dq_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'dq_odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
59055a95caaSYouMin Chen    'reserved_lp4_dq_odten_freq_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'dq_odten_freq', 'shift': 24, 'mask': 0xff, 'version': 2},
59155a95caaSYouMin Chen    'phy_lp4_dq_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'sr_when_odten', 'shift': 0, 'mask': 0xff, 'version': 2},
59255a95caaSYouMin Chen    'phy_lp4_ca_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'sr_when_odten', 'shift': 8, 'mask': 0xff, 'version': 2},
59355a95caaSYouMin Chen    'phy_lp4_clk_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'sr_when_odten', 'shift': 16, 'mask': 0xff, 'version': 2},
59455a95caaSYouMin Chen    'reserved_lp4_sr_when_odten_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'sr_when_odten', 'shift': 24, 'mask': 0xff, 'version': 2},
59555a95caaSYouMin Chen    'phy_lp4_dq_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'sr_when_odtoff', 'shift': 0, 'mask': 0xff, 'version': 2},
59655a95caaSYouMin Chen    'phy_lp4_ca_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'sr_when_odtoff', 'shift': 8, 'mask': 0xff, 'version': 2},
59755a95caaSYouMin Chen    'phy_lp4_clk_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'sr_when_odtoff', 'shift': 16, 'mask': 0xff, 'version': 2},
59855a95caaSYouMin Chen    'reserved_lp4_sr_when_odtoff_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'sr_when_odtoff', 'shift': 24, 'mask': 0xff, 'version': 2},
59955a95caaSYouMin Chen    'lp4_ca_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'ca_odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
60055a95caaSYouMin Chen    'reserved_lp4_ca_odten_freq_bit12_31': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'ca_odten_freq', 'shift': 12, 'mask': 0xfffff, 'version': 2},
60155a95caaSYouMin Chen    'phy_lp4_cs_drv_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'cs_drv_ca_odt_info', 'shift': 0, 'mask': 0xff, 'version': 2},
60255a95caaSYouMin Chen    'phy_lp4_cs_drv_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'cs_drv_ca_odt_info', 'shift': 8, 'mask': 0xff, 'version': 2},
60355a95caaSYouMin Chen    'lp4_odte_ck': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'cs_drv_ca_odt_info', 'shift': 16, 'mask': 0x1, 'version': 2},
60455a95caaSYouMin Chen    'lp4_odte_cs_en': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'cs_drv_ca_odt_info', 'shift': 17, 'mask': 0x1, 'version': 2},
60555a95caaSYouMin Chen    'lp4_odtd_ca_en': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'cs_drv_ca_odt_info', 'shift': 18, 'mask': 0x1, 'version': 2},
60655a95caaSYouMin Chen    'reserved_lp4cs_drv_ca_odt_info_bit19_31': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'cs_drv_ca_odt_info', 'shift': 19, 'mask': 0x1fff, 'version': 2},
60755a95caaSYouMin Chen    'phy_lp4_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'vref_when_odten', 'shift': 0, 'mask': 0x3ff, 'version': 2},
60855a95caaSYouMin Chen    'lp4_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'vref_when_odten', 'shift': 10, 'mask': 0x3ff, 'version': 2},
60955a95caaSYouMin Chen    'lp4_ca_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'vref_when_odten', 'shift': 20, 'mask': 0x3ff, 'version': 2},
61055a95caaSYouMin Chen    'reserved_lp4_vref_when_odten_bit30_31': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'vref_when_odten', 'shift': 30, 'mask': 0x3, 'version': 2},
61155a95caaSYouMin Chen    'phy_lp4_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'vref_when_odtoff', 'shift': 0, 'mask': 0x3ff, 'version': 2},
61255a95caaSYouMin Chen    'lp4_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'vref_when_odtoff', 'shift': 10, 'mask': 0x3ff, 'version': 2},
61355a95caaSYouMin Chen    'lp4_ca_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'vref_when_odtoff', 'shift': 20, 'mask': 0x3ff, 'version': 2},
61455a95caaSYouMin Chen    'reserved_lp4_vref_when_odtoff_bit30_31': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'vref_when_odtoff', 'shift': 30, 'mask': 0x3, 'version': 2},
61555a95caaSYouMin Chen
61655a95caaSYouMin Chen    'ddr2_bytes_map': {'value': 0, 'num_base': 'hex', 'index': 'dq_map_index', 'position': 'byte_map_0', 'shift': 16, 'mask': 0xff, 'version': 2},
61755a95caaSYouMin Chen    'ddr3_bytes_map': {'value': 0, 'num_base': 'hex', 'index': 'dq_map_index', 'position': 'byte_map_0', 'shift': 24, 'mask': 0xff, 'version': 2},
61855a95caaSYouMin Chen    'ddr4_bytes_map': {'value': 0, 'num_base': 'hex', 'index': 'dq_map_index', 'position': 'byte_map_0', 'shift': 0, 'mask': 0xff, 'version': 2},
61955a95caaSYouMin Chen    'reservedbyte_map_0_bit8_15': {'value': 0, 'num_base': 'hex', 'index': 'dq_map_index', 'position': 'byte_map_0', 'shift': 8, 'mask': 0xff, 'version': 2},
62055a95caaSYouMin Chen    'lp2_bytes_map': {'value': 0, 'num_base': 'hex', 'index': 'dq_map_index', 'position': 'byte_map_1', 'shift': 8, 'mask': 0xff, 'version': 2},
62155a95caaSYouMin Chen    'lp3_bytes_map': {'value': 0, 'num_base': 'hex', 'index': 'dq_map_index', 'position': 'byte_map_1', 'shift': 16, 'mask': 0xff, 'version': 2},
62255a95caaSYouMin Chen    'lp4_bytes_map': {'value': 0, 'num_base': 'hex', 'index': 'dq_map_index', 'position': 'byte_map_1', 'shift': 24, 'mask': 0xff, 'version': 2},
62355a95caaSYouMin Chen    'reserved_byte_map_1_bit0_7': {'value': 0, 'num_base': 'hex', 'index': 'dq_map_index', 'position': 'byte_map_1', 'shift': 0, 'mask': 0xff, 'version': 2},
62455a95caaSYouMin Chen    'lp3_dq0_7_map': {'value': 0, 'num_base': 'hex', 'index': 'dq_map_index', 'position': 'lp3_dq0_7_map', 'shift': 0, 'mask': 0xffffffff, 'version': 2},
62555a95caaSYouMin Chen    'lp2_dq0_7_map': {'value': 0, 'num_base': 'hex', 'index': 'dq_map_index', 'position': 'lp2_dq0_7_map', 'shift': 0, 'mask': 0xffffffff, 'version': 2},
62655a95caaSYouMin Chen    'ddr4_cs0_dq0_dq15_map': {'value': 0, 'num_base': 'hex', 'index': 'dq_map_index', 'position': 'ddr4_dq_map_0', 'shift': 0, 'mask': 0xffffffff, 'version': 2},
62755a95caaSYouMin Chen    'ddr4_cs0_dq16_dq31_map': {'value': 0, 'num_base': 'hex', 'index': 'dq_map_index', 'position': 'ddr4_dq_map_1', 'shift': 0, 'mask': 0xffffffff, 'version': 2},
62855a95caaSYouMin Chen    'ddr4_cs1_dq0_dq15_map': {'value': 0, 'num_base': 'hex', 'index': 'dq_map_index', 'position': 'ddr4_dq_map_2', 'shift': 0, 'mask': 0xffffffff, 'version': 2},
62955a95caaSYouMin Chen    'ddr4_cs1_dq16_dq31_map': {'value': 0, 'num_base': 'hex', 'index': 'dq_map_index', 'position': 'ddr4_dq_map_3', 'shift': 0, 'mask': 0xffffffff, 'version': 2},
63055a95caaSYouMin Chen
63155a95caaSYouMin Chen    'lp4x_f1_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'ddr_freq0_1', 'shift': 12, 'mask': 0xfff, 'version': 2},
63255a95caaSYouMin Chen    'reserved_lp4x_ddr_freq0_1_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'ddr_freq0_1', 'shift': 24, 'mask': 0xff, 'version': 2},
63355a95caaSYouMin Chen    'lp4x_f2_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'ddr_freq2_3', 'shift': 0, 'mask': 0xfff, 'version': 2},
63455a95caaSYouMin Chen    'lp4x_f3_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'ddr_freq2_3', 'shift': 12, 'mask': 0xfff, 'version': 2},
63555a95caaSYouMin Chen    'reserved_lp4x_ddr_freq2_3_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'ddr_freq2_3', 'shift': 24, 'mask': 0xff, 'version': 2},
63655a95caaSYouMin Chen    'lp4x_f4_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'ddr_freq4_5', 'shift': 0, 'mask': 0xfff, 'version': 2},
63755a95caaSYouMin Chen    'lp4x_f5_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'ddr_freq4_5', 'shift': 12, 'mask': 0xfff, 'version': 2},
63855a95caaSYouMin Chen    'reserved_lp4x_ddr_freq4_5_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'ddr_freq4_5', 'shift': 24, 'mask': 0xff, 'version': 2},
63955a95caaSYouMin Chen    'phy_lp4x_dq_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'drv_when_odten', 'shift': 0, 'mask': 0xff, 'version': 2},
64055a95caaSYouMin Chen    'phy_lp4x_ca_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'drv_when_odten', 'shift': 8, 'mask': 0xff, 'version': 2},
64155a95caaSYouMin Chen    'phy_lp4x_clk_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'drv_when_odten', 'shift': 16, 'mask': 0xff, 'version': 2},
64255a95caaSYouMin Chen    'lp4x_dq_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'drv_when_odten', 'shift': 24, 'mask': 0xff, 'version': 2},
64355a95caaSYouMin Chen    'phy_lp4x_dq_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'drv_when_odtoff', 'shift': 0, 'mask': 0xff, 'version': 2},
64455a95caaSYouMin Chen    'phy_lp4x_ca_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'drv_when_odtoff', 'shift': 8, 'mask': 0xff, 'version': 2},
64555a95caaSYouMin Chen    'phy_lp4x_clk_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'drv_when_odtoff', 'shift': 16, 'mask': 0xff, 'version': 2},
64655a95caaSYouMin Chen    'lp4x_dq_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'drv_when_odtoff', 'shift': 24, 'mask': 0xff, 'version': 2},
64755a95caaSYouMin Chen    'phy_lp4x_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'odt_info', 'shift': 8, 'mask': 0x3ff, 'version': 2},
64855a95caaSYouMin Chen    'lp4x_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'odt_info', 'shift': 0, 'mask': 0xff, 'version': 2},
64955a95caaSYouMin Chen    'lp4x_ca_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'odt_info', 'shift': 18, 'mask': 0xff, 'version': 2},
65055a95caaSYouMin Chen    'lp4x_drv_pu_cal_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'odt_info', 'shift': 26, 'mask': 0x1, 'version': 2},
65155a95caaSYouMin Chen    'lp4x_drv_pu_cal_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'odt_info', 'shift': 27, 'mask': 0x1, 'version': 2},
65255a95caaSYouMin Chen    'phy_lp4x_drv_pull_dn_en_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'odt_info', 'shift': 28, 'mask': 0x1, 'version': 2},
65355a95caaSYouMin Chen    'phy_lp4x_drv_pull_dn_en_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'odt_info', 'shift': 29, 'mask': 0x1, 'version': 2},
65455a95caaSYouMin Chen    'reserved_lp4x_odt_info_bit31': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'odt_info', 'shift': 31, 'mask': 0x1, 'version': 2},
65555a95caaSYouMin Chen    'phy_lp4x_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'dq_odten_freq', 'shift': 12, 'mask': 0xfff, 'version': 2},
65655a95caaSYouMin Chen    'lp4x_dq_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'dq_odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
65755a95caaSYouMin Chen    'reserved_lp4x_dq_odten_freq_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'dq_odten_freq', 'shift': 24, 'mask': 0xff, 'version': 2},
65855a95caaSYouMin Chen    'phy_lp4x_dq_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'sr_when_odten', 'shift': 0, 'mask': 0xff, 'version': 2},
65955a95caaSYouMin Chen    'phy_lp4x_ca_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'sr_when_odten', 'shift': 8, 'mask': 0xff, 'version': 2},
66055a95caaSYouMin Chen    'phy_lp4x_clk_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'sr_when_odten', 'shift': 16, 'mask': 0xff, 'version': 2},
66155a95caaSYouMin Chen    'reserved_lp4x_sr_when_odten_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'sr_when_odten', 'shift': 24, 'mask': 0xff, 'version': 2},
66255a95caaSYouMin Chen    'phy_lp4x_dq_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'sr_when_odtoff', 'shift': 0, 'mask': 0xff, 'version': 2},
66355a95caaSYouMin Chen    'phy_lp4x_ca_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'sr_when_odtoff', 'shift': 8, 'mask': 0xff, 'version': 2},
66455a95caaSYouMin Chen    'phy_lp4x_clk_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'sr_when_odtoff', 'shift': 16, 'mask': 0xff, 'version': 2},
66555a95caaSYouMin Chen    'reserved_lp4x_sr_when_odtoff_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'sr_when_odtoff', 'shift': 24, 'mask': 0xff, 'version': 2},
66655a95caaSYouMin Chen    'lp4x_ca_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'ca_odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
66755a95caaSYouMin Chen    'reserved_lp4x_ca_odten_freq_bit12_31': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'ca_odten_freq', 'shift': 12, 'mask': 0xfffff, 'version': 2},
66855a95caaSYouMin Chen    'phy_lp4x_cs_drv_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'cs_drv_ca_odt_info', 'shift': 0, 'mask': 0xff, 'version': 2},
66955a95caaSYouMin Chen    'phy_lp4x_cs_drv_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'cs_drv_ca_odt_info', 'shift': 8, 'mask': 0xff, 'version': 2},
67055a95caaSYouMin Chen    'lp4x_odte_ck': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'cs_drv_ca_odt_info', 'shift': 16, 'mask': 0x1, 'version': 2},
67155a95caaSYouMin Chen    'lp4x_odte_cs_en': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'cs_drv_ca_odt_info', 'shift': 17, 'mask': 0x1, 'version': 2},
67255a95caaSYouMin Chen    'lp4x_odtd_ca_en': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'cs_drv_ca_odt_info', 'shift': 18, 'mask': 0x1, 'version': 2},
67355a95caaSYouMin Chen    'reserved_lp4xcs_drv_ca_odt_info_bit19_31': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'cs_drv_ca_odt_info', 'shift': 19, 'mask': 0x1fff, 'version': 2},
67455a95caaSYouMin Chen    'phy_lp4x_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'vref_when_odten', 'shift': 0, 'mask': 0x3ff, 'version': 2},
67555a95caaSYouMin Chen    'lp4x_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'vref_when_odten', 'shift': 10, 'mask': 0x3ff, 'version': 2},
67655a95caaSYouMin Chen    'lp4x_ca_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'vref_when_odten', 'shift': 20, 'mask': 0x3ff, 'version': 2},
67755a95caaSYouMin Chen    'reserved_lp4x_vref_when_odten_bit30_31': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'vref_when_odten', 'shift': 30, 'mask': 0x3, 'version': 2},
67855a95caaSYouMin Chen    'phy_lp4x_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'vref_when_odtoff', 'shift': 0, 'mask': 0x3ff, 'version': 2},
67955a95caaSYouMin Chen    'lp4x_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'vref_when_odtoff', 'shift': 10, 'mask': 0x3ff, 'version': 2},
68055a95caaSYouMin Chen    'lp4x_ca_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'vref_when_odtoff', 'shift': 20, 'mask': 0x3ff, 'version': 2},
68155a95caaSYouMin Chen    'reserved_lp4x_vref_when_odtoff_bit30_31': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'vref_when_odtoff', 'shift': 30, 'mask': 0x3, 'version': 2},
68255a95caaSYouMin Chen
68355a95caaSYouMin Chen    'lp5_f1_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'ddr_freq0_1', 'shift': 12, 'mask': 0xfff, 'version': 2},
68455a95caaSYouMin Chen    'reserved_lp5_ddr_freq0_1_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'ddr_freq0_1', 'shift': 24, 'mask': 0xff, 'version': 2},
68555a95caaSYouMin Chen    'lp5_f2_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'ddr_freq2_3', 'shift': 0, 'mask': 0xfff, 'version': 2},
68655a95caaSYouMin Chen    'lp5_f3_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'ddr_freq2_3', 'shift': 12, 'mask': 0xfff, 'version': 2},
68755a95caaSYouMin Chen    'reserved_lp5_ddr_freq2_3_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'ddr_freq2_3', 'shift': 24, 'mask': 0xff, 'version': 2},
68855a95caaSYouMin Chen    'lp5_f4_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'ddr_freq4_5', 'shift': 0, 'mask': 0xfff, 'version': 2},
68955a95caaSYouMin Chen    'lp5_f5_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'ddr_freq4_5', 'shift': 12, 'mask': 0xfff, 'version': 2},
69055a95caaSYouMin Chen    'reserved_lp5_ddr_freq4_5_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'ddr_freq4_5', 'shift': 24, 'mask': 0xff, 'version': 2},
69155a95caaSYouMin Chen    'phy_lp5_dq_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'drv_when_odten', 'shift': 0, 'mask': 0xff, 'version': 2},
69255a95caaSYouMin Chen    'phy_lp5_ca_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'drv_when_odten', 'shift': 8, 'mask': 0xff, 'version': 2},
69355a95caaSYouMin Chen    'phy_lp5_clk_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'drv_when_odten', 'shift': 16, 'mask': 0xff, 'version': 2},
69455a95caaSYouMin Chen    'lp5_dq_drv_when_odten_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'drv_when_odten', 'shift': 24, 'mask': 0xff, 'version': 2},
69555a95caaSYouMin Chen    'phy_lp5_dq_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'drv_when_odtoff', 'shift': 0, 'mask': 0xff, 'version': 2},
69655a95caaSYouMin Chen    'phy_lp5_ca_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'drv_when_odtoff', 'shift': 8, 'mask': 0xff, 'version': 2},
69755a95caaSYouMin Chen    'phy_lp5_clk_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'drv_when_odtoff', 'shift': 16, 'mask': 0xff, 'version': 2},
69855a95caaSYouMin Chen    'lp5_dq_drv_when_odtoff_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'drv_when_odtoff', 'shift': 24, 'mask': 0xff, 'version': 2},
69955a95caaSYouMin Chen    'phy_lp5_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'odt_info', 'shift': 8, 'mask': 0x3ff, 'version': 2},
70055a95caaSYouMin Chen    'lp5_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'odt_info', 'shift': 0, 'mask': 0xff, 'version': 2},
70155a95caaSYouMin Chen    'lp5_ca_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'odt_info', 'shift': 18, 'mask': 0xff, 'version': 2},
70255a95caaSYouMin Chen    'lp5_drv_pu_cal_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'odt_info', 'shift': 26, 'mask': 0x1, 'version': 2},
70355a95caaSYouMin Chen    'lp5_drv_pu_cal_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'odt_info', 'shift': 27, 'mask': 0x1, 'version': 2},
70455a95caaSYouMin Chen    'phy_lp5_drv_pull_dn_en_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'odt_info', 'shift': 28, 'mask': 0x1, 'version': 2},
70555a95caaSYouMin Chen    'phy_lp5_drv_pull_dn_en_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'odt_info', 'shift': 29, 'mask': 0x1, 'version': 2},
70655a95caaSYouMin Chen    'reserved_lp5_odt_info_bit31': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'odt_info', 'shift': 31, 'mask': 0x1, 'version': 2},
70755a95caaSYouMin Chen    'phy_lp5_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'dq_odten_freq', 'shift': 12, 'mask': 0xfff, 'version': 2},
70855a95caaSYouMin Chen    'lp5_dq_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'dq_odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
70955a95caaSYouMin Chen    'reserved_lp5_dq_odten_freq_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'dq_odten_freq', 'shift': 24, 'mask': 0xff, 'version': 2},
71055a95caaSYouMin Chen    'phy_lp5_dq_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'sr_when_odten', 'shift': 0, 'mask': 0xff, 'version': 2},
71155a95caaSYouMin Chen    'phy_lp5_ca_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'sr_when_odten', 'shift': 8, 'mask': 0xff, 'version': 2},
71255a95caaSYouMin Chen    'phy_lp5_clk_sr_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'sr_when_odten', 'shift': 16, 'mask': 0xff, 'version': 2},
71355a95caaSYouMin Chen    'reserved_lp5_sr_when_odten_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'sr_when_odten', 'shift': 24, 'mask': 0xff, 'version': 2},
71455a95caaSYouMin Chen    'phy_lp5_dq_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'sr_when_odtoff', 'shift': 0, 'mask': 0xff, 'version': 2},
71555a95caaSYouMin Chen    'phy_lp5_ca_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'sr_when_odtoff', 'shift': 8, 'mask': 0xff, 'version': 2},
71655a95caaSYouMin Chen    'phy_lp5_clk_sr_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'sr_when_odtoff', 'shift': 16, 'mask': 0xff, 'version': 2},
71755a95caaSYouMin Chen    'reserved_lp5_sr_when_odtoff_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'sr_when_odtoff', 'shift': 24, 'mask': 0xff, 'version': 2},
71855a95caaSYouMin Chen    'lp5_ca_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'ca_odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
71955a95caaSYouMin Chen    'lp5_wck_odt_en_freq': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'ca_odten_freq', 'shift': 12, 'mask': 0xfff, 'version': 2},
72055a95caaSYouMin Chen    'lp5_wck_odt': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'ca_odten_freq', 'shift': 24, 'mask': 0xff, 'version': 2},
72155a95caaSYouMin Chen    'phy_lp5_cs_drv_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'cs_drv_ca_odt_info', 'shift': 0, 'mask': 0xff, 'version': 2},
72255a95caaSYouMin Chen    'phy_lp5_cs_drv_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'cs_drv_ca_odt_info', 'shift': 8, 'mask': 0xff, 'version': 2},
72355a95caaSYouMin Chen    'lp5_odte_ck': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'cs_drv_ca_odt_info', 'shift': 16, 'mask': 0x1, 'version': 2},
72455a95caaSYouMin Chen    'lp5_odte_cs_en': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'cs_drv_ca_odt_info', 'shift': 17, 'mask': 0x1, 'version': 2},
72555a95caaSYouMin Chen    'lp5_odtd_ca_en': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'cs_drv_ca_odt_info', 'shift': 18, 'mask': 0x1, 'version': 2},
72655a95caaSYouMin Chen    'lp5_nt_odt': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'cs_drv_ca_odt_info', 'shift': 24, 'mask': 0xff, 'version': 2},
72755a95caaSYouMin Chen    'reserved_lp5_cs_drv_ca_odt_info_bit19_23': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'cs_drv_ca_odt_info', 'shift': 19, 'mask': 0x1f, 'version': 2},
72855a95caaSYouMin Chen    'phy_lp5_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'vref_when_odten', 'shift': 0, 'mask': 0x3ff, 'version': 2},
72955a95caaSYouMin Chen    'lp5_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'vref_when_odten', 'shift': 10, 'mask': 0x3ff, 'version': 2},
73055a95caaSYouMin Chen    'lp5_ca_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'vref_when_odten', 'shift': 20, 'mask': 0x3ff, 'version': 2},
73155a95caaSYouMin Chen    'reserved_lp5_vref_when_odten_bit30_31': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'vref_when_odten', 'shift': 30, 'mask': 0x3, 'version': 2},
73255a95caaSYouMin Chen    'phy_lp5_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'vref_when_odtoff', 'shift': 0, 'mask': 0x3ff, 'version': 2},
73355a95caaSYouMin Chen    'lp5_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'vref_when_odtoff', 'shift': 10, 'mask': 0x3ff, 'version': 2},
73455a95caaSYouMin Chen    'lp5_ca_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'vref_when_odtoff', 'shift': 20, 'mask': 0x3ff, 'version': 2},
73555a95caaSYouMin Chen    'reserved_lp5_vref_when_odtoff_bit30_31': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'vref_when_odtoff', 'shift': 30, 'mask': 0x3, 'version': 2},
73655a95caaSYouMin Chen
73755a95caaSYouMin Chen    'lp4_4x_ch_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp4_4x_hash_index', 'position': 'ch_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 3},
73855a95caaSYouMin Chen    'lp4_4x_ch_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp4_4x_hash_index', 'position': 'ch_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 3},
73955a95caaSYouMin Chen    'lp4_4x_bank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp4_4x_hash_index', 'position': 'bank_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 3},
74055a95caaSYouMin Chen    'lp4_4x_bank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp4_4x_hash_index', 'position': 'bank_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 3},
74155a95caaSYouMin Chen    'lp4_4x_bank_mask2': {'value': 0, 'num_base': 'hex', 'index': 'lp4_4x_hash_index', 'position': 'bank_mask_2', 'shift': 0, 'mask': 0xffffffff, 'version': 3},
74255a95caaSYouMin Chen    'lp4_4x_bank_mask3': {'value': 0, 'num_base': 'hex', 'index': 'lp4_4x_hash_index', 'position': 'bank_mask_3', 'shift': 0, 'mask': 0xffffffff, 'version': 3},
74355a95caaSYouMin Chen    'lp4_4x_rank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp4_4x_hash_index', 'position': 'rank_mask0', 'shift': 0, 'mask': 0xffffffff, 'version': 3},
74455a95caaSYouMin Chen    'lp4_4x_rank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp4_4x_hash_index', 'position': 'rank_mask1', 'shift': 0, 'mask': 0xffffffff, 'version': 3},
74555a95caaSYouMin Chen
74655a95caaSYouMin Chen    'lp5_ch_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp5_hash_index', 'position': 'ch_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
74755a95caaSYouMin Chen    'lp5_ch_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp5_hash_index', 'position': 'ch_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
74855a95caaSYouMin Chen    'lp5_bank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp5_hash_index', 'position': 'bank_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
74955a95caaSYouMin Chen    'lp5_bank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp5_hash_index', 'position': 'bank_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
75055a95caaSYouMin Chen    'lp5_bank_mask2': {'value': 0, 'num_base': 'hex', 'index': 'lp5_hash_index', 'position': 'bank_mask_2', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
75155a95caaSYouMin Chen    'lp5_bank_mask3': {'value': 0, 'num_base': 'hex', 'index': 'lp5_hash_index', 'position': 'bank_mask_3', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
75255a95caaSYouMin Chen    'lp5_rank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp5_hash_index', 'position': 'rank_mask0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
75355a95caaSYouMin Chen    'lp5_rank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp5_hash_index', 'position': 'rank_mask1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
75455a95caaSYouMin Chen
75555a95caaSYouMin Chen    'ddr4_ch_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr4_hash_index', 'position': 'ch_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
75655a95caaSYouMin Chen    'ddr4_ch_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr4_hash_index', 'position': 'ch_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
75755a95caaSYouMin Chen    'ddr4_bank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr4_hash_index', 'position': 'bank_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
75855a95caaSYouMin Chen    'ddr4_bank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr4_hash_index', 'position': 'bank_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
75955a95caaSYouMin Chen    'ddr4_bank_mask2': {'value': 0, 'num_base': 'hex', 'index': 'ddr4_hash_index', 'position': 'bank_mask_2', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
76055a95caaSYouMin Chen    'ddr4_bank_mask3': {'value': 0, 'num_base': 'hex', 'index': 'ddr4_hash_index', 'position': 'bank_mask_3', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
76155a95caaSYouMin Chen    'ddr4_rank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr4_hash_index', 'position': 'rank_mask0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
76255a95caaSYouMin Chen    'ddr4_rank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr4_hash_index', 'position': 'rank_mask1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
76355a95caaSYouMin Chen
76455a95caaSYouMin Chen    'lp3_ch_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp3_hash_index', 'position': 'ch_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
76555a95caaSYouMin Chen    'lp3_ch_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp3_hash_index', 'position': 'ch_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
76655a95caaSYouMin Chen    'lp3_bank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp3_hash_index', 'position': 'bank_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
76755a95caaSYouMin Chen    'lp3_bank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp3_hash_index', 'position': 'bank_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
76855a95caaSYouMin Chen    'lp3_bank_mask2': {'value': 0, 'num_base': 'hex', 'index': 'lp3_hash_index', 'position': 'bank_mask_2', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
76955a95caaSYouMin Chen    'lp3_bank_mask3': {'value': 0, 'num_base': 'hex', 'index': 'lp3_hash_index', 'position': 'bank_mask_3', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
77055a95caaSYouMin Chen    'lp3_rank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp3_hash_index', 'position': 'rank_mask0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
77155a95caaSYouMin Chen    'lp3_rank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp3_hash_index', 'position': 'rank_mask1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
77255a95caaSYouMin Chen
77355a95caaSYouMin Chen    'ddr3_ch_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr3_hash_index', 'position': 'ch_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
77455a95caaSYouMin Chen    'ddr3_ch_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr3_hash_index', 'position': 'ch_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
77555a95caaSYouMin Chen    'ddr3_bank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr3_hash_index', 'position': 'bank_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
77655a95caaSYouMin Chen    'ddr3_bank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr3_hash_index', 'position': 'bank_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
77755a95caaSYouMin Chen    'ddr3_bank_mask2': {'value': 0, 'num_base': 'hex', 'index': 'ddr3_hash_index', 'position': 'bank_mask_2', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
77855a95caaSYouMin Chen    'ddr3_bank_mask3': {'value': 0, 'num_base': 'hex', 'index': 'ddr3_hash_index', 'position': 'bank_mask_3', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
77955a95caaSYouMin Chen    'ddr3_rank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr3_hash_index', 'position': 'rank_mask0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
78055a95caaSYouMin Chen    'ddr3_rank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr3_hash_index', 'position': 'rank_mask1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
78155a95caaSYouMin Chen
78255a95caaSYouMin Chen    'lp2_ch_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp2_hash_index', 'position': 'ch_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
78355a95caaSYouMin Chen    'lp2_ch_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp2_hash_index', 'position': 'ch_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
78455a95caaSYouMin Chen    'lp2_bank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp2_hash_index', 'position': 'bank_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
78555a95caaSYouMin Chen    'lp2_bank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp2_hash_index', 'position': 'bank_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
78655a95caaSYouMin Chen    'lp2_bank_mask2': {'value': 0, 'num_base': 'hex', 'index': 'lp2_hash_index', 'position': 'bank_mask_2', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
78755a95caaSYouMin Chen    'lp2_bank_mask3': {'value': 0, 'num_base': 'hex', 'index': 'lp2_hash_index', 'position': 'bank_mask_3', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
78855a95caaSYouMin Chen    'lp2_rank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp2_hash_index', 'position': 'rank_mask0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
78955a95caaSYouMin Chen    'lp2_rank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp2_hash_index', 'position': 'rank_mask1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
79055a95caaSYouMin Chen
79155a95caaSYouMin Chen    'ddr2_ch_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr2_hash_index', 'position': 'ch_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
79255a95caaSYouMin Chen    'ddr2_ch_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr2_hash_index', 'position': 'ch_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
79355a95caaSYouMin Chen    'ddr2_bank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr2_hash_index', 'position': 'bank_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
79455a95caaSYouMin Chen    'ddr2_bank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr2_hash_index', 'position': 'bank_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
79555a95caaSYouMin Chen    'ddr2_bank_mask2': {'value': 0, 'num_base': 'hex', 'index': 'ddr2_hash_index', 'position': 'bank_mask_2', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
79655a95caaSYouMin Chen    'ddr2_bank_mask3': {'value': 0, 'num_base': 'hex', 'index': 'ddr2_hash_index', 'position': 'bank_mask_3', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
79755a95caaSYouMin Chen    'ddr2_rank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr2_hash_index', 'position': 'rank_mask0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
79855a95caaSYouMin Chen    'ddr2_rank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr2_hash_index', 'position': 'rank_mask1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
79955a95caaSYouMin Chen
80055a95caaSYouMin Chen    'ddr5_ch_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr5_hash_index', 'position': 'ch_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
80155a95caaSYouMin Chen    'ddr5_ch_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr5_hash_index', 'position': 'ch_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
80255a95caaSYouMin Chen    'ddr5_bank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr5_hash_index', 'position': 'bank_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
80355a95caaSYouMin Chen    'ddr5_bank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr5_hash_index', 'position': 'bank_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
80455a95caaSYouMin Chen    'ddr5_bank_mask2': {'value': 0, 'num_base': 'hex', 'index': 'ddr5_hash_index', 'position': 'bank_mask_2', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
80555a95caaSYouMin Chen    'ddr5_bank_mask3': {'value': 0, 'num_base': 'hex', 'index': 'ddr5_hash_index', 'position': 'bank_mask_3', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
80655a95caaSYouMin Chen    'ddr5_rank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr5_hash_index', 'position': 'rank_mask0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
80755a95caaSYouMin Chen    'ddr5_rank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr5_hash_index', 'position': 'rank_mask1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
80855a95caaSYouMin Chen
80955a95caaSYouMin Chen    'reserved_skew_ddr3_skew_freq_bit12_31': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_skew_freq', 'shift': 12, 'mask': 0xfffff, 'version': 4},
81055a95caaSYouMin Chen    'ddr3_skew_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'skew_index', 'position': 'ddr3_skew_freq', 'shift': 0, 'mask': 0xfff, 'version': 4},
81155a95caaSYouMin Chen    'ddr3_ca0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_2', 'shift': 8, 'mask': 0xff, 'version': 4},
81255a95caaSYouMin Chen    'ddr3_ca1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_0', 'shift': 0, 'mask': 0xff, 'version': 4},
81355a95caaSYouMin Chen    'ddr3_ca2_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_1', 'shift': 24, 'mask': 0xff, 'version': 4},
81455a95caaSYouMin Chen    'ddr3_ca3_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_1', 'shift': 8, 'mask': 0xff, 'version': 4},
81555a95caaSYouMin Chen    'ddr3_ca4_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_1', 'shift': 16, 'mask': 0xff, 'version': 4},
81655a95caaSYouMin Chen    'ddr3_ca5_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_2', 'shift': 24, 'mask': 0xff, 'version': 4},
81755a95caaSYouMin Chen    'ddr3_ca6_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_1', 'shift': 0, 'mask': 0xff, 'version': 4},
81855a95caaSYouMin Chen    'ddr3_ca7_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_2', 'shift': 0, 'mask': 0xff, 'version': 4},
81955a95caaSYouMin Chen    'ddr3_ca8_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_3', 'shift': 16, 'mask': 0xff, 'version': 4},
82055a95caaSYouMin Chen    'ddr3_ca9_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_0', 'shift': 24, 'mask': 0xff, 'version': 4},
82155a95caaSYouMin Chen    'ddr3_ca10_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_3', 'shift': 24, 'mask': 0xff, 'version': 4},
82255a95caaSYouMin Chen    'ddr3_ca11_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_2', 'shift': 16, 'mask': 0xff, 'version': 4},
82355a95caaSYouMin Chen    'ddr3_ca12_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_4', 'shift': 0, 'mask': 0xff, 'version': 4},
82455a95caaSYouMin Chen    'ddr3_ca13_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_0', 'shift': 8, 'mask': 0xff, 'version': 4},
82555a95caaSYouMin Chen    'ddr3_ca14_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_0', 'shift': 16, 'mask': 0xff, 'version': 4},
82655a95caaSYouMin Chen    'ddr3_ca15_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_5', 'shift': 16, 'mask': 0xff, 'version': 4},
82755a95caaSYouMin Chen    'ddr3_ras_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_5', 'shift': 8, 'mask': 0xff, 'version': 4},
82855a95caaSYouMin Chen    'ddr3_cas_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_7', 'shift': 24, 'mask': 0xff, 'version': 4},
82955a95caaSYouMin Chen    'ddr3_ba0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_5', 'shift': 24, 'mask': 0xff, 'version': 4},
83055a95caaSYouMin Chen    'ddr3_ba1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_3', 'shift': 0, 'mask': 0xff, 'version': 4},
83155a95caaSYouMin Chen    'ddr3_ba2_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_4', 'shift': 8, 'mask': 0xff, 'version': 4},
83255a95caaSYouMin Chen    'ddr3_we_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_6', 'shift': 8, 'mask': 0xff, 'version': 4},
83355a95caaSYouMin Chen    'ddr3_cke0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_4', 'shift': 24, 'mask': 0xff, 'version': 4},
83455a95caaSYouMin Chen    'ddr3_cke1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_5', 'shift': 0, 'mask': 0xff, 'version': 4},
83555a95caaSYouMin Chen    'ddr3_ckn_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_6', 'shift': 24, 'mask': 0xff, 'version': 4},
83655a95caaSYouMin Chen    'ddr3_ckp_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_6', 'shift': 16, 'mask': 0xff, 'version': 4},
83755a95caaSYouMin Chen    'ddr3_odt0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_3', 'shift': 8, 'mask': 0xff, 'version': 4},
83855a95caaSYouMin Chen    'ddr3_odt1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_6', 'shift': 0, 'mask': 0xff, 'version': 4},
83955a95caaSYouMin Chen    'ddr3_cs0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_7', 'shift': 0, 'mask': 0xff, 'version': 4},
84055a95caaSYouMin Chen    'ddr3_cs1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_7', 'shift': 16, 'mask': 0xff, 'version': 4},
84155a95caaSYouMin Chen    'ddr3_resetn_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_7', 'shift': 8, 'mask': 0xff, 'version': 4},
84255a95caaSYouMin Chen
84355a95caaSYouMin Chen    'reserved_skew_ddr4_skew_freq_bit12_31': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_skew_freq', 'shift': 12, 'mask': 0xfffff, 'version': 4},
84455a95caaSYouMin Chen    'ddr4_skew_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'skew_index', 'position': 'ddr4_skew_freq', 'shift': 0, 'mask': 0xfff, 'version': 4},
84555a95caaSYouMin Chen    'ddr4_ca0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_0', 'shift': 24, 'mask': 0xff, 'version': 4},
84655a95caaSYouMin Chen    'ddr4_ca1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_0', 'shift': 16, 'mask': 0xff, 'version': 4},
84755a95caaSYouMin Chen    'ddr4_ca2_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_0', 'shift': 8, 'mask': 0xff, 'version': 4},
84855a95caaSYouMin Chen    'ddr4_ca3_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_0', 'shift': 0, 'mask': 0xff, 'version': 4},
84955a95caaSYouMin Chen    'ddr4_ca4_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_1', 'shift': 24, 'mask': 0xff, 'version': 4},
85055a95caaSYouMin Chen    'ddr4_ca5_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_1', 'shift': 16, 'mask': 0xff, 'version': 4},
85155a95caaSYouMin Chen    'ddr4_ca6_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_1', 'shift': 8, 'mask': 0xff, 'version': 4},
85255a95caaSYouMin Chen    'ddr4_ca7_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_1', 'shift': 0, 'mask': 0xff, 'version': 4},
85355a95caaSYouMin Chen    'ddr4_ca8_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_2', 'shift': 24, 'mask': 0xff, 'version': 4},
85455a95caaSYouMin Chen    'ddr4_ca9_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_2', 'shift': 16, 'mask': 0xff, 'version': 4},
85555a95caaSYouMin Chen    'ddr4_ca10_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_2', 'shift': 8, 'mask': 0xff, 'version': 4},
85655a95caaSYouMin Chen    'ddr4_ca11_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_2', 'shift': 0, 'mask': 0xff, 'version': 4},
85755a95caaSYouMin Chen    'ddr4_ca12_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_3', 'shift': 24, 'mask': 0xff, 'version': 4},
85855a95caaSYouMin Chen    'ddr4_ca13_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_3', 'shift': 16, 'mask': 0xff, 'version': 4},
85955a95caaSYouMin Chen    'ddr4_ca14_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_3', 'shift': 8, 'mask': 0xff, 'version': 4},
86055a95caaSYouMin Chen    'ddr4_ca15_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_3', 'shift': 0, 'mask': 0xff, 'version': 4},
86155a95caaSYouMin Chen    'ddr4_ca16_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_4', 'shift': 24, 'mask': 0xff, 'version': 4},
86255a95caaSYouMin Chen    'ddr4_ca17_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_4', 'shift': 16, 'mask': 0xff, 'version': 4},
86355a95caaSYouMin Chen    'ddr4_ba0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_4', 'shift': 8, 'mask': 0xff, 'version': 4},
86455a95caaSYouMin Chen    'ddr4_ba1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_4', 'shift': 0, 'mask': 0xff, 'version': 4},
86555a95caaSYouMin Chen    'ddr4_bg0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_5', 'shift': 24, 'mask': 0xff, 'version': 4},
86655a95caaSYouMin Chen    'ddr4_bg1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_5', 'shift': 16, 'mask': 0xff, 'version': 4},
86755a95caaSYouMin Chen    'ddr4_cke0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_5', 'shift': 8, 'mask': 0xff, 'version': 4},
86855a95caaSYouMin Chen    'ddr4_cke1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_5', 'shift': 0, 'mask': 0xff, 'version': 4},
86955a95caaSYouMin Chen    'ddr4_ckn_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_6', 'shift': 24, 'mask': 0xff, 'version': 4},
87055a95caaSYouMin Chen    'ddr4_ckp_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_6', 'shift': 16, 'mask': 0xff, 'version': 4},
87155a95caaSYouMin Chen    'ddr4_odt0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_6', 'shift': 8, 'mask': 0xff, 'version': 4},
87255a95caaSYouMin Chen    'ddr4_odt1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_6', 'shift': 0, 'mask': 0xff, 'version': 4},
87355a95caaSYouMin Chen    'ddr4_cs0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_7', 'shift': 24, 'mask': 0xff, 'version': 4},
87455a95caaSYouMin Chen    'ddr4_cs1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_7', 'shift': 16, 'mask': 0xff, 'version': 4},
87555a95caaSYouMin Chen    'ddr4_resetn_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_7', 'shift': 8, 'mask': 0xff, 'version': 4},
87655a95caaSYouMin Chen    'ddr4_actn_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_7', 'shift': 0, 'mask': 0xff, 'version': 4},
87755a95caaSYouMin Chen
87855a95caaSYouMin Chen    'reserved_skew_lp3_skew_freq_bit12_31': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_skew_freq', 'shift': 12, 'mask': 0xfffff, 'version': 4},
87955a95caaSYouMin Chen    'lp3_skew_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'skew_index', 'position': 'lp3_skew_freq', 'shift': 0, 'mask': 0xfff, 'version': 4},
88055a95caaSYouMin Chen    'lp3_ca0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_3', 'shift': 0, 'mask': 0xff, 'version': 4},
88155a95caaSYouMin Chen    'lp3_ca1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_4', 'shift': 0, 'mask': 0xff, 'version': 4},
88255a95caaSYouMin Chen    'lp3_ca2_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_2', 'shift': 16, 'mask': 0xff, 'version': 4},
88355a95caaSYouMin Chen    'lp3_ca3_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_3', 'shift': 16, 'mask': 0xff, 'version': 4},
88455a95caaSYouMin Chen    'lp3_ca4_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_3', 'shift': 24, 'mask': 0xff, 'version': 4},
88555a95caaSYouMin Chen    'lp3_ca5_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_1', 'shift': 24, 'mask': 0xff, 'version': 4},
88655a95caaSYouMin Chen    'lp3_ca6_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_2', 'shift': 24, 'mask': 0xff, 'version': 4},
88755a95caaSYouMin Chen    'lp3_ca7_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_2', 'shift': 0, 'mask': 0xff, 'version': 4},
88855a95caaSYouMin Chen    'lp3_ca8_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_5', 'shift': 24, 'mask': 0xff, 'version': 4},
88955a95caaSYouMin Chen    'lp3_ca9_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_7', 'shift': 0, 'mask': 0xff, 'version': 4},
89055a95caaSYouMin Chen    'lp3_cke0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_4', 'shift': 8, 'mask': 0xff, 'version': 4},
89155a95caaSYouMin Chen    'lp3_cke1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_5', 'shift': 0, 'mask': 0xff, 'version': 4},
89255a95caaSYouMin Chen    'lp3_ckn_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_6', 'shift': 24, 'mask': 0xff, 'version': 4},
89355a95caaSYouMin Chen    'lp3_ckp_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_6', 'shift': 16, 'mask': 0xff, 'version': 4},
89455a95caaSYouMin Chen    'lp3_odt0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_6', 'shift': 8, 'mask': 0xff, 'version': 4},
89555a95caaSYouMin Chen    'lp3_odt1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_6', 'shift': 0, 'mask': 0xff, 'version': 4},
89655a95caaSYouMin Chen    'lp3_odt2_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_0', 'shift': 24, 'mask': 0xff, 'version': 4},
89755a95caaSYouMin Chen    'lp3_odt3_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_0', 'shift': 8, 'mask': 0xff, 'version': 4},
89855a95caaSYouMin Chen    'lp3_cs0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_7', 'shift': 16, 'mask': 0xff, 'version': 4},
89955a95caaSYouMin Chen    'lp3_cs1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_7', 'shift': 24, 'mask': 0xff, 'version': 4},
90055a95caaSYouMin Chen    'lp3_cs2_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_1', 'shift': 8, 'mask': 0xff, 'version': 4},
90155a95caaSYouMin Chen    'lp3_cs3_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_3', 'shift': 8, 'mask': 0xff, 'version': 4},
90255a95caaSYouMin Chen
90355a95caaSYouMin Chen    'reserved_skew_lp4_skew_freq_bit12_31': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
90455a95caaSYouMin Chen    'lp4_skew_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
90555a95caaSYouMin Chen    'lp4_ca0_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
90655a95caaSYouMin Chen    'lp4_ca1_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
90755a95caaSYouMin Chen    'lp4_ca2_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
90855a95caaSYouMin Chen    'lp4_ca3_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
90955a95caaSYouMin Chen    'lp4_ca4_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
91055a95caaSYouMin Chen    'lp4_ca5_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
91155a95caaSYouMin Chen    'lp4_odt0_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
91255a95caaSYouMin Chen    'lp4_odt1_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
91355a95caaSYouMin Chen    'lp4_cke0_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
91455a95caaSYouMin Chen    'lp4_cke1_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
91555a95caaSYouMin Chen    'lp4_ckn_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
91655a95caaSYouMin Chen    'lp4_ckp_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
91755a95caaSYouMin Chen    'lp4_cs0_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
91855a95caaSYouMin Chen    'lp4_cs1_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
91955a95caaSYouMin Chen    'lp4_ca0_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
92055a95caaSYouMin Chen    'lp4_ca1_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
92155a95caaSYouMin Chen    'lp4_ca2_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
92255a95caaSYouMin Chen    'lp4_ca3_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
92355a95caaSYouMin Chen    'lp4_ca4_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
92455a95caaSYouMin Chen    'lp4_ca5_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
92555a95caaSYouMin Chen    'lp4_odt0_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
92655a95caaSYouMin Chen    'lp4_odt1_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
92755a95caaSYouMin Chen    'lp4_cke0_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
92855a95caaSYouMin Chen    'lp4_cke1_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
92955a95caaSYouMin Chen    'lp4_ckn_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
93055a95caaSYouMin Chen    'lp4_ckp_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
93155a95caaSYouMin Chen    'lp4_cs0_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
93255a95caaSYouMin Chen    'lp4_cs1_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
93355a95caaSYouMin Chen    'lp4_resetn_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
93455a95caaSYouMin Chen
93555a95caaSYouMin Chen    'reserved_skew_lp5_skew_freq_bit12_31': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
93655a95caaSYouMin Chen    'lp5_skew_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
93755a95caaSYouMin Chen    'lp5_ca0_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
93855a95caaSYouMin Chen    'lp5_ca1_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
93955a95caaSYouMin Chen    'lp5_ca2_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
94055a95caaSYouMin Chen    'lp5_ca3_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
94155a95caaSYouMin Chen    'lp5_ca4_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
94255a95caaSYouMin Chen    'lp5_ca5_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
94355a95caaSYouMin Chen    'lp5_ca6_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
94455a95caaSYouMin Chen    'lp5_ckn_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
94555a95caaSYouMin Chen    'lp5_ckp_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
94655a95caaSYouMin Chen    'lp5_cs0_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
94755a95caaSYouMin Chen    'lp5_cs1_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
94855a95caaSYouMin Chen    'lp5_ca0_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
94955a95caaSYouMin Chen    'lp5_ca1_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
95055a95caaSYouMin Chen    'lp5_ca2_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
95155a95caaSYouMin Chen    'lp5_ca3_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
95255a95caaSYouMin Chen    'lp5_ca4_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
95355a95caaSYouMin Chen    'lp5_ca5_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
95455a95caaSYouMin Chen    'lp5_ca6_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
95555a95caaSYouMin Chen    'lp5_ckn_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
95655a95caaSYouMin Chen    'lp5_ckp_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
95755a95caaSYouMin Chen    'lp5_cs0_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
95855a95caaSYouMin Chen    'lp5_cs1_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
95955a95caaSYouMin Chen    'lp5_resetn_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
960*4026ce53SZhihuan He
961*4026ce53SZhihuan He    'uart_addr': {'value': 0, 'num_base': 'hex', 'index': 'uart_iomux_index_u16', 'position': 'uart_addr', 'shift': 0, 'mask': 0xffffffff, 'version': 6},
96255a95caaSYouMin Chen}
96355a95caaSYouMin Chen
964*4026ce53SZhihuan Heuart_iomux_info_template = {
965*4026ce53SZhihuan He    'uart_iomux_addr0': {'value': 0, 'num_base': 'hex', 'index': 'uart_iomux_index_u16', 'position': 'uart_iomux_addr0', 'shift': 0, 'mask': 0xffffffff, 'version': 6},
966*4026ce53SZhihuan He    'uart_iomux_mask0': {'value': 0, 'num_base': 'hex', 'index': 'uart_iomux_index_u16', 'position': 'uart_iomux_val0', 'shift': 0, 'mask': 0xffffffff, 'version': 6},
967*4026ce53SZhihuan He    'uart_iomux_val0': {'value': 0, 'num_base': 'hex', 'index': 'uart_iomux_index_u16', 'position': 'uart_iomux_val0', 'shift': 0, 'mask': 0xffffffff, 'version': 6},
968*4026ce53SZhihuan He}
96955a95caaSYouMin Chen
97055a95caaSYouMin Chendef bin_data_2_info(info_from_bin, read_out, ddrbin_index, version, info_from_txt):
97155a95caaSYouMin Chen    info_from_bin['start tag']['value'] = 0x12345678
97255a95caaSYouMin Chen
97355a95caaSYouMin Chen    if version < 2:
97455a95caaSYouMin Chen        for key, value in info_from_bin.items():
97555a95caaSYouMin Chen            if value['version'] <= version:
97655a95caaSYouMin Chen                for i in range(len(read_out)):
97755a95caaSYouMin Chen                    # read_out is sdram_head_info_v0 = [[offset, value], ...]
97855a95caaSYouMin Chen                    # info_from_bin v0_info = [offset, shift, mask]
97955a95caaSYouMin Chen                    if value['v0_info'][0] == read_out[i][0]:
98055a95caaSYouMin Chen                        temp_value = (read_out[i][1] >> value['v0_info'][1]) & value['v0_info'][2]
98155a95caaSYouMin Chen                        info_from_bin[key]['value'] = temp_value
98255a95caaSYouMin Chen                        #print(f"D: {key} = {value} {hex(value['v0_info'][0])}={read_out[i][1]}")
98355a95caaSYouMin Chen    elif version <= version_max:
98455a95caaSYouMin Chen        for index_name in ddrbin_index:
985*4026ce53SZhihuan He            if "reserved" in index_name:
986*4026ce53SZhihuan He                continue
987*4026ce53SZhihuan He            if "index_u16" in index_name:
988*4026ce53SZhihuan He                head_info_name = index_name[:-10]+'_info'
989*4026ce53SZhihuan He            else:
99055a95caaSYouMin Chen                head_info_name = index_name[:-6]+'_info'
99155a95caaSYouMin Chen            if ddrbin_index[index_name]['offset'] != 0 and 'skew' not in index_name:
99255a95caaSYouMin Chen                for key, value in info_from_bin.items():
99355a95caaSYouMin Chen                    if value['index'] == index_name and value['version'] <= version:
99455a95caaSYouMin Chen                        temp_value = read_out[head_info_name][value['position']]
99555a95caaSYouMin Chen                        temp_value = (temp_value >> value['shift']) & value['mask']
99655a95caaSYouMin Chen                        info_from_bin[key]['value'] = temp_value
99755a95caaSYouMin Chen                        #print(f"D: {key} = {value} {value['position']}={temp_value}")
99855a95caaSYouMin Chen            elif ddrbin_index[index_name]['offset'] != 0 and 'skew' in index_name:
99955a95caaSYouMin Chen                if chip_info == 'rk3528':
100055a95caaSYouMin Chen                    for key, value in info_from_bin.items():
100155a95caaSYouMin Chen                        if value['index'] == index_name and value['version'] <= version:
100255a95caaSYouMin Chen                            position_1 = value['position'][ : value['position'].find('_')]
100355a95caaSYouMin Chen                            position_2 = value['position'][value['position'].find('_') + 1 : ]
100455a95caaSYouMin Chen                            # read_out is sdram_head_info_v2 or sdram_head_info_v5
100555a95caaSYouMin Chen                            if position_1 in list(read_out[head_info_name].keys()):
100655a95caaSYouMin Chen                                temp_value = read_out[head_info_name][position_1][position_2]
100755a95caaSYouMin Chen                                temp_value = (temp_value >> value['shift']) & value['mask']
100855a95caaSYouMin Chen                                info_from_bin[key]['value'] = temp_value
100955a95caaSYouMin Chen                                #print(f"D: {key} = {value} {value['position']}={temp_value}")
101055a95caaSYouMin Chen
101155a95caaSYouMin Chen    return 0
101255a95caaSYouMin Chen
101355a95caaSYouMin Chen
101455a95caaSYouMin Chendef modefy_2_bin_data(info_from_txt, write_in, ddrbin_index, version):
101555a95caaSYouMin Chen    global rk3528_skew_info
101655a95caaSYouMin Chen
101755a95caaSYouMin Chen    if version < 2:
101855a95caaSYouMin Chen        for key, value in info_from_txt.items():
101955a95caaSYouMin Chen            if value['version'] <= version:
102055a95caaSYouMin Chen                for i in range(len(write_in)):
102155a95caaSYouMin Chen                    if value['v0_info'][0] == write_in[i][0]:
102255a95caaSYouMin Chen                        write_in[i][1] |= (value['value'] << value['v0_info'][1])
102355a95caaSYouMin Chen    elif version <= version_max:
102455a95caaSYouMin Chen        for index_name in ddrbin_index:
1025*4026ce53SZhihuan He            if "reserved" in index_name:
1026*4026ce53SZhihuan He                continue
1027*4026ce53SZhihuan He            if "index_u16" in index_name:
1028*4026ce53SZhihuan He                head_info_name = index_name[:-10]+'_info'
1029*4026ce53SZhihuan He            else:
103055a95caaSYouMin Chen                head_info_name = index_name[:-6]+'_info'
103155a95caaSYouMin Chen            if ddrbin_index[index_name]['offset'] != 0 and 'skew' not in index_name:
103255a95caaSYouMin Chen                position_name = 'null'
103355a95caaSYouMin Chen                for key, value in info_from_txt.items():
103455a95caaSYouMin Chen                    if value['index'] == index_name and value['version'] <= version:
103555a95caaSYouMin Chen                        if position_name != value['position']:
103655a95caaSYouMin Chen                            position_name = value['position']
103755a95caaSYouMin Chen                            position_value = 0
103855a95caaSYouMin Chen                        position_value |= (value['value'] << value['shift'])
103955a95caaSYouMin Chen                        write_in[head_info_name][value['position']] = position_value
104055a95caaSYouMin Chen                        #print(f"D: {key} = {value}, {value['position']}={position_value}")
104155a95caaSYouMin Chen            elif ddrbin_index[index_name]['offset'] != 0 and 'skew' in index_name:
104255a95caaSYouMin Chen                if chip_info == 'rk3528':
104355a95caaSYouMin Chen                    write_in.update({'skew_info' : rk3528_skew_info})
104455a95caaSYouMin Chen                    if rk3528_skew_info['skew_sub_version'] == 0x1:
104555a95caaSYouMin Chen                        for key, value in info_from_txt.items():
104655a95caaSYouMin Chen                            if value['index'] == index_name and value['version'] <= version:
104755a95caaSYouMin Chen                                position_1 = value['position'][ : value['position'].find('_')]
104855a95caaSYouMin Chen                                position_2 = value['position'][value['position'].find('_') + 1 : ]
104955a95caaSYouMin Chen                                if position_1 in list(write_in[head_info_name].keys()):
105055a95caaSYouMin Chen                                    temp_value =  write_in[head_info_name][position_1][position_2]
105155a95caaSYouMin Chen                                    temp_value &= ~(value['mask'] << value['shift'])
105255a95caaSYouMin Chen                                    temp_value |= value['value'] << value['shift']
105355a95caaSYouMin Chen                                    write_in[head_info_name][position_1][position_2] = temp_value
105455a95caaSYouMin Chen                                    #print(f"D: {key} = {value}, {temp_value}")
105555a95caaSYouMin Chen
105655a95caaSYouMin Chen    #print(f"D: write_in = {write_in}")
105755a95caaSYouMin Chen    return 0
105855a95caaSYouMin Chen
105955a95caaSYouMin Chen
106055a95caaSYouMin Chendef write_in_bin_data_v2(filebin, bin_skew_offset, write_in, ddrbin_index, info_from_txt, version):
106155a95caaSYouMin Chen    for index_name in ddrbin_index:
1062*4026ce53SZhihuan He        if "reserved" in index_name:
1063*4026ce53SZhihuan He                continue
1064*4026ce53SZhihuan He        if "index_u16" in index_name:
1065*4026ce53SZhihuan He                head_info_name = index_name[:-10]+'_info'
1066*4026ce53SZhihuan He        else:
106755a95caaSYouMin Chen            head_info_name = index_name[:-6]+'_info'
1068*4026ce53SZhihuan He        if head_info_name not in write_in:
1069*4026ce53SZhihuan He            continue
107055a95caaSYouMin Chen        if ddrbin_index[index_name]['offset'] != 0 and 'skew' not in index_name:
107155a95caaSYouMin Chen            filebin.seek(bin_skew_offset + (ddrbin_index[index_name]['offset'] - 1) * 4)
107255a95caaSYouMin Chen            index_size = ddrbin_index[index_name]['size']
107355a95caaSYouMin Chen            for key in write_in[head_info_name]:
107455a95caaSYouMin Chen                if index_size > 0:
107555a95caaSYouMin Chen                    try:
107655a95caaSYouMin Chen                        filebin.write(write_in[head_info_name][key].to_bytes(4,byteorder='little'))
107755a95caaSYouMin Chen                        #print(f"D: {head_info_name} {key} = {write_in[head_info_name][key]}")
107855a95caaSYouMin Chen                        index_size -= 1
107955a95caaSYouMin Chen                    except:
108055a95caaSYouMin Chen                        print("write bin {} to file fail".format(head_info_name))
108155a95caaSYouMin Chen                        return -1
108255a95caaSYouMin Chen        elif ddrbin_index[index_name]['offset'] != 0 and 'skew' in index_name:
108355a95caaSYouMin Chen            if chip_info == 'rk3528' and write_in[head_info_name]["skew_sub_version"] == 1:
108455a95caaSYouMin Chen                filebin.seek(bin_skew_offset + (ddrbin_index[index_name]['offset'] - 1) * 4)
108555a95caaSYouMin Chen                index_size = ddrbin_index[index_name]['size']
108655a95caaSYouMin Chen                for key in write_in[head_info_name]:
108755a95caaSYouMin Chen                    if key == 'skew_sub_version':
108855a95caaSYouMin Chen                        temp_value = write_in[head_info_name]["skew_sub_version"]
108955a95caaSYouMin Chen                        filebin.write(temp_value.to_bytes(4,byteorder='little'))
109055a95caaSYouMin Chen                        continue
109155a95caaSYouMin Chen                    for key_1 in write_in[head_info_name][key]:
109255a95caaSYouMin Chen                        if index_size > 0:
109355a95caaSYouMin Chen                            try:
109455a95caaSYouMin Chen                                temp_value = write_in[head_info_name][key][key_1]
109555a95caaSYouMin Chen                                #print(f"D: {head_info_name} {key}.{key_1} = {temp_value}")
109655a95caaSYouMin Chen                                filebin.write(temp_value.to_bytes(4,byteorder='little'))
109755a95caaSYouMin Chen                                index_size -= 1
109855a95caaSYouMin Chen                            except:
109955a95caaSYouMin Chen                                print("write bin {} to file fail".format(head_info_name))
110055a95caaSYouMin Chen                                return -1
110155a95caaSYouMin Chen
110255a95caaSYouMin Chen    return 0
110355a95caaSYouMin Chen
1104*4026ce53SZhihuan Hedef modify_global_uart_2_uart_iomux(info_from_txt, ddrbin_index, version):
1105*4026ce53SZhihuan He    if version < 6:
1106*4026ce53SZhihuan He        return 0
1107*4026ce53SZhihuan He    uart_id = info_from_txt.get('uart id', {}).get('value')
1108*4026ce53SZhihuan He    uart_iomux = info_from_txt.get('uart iomux', {}).get('value')
1109*4026ce53SZhihuan He
1110*4026ce53SZhihuan He    for chips, config in uart_id_2_iomux.items():
1111*4026ce53SZhihuan He        if chip_info in chips:
1112*4026ce53SZhihuan He            uart = 'uart' + str(uart_id)
1113*4026ce53SZhihuan He            uart_config = config.get(uart)
1114*4026ce53SZhihuan He            if not uart_config:
1115*4026ce53SZhihuan He                print("Warn: uart_iomux_index_u16: {} will disable uart!".format(uart))
1116*4026ce53SZhihuan He                for key, value in info_from_txt.items():
1117*4026ce53SZhihuan He                    if value['index'] == 'uart_iomux_index_u16':
1118*4026ce53SZhihuan He                        value['value'] = 0
1119*4026ce53SZhihuan He                return 0
1120*4026ce53SZhihuan He
1121*4026ce53SZhihuan He            mode = 'm' + str(uart_iomux)
1122*4026ce53SZhihuan He            iomux_config = uart_config.get(mode)
1123*4026ce53SZhihuan He            if not iomux_config:
1124*4026ce53SZhihuan He                print("Error: uart_iomux_index_u16: Mode {} not found for {} in configuration for chip {}.".format(mode, uart, chip_info))
1125*4026ce53SZhihuan He                return -1
1126*4026ce53SZhihuan He
1127*4026ce53SZhihuan He            i = 0
1128*4026ce53SZhihuan He            for key, value in info_from_txt.items():
1129*4026ce53SZhihuan He                if value['index'] == 'uart_iomux_index_u16':
1130*4026ce53SZhihuan He                    value['value'] = iomux_config[i]
1131*4026ce53SZhihuan He                    i += 1
1132*4026ce53SZhihuan He                    #print(f"D: update info_from_txt[{key}] = {value['value']}")
1133*4026ce53SZhihuan He
1134*4026ce53SZhihuan He    return 0
113555a95caaSYouMin Chen
113655a95caaSYouMin Chen#info from bin + info from txt generate to loader parameters
113755a95caaSYouMin Chendef txt_data_2_bin_data(info_from_txt, info_from_bin, ddrbin_index, write_in, version):
113855a95caaSYouMin Chen    print("\nnew bin config:")
113955a95caaSYouMin Chen
1140*4026ce53SZhihuan He    need_modify_uart_iomux = False
114155a95caaSYouMin Chen    for key, value in info_from_txt.items():
114255a95caaSYouMin Chen        if key == 'start tag':
114355a95caaSYouMin Chen            continue
114455a95caaSYouMin Chen        if (info_from_txt[key]['value'] == 0) and (key not in update_key_list):
114555a95caaSYouMin Chen            info_from_txt[key]['value'] = info_from_bin[key]['value']
114655a95caaSYouMin Chen        else:
1147*4026ce53SZhihuan He            if info_from_txt[key]['index'] == 'uart_iomux_index_u16':
1148*4026ce53SZhihuan He                continue
114955a95caaSYouMin Chen            if info_from_txt[key]['num_base'] == 'hex':
115055a95caaSYouMin Chen                print("{}: {}".format(key, hex(info_from_txt[key]['value'])))
115155a95caaSYouMin Chen            else:
115255a95caaSYouMin Chen                print("{}: {}".format(key, info_from_txt[key]['value']))
1153*4026ce53SZhihuan He            if key == 'uart id' or key == 'uart iomux':
1154*4026ce53SZhihuan He                need_modify_uart_iomux = True
1155*4026ce53SZhihuan He
1156*4026ce53SZhihuan He    if need_modify_uart_iomux:
1157*4026ce53SZhihuan He        ret = modify_global_uart_2_uart_iomux(info_from_txt, ddrbin_index, version)
1158*4026ce53SZhihuan He        if ret != 0:
1159*4026ce53SZhihuan He            return -1
116055a95caaSYouMin Chen    #print(info_from_txt)
116155a95caaSYouMin Chen
116255a95caaSYouMin Chen    modefy_2_bin_data(info_from_txt, write_in, ddrbin_index, version)
116355a95caaSYouMin Chen
116455a95caaSYouMin Chen    return 0
116555a95caaSYouMin Chen
1166*4026ce53SZhihuan Hedef uart_iomux_count_calculation(ddrbin_index, info_from_txt, info_from_bin, read_out, version):
1167*4026ce53SZhihuan He    if version <= version_max:
1168*4026ce53SZhihuan He        index_size = 0
1169*4026ce53SZhihuan He        for index_name in ddrbin_index:
1170*4026ce53SZhihuan He            if "uart_iomux_index_u16" in index_name:
1171*4026ce53SZhihuan He                index_size = ddrbin_index[index_name]['size']
1172*4026ce53SZhihuan He        if (index_size == 0):
1173*4026ce53SZhihuan He            return -1
1174*4026ce53SZhihuan He        head_info_name = 'uart_iomux_info'
1175*4026ce53SZhihuan He        for i in range(index_size // 3):
1176*4026ce53SZhihuan He            addr = 'uart_iomux_addr' + str(i)
1177*4026ce53SZhihuan He            mask = 'uart_iomux_mask' + str(i)
1178*4026ce53SZhihuan He            value = 'uart_iomux_val' + str(i)
1179*4026ce53SZhihuan He            read_out[head_info_name][addr] = 0
1180*4026ce53SZhihuan He            read_out[head_info_name][mask] = 0
1181*4026ce53SZhihuan He            read_out[head_info_name][value] = 0
1182*4026ce53SZhihuan He            #print(f"D:  read_out[head_info_name] = {read_out[head_info_name]}")
1183*4026ce53SZhihuan He            new_addr_dic2 = {addr: uart_iomux_info_template['uart_iomux_addr0'].copy()}
1184*4026ce53SZhihuan He            new_mask_dic2 = {mask: uart_iomux_info_template['uart_iomux_mask0'].copy()}
1185*4026ce53SZhihuan He            new_val_dic2 = {value: uart_iomux_info_template['uart_iomux_val0'].copy()}
1186*4026ce53SZhihuan He            new_addr_dic2[addr]['position'] = f'uart_iomux_addr{i}'
1187*4026ce53SZhihuan He            new_mask_dic2[mask]['position'] = f'uart_iomux_mask{i}'
1188*4026ce53SZhihuan He            new_val_dic2[value]['position'] = f'uart_iomux_val{i}'
1189*4026ce53SZhihuan He            info_from_txt.update(new_addr_dic2)
1190*4026ce53SZhihuan He            info_from_txt.update(new_mask_dic2)
1191*4026ce53SZhihuan He            info_from_txt.update(new_val_dic2)
1192*4026ce53SZhihuan He            info_from_bin.update(new_addr_dic2)
1193*4026ce53SZhihuan He            info_from_bin.update(new_mask_dic2)
1194*4026ce53SZhihuan He            info_from_bin.update(new_val_dic2)
119555a95caaSYouMin Chen
119655a95caaSYouMin Chendef bin_data_readout(filebin, ddrbin_index, read_out, bin_skew_offset, version, info_from_txt):
119755a95caaSYouMin Chen    global rk3528_skew_info
119855a95caaSYouMin Chen
119955a95caaSYouMin Chen    if version < 2:
120055a95caaSYouMin Chen        for i in range(len(read_out)):
120155a95caaSYouMin Chen            try:
120255a95caaSYouMin Chen                read_out[i][1] = int.from_bytes(filebin.read(4), byteorder='little')
120355a95caaSYouMin Chen                #print(f"D: read_out {hex(read_out[i][0])} = {read_out[i][1]}")
120455a95caaSYouMin Chen            except:
120555a95caaSYouMin Chen                print("read bin file fail")
120655a95caaSYouMin Chen                return -1
120755a95caaSYouMin Chen    elif version <= version_max:
120855a95caaSYouMin Chen        for index_name in ddrbin_index:
1209*4026ce53SZhihuan He            if "reserved" in index_name:
1210*4026ce53SZhihuan He                continue
1211*4026ce53SZhihuan He            if "_perf_" in index_name:
1212*4026ce53SZhihuan He                continue
1213*4026ce53SZhihuan He            if "index_u16" in index_name:
1214*4026ce53SZhihuan He                head_info_name = index_name[:-10]+'_info'
1215*4026ce53SZhihuan He            else:
121655a95caaSYouMin Chen                head_info_name = index_name[:-6]+'_info'
121755a95caaSYouMin Chen            if ddrbin_index[index_name]['offset'] != 0 and 'skew' not in index_name:
121855a95caaSYouMin Chen                filebin.seek(bin_skew_offset + (ddrbin_index[index_name]['offset'] - 1) * 4)
121955a95caaSYouMin Chen                index_size = ddrbin_index[index_name]['size']
122055a95caaSYouMin Chen                for key in read_out[head_info_name]:
122155a95caaSYouMin Chen                    if index_size > 0:
122255a95caaSYouMin Chen                        try:
122355a95caaSYouMin Chen                            temp_value = int.from_bytes(filebin.read(4), byteorder='little')
122455a95caaSYouMin Chen                            read_out[head_info_name][key] = temp_value
122555a95caaSYouMin Chen                            #print(f"D: {head_info_name} {key} = {read_out[head_info_name][key]}")
122655a95caaSYouMin Chen                            index_size -= 1
122755a95caaSYouMin Chen                        except:
122855a95caaSYouMin Chen                            print("read {} from bin file fail".format(head_info_name))
122955a95caaSYouMin Chen                            return -1
123055a95caaSYouMin Chen            elif ddrbin_index[index_name]['offset'] != 0 and 'skew' in index_name:
123155a95caaSYouMin Chen                try:
123255a95caaSYouMin Chen                    filebin.seek(bin_skew_offset + (ddrbin_index[index_name]['offset'] - 1) * 4)
123355a95caaSYouMin Chen                    skew_sub_ver = int.from_bytes(filebin.read(4), byteorder='little') & 0xff
123455a95caaSYouMin Chen                except:
123555a95caaSYouMin Chen                    print("read skew_sub_ver from bin file fail")
123655a95caaSYouMin Chen                    return -1
123755a95caaSYouMin Chen                if chip_info == 'rk3528' and skew_sub_ver == 0x1:
123855a95caaSYouMin Chen                    for i in rk3528_skew_info:
123955a95caaSYouMin Chen                        if i == 'skew_sub_version':
124055a95caaSYouMin Chen                            rk3528_skew_info[i] = skew_sub_ver
124155a95caaSYouMin Chen                            continue
124255a95caaSYouMin Chen                        for j in rk3528_skew_info[i]:
124355a95caaSYouMin Chen                            try:
124455a95caaSYouMin Chen                                temp_value = int.from_bytes(filebin.read(4), byteorder='little')
124555a95caaSYouMin Chen                                rk3528_skew_info[i][j] = temp_value
124655a95caaSYouMin Chen                                #print(f"D: {i}.{j}={rk3528_skew_info[i][j]}")
124755a95caaSYouMin Chen                            except:
124855a95caaSYouMin Chen                                print("read {} from bin file fail".format(head_info_name))
124955a95caaSYouMin Chen                                return -1
125055a95caaSYouMin Chen
125155a95caaSYouMin Chen                read_out.update({'skew_info' : rk3528_skew_info})
125255a95caaSYouMin Chen
125355a95caaSYouMin Chen    return 0
125455a95caaSYouMin Chen
125555a95caaSYouMin Chen
125655a95caaSYouMin Chendef gen_info_from_bin(filegen_path, info_from_bin, verinfo_full, version):
125755a95caaSYouMin Chen    with open(filegen_path, 'w+', encoding='utf-8') as file:
125855a95caaSYouMin Chen        file.write('/* ' + verinfo_full + ' */\n')
125955a95caaSYouMin Chen
126055a95caaSYouMin Chen    with open(filegen_path, 'a', encoding='utf-8') as file:
126155a95caaSYouMin Chen        for key, value in info_from_bin.items():
126255a95caaSYouMin Chen            if "reserved" in key:
126355a95caaSYouMin Chen                continue
126455a95caaSYouMin Chen
126555a95caaSYouMin Chen            if value['num_base'] == 'hex':
126655a95caaSYouMin Chen                value_str = str(hex(value['value']))
126755a95caaSYouMin Chen            else:
126855a95caaSYouMin Chen                value_str = str(value['value'])
126955a95caaSYouMin Chen
1270*4026ce53SZhihuan He            if value['index'] == 'uart_iomux_index_u16':
1271*4026ce53SZhihuan He                write_buff = '/* ' + key + '=' + value_str + ' */'
1272*4026ce53SZhihuan He            else:
127355a95caaSYouMin Chen                write_buff = key + '=' + value_str
127455a95caaSYouMin Chen            #print(f"D: {write_buff}")
127555a95caaSYouMin Chen            file.write(write_buff + '\n')
127655a95caaSYouMin Chen
127755a95caaSYouMin Chen    with open(filegen_path, 'a', encoding='utf-8') as file:
127855a95caaSYouMin Chen        file.write('end' + '\n')
127955a95caaSYouMin Chen
128055a95caaSYouMin Chen    return 0
128155a95caaSYouMin Chen
128255a95caaSYouMin Chen
128355a95caaSYouMin Chendef print_help():
128455a95caaSYouMin Chen    print(
128555a95caaSYouMin Chen        "For more details, please refer to the ddrbin_tool_user_guide.txt\n"\
128655a95caaSYouMin Chen        "This tools support two functions\n"\
128755a95caaSYouMin Chen        "for example:\n"\
128855a95caaSYouMin Chen        "function 1: modify ddr.bin file from ddrbin_param.txt.\n"\
128955a95caaSYouMin Chen        "	1) modify 'ddrbin_param.txt', set ddr frequency, uart info etc what you want.\n"\
129055a95caaSYouMin Chen        "	If want to keep items default, please keep these items blank.\n"\
129155a95caaSYouMin Chen        "	The date & time in the version information will be updated by default.\n"\
1292*4026ce53SZhihuan He        "	like: ./ddrbin_tool.py px30 ddrbin_param.txt px30_ddr_333MHz_v1.13.bin\n"\
129355a95caaSYouMin Chen        "\n"\
129455a95caaSYouMin Chen        "	OPTION: --verinfo_editable=TEXT		The TEXT(max 17 chars) will replace\n"\
129555a95caaSYouMin Chen        "						the date & time in the version information.\n"\
1296*4026ce53SZhihuan He        "	like: ./ddrbin_tool.py px30 ddrbin_param.txt px30_ddr_333MHz_v1.13.bin [OPTION]\n"\
129755a95caaSYouMin Chen        "\n"\
129855a95caaSYouMin Chen        "function 2: get ddr.bin file config to gen_param.txt file\n"\
129955a95caaSYouMin Chen        "	If want to get ddrbin file config, please run like that:\n"\
1300*4026ce53SZhihuan He        "	./ddrbin_tool.py px30 -g gen_param.txt px30_ddr_333MHz_v1.15.bin\n"\
130155a95caaSYouMin Chen        "	The config will show in gen_param.txt.\n"\
130255a95caaSYouMin Chen        "\n"\
130355a95caaSYouMin Chen        "Note:	The function 1 and function 2 are two separate functions\n"\
130455a95caaSYouMin Chen        "The gen_param.txt file which is generated by function 2 is no need used in function 1.\n"\
130555a95caaSYouMin Chen        "\n"\
130655a95caaSYouMin Chen        "For more details, please refer to the ddrbin_tool_user_guide.txt\n"\
130755a95caaSYouMin Chen    )
130855a95caaSYouMin Chen
130955a95caaSYouMin Chen
131055a95caaSYouMin Chendef ddrbin_tool(argc, argv):
131155a95caaSYouMin Chen    global updata_key_list
131255a95caaSYouMin Chen    global chip_info
131355a95caaSYouMin Chen
131455a95caaSYouMin Chen    info_from_txt = copy.deepcopy(base_info_full)
131555a95caaSYouMin Chen    info_from_bin = copy.deepcopy(base_info_full)
131655a95caaSYouMin Chen    ddrbin_index = copy.deepcopy(sdram_head_info_index_v2)
131755a95caaSYouMin Chen
131855a95caaSYouMin Chen    version_old_hit = 0
131955a95caaSYouMin Chen    gen_txt_from_bin = 0
132055a95caaSYouMin Chen
132155a95caaSYouMin Chen    verinfo_full = ''
132255a95caaSYouMin Chen    verinfo_full_offset = 0
132355a95caaSYouMin Chen    verinfo_full_length = 0
132455a95caaSYouMin Chen    verinfo_editable = ''
132555a95caaSYouMin Chen    verinfo_editable_offset = 0
132655a95caaSYouMin Chen    verinfo_editable_length = 17
132755a95caaSYouMin Chen
1328*4026ce53SZhihuan He    print("version v1.22 20250115")
132955a95caaSYouMin Chen    print("python {}, {}, {}".format(sys.version.split(' ', 1)[0], platform.system(), platform.machine()))
133055a95caaSYouMin Chen    if sys.version_info < (3, 6):
133155a95caaSYouMin Chen        print("Warning: Please installed Python 3.6 or later.")
133255a95caaSYouMin Chen
133355a95caaSYouMin Chen    if argc == 1:
133455a95caaSYouMin Chen        print_help()
133555a95caaSYouMin Chen        return -1
133655a95caaSYouMin Chen
133755a95caaSYouMin Chen    chip_info = argv[1]
133855a95caaSYouMin Chen    if chip_info not in chip_list:
133955a95caaSYouMin Chen        chip_info = 'others chip'
134055a95caaSYouMin Chen    print("chip: {}".format(chip_info))
134155a95caaSYouMin Chen
134255a95caaSYouMin Chen    try:
134355a95caaSYouMin Chen        opts, args = getopt.gnu_getopt(argv, 'g:h', ['verinfo_editable='])
134455a95caaSYouMin Chen    except:
134555a95caaSYouMin Chen        print_help()
134655a95caaSYouMin Chen        return -1
134755a95caaSYouMin Chen
134855a95caaSYouMin Chen    for opt, arg in opts:
134955a95caaSYouMin Chen        if opt == '-g':
135055a95caaSYouMin Chen            gen_txt_from_bin = 1
135155a95caaSYouMin Chen            filegen_path = arg
135255a95caaSYouMin Chen        elif opt == '--verinfo_editable':
135355a95caaSYouMin Chen            verinfo_editable = arg
135455a95caaSYouMin Chen            if len(verinfo_editable) > verinfo_editable_length:
135555a95caaSYouMin Chen                print("The character count of 'verinfo_editable' exceeds the allowed limit of 17.")
135655a95caaSYouMin Chen                return -1
135755a95caaSYouMin Chen        elif opt == '-h':
135855a95caaSYouMin Chen            print_help()
135955a95caaSYouMin Chen            return -1
136055a95caaSYouMin Chen
136155a95caaSYouMin Chen    if gen_txt_from_bin == 1:
136255a95caaSYouMin Chen        # function: get ddr.bin file config to gen_param.txt file
136355a95caaSYouMin Chen        if argc < 5:
136455a95caaSYouMin Chen            print("The number of parameters error")
136555a95caaSYouMin Chen            print_help()
136655a95caaSYouMin Chen            return -1
136755a95caaSYouMin Chen
136855a95caaSYouMin Chen        filebin_path = argv[4]
136955a95caaSYouMin Chen        if os.path.exists(filebin_path) != True:
137055a95caaSYouMin Chen            print("The file {} not exist".format(filebin_path))
137155a95caaSYouMin Chen            return -1
137255a95caaSYouMin Chen
137355a95caaSYouMin Chen        #print(f"D: filegen_path={filegen_path}, {filebin_path}")
137455a95caaSYouMin Chen    else:
137555a95caaSYouMin Chen        # function: modify ddr.bin file from ddrbin_param.txt.
137655a95caaSYouMin Chen        if argc < 4:
137755a95caaSYouMin Chen            print("The number of parameters error")
137855a95caaSYouMin Chen            print_help()
137955a95caaSYouMin Chen            return -1
138055a95caaSYouMin Chen
138155a95caaSYouMin Chen        fileskew_path = argv[2]
138255a95caaSYouMin Chen        if os.path.exists(fileskew_path) != True:
138355a95caaSYouMin Chen            print("The file {} not exist".format(fileskew_path))
138455a95caaSYouMin Chen            return -1
138555a95caaSYouMin Chen
138655a95caaSYouMin Chen        filebin_path = argv[3]
138755a95caaSYouMin Chen        if os.path.exists(filebin_path) != True:
138855a95caaSYouMin Chen            print("The file {} not exist".format(filebin_path))
138955a95caaSYouMin Chen            return -1
139055a95caaSYouMin Chen
139155a95caaSYouMin Chen        for key in version_old_list:
139255a95caaSYouMin Chen            if key in argv[3]:
139355a95caaSYouMin Chen                version_old_hit = 1
139455a95caaSYouMin Chen        #print(f"D: fileskew_path={fileskew_path},{filebin_path},version_old_hit={version_old_hit}")
139555a95caaSYouMin Chen
139655a95caaSYouMin Chen    if gen_txt_from_bin != 1:
139755a95caaSYouMin Chen        # Read the parameters that need to be modified from the txt file.
139855a95caaSYouMin Chen        key_list = list(info_from_txt.keys())
139955a95caaSYouMin Chen        hot = 0
140055a95caaSYouMin Chen        try:
140155a95caaSYouMin Chen            with open(fileskew_path,'r', encoding='UTF-8') as file:
140255a95caaSYouMin Chen                for line in file:
140355a95caaSYouMin Chen                    if '/*' in line:
140455a95caaSYouMin Chen                        continue
140555a95caaSYouMin Chen
140655a95caaSYouMin Chen                    if '=' in line:
140755a95caaSYouMin Chen                        index_of_line = line.find('=')
140855a95caaSYouMin Chen                        if line[index_of_line : ].strip() != '=':
140955a95caaSYouMin Chen                            info_dict_key = line[ : index_of_line]
141055a95caaSYouMin Chen                            info_dict_value = line[index_of_line + 1 : -1]
141155a95caaSYouMin Chen
141255a95caaSYouMin Chen                            if '0x' in info_dict_value:
141355a95caaSYouMin Chen                                info_dict_value = int(info_dict_value[2:], 16)
141455a95caaSYouMin Chen                            else:
141555a95caaSYouMin Chen                                info_dict_value = int(info_dict_value)
141655a95caaSYouMin Chen
141755a95caaSYouMin Chen                            info_from_txt[info_dict_key]['value'] = info_dict_value
141855a95caaSYouMin Chen
141955a95caaSYouMin Chen                            # append info_dict_key to update_key_list, need updata value from txt
142055a95caaSYouMin Chen                            update_key_list.append(info_dict_key)
142155a95caaSYouMin Chen                            #print(f"D: update_key_list append, {info_dict_key}={info_dict_value}")
142255a95caaSYouMin Chen
142355a95caaSYouMin Chen                        hot = hot + 1
142455a95caaSYouMin Chen        except (KeyError, ValueError):
142555a95caaSYouMin Chen            print("KeyError or ValueError: {}={}".format(info_dict_key, info_dict_value))
142655a95caaSYouMin Chen            return -1
142755a95caaSYouMin Chen        except Exception:
142855a95caaSYouMin Chen            print("The file {} read failed".format(fileskew_path))
142955a95caaSYouMin Chen            return -1
143055a95caaSYouMin Chen
143155a95caaSYouMin Chen        if hot == 0:
143255a95caaSYouMin Chen            print("Failed to read DRAM parameters from the file")
143355a95caaSYouMin Chen            return -1
143455a95caaSYouMin Chen    else:
143555a95caaSYouMin Chen        info_from_txt['start tag']['value'] = 0x12345678
143655a95caaSYouMin Chen
143755a95caaSYouMin Chen    # get info from bin file
143855a95caaSYouMin Chen    with open(filebin_path, 'rb') as file:
143955a95caaSYouMin Chen        content = file.read()
144055a95caaSYouMin Chen    # convert the target byte sequence 'start tag' into bytes, byteorder little
144155a95caaSYouMin Chen    target_bytes = struct.pack('<I', info_from_txt['start tag']['value'])
144255a95caaSYouMin Chen    start_position = 0
144355a95caaSYouMin Chen    while True:
144455a95caaSYouMin Chen        position = content.find(target_bytes, start_position)
144555a95caaSYouMin Chen        if position == -1:
144655a95caaSYouMin Chen            break
144755a95caaSYouMin Chen
144855a95caaSYouMin Chen        version = int.from_bytes(content[position + 4: position + 8], byteorder='little')
144955a95caaSYouMin Chen        if version >= 0 and version <= version_max:
145055a95caaSYouMin Chen            break
145155a95caaSYouMin Chen        else:
145255a95caaSYouMin Chen            start_position = position + len(target_bytes)
145355a95caaSYouMin Chen
145455a95caaSYouMin Chen    if position == -1:
145555a95caaSYouMin Chen        if start_position == 0:
145655a95caaSYouMin Chen            print("Find the 'start tag' in the ddrbin file failed")
145755a95caaSYouMin Chen        else:
145855a95caaSYouMin Chen            print("version = {}, invalid.".format(version))
145955a95caaSYouMin Chen            if version > version_max and version < (version_max + 5):
146055a95caaSYouMin Chen                print("Please check if there is a new version of the tool available.")
146155a95caaSYouMin Chen        return -1
146255a95caaSYouMin Chen
146355a95caaSYouMin Chen    # get ddrbin parameters version
146455a95caaSYouMin Chen    try:
146555a95caaSYouMin Chen        bin_skew_offset = position + 4
146655a95caaSYouMin Chen        filebin = open(filebin_path, 'rb+')
146755a95caaSYouMin Chen        filebin.seek(bin_skew_offset)
146855a95caaSYouMin Chen        version = int.from_bytes(filebin.read(4), byteorder='little')
146955a95caaSYouMin Chen    except:
147055a95caaSYouMin Chen        print("get version fail")
147155a95caaSYouMin Chen        filebin.close()
147255a95caaSYouMin Chen        return -1
147355a95caaSYouMin Chen
147455a95caaSYouMin Chen    print("version {}".format(version))
147555a95caaSYouMin Chen
147655a95caaSYouMin Chen    # get ddrbin version information from bin file
147755a95caaSYouMin Chen    # eg: DDR 03ea844c5d typ 24/09/03-10:42:57,fwver: v1.23
147855a95caaSYouMin Chen    target_bytes = b'DDR '
147955a95caaSYouMin Chen    target_bytes_1 = b',fwver:'
148055a95caaSYouMin Chen    start_position = 0
148155a95caaSYouMin Chen    while True:
148255a95caaSYouMin Chen        position = content.find(target_bytes, start_position)
148355a95caaSYouMin Chen        position_1 = content.find(target_bytes_1, start_position)
148455a95caaSYouMin Chen        if position == -1 or position_1 == -1:
148555a95caaSYouMin Chen            break
148655a95caaSYouMin Chen        elif (position_1 - position) < 100:
148755a95caaSYouMin Chen            verinfo_full = content[position: position_1+30].decode('utf-8', errors='replace')
148855a95caaSYouMin Chen            verinfo_full = verinfo_full[:verinfo_full.find('\n')]
148955a95caaSYouMin Chen            if content[position_1 - verinfo_editable_length - 1].to_bytes(1, 'little') == b' ':
149055a95caaSYouMin Chen                verinfo_editable_offset = position_1 - verinfo_editable_length
149155a95caaSYouMin Chen                verinfo_full_offset = position
149255a95caaSYouMin Chen                verinfo_full_length = len(verinfo_full.encode('utf-8'))
149355a95caaSYouMin Chen                print("{}".format(verinfo_full))
149455a95caaSYouMin Chen                break
149555a95caaSYouMin Chen        else:
149655a95caaSYouMin Chen            start_position = position + len(target_bytes)
149755a95caaSYouMin Chen
149855a95caaSYouMin Chen    if version < 2:
149955a95caaSYouMin Chen        read_out = copy.deepcopy(sdram_head_info_v0)
150055a95caaSYouMin Chen        write_in = copy.deepcopy(sdram_head_info_v0)
150155a95caaSYouMin Chen
150255a95caaSYouMin Chen        # skip gcpu_gen_freq after version_info
150355a95caaSYouMin Chen        filebin.seek(bin_skew_offset + 8)
1504*4026ce53SZhihuan He    elif version <= version_max:
150555a95caaSYouMin Chen        if version >= 3:
150655a95caaSYouMin Chen            ddrbin_index.update(sdram_head_info_index_v2_3)
150755a95caaSYouMin Chen        if version >= 4:
150855a95caaSYouMin Chen            ddrbin_index.update(sdram_head_info_index_v3_4)
1509*4026ce53SZhihuan He        if version >= 5:
1510*4026ce53SZhihuan He            ddrbin_index.update(sdram_head_info_index_v5)
1511*4026ce53SZhihuan He        if version >= 6:
1512*4026ce53SZhihuan He            ddrbin_index.update(sdram_head_info_index_v6)
151355a95caaSYouMin Chen
151455a95caaSYouMin Chen        if version < 5:
151555a95caaSYouMin Chen            read_out = copy.deepcopy(sdram_head_info_v2)
151655a95caaSYouMin Chen            write_in = copy.deepcopy(sdram_head_info_v2)
1517*4026ce53SZhihuan He        elif version == 5:
151855a95caaSYouMin Chen            read_out = copy.deepcopy(sdram_head_info_v5)
151955a95caaSYouMin Chen            write_in = copy.deepcopy(sdram_head_info_v5)
1520*4026ce53SZhihuan He        else:
1521*4026ce53SZhihuan He            read_out = copy.deepcopy(sdram_head_info_v6)
1522*4026ce53SZhihuan He            write_in = copy.deepcopy(sdram_head_info_v6)
152355a95caaSYouMin Chen
152455a95caaSYouMin Chen        #index_info read out
152555a95caaSYouMin Chen        for key in ddrbin_index:
1526*4026ce53SZhihuan He            if '_u16' in key:
1527*4026ce53SZhihuan He                try:
1528*4026ce53SZhihuan He                    ddrbin_index[key]['offset'] = int.from_bytes(filebin.read(2), byteorder='little')
1529*4026ce53SZhihuan He                    ddrbin_index[key]['size'] = int.from_bytes(filebin.read(2), byteorder='little')
1530*4026ce53SZhihuan He                except:
1531*4026ce53SZhihuan He                    filebin.close()
1532*4026ce53SZhihuan He                    print("readout ddrbin_index perf_index fail")
1533*4026ce53SZhihuan He                    return -1
1534*4026ce53SZhihuan He            else:
153555a95caaSYouMin Chen                try:
153655a95caaSYouMin Chen                    ddrbin_index[key]['offset'] = int.from_bytes(filebin.read(1), byteorder='little')
153755a95caaSYouMin Chen                    ddrbin_index[key]['size'] = int.from_bytes(filebin.read(1), byteorder='little')
153855a95caaSYouMin Chen                except:
153955a95caaSYouMin Chen                    filebin.close()
154055a95caaSYouMin Chen                    print("readout ddrbin_index fail")
154155a95caaSYouMin Chen                    return -1
1542*4026ce53SZhihuan He            #print(f"D: {key} = {ddrbin_index[key]}",ddrbin_index[key]["offset"],ddrbin_index[key]["size"])
154355a95caaSYouMin Chen    else:
154455a95caaSYouMin Chen        filebin.close()
154555a95caaSYouMin Chen        print("version not support")
154655a95caaSYouMin Chen        return -1
154755a95caaSYouMin Chen
1548*4026ce53SZhihuan He    uart_iomux_count_calculation(ddrbin_index, info_from_txt, info_from_bin, read_out, version)
1549*4026ce53SZhihuan He
155055a95caaSYouMin Chen    if bin_data_readout(filebin, ddrbin_index, read_out, bin_skew_offset, version, info_from_txt) != 0:
155155a95caaSYouMin Chen        filebin.close()
155255a95caaSYouMin Chen        print("bin_data_readout failed")
155355a95caaSYouMin Chen        return -1
155455a95caaSYouMin Chen
155555a95caaSYouMin Chen    bin_data_2_info(info_from_bin, read_out, ddrbin_index, version, info_from_txt)
155655a95caaSYouMin Chen    if gen_txt_from_bin == 1:
155755a95caaSYouMin Chen        if gen_info_from_bin(filegen_path, info_from_bin, verinfo_full, version) == 0:
155855a95caaSYouMin Chen            print("generate info from bin file ok.")
155955a95caaSYouMin Chen            filebin.close()
156055a95caaSYouMin Chen            return 0
156155a95caaSYouMin Chen        else:
156255a95caaSYouMin Chen            print("generate info fail.")
156355a95caaSYouMin Chen            filebin.close()
156455a95caaSYouMin Chen            return -1
156555a95caaSYouMin Chen
1566*4026ce53SZhihuan He    ret = txt_data_2_bin_data(info_from_txt, info_from_bin, ddrbin_index, write_in, version)
1567*4026ce53SZhihuan He    if ret != 0:
1568*4026ce53SZhihuan He        filebin.close()
1569*4026ce53SZhihuan He        print("modify ddrbin failed")
1570*4026ce53SZhihuan He        return -1
157155a95caaSYouMin Chen
157255a95caaSYouMin Chen    if version < 2:
157355a95caaSYouMin Chen        if version_old_hit == 0:
157455a95caaSYouMin Chen            filebin.seek(bin_skew_offset + 8)
157555a95caaSYouMin Chen            for i in range(len(write_in)):
157655a95caaSYouMin Chen                try:
157755a95caaSYouMin Chen                    filebin.write(write_in[i][1].to_bytes(4,byteorder='little'))
157855a95caaSYouMin Chen                except:
157955a95caaSYouMin Chen                    print("write bin file fail")
158055a95caaSYouMin Chen        else:
158155a95caaSYouMin Chen            filebin.seek(bin_skew_offset + 20)
158255a95caaSYouMin Chen            for i in range(3, len(write_in)):
158355a95caaSYouMin Chen                try:
158455a95caaSYouMin Chen                    filebin.write(write_in[i][1].to_bytes(4,byteorder='little'))
158555a95caaSYouMin Chen                except:
158655a95caaSYouMin Chen                    print("write bin file fail")
158755a95caaSYouMin Chen    elif version <= version_max:
158855a95caaSYouMin Chen        write_in_bin_data_v2(filebin, bin_skew_offset, write_in, ddrbin_index, info_from_txt, version)
158955a95caaSYouMin Chen    print("modify end\n")
159055a95caaSYouMin Chen
159155a95caaSYouMin Chen    # update ddrbin version information to bin file
159255a95caaSYouMin Chen    if verinfo_editable_offset != 0:
159355a95caaSYouMin Chen        if verinfo_editable == '':
159455a95caaSYouMin Chen            #print(f"position_1={position_1}, position_2={position_2}, {old_verinfo_editable}")
159555a95caaSYouMin Chen            current_time = datetime.now()
159655a95caaSYouMin Chen            verinfo_editable = current_time.strftime("%y/%m/%d-%H:%M.%S")
159755a95caaSYouMin Chen        if len(verinfo_editable) < verinfo_editable_length:
159855a95caaSYouMin Chen            verinfo_editable = verinfo_editable.ljust(verinfo_editable_length)
159955a95caaSYouMin Chen
160055a95caaSYouMin Chen        verinfo_editable_bytes = verinfo_editable.encode('utf-8')[:verinfo_editable_length]
160155a95caaSYouMin Chen        try:
160255a95caaSYouMin Chen            filebin.seek(verinfo_editable_offset)
160355a95caaSYouMin Chen            filebin.write(verinfo_editable_bytes)
160455a95caaSYouMin Chen            filebin.seek(verinfo_full_offset)
160555a95caaSYouMin Chen            new_verinfo_full = filebin.read(verinfo_full_length).decode('utf-8', errors='replace')
160655a95caaSYouMin Chen            print("new ddrbin version information: {}".format(new_verinfo_full))
160755a95caaSYouMin Chen        except:
160855a95caaSYouMin Chen            print("change verinfo_editable error")
160955a95caaSYouMin Chen
161055a95caaSYouMin Chen    filebin.close()
161155a95caaSYouMin Chen
161255a95caaSYouMin Chen    return 0
161355a95caaSYouMin Chen
161455a95caaSYouMin Chen
161555a95caaSYouMin Chenif __name__ == '__main__':
161655a95caaSYouMin Chen    #print(f"D: argc = {len(sys.argv)}, argv = {sys.argv}")
161755a95caaSYouMin Chen    ddrbin_tool(len(sys.argv), sys.argv)
161855a95caaSYouMin Chen
1619