xref: /rkbin/tools/ddrbin_tool.py (revision 55a95caaef154afed761b66d5dcd6400200ac40a)
1*55a95caaSYouMin Chen#!/usr/bin/env python3
2*55a95caaSYouMin Chen# -*-coding=utf-8-*-
3*55a95caaSYouMin Chen#
4*55a95caaSYouMin Chen# Copyright (C) 2024, Rockchip Electronics Co., Ltd.
5*55a95caaSYouMin Chen#
6*55a95caaSYouMin Chen
7*55a95caaSYouMin Chenimport os
8*55a95caaSYouMin Chenimport re
9*55a95caaSYouMin Chenimport sys
10*55a95caaSYouMin Chenimport copy
11*55a95caaSYouMin Chenimport getopt
12*55a95caaSYouMin Chenimport platform
13*55a95caaSYouMin Chenimport struct
14*55a95caaSYouMin Chenfrom datetime import datetime
15*55a95caaSYouMin Chen
16*55a95caaSYouMin Chenversion_max = 5
17*55a95caaSYouMin Chenupdate_key_list = []
18*55a95caaSYouMin Chen
19*55a95caaSYouMin Chenchip_info = 'null'
20*55a95caaSYouMin Chenchip_list = ['px30', 'px30s', 'px3se', 'px5', 'rk1808', 'rk2118', 'rk312x', 'rk3126', 'rk3128',
21*55a95caaSYouMin Chen    'rk3128h', 'rk322x', 'rk3228a', 'rk3228b', 'rk3228h', 'rk322xh', 'rk3229', 'rk3308', 'rk3288',
22*55a95caaSYouMin Chen    'rk3326', 'rk3326s', 'rk3328', 'rk3368', 'rk3399', 'rk3506', 'rk3528', 'rk356x', 'rk3562',
23*55a95caaSYouMin Chen    'rk3566', 'rk3568', 'rk3576', 'rk3588', 'rv1103', 'rv1103b', 'rv1106', 'rv1108', 'rv1109',
24*55a95caaSYouMin Chen    'rv1126']
25*55a95caaSYouMin Chen
26*55a95caaSYouMin Chenversion_old_list = ['rk322xh', 'rk3328', 'rk3318']
27*55a95caaSYouMin Chen
28*55a95caaSYouMin Chen# struct rk3528_ca_skew
29*55a95caaSYouMin Chenrk3528_ca_skew = {
30*55a95caaSYouMin Chen    'skew_freq': 0,
31*55a95caaSYouMin Chen    'ca_skew_0': 0,
32*55a95caaSYouMin Chen    'ca_skew_1': 0,
33*55a95caaSYouMin Chen    'ca_skew_2': 0,
34*55a95caaSYouMin Chen    'ca_skew_3': 0,
35*55a95caaSYouMin Chen    'ca_skew_4': 0,
36*55a95caaSYouMin Chen    'ca_skew_5': 0,
37*55a95caaSYouMin Chen    'ca_skew_6': 0,
38*55a95caaSYouMin Chen    'ca_skew_7': 0,
39*55a95caaSYouMin Chen}
40*55a95caaSYouMin Chen
41*55a95caaSYouMin Chen# struct rk3528_skew_info
42*55a95caaSYouMin Chenrk3528_skew_info = {
43*55a95caaSYouMin Chen    'skew_sub_version': 0,
44*55a95caaSYouMin Chen    'ddr3' : rk3528_ca_skew.copy(),
45*55a95caaSYouMin Chen    'ddr4' : rk3528_ca_skew.copy(),
46*55a95caaSYouMin Chen    'lp3' : rk3528_ca_skew.copy(),
47*55a95caaSYouMin Chen}
48*55a95caaSYouMin Chen
49*55a95caaSYouMin Chen# struct index_info, u8
50*55a95caaSYouMin Chenindex_info = {
51*55a95caaSYouMin Chen    'offset' : 0,
52*55a95caaSYouMin Chen    'size' : 0
53*55a95caaSYouMin Chen}
54*55a95caaSYouMin Chen
55*55a95caaSYouMin Chen# struct sdram_head_info_index_v2
56*55a95caaSYouMin Chensdram_head_info_index_v2 = {
57*55a95caaSYouMin Chen    'cpu_gen_index' : index_info.copy(),
58*55a95caaSYouMin Chen    'global_index' : index_info.copy(),
59*55a95caaSYouMin Chen    'ddr2_index' : index_info.copy(),
60*55a95caaSYouMin Chen    'ddr3_index' : index_info.copy(),
61*55a95caaSYouMin Chen    'ddr4_index' : index_info.copy(),
62*55a95caaSYouMin Chen    'ddr5_index' : index_info.copy(),
63*55a95caaSYouMin Chen    'lp2_index' : index_info.copy(),
64*55a95caaSYouMin Chen    'lp3_index' : index_info.copy(),
65*55a95caaSYouMin Chen    'lp4_index' : index_info.copy(),
66*55a95caaSYouMin Chen    'lp5_index' : index_info.copy(),
67*55a95caaSYouMin Chen    'skew_index' : index_info.copy(),
68*55a95caaSYouMin Chen    'dq_map_index' : index_info.copy(),
69*55a95caaSYouMin Chen}
70*55a95caaSYouMin Chen
71*55a95caaSYouMin Chensdram_head_info_index_v2_3 = {
72*55a95caaSYouMin Chen    'lp4x_index' : index_info.copy(),
73*55a95caaSYouMin Chen    'lp4_4x_hash_index' : index_info.copy()
74*55a95caaSYouMin Chen}
75*55a95caaSYouMin Chen
76*55a95caaSYouMin Chensdram_head_info_index_v3_4 = {
77*55a95caaSYouMin Chen    'lp5_hash_index' : index_info.copy(),
78*55a95caaSYouMin Chen    'ddr4_hash_index' : index_info.copy(),
79*55a95caaSYouMin Chen    'lp3_hash_index' : index_info.copy(),
80*55a95caaSYouMin Chen    'ddr3_hash_index' : index_info.copy(),
81*55a95caaSYouMin Chen    'lp2_hash_index' : index_info.copy(),
82*55a95caaSYouMin Chen    'ddr2_hash_index' : index_info.copy(),
83*55a95caaSYouMin Chen    'ddr5_hash_index' : index_info.copy(),
84*55a95caaSYouMin Chen}
85*55a95caaSYouMin Chen
86*55a95caaSYouMin Chen# struct global_info
87*55a95caaSYouMin Chenglobal_info = {
88*55a95caaSYouMin Chen    'uart_info' : 0,
89*55a95caaSYouMin Chen    'sr_pd_info' : 0,
90*55a95caaSYouMin Chen    'ch_info' : 0,
91*55a95caaSYouMin Chen    'info_2t' : 0,
92*55a95caaSYouMin Chen    'reserved_0' : 0,
93*55a95caaSYouMin Chen    'reserved_1' : 0,
94*55a95caaSYouMin Chen    'reserved_2' : 0,
95*55a95caaSYouMin Chen    'reserved_3' : 0,
96*55a95caaSYouMin Chen}
97*55a95caaSYouMin Chen
98*55a95caaSYouMin Chen# struct ddr2_3_4_lp2_3_info
99*55a95caaSYouMin Chenddr2_3_4_lp2_3_info = {
100*55a95caaSYouMin Chen    'ddr_freq0_1' : 0,
101*55a95caaSYouMin Chen    'ddr_freq2_3' : 0,
102*55a95caaSYouMin Chen    'ddr_freq4_5' : 0,
103*55a95caaSYouMin Chen    'drv_when_odten' : 0,
104*55a95caaSYouMin Chen    'drv_when_odtoff' : 0,
105*55a95caaSYouMin Chen    'odt_info' : 0,
106*55a95caaSYouMin Chen    'odten_freq' : 0,
107*55a95caaSYouMin Chen    'sr_when_odten' : 0,
108*55a95caaSYouMin Chen    'sr_when_odtoff' : 0,
109*55a95caaSYouMin Chen}
110*55a95caaSYouMin Chen
111*55a95caaSYouMin Chen# struct ddr2_3_4_lp2_3_info_v5
112*55a95caaSYouMin Chenddr2_3_4_lp2_3_info_v5 = {
113*55a95caaSYouMin Chen    'ddr_freq0_1' : 0,
114*55a95caaSYouMin Chen    'ddr_freq2_3' : 0,
115*55a95caaSYouMin Chen    'ddr_freq4_5' : 0,
116*55a95caaSYouMin Chen    'drv_when_odten' : 0,
117*55a95caaSYouMin Chen    'drv_when_odtoff' : 0,
118*55a95caaSYouMin Chen    'odt_info' : 0,
119*55a95caaSYouMin Chen    'odten_freq' : 0,
120*55a95caaSYouMin Chen    'sr_when_odten' : 0,
121*55a95caaSYouMin Chen    'sr_when_odtoff' : 0,
122*55a95caaSYouMin Chen    'vref_when_odten' : 0,
123*55a95caaSYouMin Chen    'vref_when_odtoff' : 0,
124*55a95caaSYouMin Chen}
125*55a95caaSYouMin Chen
126*55a95caaSYouMin Chen# struct lp4_info
127*55a95caaSYouMin Chenlp4_info = {
128*55a95caaSYouMin Chen    'ddr_freq0_1' : 0,
129*55a95caaSYouMin Chen    'ddr_freq2_3' : 0,
130*55a95caaSYouMin Chen    'ddr_freq4_5' : 0,
131*55a95caaSYouMin Chen    'drv_when_odten' : 0,
132*55a95caaSYouMin Chen    'drv_when_odtoff' : 0,
133*55a95caaSYouMin Chen    'odt_info' : 0,
134*55a95caaSYouMin Chen    'dq_odten_freq' : 0,
135*55a95caaSYouMin Chen    'sr_when_odten' : 0,
136*55a95caaSYouMin Chen    'sr_when_odtoff' : 0,
137*55a95caaSYouMin Chen    'ca_odten_freq' : 0,
138*55a95caaSYouMin Chen    'cs_drv_ca_odt_info' : 0,
139*55a95caaSYouMin Chen    'vref_when_odten' : 0,
140*55a95caaSYouMin Chen    'vref_when_odtoff' : 0,
141*55a95caaSYouMin Chen}
142*55a95caaSYouMin Chen
143*55a95caaSYouMin Chen# struct dq_map_info
144*55a95caaSYouMin Chendq_map_info = {
145*55a95caaSYouMin Chen    'byte_map_0' : 0,
146*55a95caaSYouMin Chen    'byte_map_1' : 0,
147*55a95caaSYouMin Chen    'lp3_dq0_7_map' : 0,
148*55a95caaSYouMin Chen    'lp2_dq0_7_map' : 0,
149*55a95caaSYouMin Chen    'ddr4_dq_map_0' : 0,
150*55a95caaSYouMin Chen    'ddr4_dq_map_1' : 0,
151*55a95caaSYouMin Chen    'ddr4_dq_map_2' : 0,
152*55a95caaSYouMin Chen    'ddr4_dq_map_3' : 0,
153*55a95caaSYouMin Chen}
154*55a95caaSYouMin Chen
155*55a95caaSYouMin Chen# struct hash_info
156*55a95caaSYouMin Chenhash_info = {
157*55a95caaSYouMin Chen    'ch_mask_0' : 0,
158*55a95caaSYouMin Chen    'ch_mask_1' : 0,
159*55a95caaSYouMin Chen    'bank_mask_0' : 0,
160*55a95caaSYouMin Chen    'bank_mask_1' : 0,
161*55a95caaSYouMin Chen    'bank_mask_2' : 0,
162*55a95caaSYouMin Chen    'bank_mask_3' : 0,
163*55a95caaSYouMin Chen    'rank_mask0' : 0,
164*55a95caaSYouMin Chen    'rank_mask1' : 0,
165*55a95caaSYouMin Chen}
166*55a95caaSYouMin Chen
167*55a95caaSYouMin Chen# struct sdram_head_info_v2
168*55a95caaSYouMin Chensdram_head_info_v2 = {
169*55a95caaSYouMin Chen    'global_info' : global_info.copy(),
170*55a95caaSYouMin Chen    'ddr2_info' : ddr2_3_4_lp2_3_info.copy(),
171*55a95caaSYouMin Chen    'ddr3_info' : ddr2_3_4_lp2_3_info.copy(),
172*55a95caaSYouMin Chen    'ddr4_info' : ddr2_3_4_lp2_3_info.copy(),
173*55a95caaSYouMin Chen    'ddr5_info' : ddr2_3_4_lp2_3_info.copy(),
174*55a95caaSYouMin Chen    'lp2_info' : ddr2_3_4_lp2_3_info.copy(),
175*55a95caaSYouMin Chen    'lp3_info' : ddr2_3_4_lp2_3_info.copy(),
176*55a95caaSYouMin Chen    'lp4_info' : lp4_info.copy(),
177*55a95caaSYouMin Chen    'dq_map_info' : dq_map_info.copy(),
178*55a95caaSYouMin Chen    'lp4x_info' : lp4_info.copy(),
179*55a95caaSYouMin Chen    'lp5_info' : lp4_info.copy(),
180*55a95caaSYouMin Chen    'lp4_4x_hash_info' : hash_info.copy(),
181*55a95caaSYouMin Chen    'lp5_hash_info' : hash_info.copy(),
182*55a95caaSYouMin Chen    'ddr4_hash_info' : hash_info.copy(),
183*55a95caaSYouMin Chen    'lp3_hash_info' : hash_info.copy(),
184*55a95caaSYouMin Chen    'ddr3_hash_info' : hash_info.copy(),
185*55a95caaSYouMin Chen    'lp2_hash_info' : hash_info.copy(),
186*55a95caaSYouMin Chen    'ddr2_hash_info' : hash_info.copy(),
187*55a95caaSYouMin Chen    'ddr5_hash_info' : hash_info.copy(),
188*55a95caaSYouMin Chen}
189*55a95caaSYouMin Chen
190*55a95caaSYouMin Chen# struct sdram_head_info_v5
191*55a95caaSYouMin Chensdram_head_info_v5 = {
192*55a95caaSYouMin Chen    'global_info' : global_info.copy(),
193*55a95caaSYouMin Chen    'ddr2_info' : ddr2_3_4_lp2_3_info_v5.copy(),
194*55a95caaSYouMin Chen    'ddr3_info' : ddr2_3_4_lp2_3_info_v5.copy(),
195*55a95caaSYouMin Chen    'ddr4_info' : ddr2_3_4_lp2_3_info_v5.copy(),
196*55a95caaSYouMin Chen    'ddr5_info' : ddr2_3_4_lp2_3_info_v5.copy(),
197*55a95caaSYouMin Chen    'lp2_info' : ddr2_3_4_lp2_3_info_v5.copy(),
198*55a95caaSYouMin Chen    'lp3_info' : ddr2_3_4_lp2_3_info_v5.copy(),
199*55a95caaSYouMin Chen    'lp4_info' : lp4_info.copy(),
200*55a95caaSYouMin Chen    'dq_map_info' : dq_map_info.copy(),
201*55a95caaSYouMin Chen    'lp4x_info' : lp4_info.copy(),
202*55a95caaSYouMin Chen    'lp5_info' : lp4_info.copy(),
203*55a95caaSYouMin Chen    'lp4_4x_hash_info' : hash_info.copy(),
204*55a95caaSYouMin Chen    'lp5_hash_info' : hash_info.copy(),
205*55a95caaSYouMin Chen    'ddr4_hash_info' : hash_info.copy(),
206*55a95caaSYouMin Chen    'lp3_hash_info' : hash_info.copy(),
207*55a95caaSYouMin Chen    'ddr3_hash_info' : hash_info.copy(),
208*55a95caaSYouMin Chen    'lp2_hash_info' : hash_info.copy(),
209*55a95caaSYouMin Chen    'ddr2_hash_info' : hash_info.copy(),
210*55a95caaSYouMin Chen    'ddr5_hash_info' : hash_info.copy(),
211*55a95caaSYouMin Chen}
212*55a95caaSYouMin Chen
213*55a95caaSYouMin Chensdram_head_info_v0 = [[0xc, 0], [0x10, 0], [0x14, 0], [0x18, 0], [0x1c, 0], [0x20, 0], [0x24, 0]]
214*55a95caaSYouMin Chen
215*55a95caaSYouMin Chen# struct base_info_full
216*55a95caaSYouMin Chenbase_info_full = {
217*55a95caaSYouMin Chen    'start tag': {'value': 0, 'num_base': 'hex', 'index': 'null', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 0, 'v0_info': [0x0, 0, 0xffffffff]},
218*55a95caaSYouMin Chen
219*55a95caaSYouMin 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]},
220*55a95caaSYouMin 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]},
221*55a95caaSYouMin 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]},
222*55a95caaSYouMin 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]},
223*55a95caaSYouMin 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]},
224*55a95caaSYouMin 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]},
225*55a95caaSYouMin Chen    'lp4x_freq': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'ddr_freq0_1', 'shift': 0, 'mask': 0xfff, 'version': 2},
226*55a95caaSYouMin Chen    'lp5_freq': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'ddr_freq0_1', 'shift': 0, 'mask': 0xfff, 'version': 2},
227*55a95caaSYouMin 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]},
228*55a95caaSYouMin 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]},
229*55a95caaSYouMin 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]},
230*55a95caaSYouMin 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]},
231*55a95caaSYouMin 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]},
232*55a95caaSYouMin 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]},
233*55a95caaSYouMin 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]},
234*55a95caaSYouMin 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]},
235*55a95caaSYouMin 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]},
236*55a95caaSYouMin 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]},
237*55a95caaSYouMin Chen    'link_ecc_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 28, 'mask': 0x1, 'version': 2},
238*55a95caaSYouMin Chen    'per_bank_ref_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 27, 'mask': 0x1, 'version': 2},
239*55a95caaSYouMin 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]},
240*55a95caaSYouMin Chen    'auto_precharge_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 25, 'mask': 0x1, 'version': 2},
241*55a95caaSYouMin Chen    'res_space_remap_all': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 24, 'mask': 0x1, 'version': 2},
242*55a95caaSYouMin Chen    'res_space_remap_portion': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 20, 'mask': 0x1, 'version': 2},
243*55a95caaSYouMin Chen    'rd_vref_scan_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 21, 'mask': 0x1, 'version': 2},
244*55a95caaSYouMin Chen    'wr_vref_scan_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 22, 'mask': 0x1, 'version': 2},
245*55a95caaSYouMin Chen    'eye_2d_scan_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 23, 'mask': 0x1, 'version': 2},
246*55a95caaSYouMin Chen    'dis_train_print': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 19, 'mask': 0x1, 'version': 2},
247*55a95caaSYouMin 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]},
248*55a95caaSYouMin 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]},
249*55a95caaSYouMin 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]},
250*55a95caaSYouMin 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]},
251*55a95caaSYouMin Chen    'reserved_global_info_2t_bit31': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'info_2t', 'shift': 31, 'mask': 0x1, 'version': 2},
252*55a95caaSYouMin Chen    'pstore_base_addr': {'value': 0, 'num_base': 'hex', 'index': 'global_index', 'position': 'reserved_0', 'shift': 16, 'mask': 0xffff, 'version': 2},
253*55a95caaSYouMin Chen    'pstore_buf_size': {'value': 0, 'num_base': 'hex', 'index': 'global_index', 'position': 'reserved_0', 'shift': 12, 'mask': 0xf, 'version': 2},
254*55a95caaSYouMin Chen    'uboot_log_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_0', 'shift': 4, 'mask': 0x1, 'version': 2},
255*55a95caaSYouMin Chen    'atf_log_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_0', 'shift': 3, 'mask': 0x1, 'version': 2},
256*55a95caaSYouMin Chen    'optee_log_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_0', 'shift': 2, 'mask': 0x1, 'version': 2},
257*55a95caaSYouMin Chen    'spl_log_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_0', 'shift': 1, 'mask': 0x1, 'version': 2},
258*55a95caaSYouMin Chen    'tpl_log_en': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_0', 'shift': 0, 'mask': 0x1, 'version': 2},
259*55a95caaSYouMin Chen    'reserved_global_reserved_0_bit5_11': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_0', 'shift': 5, 'mask': 0x7f, 'version': 2},
260*55a95caaSYouMin Chen    'first_init_dram_type': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_1', 'shift': 5, 'mask': 0xf, 'version': 2},
261*55a95caaSYouMin Chen    'dfs_disable': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_1', 'shift': 4, 'mask': 0x1, 'version': 2},
262*55a95caaSYouMin Chen    'pageclose': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_1', 'shift': 3, 'mask': 0x1, 'version': 2},
263*55a95caaSYouMin Chen    'boot_fsp': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_1', 'shift': 0, 'mask': 0x7, 'version': 2},
264*55a95caaSYouMin Chen    'reserved_global_reserved_1_bit9_31': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_1', 'shift': 9, 'mask': 0x7fffff, 'version': 2},
265*55a95caaSYouMin Chen    'reserved_global_reserved_2_bit0_31': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_2', 'shift': 0, 'mask': 0xffffffff, 'version': 2},
266*55a95caaSYouMin Chen    'reserved_global_reserved_3_bit0_31': {'value': 0, 'num_base': 'dec', 'index': 'global_index', 'position': 'reserved_3', 'shift': 0, 'mask': 0xffffffff, 'version': 2},
267*55a95caaSYouMin Chen
268*55a95caaSYouMin Chen    'ddr2_f1_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'ddr_freq0_1', 'shift': 12, 'mask': 0xfff, 'version': 2},
269*55a95caaSYouMin 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},
270*55a95caaSYouMin Chen    'ddr2_f2_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'ddr_freq2_3', 'shift': 0, 'mask': 0xfff, 'version': 2},
271*55a95caaSYouMin Chen    'ddr2_f3_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'ddr_freq2_3', 'shift': 12, 'mask': 0xfff, 'version': 2},
272*55a95caaSYouMin 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},
273*55a95caaSYouMin Chen    'ddr2_f4_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'ddr_freq4_5', 'shift': 0, 'mask': 0xfff, 'version': 2},
274*55a95caaSYouMin Chen    'ddr2_f5_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'ddr_freq4_5', 'shift': 12, 'mask': 0xfff, 'version': 2},
275*55a95caaSYouMin 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},
276*55a95caaSYouMin 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},
277*55a95caaSYouMin 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},
278*55a95caaSYouMin 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},
279*55a95caaSYouMin 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},
280*55a95caaSYouMin 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},
281*55a95caaSYouMin 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},
282*55a95caaSYouMin 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},
283*55a95caaSYouMin 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},
284*55a95caaSYouMin Chen    'phy_ddr2_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'odt_info', 'shift': 8, 'mask': 0x3ff, 'version': 2},
285*55a95caaSYouMin Chen    'ddr2_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'odt_info', 'shift': 0, 'mask': 0xff, 'version': 2},
286*55a95caaSYouMin Chen    'phy_ddr2_odt_pull_up_en': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'odt_info', 'shift': 18, 'mask': 0x1, 'version': 2},
287*55a95caaSYouMin Chen    'phy_ddr2_odt_pull_dn_en': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'odt_info', 'shift': 19, 'mask': 0x1, 'version': 2},
288*55a95caaSYouMin Chen    'reserved_ddr2_odt_info_bit20_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'odt_info', 'shift': 20, 'mask': 0xfff, 'version': 2},
289*55a95caaSYouMin Chen    'phy_ddr2_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'odten_freq', 'shift': 12, 'mask': 0xfff, 'version': 2},
290*55a95caaSYouMin Chen    'ddr2_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
291*55a95caaSYouMin Chen    'reserved_ddr2_odten_freq_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'odten_freq', 'shift': 24, 'mask': 0xff, 'version': 2},
292*55a95caaSYouMin 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},
293*55a95caaSYouMin 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},
294*55a95caaSYouMin 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},
295*55a95caaSYouMin 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},
296*55a95caaSYouMin 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},
297*55a95caaSYouMin 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},
298*55a95caaSYouMin 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},
299*55a95caaSYouMin 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},
300*55a95caaSYouMin 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},
301*55a95caaSYouMin Chen    'ddr2_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'vref_when_odten', 'shift': 10, 'mask': 0x3ff, 'version': 5},
302*55a95caaSYouMin Chen    'ddr2_ca_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'vref_when_odten', 'shift': 20, 'mask': 0x3ff, 'version': 5},
303*55a95caaSYouMin 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},
304*55a95caaSYouMin 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},
305*55a95caaSYouMin Chen    'ddr2_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'vref_when_odtoff', 'shift': 10, 'mask': 0x3ff, 'version': 5},
306*55a95caaSYouMin Chen    'ddr2_ca_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr2_index', 'position': 'vref_when_odtoff', 'shift': 20, 'mask': 0x3ff, 'version': 5},
307*55a95caaSYouMin 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},
308*55a95caaSYouMin Chen
309*55a95caaSYouMin Chen    'ddr3_f1_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'ddr_freq0_1', 'shift': 12, 'mask': 0xfff, 'version': 2},
310*55a95caaSYouMin 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},
311*55a95caaSYouMin Chen    'ddr3_f2_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'ddr_freq2_3', 'shift': 0, 'mask': 0xfff, 'version': 2},
312*55a95caaSYouMin Chen    'ddr3_f3_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'ddr_freq2_3', 'shift': 12, 'mask': 0xfff, 'version': 2},
313*55a95caaSYouMin 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},
314*55a95caaSYouMin Chen    'ddr3_f4_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'ddr_freq4_5', 'shift': 0, 'mask': 0xfff, 'version': 2},
315*55a95caaSYouMin Chen    'ddr3_f5_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'ddr_freq4_5', 'shift': 12, 'mask': 0xfff, 'version': 2},
316*55a95caaSYouMin 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},
317*55a95caaSYouMin 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},
318*55a95caaSYouMin 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},
319*55a95caaSYouMin 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},
320*55a95caaSYouMin 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},
321*55a95caaSYouMin 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},
322*55a95caaSYouMin 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},
323*55a95caaSYouMin 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},
324*55a95caaSYouMin 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},
325*55a95caaSYouMin Chen    'phy_ddr3_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'odt_info', 'shift': 8, 'mask': 0x3ff, 'version': 2},
326*55a95caaSYouMin Chen    'ddr3_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'odt_info', 'shift': 0, 'mask': 0xff, 'version': 2},
327*55a95caaSYouMin Chen    'phy_ddr3_odt_pull_up_en': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'odt_info', 'shift': 18, 'mask': 0x1, 'version': 2},
328*55a95caaSYouMin Chen    'phy_ddr3_odt_pull_dn_en': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'odt_info', 'shift': 19, 'mask': 0x1, 'version': 2},
329*55a95caaSYouMin Chen    'reserved_ddr3_odt_info_bit20_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'odt_info', 'shift': 20, 'mask': 0xfff, 'version': 2},
330*55a95caaSYouMin Chen    'phy_ddr3_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'odten_freq', 'shift': 12, 'mask': 0xfff, 'version': 2},
331*55a95caaSYouMin Chen    'ddr3_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
332*55a95caaSYouMin Chen    'reserved_ddr3_odten_freq_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'odten_freq', 'shift': 24, 'mask': 0xff, 'version': 2},
333*55a95caaSYouMin 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},
334*55a95caaSYouMin 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},
335*55a95caaSYouMin 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},
336*55a95caaSYouMin 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},
337*55a95caaSYouMin 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},
338*55a95caaSYouMin 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},
339*55a95caaSYouMin 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},
340*55a95caaSYouMin 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},
341*55a95caaSYouMin 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},
342*55a95caaSYouMin Chen    'ddr3_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'vref_when_odten', 'shift': 10, 'mask': 0x3ff, 'version': 5},
343*55a95caaSYouMin Chen    'ddr3_ca_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'vref_when_odten', 'shift': 20, 'mask': 0x3ff, 'version': 5},
344*55a95caaSYouMin 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},
345*55a95caaSYouMin 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},
346*55a95caaSYouMin Chen    'ddr3_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'vref_when_odtoff', 'shift': 10, 'mask': 0x3ff, 'version': 5},
347*55a95caaSYouMin Chen    'ddr3_ca_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr3_index', 'position': 'vref_when_odtoff', 'shift': 20, 'mask': 0x3ff, 'version': 5},
348*55a95caaSYouMin 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},
349*55a95caaSYouMin Chen
350*55a95caaSYouMin Chen    'ddr4_f1_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'ddr_freq0_1', 'shift': 12, 'mask': 0xfff, 'version': 2},
351*55a95caaSYouMin 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},
352*55a95caaSYouMin Chen    'ddr4_f2_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'ddr_freq2_3', 'shift': 0, 'mask': 0xfff, 'version': 2},
353*55a95caaSYouMin Chen    'ddr4_f3_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'ddr_freq2_3', 'shift': 12, 'mask': 0xfff, 'version': 2},
354*55a95caaSYouMin 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},
355*55a95caaSYouMin Chen    'ddr4_f4_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'ddr_freq4_5', 'shift': 0, 'mask': 0xfff, 'version': 2},
356*55a95caaSYouMin Chen    'ddr4_f5_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'ddr_freq4_5', 'shift': 12, 'mask': 0xfff, 'version': 2},
357*55a95caaSYouMin 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},
358*55a95caaSYouMin 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},
359*55a95caaSYouMin 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},
360*55a95caaSYouMin 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},
361*55a95caaSYouMin 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},
362*55a95caaSYouMin 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},
363*55a95caaSYouMin 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},
364*55a95caaSYouMin 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},
365*55a95caaSYouMin 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},
366*55a95caaSYouMin Chen    'phy_ddr4_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'odt_info', 'shift': 8, 'mask': 0x3ff, 'version': 2},
367*55a95caaSYouMin Chen    'ddr4_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'odt_info', 'shift': 0, 'mask': 0xff, 'version': 2},
368*55a95caaSYouMin Chen    'phy_ddr4_odt_pull_up_en': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'odt_info', 'shift': 18, 'mask': 0x1, 'version': 2},
369*55a95caaSYouMin Chen    'phy_ddr4_odt_pull_dn_en': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'odt_info', 'shift': 19, 'mask': 0x1, 'version': 2},
370*55a95caaSYouMin Chen    'reserved_ddr4_odt_info_bit20_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'odt_info', 'shift': 20, 'mask': 0xfff, 'version': 2},
371*55a95caaSYouMin Chen    'phy_ddr4_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'odten_freq', 'shift': 12, 'mask': 0xfff, 'version': 2},
372*55a95caaSYouMin Chen    'ddr4_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
373*55a95caaSYouMin Chen    'reserved_ddr4_odten_freq_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'odten_freq', 'shift': 24, 'mask': 0xff, 'version': 2},
374*55a95caaSYouMin 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},
375*55a95caaSYouMin 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},
376*55a95caaSYouMin 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},
377*55a95caaSYouMin 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},
378*55a95caaSYouMin 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},
379*55a95caaSYouMin 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},
380*55a95caaSYouMin 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},
381*55a95caaSYouMin 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},
382*55a95caaSYouMin 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},
383*55a95caaSYouMin Chen    'ddr4_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'vref_when_odten', 'shift': 10, 'mask': 0x3ff, 'version': 5},
384*55a95caaSYouMin Chen    'ddr4_ca_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'vref_when_odten', 'shift': 20, 'mask': 0x3ff, 'version': 5},
385*55a95caaSYouMin 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},
386*55a95caaSYouMin 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},
387*55a95caaSYouMin Chen    'ddr4_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'vref_when_odtoff', 'shift': 10, 'mask': 0x3ff, 'version': 5},
388*55a95caaSYouMin Chen    'ddr4_ca_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'ddr4_index', 'position': 'vref_when_odtoff', 'shift': 20, 'mask': 0x3ff, 'version': 5},
389*55a95caaSYouMin 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},
390*55a95caaSYouMin Chen
391*55a95caaSYouMin Chen    'lp2_f1_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'ddr_freq0_1', 'shift': 12, 'mask': 0xfff, 'version': 2},
392*55a95caaSYouMin 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},
393*55a95caaSYouMin Chen    'lp2_f2_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'ddr_freq2_3', 'shift': 0, 'mask': 0xfff, 'version': 2},
394*55a95caaSYouMin Chen    'lp2_f3_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'ddr_freq2_3', 'shift': 12, 'mask': 0xfff, 'version': 2},
395*55a95caaSYouMin 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},
396*55a95caaSYouMin Chen    'lp2_f4_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'ddr_freq4_5', 'shift': 0, 'mask': 0xfff, 'version': 2},
397*55a95caaSYouMin Chen    'lp2_f5_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'ddr_freq4_5', 'shift': 12, 'mask': 0xfff, 'version': 2},
398*55a95caaSYouMin 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},
399*55a95caaSYouMin 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},
400*55a95caaSYouMin 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},
401*55a95caaSYouMin 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},
402*55a95caaSYouMin 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},
403*55a95caaSYouMin 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},
404*55a95caaSYouMin 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},
405*55a95caaSYouMin 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},
406*55a95caaSYouMin 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},
407*55a95caaSYouMin Chen    'phy_lp2_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'odt_info', 'shift': 8, 'mask': 0x3ff, 'version': 2},
408*55a95caaSYouMin Chen    'lp2_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'odt_info', 'shift': 0, 'mask': 0xff, 'version': 2},
409*55a95caaSYouMin Chen    'phy_lp2_odt_pull_up_en': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'odt_info', 'shift': 18, 'mask': 0x1, 'version': 2},
410*55a95caaSYouMin Chen    'phy_lp2_odt_pull_dn_en': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'odt_info', 'shift': 19, 'mask': 0x1, 'version': 2},
411*55a95caaSYouMin Chen    'reserved_lp2_odt_info_bit20_31': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'odt_info', 'shift': 20, 'mask': 0xfff, 'version': 2},
412*55a95caaSYouMin Chen    'phy_lp2_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'odten_freq', 'shift': 12, 'mask': 0xfff, 'version': 2},
413*55a95caaSYouMin Chen    'lp2_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
414*55a95caaSYouMin Chen    'reserved_lp2_odten_freq_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'odten_freq', 'shift': 24, 'mask': 0xff, 'version': 2},
415*55a95caaSYouMin 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},
416*55a95caaSYouMin 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},
417*55a95caaSYouMin 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},
418*55a95caaSYouMin 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},
419*55a95caaSYouMin 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},
420*55a95caaSYouMin 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},
421*55a95caaSYouMin 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},
422*55a95caaSYouMin 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},
423*55a95caaSYouMin 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},
424*55a95caaSYouMin Chen    'lp2_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'vref_when_odten', 'shift': 10, 'mask': 0x3ff, 'version': 5},
425*55a95caaSYouMin Chen    'lp2_ca_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'vref_when_odten', 'shift': 20, 'mask': 0x3ff, 'version': 5},
426*55a95caaSYouMin 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},
427*55a95caaSYouMin 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},
428*55a95caaSYouMin Chen    'lp2_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'vref_when_odtoff', 'shift': 10, 'mask': 0x3ff, 'version': 5},
429*55a95caaSYouMin Chen    'lp2_ca_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp2_index', 'position': 'vref_when_odtoff', 'shift': 20, 'mask': 0x3ff, 'version': 5},
430*55a95caaSYouMin 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},
431*55a95caaSYouMin Chen
432*55a95caaSYouMin Chen    'lp3_f1_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'ddr_freq0_1', 'shift': 12, 'mask': 0xfff, 'version': 2},
433*55a95caaSYouMin 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},
434*55a95caaSYouMin Chen    'lp3_f2_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'ddr_freq2_3', 'shift': 0, 'mask': 0xfff, 'version': 2},
435*55a95caaSYouMin Chen    'lp3_f3_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'ddr_freq2_3', 'shift': 12, 'mask': 0xfff, 'version': 2},
436*55a95caaSYouMin 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},
437*55a95caaSYouMin Chen    'lp3_f4_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'ddr_freq4_5', 'shift': 0, 'mask': 0xfff, 'version': 2},
438*55a95caaSYouMin Chen    'lp3_f5_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'ddr_freq4_5', 'shift': 12, 'mask': 0xfff, 'version': 2},
439*55a95caaSYouMin 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},
440*55a95caaSYouMin 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},
441*55a95caaSYouMin 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},
442*55a95caaSYouMin 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},
443*55a95caaSYouMin 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},
444*55a95caaSYouMin 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},
445*55a95caaSYouMin 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},
446*55a95caaSYouMin 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},
447*55a95caaSYouMin 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},
448*55a95caaSYouMin Chen    'phy_lp3_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'odt_info', 'shift': 8, 'mask': 0x3ff, 'version': 2},
449*55a95caaSYouMin Chen    'lp3_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'odt_info', 'shift': 0, 'mask': 0xff, 'version': 2},
450*55a95caaSYouMin Chen    'phy_lp3_odt_pull_up_en': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'odt_info', 'shift': 18, 'mask': 0x1, 'version': 2},
451*55a95caaSYouMin Chen    'phy_lp3_odt_pull_dn_en': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'odt_info', 'shift': 19, 'mask': 0x1, 'version': 2},
452*55a95caaSYouMin Chen    'reserved_lp3_odt_info_bit20_31': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'odt_info', 'shift': 20, 'mask': 0xfff, 'version': 2},
453*55a95caaSYouMin Chen    'phy_lp3_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'odten_freq', 'shift': 12, 'mask': 0xfff, 'version': 2},
454*55a95caaSYouMin Chen    'lp3_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
455*55a95caaSYouMin Chen    'reserved_lp3_odten_freq_bit24_31': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'odten_freq', 'shift': 24, 'mask': 0xff, 'version': 2},
456*55a95caaSYouMin 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},
457*55a95caaSYouMin 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},
458*55a95caaSYouMin 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},
459*55a95caaSYouMin 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},
460*55a95caaSYouMin 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},
461*55a95caaSYouMin 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},
462*55a95caaSYouMin 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},
463*55a95caaSYouMin 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},
464*55a95caaSYouMin 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},
465*55a95caaSYouMin Chen    'lp3_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'vref_when_odten', 'shift': 10, 'mask': 0x3ff, 'version': 5},
466*55a95caaSYouMin Chen    'lp3_ca_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'vref_when_odten', 'shift': 20, 'mask': 0x3ff, 'version': 5},
467*55a95caaSYouMin 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},
468*55a95caaSYouMin 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},
469*55a95caaSYouMin Chen    'lp3_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'vref_when_odtoff', 'shift': 10, 'mask': 0x3ff, 'version': 5},
470*55a95caaSYouMin Chen    'lp3_ca_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp3_index', 'position': 'vref_when_odtoff', 'shift': 20, 'mask': 0x3ff, 'version': 5},
471*55a95caaSYouMin 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},
472*55a95caaSYouMin Chen
473*55a95caaSYouMin Chen    'lp4_f1_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'ddr_freq0_1', 'shift': 12, 'mask': 0xfff, 'version': 2},
474*55a95caaSYouMin 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},
475*55a95caaSYouMin Chen    'lp4_f2_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'ddr_freq2_3', 'shift': 0, 'mask': 0xfff, 'version': 2},
476*55a95caaSYouMin Chen    'lp4_f3_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'ddr_freq2_3', 'shift': 12, 'mask': 0xfff, 'version': 2},
477*55a95caaSYouMin 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},
478*55a95caaSYouMin Chen    'lp4_f4_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'ddr_freq4_5', 'shift': 0, 'mask': 0xfff, 'version': 2},
479*55a95caaSYouMin Chen    'lp4_f5_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'ddr_freq4_5', 'shift': 12, 'mask': 0xfff, 'version': 2},
480*55a95caaSYouMin 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},
481*55a95caaSYouMin 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},
482*55a95caaSYouMin 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},
483*55a95caaSYouMin 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},
484*55a95caaSYouMin 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},
485*55a95caaSYouMin 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},
486*55a95caaSYouMin 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},
487*55a95caaSYouMin 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},
488*55a95caaSYouMin 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},
489*55a95caaSYouMin Chen    'phy_lp4_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'odt_info', 'shift': 8, 'mask': 0x3ff, 'version': 2},
490*55a95caaSYouMin Chen    'lp4_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'odt_info', 'shift': 0, 'mask': 0xff, 'version': 2},
491*55a95caaSYouMin Chen    'lp4_ca_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'odt_info', 'shift': 18, 'mask': 0xff, 'version': 2},
492*55a95caaSYouMin Chen    'lp4_drv_pu_cal_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'odt_info', 'shift': 26, 'mask': 0x1, 'version': 2},
493*55a95caaSYouMin Chen    'lp4_drv_pu_cal_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'odt_info', 'shift': 27, 'mask': 0x1, 'version': 2},
494*55a95caaSYouMin 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},
495*55a95caaSYouMin 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},
496*55a95caaSYouMin Chen    'reserved_lp4_odt_info_bit31': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'odt_info', 'shift': 31, 'mask': 0x1, 'version': 2},
497*55a95caaSYouMin Chen    'phy_lp4_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'dq_odten_freq', 'shift': 12, 'mask': 0xfff, 'version': 2},
498*55a95caaSYouMin Chen    'lp4_dq_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'dq_odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
499*55a95caaSYouMin 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},
500*55a95caaSYouMin 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},
501*55a95caaSYouMin 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},
502*55a95caaSYouMin 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},
503*55a95caaSYouMin 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},
504*55a95caaSYouMin 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},
505*55a95caaSYouMin 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},
506*55a95caaSYouMin 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},
507*55a95caaSYouMin 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},
508*55a95caaSYouMin Chen    'lp4_ca_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'ca_odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
509*55a95caaSYouMin 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},
510*55a95caaSYouMin 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},
511*55a95caaSYouMin 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},
512*55a95caaSYouMin Chen    'lp4_odte_ck': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'cs_drv_ca_odt_info', 'shift': 16, 'mask': 0x1, 'version': 2},
513*55a95caaSYouMin 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},
514*55a95caaSYouMin 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},
515*55a95caaSYouMin 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},
516*55a95caaSYouMin 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},
517*55a95caaSYouMin Chen    'lp4_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'vref_when_odten', 'shift': 10, 'mask': 0x3ff, 'version': 2},
518*55a95caaSYouMin Chen    'lp4_ca_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'vref_when_odten', 'shift': 20, 'mask': 0x3ff, 'version': 2},
519*55a95caaSYouMin 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},
520*55a95caaSYouMin 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},
521*55a95caaSYouMin Chen    'lp4_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'vref_when_odtoff', 'shift': 10, 'mask': 0x3ff, 'version': 2},
522*55a95caaSYouMin Chen    'lp4_ca_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4_index', 'position': 'vref_when_odtoff', 'shift': 20, 'mask': 0x3ff, 'version': 2},
523*55a95caaSYouMin 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},
524*55a95caaSYouMin Chen
525*55a95caaSYouMin Chen    'ddr2_bytes_map': {'value': 0, 'num_base': 'hex', 'index': 'dq_map_index', 'position': 'byte_map_0', 'shift': 16, 'mask': 0xff, 'version': 2},
526*55a95caaSYouMin Chen    'ddr3_bytes_map': {'value': 0, 'num_base': 'hex', 'index': 'dq_map_index', 'position': 'byte_map_0', 'shift': 24, 'mask': 0xff, 'version': 2},
527*55a95caaSYouMin Chen    'ddr4_bytes_map': {'value': 0, 'num_base': 'hex', 'index': 'dq_map_index', 'position': 'byte_map_0', 'shift': 0, 'mask': 0xff, 'version': 2},
528*55a95caaSYouMin 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},
529*55a95caaSYouMin Chen    'lp2_bytes_map': {'value': 0, 'num_base': 'hex', 'index': 'dq_map_index', 'position': 'byte_map_1', 'shift': 8, 'mask': 0xff, 'version': 2},
530*55a95caaSYouMin Chen    'lp3_bytes_map': {'value': 0, 'num_base': 'hex', 'index': 'dq_map_index', 'position': 'byte_map_1', 'shift': 16, 'mask': 0xff, 'version': 2},
531*55a95caaSYouMin Chen    'lp4_bytes_map': {'value': 0, 'num_base': 'hex', 'index': 'dq_map_index', 'position': 'byte_map_1', 'shift': 24, 'mask': 0xff, 'version': 2},
532*55a95caaSYouMin 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},
533*55a95caaSYouMin 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},
534*55a95caaSYouMin 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},
535*55a95caaSYouMin 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},
536*55a95caaSYouMin 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},
537*55a95caaSYouMin 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},
538*55a95caaSYouMin 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},
539*55a95caaSYouMin Chen
540*55a95caaSYouMin Chen    'lp4x_f1_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'ddr_freq0_1', 'shift': 12, 'mask': 0xfff, 'version': 2},
541*55a95caaSYouMin 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},
542*55a95caaSYouMin Chen    'lp4x_f2_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'ddr_freq2_3', 'shift': 0, 'mask': 0xfff, 'version': 2},
543*55a95caaSYouMin Chen    'lp4x_f3_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'ddr_freq2_3', 'shift': 12, 'mask': 0xfff, 'version': 2},
544*55a95caaSYouMin 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},
545*55a95caaSYouMin Chen    'lp4x_f4_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'ddr_freq4_5', 'shift': 0, 'mask': 0xfff, 'version': 2},
546*55a95caaSYouMin Chen    'lp4x_f5_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'ddr_freq4_5', 'shift': 12, 'mask': 0xfff, 'version': 2},
547*55a95caaSYouMin 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},
548*55a95caaSYouMin 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},
549*55a95caaSYouMin 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},
550*55a95caaSYouMin 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},
551*55a95caaSYouMin 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},
552*55a95caaSYouMin 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},
553*55a95caaSYouMin 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},
554*55a95caaSYouMin 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},
555*55a95caaSYouMin 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},
556*55a95caaSYouMin Chen    'phy_lp4x_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'odt_info', 'shift': 8, 'mask': 0x3ff, 'version': 2},
557*55a95caaSYouMin Chen    'lp4x_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'odt_info', 'shift': 0, 'mask': 0xff, 'version': 2},
558*55a95caaSYouMin Chen    'lp4x_ca_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'odt_info', 'shift': 18, 'mask': 0xff, 'version': 2},
559*55a95caaSYouMin Chen    'lp4x_drv_pu_cal_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'odt_info', 'shift': 26, 'mask': 0x1, 'version': 2},
560*55a95caaSYouMin Chen    'lp4x_drv_pu_cal_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'odt_info', 'shift': 27, 'mask': 0x1, 'version': 2},
561*55a95caaSYouMin 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},
562*55a95caaSYouMin 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},
563*55a95caaSYouMin Chen    'reserved_lp4x_odt_info_bit31': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'odt_info', 'shift': 31, 'mask': 0x1, 'version': 2},
564*55a95caaSYouMin Chen    'phy_lp4x_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'dq_odten_freq', 'shift': 12, 'mask': 0xfff, 'version': 2},
565*55a95caaSYouMin Chen    'lp4x_dq_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'dq_odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
566*55a95caaSYouMin 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},
567*55a95caaSYouMin 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},
568*55a95caaSYouMin 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},
569*55a95caaSYouMin 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},
570*55a95caaSYouMin 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},
571*55a95caaSYouMin 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},
572*55a95caaSYouMin 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},
573*55a95caaSYouMin 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},
574*55a95caaSYouMin 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},
575*55a95caaSYouMin Chen    'lp4x_ca_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'ca_odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
576*55a95caaSYouMin 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},
577*55a95caaSYouMin 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},
578*55a95caaSYouMin 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},
579*55a95caaSYouMin Chen    'lp4x_odte_ck': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'cs_drv_ca_odt_info', 'shift': 16, 'mask': 0x1, 'version': 2},
580*55a95caaSYouMin 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},
581*55a95caaSYouMin 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},
582*55a95caaSYouMin 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},
583*55a95caaSYouMin 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},
584*55a95caaSYouMin Chen    'lp4x_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'vref_when_odten', 'shift': 10, 'mask': 0x3ff, 'version': 2},
585*55a95caaSYouMin Chen    'lp4x_ca_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'vref_when_odten', 'shift': 20, 'mask': 0x3ff, 'version': 2},
586*55a95caaSYouMin 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},
587*55a95caaSYouMin 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},
588*55a95caaSYouMin Chen    'lp4x_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'vref_when_odtoff', 'shift': 10, 'mask': 0x3ff, 'version': 2},
589*55a95caaSYouMin Chen    'lp4x_ca_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp4x_index', 'position': 'vref_when_odtoff', 'shift': 20, 'mask': 0x3ff, 'version': 2},
590*55a95caaSYouMin 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},
591*55a95caaSYouMin Chen
592*55a95caaSYouMin Chen    'lp5_f1_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'ddr_freq0_1', 'shift': 12, 'mask': 0xfff, 'version': 2},
593*55a95caaSYouMin 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},
594*55a95caaSYouMin Chen    'lp5_f2_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'ddr_freq2_3', 'shift': 0, 'mask': 0xfff, 'version': 2},
595*55a95caaSYouMin Chen    'lp5_f3_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'ddr_freq2_3', 'shift': 12, 'mask': 0xfff, 'version': 2},
596*55a95caaSYouMin 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},
597*55a95caaSYouMin Chen    'lp5_f4_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'ddr_freq4_5', 'shift': 0, 'mask': 0xfff, 'version': 2},
598*55a95caaSYouMin Chen    'lp5_f5_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'ddr_freq4_5', 'shift': 12, 'mask': 0xfff, 'version': 2},
599*55a95caaSYouMin 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},
600*55a95caaSYouMin 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},
601*55a95caaSYouMin 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},
602*55a95caaSYouMin 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},
603*55a95caaSYouMin 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},
604*55a95caaSYouMin 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},
605*55a95caaSYouMin 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},
606*55a95caaSYouMin 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},
607*55a95caaSYouMin 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},
608*55a95caaSYouMin Chen    'phy_lp5_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'odt_info', 'shift': 8, 'mask': 0x3ff, 'version': 2},
609*55a95caaSYouMin Chen    'lp5_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'odt_info', 'shift': 0, 'mask': 0xff, 'version': 2},
610*55a95caaSYouMin Chen    'lp5_ca_odt_ohm': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'odt_info', 'shift': 18, 'mask': 0xff, 'version': 2},
611*55a95caaSYouMin Chen    'lp5_drv_pu_cal_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'odt_info', 'shift': 26, 'mask': 0x1, 'version': 2},
612*55a95caaSYouMin Chen    'lp5_drv_pu_cal_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'odt_info', 'shift': 27, 'mask': 0x1, 'version': 2},
613*55a95caaSYouMin 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},
614*55a95caaSYouMin 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},
615*55a95caaSYouMin Chen    'reserved_lp5_odt_info_bit31': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'odt_info', 'shift': 31, 'mask': 0x1, 'version': 2},
616*55a95caaSYouMin Chen    'phy_lp5_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'dq_odten_freq', 'shift': 12, 'mask': 0xfff, 'version': 2},
617*55a95caaSYouMin Chen    'lp5_dq_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'dq_odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
618*55a95caaSYouMin 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},
619*55a95caaSYouMin 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},
620*55a95caaSYouMin 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},
621*55a95caaSYouMin 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},
622*55a95caaSYouMin 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},
623*55a95caaSYouMin 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},
624*55a95caaSYouMin 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},
625*55a95caaSYouMin 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},
626*55a95caaSYouMin 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},
627*55a95caaSYouMin Chen    'lp5_ca_odten_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'ca_odten_freq', 'shift': 0, 'mask': 0xfff, 'version': 2},
628*55a95caaSYouMin Chen    'lp5_wck_odt_en_freq': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'ca_odten_freq', 'shift': 12, 'mask': 0xfff, 'version': 2},
629*55a95caaSYouMin Chen    'lp5_wck_odt': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'ca_odten_freq', 'shift': 24, 'mask': 0xff, 'version': 2},
630*55a95caaSYouMin 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},
631*55a95caaSYouMin 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},
632*55a95caaSYouMin Chen    'lp5_odte_ck': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'cs_drv_ca_odt_info', 'shift': 16, 'mask': 0x1, 'version': 2},
633*55a95caaSYouMin 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},
634*55a95caaSYouMin 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},
635*55a95caaSYouMin Chen    'lp5_nt_odt': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'cs_drv_ca_odt_info', 'shift': 24, 'mask': 0xff, 'version': 2},
636*55a95caaSYouMin 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},
637*55a95caaSYouMin 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},
638*55a95caaSYouMin Chen    'lp5_dq_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'vref_when_odten', 'shift': 10, 'mask': 0x3ff, 'version': 2},
639*55a95caaSYouMin Chen    'lp5_ca_vref_when_odten': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'vref_when_odten', 'shift': 20, 'mask': 0x3ff, 'version': 2},
640*55a95caaSYouMin 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},
641*55a95caaSYouMin 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},
642*55a95caaSYouMin Chen    'lp5_dq_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'vref_when_odtoff', 'shift': 10, 'mask': 0x3ff, 'version': 2},
643*55a95caaSYouMin Chen    'lp5_ca_vref_when_odtoff': {'value': 0, 'num_base': 'dec', 'index': 'lp5_index', 'position': 'vref_when_odtoff', 'shift': 20, 'mask': 0x3ff, 'version': 2},
644*55a95caaSYouMin 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},
645*55a95caaSYouMin Chen
646*55a95caaSYouMin 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},
647*55a95caaSYouMin 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},
648*55a95caaSYouMin 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},
649*55a95caaSYouMin 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},
650*55a95caaSYouMin 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},
651*55a95caaSYouMin 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},
652*55a95caaSYouMin Chen    'lp4_4x_rank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp4_4x_hash_index', 'position': 'rank_mask0', 'shift': 0, 'mask': 0xffffffff, 'version': 3},
653*55a95caaSYouMin Chen    'lp4_4x_rank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp4_4x_hash_index', 'position': 'rank_mask1', 'shift': 0, 'mask': 0xffffffff, 'version': 3},
654*55a95caaSYouMin Chen
655*55a95caaSYouMin Chen    'lp5_ch_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp5_hash_index', 'position': 'ch_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
656*55a95caaSYouMin Chen    'lp5_ch_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp5_hash_index', 'position': 'ch_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
657*55a95caaSYouMin Chen    'lp5_bank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp5_hash_index', 'position': 'bank_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
658*55a95caaSYouMin Chen    'lp5_bank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp5_hash_index', 'position': 'bank_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
659*55a95caaSYouMin Chen    'lp5_bank_mask2': {'value': 0, 'num_base': 'hex', 'index': 'lp5_hash_index', 'position': 'bank_mask_2', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
660*55a95caaSYouMin Chen    'lp5_bank_mask3': {'value': 0, 'num_base': 'hex', 'index': 'lp5_hash_index', 'position': 'bank_mask_3', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
661*55a95caaSYouMin Chen    'lp5_rank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp5_hash_index', 'position': 'rank_mask0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
662*55a95caaSYouMin Chen    'lp5_rank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp5_hash_index', 'position': 'rank_mask1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
663*55a95caaSYouMin Chen
664*55a95caaSYouMin Chen    'ddr4_ch_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr4_hash_index', 'position': 'ch_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
665*55a95caaSYouMin Chen    'ddr4_ch_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr4_hash_index', 'position': 'ch_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
666*55a95caaSYouMin Chen    'ddr4_bank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr4_hash_index', 'position': 'bank_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
667*55a95caaSYouMin Chen    'ddr4_bank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr4_hash_index', 'position': 'bank_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
668*55a95caaSYouMin Chen    'ddr4_bank_mask2': {'value': 0, 'num_base': 'hex', 'index': 'ddr4_hash_index', 'position': 'bank_mask_2', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
669*55a95caaSYouMin Chen    'ddr4_bank_mask3': {'value': 0, 'num_base': 'hex', 'index': 'ddr4_hash_index', 'position': 'bank_mask_3', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
670*55a95caaSYouMin Chen    'ddr4_rank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr4_hash_index', 'position': 'rank_mask0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
671*55a95caaSYouMin Chen    'ddr4_rank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr4_hash_index', 'position': 'rank_mask1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
672*55a95caaSYouMin Chen
673*55a95caaSYouMin Chen    'lp3_ch_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp3_hash_index', 'position': 'ch_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
674*55a95caaSYouMin Chen    'lp3_ch_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp3_hash_index', 'position': 'ch_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
675*55a95caaSYouMin Chen    'lp3_bank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp3_hash_index', 'position': 'bank_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
676*55a95caaSYouMin Chen    'lp3_bank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp3_hash_index', 'position': 'bank_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
677*55a95caaSYouMin Chen    'lp3_bank_mask2': {'value': 0, 'num_base': 'hex', 'index': 'lp3_hash_index', 'position': 'bank_mask_2', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
678*55a95caaSYouMin Chen    'lp3_bank_mask3': {'value': 0, 'num_base': 'hex', 'index': 'lp3_hash_index', 'position': 'bank_mask_3', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
679*55a95caaSYouMin Chen    'lp3_rank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp3_hash_index', 'position': 'rank_mask0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
680*55a95caaSYouMin Chen    'lp3_rank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp3_hash_index', 'position': 'rank_mask1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
681*55a95caaSYouMin Chen
682*55a95caaSYouMin Chen    'ddr3_ch_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr3_hash_index', 'position': 'ch_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
683*55a95caaSYouMin Chen    'ddr3_ch_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr3_hash_index', 'position': 'ch_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
684*55a95caaSYouMin Chen    'ddr3_bank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr3_hash_index', 'position': 'bank_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
685*55a95caaSYouMin Chen    'ddr3_bank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr3_hash_index', 'position': 'bank_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
686*55a95caaSYouMin Chen    'ddr3_bank_mask2': {'value': 0, 'num_base': 'hex', 'index': 'ddr3_hash_index', 'position': 'bank_mask_2', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
687*55a95caaSYouMin Chen    'ddr3_bank_mask3': {'value': 0, 'num_base': 'hex', 'index': 'ddr3_hash_index', 'position': 'bank_mask_3', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
688*55a95caaSYouMin Chen    'ddr3_rank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr3_hash_index', 'position': 'rank_mask0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
689*55a95caaSYouMin Chen    'ddr3_rank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr3_hash_index', 'position': 'rank_mask1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
690*55a95caaSYouMin Chen
691*55a95caaSYouMin Chen    'lp2_ch_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp2_hash_index', 'position': 'ch_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
692*55a95caaSYouMin Chen    'lp2_ch_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp2_hash_index', 'position': 'ch_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
693*55a95caaSYouMin Chen    'lp2_bank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp2_hash_index', 'position': 'bank_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
694*55a95caaSYouMin Chen    'lp2_bank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp2_hash_index', 'position': 'bank_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
695*55a95caaSYouMin Chen    'lp2_bank_mask2': {'value': 0, 'num_base': 'hex', 'index': 'lp2_hash_index', 'position': 'bank_mask_2', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
696*55a95caaSYouMin Chen    'lp2_bank_mask3': {'value': 0, 'num_base': 'hex', 'index': 'lp2_hash_index', 'position': 'bank_mask_3', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
697*55a95caaSYouMin Chen    'lp2_rank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'lp2_hash_index', 'position': 'rank_mask0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
698*55a95caaSYouMin Chen    'lp2_rank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'lp2_hash_index', 'position': 'rank_mask1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
699*55a95caaSYouMin Chen
700*55a95caaSYouMin Chen    'ddr2_ch_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr2_hash_index', 'position': 'ch_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
701*55a95caaSYouMin Chen    'ddr2_ch_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr2_hash_index', 'position': 'ch_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
702*55a95caaSYouMin Chen    'ddr2_bank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr2_hash_index', 'position': 'bank_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
703*55a95caaSYouMin Chen    'ddr2_bank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr2_hash_index', 'position': 'bank_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
704*55a95caaSYouMin Chen    'ddr2_bank_mask2': {'value': 0, 'num_base': 'hex', 'index': 'ddr2_hash_index', 'position': 'bank_mask_2', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
705*55a95caaSYouMin Chen    'ddr2_bank_mask3': {'value': 0, 'num_base': 'hex', 'index': 'ddr2_hash_index', 'position': 'bank_mask_3', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
706*55a95caaSYouMin Chen    'ddr2_rank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr2_hash_index', 'position': 'rank_mask0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
707*55a95caaSYouMin Chen    'ddr2_rank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr2_hash_index', 'position': 'rank_mask1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
708*55a95caaSYouMin Chen
709*55a95caaSYouMin Chen    'ddr5_ch_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr5_hash_index', 'position': 'ch_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
710*55a95caaSYouMin Chen    'ddr5_ch_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr5_hash_index', 'position': 'ch_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
711*55a95caaSYouMin Chen    'ddr5_bank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr5_hash_index', 'position': 'bank_mask_0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
712*55a95caaSYouMin Chen    'ddr5_bank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr5_hash_index', 'position': 'bank_mask_1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
713*55a95caaSYouMin Chen    'ddr5_bank_mask2': {'value': 0, 'num_base': 'hex', 'index': 'ddr5_hash_index', 'position': 'bank_mask_2', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
714*55a95caaSYouMin Chen    'ddr5_bank_mask3': {'value': 0, 'num_base': 'hex', 'index': 'ddr5_hash_index', 'position': 'bank_mask_3', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
715*55a95caaSYouMin Chen    'ddr5_rank_mask0': {'value': 0, 'num_base': 'hex', 'index': 'ddr5_hash_index', 'position': 'rank_mask0', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
716*55a95caaSYouMin Chen    'ddr5_rank_mask1': {'value': 0, 'num_base': 'hex', 'index': 'ddr5_hash_index', 'position': 'rank_mask1', 'shift': 0, 'mask': 0xffffffff, 'version': 4},
717*55a95caaSYouMin Chen
718*55a95caaSYouMin 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},
719*55a95caaSYouMin Chen    'ddr3_skew_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'skew_index', 'position': 'ddr3_skew_freq', 'shift': 0, 'mask': 0xfff, 'version': 4},
720*55a95caaSYouMin Chen    'ddr3_ca0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_2', 'shift': 8, 'mask': 0xff, 'version': 4},
721*55a95caaSYouMin Chen    'ddr3_ca1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_0', 'shift': 0, 'mask': 0xff, 'version': 4},
722*55a95caaSYouMin Chen    'ddr3_ca2_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_1', 'shift': 24, 'mask': 0xff, 'version': 4},
723*55a95caaSYouMin Chen    'ddr3_ca3_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_1', 'shift': 8, 'mask': 0xff, 'version': 4},
724*55a95caaSYouMin Chen    'ddr3_ca4_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_1', 'shift': 16, 'mask': 0xff, 'version': 4},
725*55a95caaSYouMin Chen    'ddr3_ca5_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_2', 'shift': 24, 'mask': 0xff, 'version': 4},
726*55a95caaSYouMin Chen    'ddr3_ca6_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_1', 'shift': 0, 'mask': 0xff, 'version': 4},
727*55a95caaSYouMin Chen    'ddr3_ca7_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_2', 'shift': 0, 'mask': 0xff, 'version': 4},
728*55a95caaSYouMin Chen    'ddr3_ca8_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_3', 'shift': 16, 'mask': 0xff, 'version': 4},
729*55a95caaSYouMin Chen    'ddr3_ca9_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_0', 'shift': 24, 'mask': 0xff, 'version': 4},
730*55a95caaSYouMin Chen    'ddr3_ca10_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_3', 'shift': 24, 'mask': 0xff, 'version': 4},
731*55a95caaSYouMin Chen    'ddr3_ca11_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_2', 'shift': 16, 'mask': 0xff, 'version': 4},
732*55a95caaSYouMin Chen    'ddr3_ca12_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_4', 'shift': 0, 'mask': 0xff, 'version': 4},
733*55a95caaSYouMin Chen    'ddr3_ca13_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_0', 'shift': 8, 'mask': 0xff, 'version': 4},
734*55a95caaSYouMin Chen    'ddr3_ca14_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_0', 'shift': 16, 'mask': 0xff, 'version': 4},
735*55a95caaSYouMin Chen    'ddr3_ca15_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_5', 'shift': 16, 'mask': 0xff, 'version': 4},
736*55a95caaSYouMin Chen    'ddr3_ras_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_5', 'shift': 8, 'mask': 0xff, 'version': 4},
737*55a95caaSYouMin Chen    'ddr3_cas_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_7', 'shift': 24, 'mask': 0xff, 'version': 4},
738*55a95caaSYouMin Chen    'ddr3_ba0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_5', 'shift': 24, 'mask': 0xff, 'version': 4},
739*55a95caaSYouMin Chen    'ddr3_ba1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_3', 'shift': 0, 'mask': 0xff, 'version': 4},
740*55a95caaSYouMin Chen    'ddr3_ba2_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_4', 'shift': 8, 'mask': 0xff, 'version': 4},
741*55a95caaSYouMin Chen    'ddr3_we_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_6', 'shift': 8, 'mask': 0xff, 'version': 4},
742*55a95caaSYouMin Chen    'ddr3_cke0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_4', 'shift': 24, 'mask': 0xff, 'version': 4},
743*55a95caaSYouMin Chen    'ddr3_cke1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_5', 'shift': 0, 'mask': 0xff, 'version': 4},
744*55a95caaSYouMin Chen    'ddr3_ckn_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_6', 'shift': 24, 'mask': 0xff, 'version': 4},
745*55a95caaSYouMin Chen    'ddr3_ckp_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_6', 'shift': 16, 'mask': 0xff, 'version': 4},
746*55a95caaSYouMin Chen    'ddr3_odt0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_3', 'shift': 8, 'mask': 0xff, 'version': 4},
747*55a95caaSYouMin Chen    'ddr3_odt1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_6', 'shift': 0, 'mask': 0xff, 'version': 4},
748*55a95caaSYouMin Chen    'ddr3_cs0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_7', 'shift': 0, 'mask': 0xff, 'version': 4},
749*55a95caaSYouMin Chen    'ddr3_cs1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_7', 'shift': 16, 'mask': 0xff, 'version': 4},
750*55a95caaSYouMin Chen    'ddr3_resetn_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr3_ca_skew_7', 'shift': 8, 'mask': 0xff, 'version': 4},
751*55a95caaSYouMin Chen
752*55a95caaSYouMin 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},
753*55a95caaSYouMin Chen    'ddr4_skew_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'skew_index', 'position': 'ddr4_skew_freq', 'shift': 0, 'mask': 0xfff, 'version': 4},
754*55a95caaSYouMin Chen    'ddr4_ca0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_0', 'shift': 24, 'mask': 0xff, 'version': 4},
755*55a95caaSYouMin Chen    'ddr4_ca1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_0', 'shift': 16, 'mask': 0xff, 'version': 4},
756*55a95caaSYouMin Chen    'ddr4_ca2_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_0', 'shift': 8, 'mask': 0xff, 'version': 4},
757*55a95caaSYouMin Chen    'ddr4_ca3_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_0', 'shift': 0, 'mask': 0xff, 'version': 4},
758*55a95caaSYouMin Chen    'ddr4_ca4_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_1', 'shift': 24, 'mask': 0xff, 'version': 4},
759*55a95caaSYouMin Chen    'ddr4_ca5_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_1', 'shift': 16, 'mask': 0xff, 'version': 4},
760*55a95caaSYouMin Chen    'ddr4_ca6_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_1', 'shift': 8, 'mask': 0xff, 'version': 4},
761*55a95caaSYouMin Chen    'ddr4_ca7_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_1', 'shift': 0, 'mask': 0xff, 'version': 4},
762*55a95caaSYouMin Chen    'ddr4_ca8_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_2', 'shift': 24, 'mask': 0xff, 'version': 4},
763*55a95caaSYouMin Chen    'ddr4_ca9_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_2', 'shift': 16, 'mask': 0xff, 'version': 4},
764*55a95caaSYouMin Chen    'ddr4_ca10_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_2', 'shift': 8, 'mask': 0xff, 'version': 4},
765*55a95caaSYouMin Chen    'ddr4_ca11_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_2', 'shift': 0, 'mask': 0xff, 'version': 4},
766*55a95caaSYouMin Chen    'ddr4_ca12_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_3', 'shift': 24, 'mask': 0xff, 'version': 4},
767*55a95caaSYouMin Chen    'ddr4_ca13_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_3', 'shift': 16, 'mask': 0xff, 'version': 4},
768*55a95caaSYouMin Chen    'ddr4_ca14_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_3', 'shift': 8, 'mask': 0xff, 'version': 4},
769*55a95caaSYouMin Chen    'ddr4_ca15_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_3', 'shift': 0, 'mask': 0xff, 'version': 4},
770*55a95caaSYouMin Chen    'ddr4_ca16_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_4', 'shift': 24, 'mask': 0xff, 'version': 4},
771*55a95caaSYouMin Chen    'ddr4_ca17_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_4', 'shift': 16, 'mask': 0xff, 'version': 4},
772*55a95caaSYouMin Chen    'ddr4_ba0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_4', 'shift': 8, 'mask': 0xff, 'version': 4},
773*55a95caaSYouMin Chen    'ddr4_ba1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_4', 'shift': 0, 'mask': 0xff, 'version': 4},
774*55a95caaSYouMin Chen    'ddr4_bg0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_5', 'shift': 24, 'mask': 0xff, 'version': 4},
775*55a95caaSYouMin Chen    'ddr4_bg1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_5', 'shift': 16, 'mask': 0xff, 'version': 4},
776*55a95caaSYouMin Chen    'ddr4_cke0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_5', 'shift': 8, 'mask': 0xff, 'version': 4},
777*55a95caaSYouMin Chen    'ddr4_cke1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_5', 'shift': 0, 'mask': 0xff, 'version': 4},
778*55a95caaSYouMin Chen    'ddr4_ckn_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_6', 'shift': 24, 'mask': 0xff, 'version': 4},
779*55a95caaSYouMin Chen    'ddr4_ckp_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_6', 'shift': 16, 'mask': 0xff, 'version': 4},
780*55a95caaSYouMin Chen    'ddr4_odt0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_6', 'shift': 8, 'mask': 0xff, 'version': 4},
781*55a95caaSYouMin Chen    'ddr4_odt1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_6', 'shift': 0, 'mask': 0xff, 'version': 4},
782*55a95caaSYouMin Chen    'ddr4_cs0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_7', 'shift': 24, 'mask': 0xff, 'version': 4},
783*55a95caaSYouMin Chen    'ddr4_cs1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_7', 'shift': 16, 'mask': 0xff, 'version': 4},
784*55a95caaSYouMin Chen    'ddr4_resetn_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_7', 'shift': 8, 'mask': 0xff, 'version': 4},
785*55a95caaSYouMin Chen    'ddr4_actn_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'ddr4_ca_skew_7', 'shift': 0, 'mask': 0xff, 'version': 4},
786*55a95caaSYouMin Chen
787*55a95caaSYouMin 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},
788*55a95caaSYouMin Chen    'lp3_skew_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'skew_index', 'position': 'lp3_skew_freq', 'shift': 0, 'mask': 0xfff, 'version': 4},
789*55a95caaSYouMin Chen    'lp3_ca0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_3', 'shift': 0, 'mask': 0xff, 'version': 4},
790*55a95caaSYouMin Chen    'lp3_ca1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_4', 'shift': 0, 'mask': 0xff, 'version': 4},
791*55a95caaSYouMin Chen    'lp3_ca2_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_2', 'shift': 16, 'mask': 0xff, 'version': 4},
792*55a95caaSYouMin Chen    'lp3_ca3_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_3', 'shift': 16, 'mask': 0xff, 'version': 4},
793*55a95caaSYouMin Chen    'lp3_ca4_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_3', 'shift': 24, 'mask': 0xff, 'version': 4},
794*55a95caaSYouMin Chen    'lp3_ca5_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_1', 'shift': 24, 'mask': 0xff, 'version': 4},
795*55a95caaSYouMin Chen    'lp3_ca6_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_2', 'shift': 24, 'mask': 0xff, 'version': 4},
796*55a95caaSYouMin Chen    'lp3_ca7_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_2', 'shift': 0, 'mask': 0xff, 'version': 4},
797*55a95caaSYouMin Chen    'lp3_ca8_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_5', 'shift': 24, 'mask': 0xff, 'version': 4},
798*55a95caaSYouMin Chen    'lp3_ca9_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_7', 'shift': 0, 'mask': 0xff, 'version': 4},
799*55a95caaSYouMin Chen    'lp3_cke0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_4', 'shift': 8, 'mask': 0xff, 'version': 4},
800*55a95caaSYouMin Chen    'lp3_cke1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_5', 'shift': 0, 'mask': 0xff, 'version': 4},
801*55a95caaSYouMin Chen    'lp3_ckn_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_6', 'shift': 24, 'mask': 0xff, 'version': 4},
802*55a95caaSYouMin Chen    'lp3_ckp_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_6', 'shift': 16, 'mask': 0xff, 'version': 4},
803*55a95caaSYouMin Chen    'lp3_odt0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_6', 'shift': 8, 'mask': 0xff, 'version': 4},
804*55a95caaSYouMin Chen    'lp3_odt1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_6', 'shift': 0, 'mask': 0xff, 'version': 4},
805*55a95caaSYouMin Chen    'lp3_odt2_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_0', 'shift': 24, 'mask': 0xff, 'version': 4},
806*55a95caaSYouMin Chen    'lp3_odt3_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_0', 'shift': 8, 'mask': 0xff, 'version': 4},
807*55a95caaSYouMin Chen    'lp3_cs0_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_7', 'shift': 16, 'mask': 0xff, 'version': 4},
808*55a95caaSYouMin Chen    'lp3_cs1_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_7', 'shift': 24, 'mask': 0xff, 'version': 4},
809*55a95caaSYouMin Chen    'lp3_cs2_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_1', 'shift': 8, 'mask': 0xff, 'version': 4},
810*55a95caaSYouMin Chen    'lp3_cs3_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'lp3_ca_skew_3', 'shift': 8, 'mask': 0xff, 'version': 4},
811*55a95caaSYouMin Chen
812*55a95caaSYouMin Chen    'reserved_skew_lp4_skew_freq_bit12_31': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
813*55a95caaSYouMin Chen    'lp4_skew_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
814*55a95caaSYouMin Chen    'lp4_ca0_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
815*55a95caaSYouMin Chen    'lp4_ca1_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
816*55a95caaSYouMin Chen    'lp4_ca2_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
817*55a95caaSYouMin Chen    'lp4_ca3_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
818*55a95caaSYouMin Chen    'lp4_ca4_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
819*55a95caaSYouMin Chen    'lp4_ca5_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
820*55a95caaSYouMin Chen    'lp4_odt0_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
821*55a95caaSYouMin Chen    'lp4_odt1_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
822*55a95caaSYouMin Chen    'lp4_cke0_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
823*55a95caaSYouMin Chen    'lp4_cke1_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
824*55a95caaSYouMin Chen    'lp4_ckn_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
825*55a95caaSYouMin Chen    'lp4_ckp_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
826*55a95caaSYouMin Chen    'lp4_cs0_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
827*55a95caaSYouMin Chen    'lp4_cs1_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
828*55a95caaSYouMin Chen    'lp4_ca0_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
829*55a95caaSYouMin Chen    'lp4_ca1_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
830*55a95caaSYouMin Chen    'lp4_ca2_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
831*55a95caaSYouMin Chen    'lp4_ca3_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
832*55a95caaSYouMin Chen    'lp4_ca4_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
833*55a95caaSYouMin Chen    'lp4_ca5_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
834*55a95caaSYouMin Chen    'lp4_odt0_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
835*55a95caaSYouMin Chen    'lp4_odt1_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
836*55a95caaSYouMin Chen    'lp4_cke0_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
837*55a95caaSYouMin Chen    'lp4_cke1_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
838*55a95caaSYouMin Chen    'lp4_ckn_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
839*55a95caaSYouMin Chen    'lp4_ckp_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
840*55a95caaSYouMin Chen    'lp4_cs0_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
841*55a95caaSYouMin Chen    'lp4_cs1_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
842*55a95caaSYouMin Chen    'lp4_resetn_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
843*55a95caaSYouMin Chen
844*55a95caaSYouMin Chen    'reserved_skew_lp5_skew_freq_bit12_31': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
845*55a95caaSYouMin Chen    'lp5_skew_freq_mhz': {'value': 0, 'num_base': 'dec', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
846*55a95caaSYouMin Chen    'lp5_ca0_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
847*55a95caaSYouMin Chen    'lp5_ca1_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
848*55a95caaSYouMin Chen    'lp5_ca2_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
849*55a95caaSYouMin Chen    'lp5_ca3_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
850*55a95caaSYouMin Chen    'lp5_ca4_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
851*55a95caaSYouMin Chen    'lp5_ca5_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
852*55a95caaSYouMin Chen    'lp5_ca6_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
853*55a95caaSYouMin Chen    'lp5_ckn_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
854*55a95caaSYouMin Chen    'lp5_ckp_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
855*55a95caaSYouMin Chen    'lp5_cs0_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
856*55a95caaSYouMin Chen    'lp5_cs1_a_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
857*55a95caaSYouMin Chen    'lp5_ca0_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
858*55a95caaSYouMin Chen    'lp5_ca1_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
859*55a95caaSYouMin Chen    'lp5_ca2_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
860*55a95caaSYouMin Chen    'lp5_ca3_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
861*55a95caaSYouMin Chen    'lp5_ca4_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
862*55a95caaSYouMin Chen    'lp5_ca5_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
863*55a95caaSYouMin Chen    'lp5_ca6_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
864*55a95caaSYouMin Chen    'lp5_ckn_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
865*55a95caaSYouMin Chen    'lp5_ckp_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
866*55a95caaSYouMin Chen    'lp5_cs0_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
867*55a95caaSYouMin Chen    'lp5_cs1_b_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
868*55a95caaSYouMin Chen    'lp5_resetn_skew': {'value': 0, 'num_base': 'hex', 'index': 'skew_index', 'position': 'null', 'shift': 0, 'mask': 0, 'version': 4},
869*55a95caaSYouMin Chen}
870*55a95caaSYouMin Chen
871*55a95caaSYouMin Chen
872*55a95caaSYouMin Chendef bin_data_2_info(info_from_bin, read_out, ddrbin_index, version, info_from_txt):
873*55a95caaSYouMin Chen    info_from_bin['start tag']['value'] = 0x12345678
874*55a95caaSYouMin Chen
875*55a95caaSYouMin Chen    if version < 2:
876*55a95caaSYouMin Chen        for key, value in info_from_bin.items():
877*55a95caaSYouMin Chen            if value['version'] <= version:
878*55a95caaSYouMin Chen                for i in range(len(read_out)):
879*55a95caaSYouMin Chen                    # read_out is sdram_head_info_v0 = [[offset, value], ...]
880*55a95caaSYouMin Chen                    # info_from_bin v0_info = [offset, shift, mask]
881*55a95caaSYouMin Chen                    if value['v0_info'][0] == read_out[i][0]:
882*55a95caaSYouMin Chen                        temp_value = (read_out[i][1] >> value['v0_info'][1]) & value['v0_info'][2]
883*55a95caaSYouMin Chen                        info_from_bin[key]['value'] = temp_value
884*55a95caaSYouMin Chen                        #print(f"D: {key} = {value} {hex(value['v0_info'][0])}={read_out[i][1]}")
885*55a95caaSYouMin Chen    elif version <= version_max:
886*55a95caaSYouMin Chen        for index_name in ddrbin_index:
887*55a95caaSYouMin Chen            head_info_name = index_name[:-6]+'_info'
888*55a95caaSYouMin Chen            if ddrbin_index[index_name]['offset'] != 0 and 'skew' not in index_name:
889*55a95caaSYouMin Chen                for key, value in info_from_bin.items():
890*55a95caaSYouMin Chen                    if value['index'] == index_name and value['version'] <= version:
891*55a95caaSYouMin Chen                        temp_value = read_out[head_info_name][value['position']]
892*55a95caaSYouMin Chen                        temp_value = (temp_value >> value['shift']) & value['mask']
893*55a95caaSYouMin Chen                        info_from_bin[key]['value'] = temp_value
894*55a95caaSYouMin Chen                        #print(f"D: {key} = {value} {value['position']}={temp_value}")
895*55a95caaSYouMin Chen            elif ddrbin_index[index_name]['offset'] != 0 and 'skew' in index_name:
896*55a95caaSYouMin Chen                if chip_info == 'rk3528':
897*55a95caaSYouMin Chen                    for key, value in info_from_bin.items():
898*55a95caaSYouMin Chen                        if value['index'] == index_name and value['version'] <= version:
899*55a95caaSYouMin Chen                            position_1 = value['position'][ : value['position'].find('_')]
900*55a95caaSYouMin Chen                            position_2 = value['position'][value['position'].find('_') + 1 : ]
901*55a95caaSYouMin Chen                            # read_out is sdram_head_info_v2 or sdram_head_info_v5
902*55a95caaSYouMin Chen                            if position_1 in list(read_out[head_info_name].keys()):
903*55a95caaSYouMin Chen                                temp_value = read_out[head_info_name][position_1][position_2]
904*55a95caaSYouMin Chen                                temp_value = (temp_value >> value['shift']) & value['mask']
905*55a95caaSYouMin Chen                                info_from_bin[key]['value'] = temp_value
906*55a95caaSYouMin Chen                                #print(f"D: {key} = {value} {value['position']}={temp_value}")
907*55a95caaSYouMin Chen
908*55a95caaSYouMin Chen    return 0
909*55a95caaSYouMin Chen
910*55a95caaSYouMin Chen
911*55a95caaSYouMin Chendef modefy_2_bin_data(info_from_txt, write_in, ddrbin_index, version):
912*55a95caaSYouMin Chen    global rk3528_skew_info
913*55a95caaSYouMin Chen
914*55a95caaSYouMin Chen    if version < 2:
915*55a95caaSYouMin Chen        for key, value in info_from_txt.items():
916*55a95caaSYouMin Chen            if value['version'] <= version:
917*55a95caaSYouMin Chen                for i in range(len(write_in)):
918*55a95caaSYouMin Chen                    if value['v0_info'][0] == write_in[i][0]:
919*55a95caaSYouMin Chen                        write_in[i][1] |= (value['value'] << value['v0_info'][1])
920*55a95caaSYouMin Chen    elif version <= version_max:
921*55a95caaSYouMin Chen        for index_name in ddrbin_index:
922*55a95caaSYouMin Chen            head_info_name = index_name[:-6]+'_info'
923*55a95caaSYouMin Chen            if ddrbin_index[index_name]['offset'] != 0 and 'skew' not in index_name:
924*55a95caaSYouMin Chen                position_name = 'null'
925*55a95caaSYouMin Chen                for key, value in info_from_txt.items():
926*55a95caaSYouMin Chen                    if value['index'] == index_name and value['version'] <= version:
927*55a95caaSYouMin Chen                        if position_name != value['position']:
928*55a95caaSYouMin Chen                            position_name = value['position']
929*55a95caaSYouMin Chen                            position_value = 0
930*55a95caaSYouMin Chen                        position_value |= (value['value'] << value['shift'])
931*55a95caaSYouMin Chen                        write_in[head_info_name][value['position']] = position_value
932*55a95caaSYouMin Chen                        #print(f"D: {key} = {value}, {value['position']}={position_value}")
933*55a95caaSYouMin Chen            elif ddrbin_index[index_name]['offset'] != 0 and 'skew' in index_name:
934*55a95caaSYouMin Chen                if chip_info == 'rk3528':
935*55a95caaSYouMin Chen                    write_in.update({'skew_info' : rk3528_skew_info})
936*55a95caaSYouMin Chen                    if rk3528_skew_info['skew_sub_version'] == 0x1:
937*55a95caaSYouMin Chen                        for key, value in info_from_txt.items():
938*55a95caaSYouMin Chen                            if value['index'] == index_name and value['version'] <= version:
939*55a95caaSYouMin Chen                                position_1 = value['position'][ : value['position'].find('_')]
940*55a95caaSYouMin Chen                                position_2 = value['position'][value['position'].find('_') + 1 : ]
941*55a95caaSYouMin Chen                                if position_1 in list(write_in[head_info_name].keys()):
942*55a95caaSYouMin Chen                                    temp_value =  write_in[head_info_name][position_1][position_2]
943*55a95caaSYouMin Chen                                    temp_value &= ~(value['mask'] << value['shift'])
944*55a95caaSYouMin Chen                                    temp_value |= value['value'] << value['shift']
945*55a95caaSYouMin Chen                                    write_in[head_info_name][position_1][position_2] = temp_value
946*55a95caaSYouMin Chen                                    #print(f"D: {key} = {value}, {temp_value}")
947*55a95caaSYouMin Chen
948*55a95caaSYouMin Chen    #print(f"D: write_in = {write_in}")
949*55a95caaSYouMin Chen    return 0
950*55a95caaSYouMin Chen
951*55a95caaSYouMin Chen
952*55a95caaSYouMin Chendef write_in_bin_data_v2(filebin, bin_skew_offset, write_in, ddrbin_index, info_from_txt, version):
953*55a95caaSYouMin Chen    for index_name in ddrbin_index:
954*55a95caaSYouMin Chen        head_info_name = index_name[:-6]+'_info'
955*55a95caaSYouMin Chen        if ddrbin_index[index_name]['offset'] != 0 and 'skew' not in index_name:
956*55a95caaSYouMin Chen            filebin.seek(bin_skew_offset + (ddrbin_index[index_name]['offset'] - 1) * 4)
957*55a95caaSYouMin Chen            index_size = ddrbin_index[index_name]['size']
958*55a95caaSYouMin Chen            for key in write_in[head_info_name]:
959*55a95caaSYouMin Chen                if index_size > 0:
960*55a95caaSYouMin Chen                    try:
961*55a95caaSYouMin Chen                        filebin.write(write_in[head_info_name][key].to_bytes(4,byteorder='little'))
962*55a95caaSYouMin Chen                        #print(f"D: {head_info_name} {key} = {write_in[head_info_name][key]}")
963*55a95caaSYouMin Chen                        index_size -= 1
964*55a95caaSYouMin Chen                    except:
965*55a95caaSYouMin Chen                        print("write bin {} to file fail".format(head_info_name))
966*55a95caaSYouMin Chen                        return -1
967*55a95caaSYouMin Chen        elif ddrbin_index[index_name]['offset'] != 0 and 'skew' in index_name:
968*55a95caaSYouMin Chen            if chip_info == 'rk3528' and write_in[head_info_name]["skew_sub_version"] == 1:
969*55a95caaSYouMin Chen                filebin.seek(bin_skew_offset + (ddrbin_index[index_name]['offset'] - 1) * 4)
970*55a95caaSYouMin Chen                index_size = ddrbin_index[index_name]['size']
971*55a95caaSYouMin Chen                for key in write_in[head_info_name]:
972*55a95caaSYouMin Chen                    if key == 'skew_sub_version':
973*55a95caaSYouMin Chen                        temp_value = write_in[head_info_name]["skew_sub_version"]
974*55a95caaSYouMin Chen                        filebin.write(temp_value.to_bytes(4,byteorder='little'))
975*55a95caaSYouMin Chen                        continue
976*55a95caaSYouMin Chen                    for key_1 in write_in[head_info_name][key]:
977*55a95caaSYouMin Chen                        if index_size > 0:
978*55a95caaSYouMin Chen                            try:
979*55a95caaSYouMin Chen                                temp_value = write_in[head_info_name][key][key_1]
980*55a95caaSYouMin Chen                                #print(f"D: {head_info_name} {key}.{key_1} = {temp_value}")
981*55a95caaSYouMin Chen                                filebin.write(temp_value.to_bytes(4,byteorder='little'))
982*55a95caaSYouMin Chen                                index_size -= 1
983*55a95caaSYouMin Chen                            except:
984*55a95caaSYouMin Chen                                print("write bin {} to file fail".format(head_info_name))
985*55a95caaSYouMin Chen                                return -1
986*55a95caaSYouMin Chen
987*55a95caaSYouMin Chen    return 0
988*55a95caaSYouMin Chen
989*55a95caaSYouMin Chen
990*55a95caaSYouMin Chen#info from bin + info from txt generate to loader parameters
991*55a95caaSYouMin Chendef txt_data_2_bin_data(info_from_txt, info_from_bin, ddrbin_index, write_in, version):
992*55a95caaSYouMin Chen    print("\nnew bin config:")
993*55a95caaSYouMin Chen
994*55a95caaSYouMin Chen    for key, value in info_from_txt.items():
995*55a95caaSYouMin Chen        if key == 'start tag':
996*55a95caaSYouMin Chen            continue
997*55a95caaSYouMin Chen        if (info_from_txt[key]['value'] == 0) and (key not in update_key_list):
998*55a95caaSYouMin Chen            info_from_txt[key]['value'] = info_from_bin[key]['value']
999*55a95caaSYouMin Chen        else:
1000*55a95caaSYouMin Chen            if info_from_txt[key]['num_base'] == 'hex':
1001*55a95caaSYouMin Chen                print("{}: {}".format(key, hex(info_from_txt[key]['value'])))
1002*55a95caaSYouMin Chen            else:
1003*55a95caaSYouMin Chen                print("{}: {}".format(key, info_from_txt[key]['value']))
1004*55a95caaSYouMin Chen    #print(info_from_txt)
1005*55a95caaSYouMin Chen
1006*55a95caaSYouMin Chen    modefy_2_bin_data(info_from_txt, write_in, ddrbin_index, version)
1007*55a95caaSYouMin Chen
1008*55a95caaSYouMin Chen    return 0
1009*55a95caaSYouMin Chen
1010*55a95caaSYouMin Chen
1011*55a95caaSYouMin Chendef bin_data_readout(filebin, ddrbin_index, read_out, bin_skew_offset, version, info_from_txt):
1012*55a95caaSYouMin Chen    global rk3528_skew_info
1013*55a95caaSYouMin Chen
1014*55a95caaSYouMin Chen    if version < 2:
1015*55a95caaSYouMin Chen        for i in range(len(read_out)):
1016*55a95caaSYouMin Chen            try:
1017*55a95caaSYouMin Chen                read_out[i][1] = int.from_bytes(filebin.read(4), byteorder='little')
1018*55a95caaSYouMin Chen                #print(f"D: read_out {hex(read_out[i][0])} = {read_out[i][1]}")
1019*55a95caaSYouMin Chen            except:
1020*55a95caaSYouMin Chen                print("read bin file fail")
1021*55a95caaSYouMin Chen                return -1
1022*55a95caaSYouMin Chen    elif version <= version_max:
1023*55a95caaSYouMin Chen        for index_name in ddrbin_index:
1024*55a95caaSYouMin Chen            head_info_name = index_name[:-6]+'_info'
1025*55a95caaSYouMin Chen            if ddrbin_index[index_name]['offset'] != 0 and 'skew' not in index_name:
1026*55a95caaSYouMin Chen                filebin.seek(bin_skew_offset + (ddrbin_index[index_name]['offset'] - 1) * 4)
1027*55a95caaSYouMin Chen                index_size = ddrbin_index[index_name]['size']
1028*55a95caaSYouMin Chen                for key in read_out[head_info_name]:
1029*55a95caaSYouMin Chen                    if index_size > 0:
1030*55a95caaSYouMin Chen                        try:
1031*55a95caaSYouMin Chen                            temp_value = int.from_bytes(filebin.read(4), byteorder='little')
1032*55a95caaSYouMin Chen                            read_out[head_info_name][key] = temp_value
1033*55a95caaSYouMin Chen                            #print(f"D: {head_info_name} {key} = {read_out[head_info_name][key]}")
1034*55a95caaSYouMin Chen                            index_size -= 1
1035*55a95caaSYouMin Chen                        except:
1036*55a95caaSYouMin Chen                            print("read {} from bin file fail".format(head_info_name))
1037*55a95caaSYouMin Chen                            return -1
1038*55a95caaSYouMin Chen            elif ddrbin_index[index_name]['offset'] != 0 and 'skew' in index_name:
1039*55a95caaSYouMin Chen                try:
1040*55a95caaSYouMin Chen                    filebin.seek(bin_skew_offset + (ddrbin_index[index_name]['offset'] - 1) * 4)
1041*55a95caaSYouMin Chen                    skew_sub_ver = int.from_bytes(filebin.read(4), byteorder='little') & 0xff
1042*55a95caaSYouMin Chen                except:
1043*55a95caaSYouMin Chen                    print("read skew_sub_ver from bin file fail")
1044*55a95caaSYouMin Chen                    return -1
1045*55a95caaSYouMin Chen                if chip_info == 'rk3528' and skew_sub_ver == 0x1:
1046*55a95caaSYouMin Chen                    for i in rk3528_skew_info:
1047*55a95caaSYouMin Chen                        if i == 'skew_sub_version':
1048*55a95caaSYouMin Chen                            rk3528_skew_info[i] = skew_sub_ver
1049*55a95caaSYouMin Chen                            continue
1050*55a95caaSYouMin Chen                        for j in rk3528_skew_info[i]:
1051*55a95caaSYouMin Chen                            try:
1052*55a95caaSYouMin Chen                                temp_value = int.from_bytes(filebin.read(4), byteorder='little')
1053*55a95caaSYouMin Chen                                rk3528_skew_info[i][j] = temp_value
1054*55a95caaSYouMin Chen                                #print(f"D: {i}.{j}={rk3528_skew_info[i][j]}")
1055*55a95caaSYouMin Chen                            except:
1056*55a95caaSYouMin Chen                                print("read {} from bin file fail".format(head_info_name))
1057*55a95caaSYouMin Chen                                return -1
1058*55a95caaSYouMin Chen
1059*55a95caaSYouMin Chen                read_out.update({'skew_info' : rk3528_skew_info})
1060*55a95caaSYouMin Chen
1061*55a95caaSYouMin Chen    return 0
1062*55a95caaSYouMin Chen
1063*55a95caaSYouMin Chen
1064*55a95caaSYouMin Chendef gen_info_from_bin(filegen_path, info_from_bin, verinfo_full, version):
1065*55a95caaSYouMin Chen    with open(filegen_path, 'w+', encoding='utf-8') as file:
1066*55a95caaSYouMin Chen        file.write('/* ' + verinfo_full + ' */\n')
1067*55a95caaSYouMin Chen
1068*55a95caaSYouMin Chen    with open(filegen_path, 'a', encoding='utf-8') as file:
1069*55a95caaSYouMin Chen        for key, value in info_from_bin.items():
1070*55a95caaSYouMin Chen            if "reserved" in key:
1071*55a95caaSYouMin Chen                continue
1072*55a95caaSYouMin Chen
1073*55a95caaSYouMin Chen            if value['num_base'] == 'hex':
1074*55a95caaSYouMin Chen                value_str = str(hex(value['value']))
1075*55a95caaSYouMin Chen            else:
1076*55a95caaSYouMin Chen                value_str = str(value['value'])
1077*55a95caaSYouMin Chen
1078*55a95caaSYouMin Chen            write_buff = key + '=' + value_str
1079*55a95caaSYouMin Chen            #print(f"D: {write_buff}")
1080*55a95caaSYouMin Chen            file.write(write_buff + '\n')
1081*55a95caaSYouMin Chen
1082*55a95caaSYouMin Chen    with open(filegen_path, 'a', encoding='utf-8') as file:
1083*55a95caaSYouMin Chen        file.write('end' + '\n')
1084*55a95caaSYouMin Chen
1085*55a95caaSYouMin Chen    return 0
1086*55a95caaSYouMin Chen
1087*55a95caaSYouMin Chen
1088*55a95caaSYouMin Chendef print_help():
1089*55a95caaSYouMin Chen    print(
1090*55a95caaSYouMin Chen        "For more details, please refer to the ddrbin_tool_user_guide.txt\n"\
1091*55a95caaSYouMin Chen        "This tools support two functions\n"\
1092*55a95caaSYouMin Chen        "for example:\n"\
1093*55a95caaSYouMin Chen        "function 1: modify ddr.bin file from ddrbin_param.txt.\n"\
1094*55a95caaSYouMin Chen        "	1) modify 'ddrbin_param.txt', set ddr frequency, uart info etc what you want.\n"\
1095*55a95caaSYouMin Chen        "	If want to keep items default, please keep these items blank.\n"\
1096*55a95caaSYouMin Chen        "	The date & time in the version information will be updated by default.\n"\
1097*55a95caaSYouMin Chen        "	like: ./ddrbin_tool px30 ddrbin_param.txt px30_ddr_333MHz_v1.13.bin\n"\
1098*55a95caaSYouMin Chen        "\n"\
1099*55a95caaSYouMin Chen        "	OPTION: --verinfo_editable=TEXT		The TEXT(max 17 chars) will replace\n"\
1100*55a95caaSYouMin Chen        "						the date & time in the version information.\n"\
1101*55a95caaSYouMin Chen        "	like: ./ddrbin_tool px30 ddrbin_param.txt px30_ddr_333MHz_v1.13.bin [OPTION]\n"\
1102*55a95caaSYouMin Chen        "\n"\
1103*55a95caaSYouMin Chen        "function 2: get ddr.bin file config to gen_param.txt file\n"\
1104*55a95caaSYouMin Chen        "	If want to get ddrbin file config, please run like that:\n"\
1105*55a95caaSYouMin Chen        "	./ddrbin_tool px30 -g gen_param.txt px30_ddr_333MHz_v1.15.bin\n"\
1106*55a95caaSYouMin Chen        "	The config will show in gen_param.txt.\n"\
1107*55a95caaSYouMin Chen        "\n"\
1108*55a95caaSYouMin Chen        "Note:	The function 1 and function 2 are two separate functions\n"\
1109*55a95caaSYouMin Chen        "The gen_param.txt file which is generated by function 2 is no need used in function 1.\n"\
1110*55a95caaSYouMin Chen        "\n"\
1111*55a95caaSYouMin Chen        "For more details, please refer to the ddrbin_tool_user_guide.txt\n"\
1112*55a95caaSYouMin Chen    )
1113*55a95caaSYouMin Chen
1114*55a95caaSYouMin Chen
1115*55a95caaSYouMin Chendef ddrbin_tool(argc, argv):
1116*55a95caaSYouMin Chen    global updata_key_list
1117*55a95caaSYouMin Chen    global chip_info
1118*55a95caaSYouMin Chen
1119*55a95caaSYouMin Chen    info_from_txt = copy.deepcopy(base_info_full)
1120*55a95caaSYouMin Chen    info_from_bin = copy.deepcopy(base_info_full)
1121*55a95caaSYouMin Chen    ddrbin_index = copy.deepcopy(sdram_head_info_index_v2)
1122*55a95caaSYouMin Chen
1123*55a95caaSYouMin Chen    version_old_hit = 0
1124*55a95caaSYouMin Chen    gen_txt_from_bin = 0
1125*55a95caaSYouMin Chen
1126*55a95caaSYouMin Chen    verinfo_full = ''
1127*55a95caaSYouMin Chen    verinfo_full_offset = 0
1128*55a95caaSYouMin Chen    verinfo_full_length = 0
1129*55a95caaSYouMin Chen    verinfo_editable = ''
1130*55a95caaSYouMin Chen    verinfo_editable_offset = 0
1131*55a95caaSYouMin Chen    verinfo_editable_length = 17
1132*55a95caaSYouMin Chen
1133*55a95caaSYouMin Chen    print("version v1.21 20241211")
1134*55a95caaSYouMin Chen    print("python {}, {}, {}".format(sys.version.split(' ', 1)[0], platform.system(), platform.machine()))
1135*55a95caaSYouMin Chen    if sys.version_info < (3, 6):
1136*55a95caaSYouMin Chen        print("Warning: Please installed Python 3.6 or later.")
1137*55a95caaSYouMin Chen
1138*55a95caaSYouMin Chen    if argc == 1:
1139*55a95caaSYouMin Chen        print_help()
1140*55a95caaSYouMin Chen        return -1
1141*55a95caaSYouMin Chen
1142*55a95caaSYouMin Chen    chip_info = argv[1]
1143*55a95caaSYouMin Chen    if chip_info not in chip_list:
1144*55a95caaSYouMin Chen        chip_info = 'others chip'
1145*55a95caaSYouMin Chen    print("chip: {}".format(chip_info))
1146*55a95caaSYouMin Chen
1147*55a95caaSYouMin Chen    try:
1148*55a95caaSYouMin Chen        opts, args = getopt.gnu_getopt(argv, 'g:h', ['verinfo_editable='])
1149*55a95caaSYouMin Chen    except:
1150*55a95caaSYouMin Chen        print_help()
1151*55a95caaSYouMin Chen        return -1
1152*55a95caaSYouMin Chen
1153*55a95caaSYouMin Chen    for opt, arg in opts:
1154*55a95caaSYouMin Chen        if opt == '-g':
1155*55a95caaSYouMin Chen            gen_txt_from_bin = 1
1156*55a95caaSYouMin Chen            filegen_path = arg
1157*55a95caaSYouMin Chen        elif opt == '--verinfo_editable':
1158*55a95caaSYouMin Chen            verinfo_editable = arg
1159*55a95caaSYouMin Chen            if len(verinfo_editable) > verinfo_editable_length:
1160*55a95caaSYouMin Chen                print("The character count of 'verinfo_editable' exceeds the allowed limit of 17.")
1161*55a95caaSYouMin Chen                return -1
1162*55a95caaSYouMin Chen        elif opt == '-h':
1163*55a95caaSYouMin Chen            print_help()
1164*55a95caaSYouMin Chen            return -1
1165*55a95caaSYouMin Chen
1166*55a95caaSYouMin Chen    if gen_txt_from_bin == 1:
1167*55a95caaSYouMin Chen        # function: get ddr.bin file config to gen_param.txt file
1168*55a95caaSYouMin Chen        if argc < 5:
1169*55a95caaSYouMin Chen            print("The number of parameters error")
1170*55a95caaSYouMin Chen            print_help()
1171*55a95caaSYouMin Chen            return -1
1172*55a95caaSYouMin Chen
1173*55a95caaSYouMin Chen        filebin_path = argv[4]
1174*55a95caaSYouMin Chen        if os.path.exists(filebin_path) != True:
1175*55a95caaSYouMin Chen            print("The file {} not exist".format(filebin_path))
1176*55a95caaSYouMin Chen            return -1
1177*55a95caaSYouMin Chen
1178*55a95caaSYouMin Chen        #print(f"D: filegen_path={filegen_path}, {filebin_path}")
1179*55a95caaSYouMin Chen    else:
1180*55a95caaSYouMin Chen        # function: modify ddr.bin file from ddrbin_param.txt.
1181*55a95caaSYouMin Chen        if argc < 4:
1182*55a95caaSYouMin Chen            print("The number of parameters error")
1183*55a95caaSYouMin Chen            print_help()
1184*55a95caaSYouMin Chen            return -1
1185*55a95caaSYouMin Chen
1186*55a95caaSYouMin Chen        fileskew_path = argv[2]
1187*55a95caaSYouMin Chen        if os.path.exists(fileskew_path) != True:
1188*55a95caaSYouMin Chen            print("The file {} not exist".format(fileskew_path))
1189*55a95caaSYouMin Chen            return -1
1190*55a95caaSYouMin Chen
1191*55a95caaSYouMin Chen        filebin_path = argv[3]
1192*55a95caaSYouMin Chen        if os.path.exists(filebin_path) != True:
1193*55a95caaSYouMin Chen            print("The file {} not exist".format(filebin_path))
1194*55a95caaSYouMin Chen            return -1
1195*55a95caaSYouMin Chen
1196*55a95caaSYouMin Chen        for key in version_old_list:
1197*55a95caaSYouMin Chen            if key in argv[3]:
1198*55a95caaSYouMin Chen                version_old_hit = 1
1199*55a95caaSYouMin Chen        #print(f"D: fileskew_path={fileskew_path},{filebin_path},version_old_hit={version_old_hit}")
1200*55a95caaSYouMin Chen
1201*55a95caaSYouMin Chen    if gen_txt_from_bin != 1:
1202*55a95caaSYouMin Chen        # Read the parameters that need to be modified from the txt file.
1203*55a95caaSYouMin Chen        key_list = list(info_from_txt.keys())
1204*55a95caaSYouMin Chen        hot = 0
1205*55a95caaSYouMin Chen        try:
1206*55a95caaSYouMin Chen            with open(fileskew_path,'r', encoding='UTF-8') as file:
1207*55a95caaSYouMin Chen                for line in file:
1208*55a95caaSYouMin Chen                    if '/*' in line:
1209*55a95caaSYouMin Chen                        continue
1210*55a95caaSYouMin Chen
1211*55a95caaSYouMin Chen                    if '=' in line:
1212*55a95caaSYouMin Chen                        index_of_line = line.find('=')
1213*55a95caaSYouMin Chen                        if line[index_of_line : ].strip() != '=':
1214*55a95caaSYouMin Chen                            info_dict_key = line[ : index_of_line]
1215*55a95caaSYouMin Chen                            info_dict_value = line[index_of_line + 1 : -1]
1216*55a95caaSYouMin Chen
1217*55a95caaSYouMin Chen                            if '0x' in info_dict_value:
1218*55a95caaSYouMin Chen                                info_dict_value = int(info_dict_value[2:], 16)
1219*55a95caaSYouMin Chen                            else:
1220*55a95caaSYouMin Chen                                info_dict_value = int(info_dict_value)
1221*55a95caaSYouMin Chen
1222*55a95caaSYouMin Chen                            info_from_txt[info_dict_key]['value'] = info_dict_value
1223*55a95caaSYouMin Chen
1224*55a95caaSYouMin Chen                            # append info_dict_key to update_key_list, need updata value from txt
1225*55a95caaSYouMin Chen                            update_key_list.append(info_dict_key)
1226*55a95caaSYouMin Chen                            #print(f"D: update_key_list append, {info_dict_key}={info_dict_value}")
1227*55a95caaSYouMin Chen
1228*55a95caaSYouMin Chen                        hot = hot + 1
1229*55a95caaSYouMin Chen        except (KeyError, ValueError):
1230*55a95caaSYouMin Chen            print("KeyError or ValueError: {}={}".format(info_dict_key, info_dict_value))
1231*55a95caaSYouMin Chen            return -1
1232*55a95caaSYouMin Chen        except Exception:
1233*55a95caaSYouMin Chen            print("The file {} read failed".format(fileskew_path))
1234*55a95caaSYouMin Chen            return -1
1235*55a95caaSYouMin Chen
1236*55a95caaSYouMin Chen        if hot == 0:
1237*55a95caaSYouMin Chen            print("Failed to read DRAM parameters from the file")
1238*55a95caaSYouMin Chen            return -1
1239*55a95caaSYouMin Chen    else:
1240*55a95caaSYouMin Chen        info_from_txt['start tag']['value'] = 0x12345678
1241*55a95caaSYouMin Chen
1242*55a95caaSYouMin Chen    # get info from bin file
1243*55a95caaSYouMin Chen    with open(filebin_path, 'rb') as file:
1244*55a95caaSYouMin Chen        content = file.read()
1245*55a95caaSYouMin Chen    # convert the target byte sequence 'start tag' into bytes, byteorder little
1246*55a95caaSYouMin Chen    target_bytes = struct.pack('<I', info_from_txt['start tag']['value'])
1247*55a95caaSYouMin Chen    start_position = 0
1248*55a95caaSYouMin Chen    while True:
1249*55a95caaSYouMin Chen        position = content.find(target_bytes, start_position)
1250*55a95caaSYouMin Chen        if position == -1:
1251*55a95caaSYouMin Chen            break
1252*55a95caaSYouMin Chen
1253*55a95caaSYouMin Chen        version = int.from_bytes(content[position + 4: position + 8], byteorder='little')
1254*55a95caaSYouMin Chen        if version >= 0 and version <= version_max:
1255*55a95caaSYouMin Chen            break
1256*55a95caaSYouMin Chen        else:
1257*55a95caaSYouMin Chen            start_position = position + len(target_bytes)
1258*55a95caaSYouMin Chen
1259*55a95caaSYouMin Chen    if position == -1:
1260*55a95caaSYouMin Chen        if start_position == 0:
1261*55a95caaSYouMin Chen            print("Find the 'start tag' in the ddrbin file failed")
1262*55a95caaSYouMin Chen        else:
1263*55a95caaSYouMin Chen            print("version = {}, invalid.".format(version))
1264*55a95caaSYouMin Chen            if version > version_max and version < (version_max + 5):
1265*55a95caaSYouMin Chen                print("Please check if there is a new version of the tool available.")
1266*55a95caaSYouMin Chen        return -1
1267*55a95caaSYouMin Chen
1268*55a95caaSYouMin Chen    # get ddrbin parameters version
1269*55a95caaSYouMin Chen    try:
1270*55a95caaSYouMin Chen        bin_skew_offset = position + 4
1271*55a95caaSYouMin Chen        filebin = open(filebin_path, 'rb+')
1272*55a95caaSYouMin Chen        filebin.seek(bin_skew_offset)
1273*55a95caaSYouMin Chen        version = int.from_bytes(filebin.read(4), byteorder='little')
1274*55a95caaSYouMin Chen    except:
1275*55a95caaSYouMin Chen        print("get version fail")
1276*55a95caaSYouMin Chen        filebin.close()
1277*55a95caaSYouMin Chen        return -1
1278*55a95caaSYouMin Chen
1279*55a95caaSYouMin Chen    print("version {}".format(version))
1280*55a95caaSYouMin Chen
1281*55a95caaSYouMin Chen    # get ddrbin version information from bin file
1282*55a95caaSYouMin Chen    # eg: DDR 03ea844c5d typ 24/09/03-10:42:57,fwver: v1.23
1283*55a95caaSYouMin Chen    target_bytes = b'DDR '
1284*55a95caaSYouMin Chen    target_bytes_1 = b',fwver:'
1285*55a95caaSYouMin Chen    start_position = 0
1286*55a95caaSYouMin Chen    while True:
1287*55a95caaSYouMin Chen        position = content.find(target_bytes, start_position)
1288*55a95caaSYouMin Chen        position_1 = content.find(target_bytes_1, start_position)
1289*55a95caaSYouMin Chen        if position == -1 or position_1 == -1:
1290*55a95caaSYouMin Chen            break
1291*55a95caaSYouMin Chen        elif (position_1 - position) < 100:
1292*55a95caaSYouMin Chen            verinfo_full = content[position: position_1+30].decode('utf-8', errors='replace')
1293*55a95caaSYouMin Chen            verinfo_full = verinfo_full[:verinfo_full.find('\n')]
1294*55a95caaSYouMin Chen            if content[position_1 - verinfo_editable_length - 1].to_bytes(1, 'little') == b' ':
1295*55a95caaSYouMin Chen                verinfo_editable_offset = position_1 - verinfo_editable_length
1296*55a95caaSYouMin Chen                verinfo_full_offset = position
1297*55a95caaSYouMin Chen                verinfo_full_length = len(verinfo_full.encode('utf-8'))
1298*55a95caaSYouMin Chen                print("{}".format(verinfo_full))
1299*55a95caaSYouMin Chen                break
1300*55a95caaSYouMin Chen        else:
1301*55a95caaSYouMin Chen            start_position = position + len(target_bytes)
1302*55a95caaSYouMin Chen
1303*55a95caaSYouMin Chen    if version < 2:
1304*55a95caaSYouMin Chen        read_out = copy.deepcopy(sdram_head_info_v0)
1305*55a95caaSYouMin Chen        write_in = copy.deepcopy(sdram_head_info_v0)
1306*55a95caaSYouMin Chen
1307*55a95caaSYouMin Chen        # skip gcpu_gen_freq after version_info
1308*55a95caaSYouMin Chen        filebin.seek(bin_skew_offset + 8)
1309*55a95caaSYouMin Chen    elif version <= 5:
1310*55a95caaSYouMin Chen        if version >= 3:
1311*55a95caaSYouMin Chen            ddrbin_index.update(sdram_head_info_index_v2_3)
1312*55a95caaSYouMin Chen        if version >= 4:
1313*55a95caaSYouMin Chen            ddrbin_index.update(sdram_head_info_index_v3_4)
1314*55a95caaSYouMin Chen
1315*55a95caaSYouMin Chen        if version < 5:
1316*55a95caaSYouMin Chen            read_out = copy.deepcopy(sdram_head_info_v2)
1317*55a95caaSYouMin Chen            write_in = copy.deepcopy(sdram_head_info_v2)
1318*55a95caaSYouMin Chen        else:
1319*55a95caaSYouMin Chen            read_out = copy.deepcopy(sdram_head_info_v5)
1320*55a95caaSYouMin Chen            write_in = copy.deepcopy(sdram_head_info_v5)
1321*55a95caaSYouMin Chen
1322*55a95caaSYouMin Chen        #index_info read out
1323*55a95caaSYouMin Chen        for key in ddrbin_index:
1324*55a95caaSYouMin Chen            try:
1325*55a95caaSYouMin Chen                ddrbin_index[key]['offset'] = int.from_bytes(filebin.read(1), byteorder='little')
1326*55a95caaSYouMin Chen                ddrbin_index[key]['size'] = int.from_bytes(filebin.read(1), byteorder='little')
1327*55a95caaSYouMin Chen            except:
1328*55a95caaSYouMin Chen                filebin.close()
1329*55a95caaSYouMin Chen                print("readout ddrbin_index fail")
1330*55a95caaSYouMin Chen                return -1
1331*55a95caaSYouMin Chen            #print(f"D: {key} = {index[key]}",ddrbin_index[key]["offset"],ddrbin_index[key]["size"])
1332*55a95caaSYouMin Chen    else:
1333*55a95caaSYouMin Chen        filebin.close()
1334*55a95caaSYouMin Chen        print("version not support")
1335*55a95caaSYouMin Chen        return -1
1336*55a95caaSYouMin Chen
1337*55a95caaSYouMin Chen    if bin_data_readout(filebin, ddrbin_index, read_out, bin_skew_offset, version, info_from_txt) != 0:
1338*55a95caaSYouMin Chen        filebin.close()
1339*55a95caaSYouMin Chen        print("bin_data_readout failed")
1340*55a95caaSYouMin Chen        return -1
1341*55a95caaSYouMin Chen
1342*55a95caaSYouMin Chen    bin_data_2_info(info_from_bin, read_out, ddrbin_index, version, info_from_txt)
1343*55a95caaSYouMin Chen    if gen_txt_from_bin == 1:
1344*55a95caaSYouMin Chen        if gen_info_from_bin(filegen_path, info_from_bin, verinfo_full, version) == 0:
1345*55a95caaSYouMin Chen            print("generate info from bin file ok.")
1346*55a95caaSYouMin Chen            filebin.close()
1347*55a95caaSYouMin Chen            return 0
1348*55a95caaSYouMin Chen        else:
1349*55a95caaSYouMin Chen            print("generate info fail.")
1350*55a95caaSYouMin Chen            filebin.close()
1351*55a95caaSYouMin Chen            return -1
1352*55a95caaSYouMin Chen
1353*55a95caaSYouMin Chen    txt_data_2_bin_data(info_from_txt, info_from_bin, ddrbin_index, write_in, version)
1354*55a95caaSYouMin Chen
1355*55a95caaSYouMin Chen    if version < 2:
1356*55a95caaSYouMin Chen        if version_old_hit == 0:
1357*55a95caaSYouMin Chen            filebin.seek(bin_skew_offset + 8)
1358*55a95caaSYouMin Chen            for i in range(len(write_in)):
1359*55a95caaSYouMin Chen                try:
1360*55a95caaSYouMin Chen                    filebin.write(write_in[i][1].to_bytes(4,byteorder='little'))
1361*55a95caaSYouMin Chen                except:
1362*55a95caaSYouMin Chen                    print("write bin file fail")
1363*55a95caaSYouMin Chen        else:
1364*55a95caaSYouMin Chen            filebin.seek(bin_skew_offset + 20)
1365*55a95caaSYouMin Chen            for i in range(3, len(write_in)):
1366*55a95caaSYouMin Chen                try:
1367*55a95caaSYouMin Chen                    filebin.write(write_in[i][1].to_bytes(4,byteorder='little'))
1368*55a95caaSYouMin Chen                except:
1369*55a95caaSYouMin Chen                    print("write bin file fail")
1370*55a95caaSYouMin Chen    elif version <= version_max:
1371*55a95caaSYouMin Chen        write_in_bin_data_v2(filebin, bin_skew_offset, write_in, ddrbin_index, info_from_txt, version)
1372*55a95caaSYouMin Chen    print("modify end\n")
1373*55a95caaSYouMin Chen
1374*55a95caaSYouMin Chen    # update ddrbin version information to bin file
1375*55a95caaSYouMin Chen    if verinfo_editable_offset != 0:
1376*55a95caaSYouMin Chen        if verinfo_editable == '':
1377*55a95caaSYouMin Chen            #print(f"position_1={position_1}, position_2={position_2}, {old_verinfo_editable}")
1378*55a95caaSYouMin Chen            current_time = datetime.now()
1379*55a95caaSYouMin Chen            verinfo_editable = current_time.strftime("%y/%m/%d-%H:%M.%S")
1380*55a95caaSYouMin Chen        if len(verinfo_editable) < verinfo_editable_length:
1381*55a95caaSYouMin Chen            verinfo_editable = verinfo_editable.ljust(verinfo_editable_length)
1382*55a95caaSYouMin Chen
1383*55a95caaSYouMin Chen        verinfo_editable_bytes = verinfo_editable.encode('utf-8')[:verinfo_editable_length]
1384*55a95caaSYouMin Chen        try:
1385*55a95caaSYouMin Chen            filebin.seek(verinfo_editable_offset)
1386*55a95caaSYouMin Chen            filebin.write(verinfo_editable_bytes)
1387*55a95caaSYouMin Chen            filebin.seek(verinfo_full_offset)
1388*55a95caaSYouMin Chen            new_verinfo_full = filebin.read(verinfo_full_length).decode('utf-8', errors='replace')
1389*55a95caaSYouMin Chen            print("new ddrbin version information: {}".format(new_verinfo_full))
1390*55a95caaSYouMin Chen        except:
1391*55a95caaSYouMin Chen            print("change verinfo_editable error")
1392*55a95caaSYouMin Chen
1393*55a95caaSYouMin Chen    filebin.close()
1394*55a95caaSYouMin Chen
1395*55a95caaSYouMin Chen    return 0
1396*55a95caaSYouMin Chen
1397*55a95caaSYouMin Chen
1398*55a95caaSYouMin Chenif __name__ == '__main__':
1399*55a95caaSYouMin Chen    #print(f"D: argc = {len(sys.argv)}, argv = {sys.argv}")
1400*55a95caaSYouMin Chen    ddrbin_tool(len(sys.argv), sys.argv)
1401*55a95caaSYouMin Chen
1402