xref: /rk3399_rockchip-uboot/board/toradex/apalis_imx6/pf0100_otp.inc (revision 8ea05705a70135a94419b0d243666c1b51fe1f8d)
1*592f4aedSMax Krummenacher/*
2*592f4aedSMax Krummenacher * Copyright (C) 2014-2016, Toradex AG
3*592f4aedSMax Krummenacher *
4*592f4aedSMax Krummenacher * SPDX-License-Identifier:	GPL-2.0+
5*592f4aedSMax Krummenacher */
6*592f4aedSMax Krummenacher
7*592f4aedSMax Krummenacher// Register Output for PF0100 programmer
8*592f4aedSMax Krummenacher// Customer: Toradex AG
9*592f4aedSMax Krummenacher// Program: Apalis iMX6
10*592f4aedSMax Krummenacher// Sample marking:
11*592f4aedSMax Krummenacher// Date: 12.02.2014
12*592f4aedSMax Krummenacher// Time: 17:16:41
13*592f4aedSMax Krummenacher// Generated from Spreadsheet Revision: P1.8
14*592f4aedSMax Krummenacher
15*592f4aedSMax Krummenacher/* sed commands to get from programmer script to struct */
16*592f4aedSMax Krummenacher/* sed -e 's/^WRITE_I2C:\(..\):\(..\)/\{pmic_i2c, 0x\1, 0x\2\},/g' -e 's/^DELAY:\([0-9]*\)/\{pmic_delay, 0, \1\},/g' pf0100_otp.txt > pf0100_otp.inc
17*592f4aedSMax Krummenacher   sed -i -e 's/^VPGM:ON/\{pmic_vpgm, 0, 1},/g' -e 's/^VPGM:OFF/\{pmic_vpgm, 0, 0},/g' pf0100_otp.inc
18*592f4aedSMax Krummenacher   sed -i -e 's/^PWRON: HIGH/\{pmic_pwr, 0, 1},/g' -e 's/^PWRON:LOW/\{pmic_pwr, 0, 0},/g' pf0100_otp.inc */
19*592f4aedSMax Krummenacher
20*592f4aedSMax Krummenacherenum { pmic_i2c, pmic_delay, pmic_vpgm, pmic_pwr };
21*592f4aedSMax Krummenacherstruct pmic_otp_prog_t{
22*592f4aedSMax Krummenacher	unsigned char cmd;
23*592f4aedSMax Krummenacher	unsigned char reg;
24*592f4aedSMax Krummenacher	unsigned short value;
25*592f4aedSMax Krummenacher};
26*592f4aedSMax Krummenacher
27*592f4aedSMax Krummenacherstruct pmic_otp_prog_t pmic_otp_prog[] = {
28*592f4aedSMax Krummenacher{pmic_i2c, 0x7F, 0x01}, // Access FSL EXT Page 1
29*592f4aedSMax Krummenacher{pmic_i2c, 0xA0, 0x2B}, // Auto gen from Row94
30*592f4aedSMax Krummenacher{pmic_i2c, 0xA1, 0x01}, // Auto gen from Row95
31*592f4aedSMax Krummenacher{pmic_i2c, 0xA2, 0x05}, // Auto gen from Row96
32*592f4aedSMax Krummenacher{pmic_i2c, 0xA8, 0x2B}, // Auto gen from Row102
33*592f4aedSMax Krummenacher{pmic_i2c, 0xA9, 0x02}, // Auto gen from Row103
34*592f4aedSMax Krummenacher{pmic_i2c, 0xAA, 0x01}, // Auto gen from Row104
35*592f4aedSMax Krummenacher{pmic_i2c, 0xAC, 0x18}, // Auto gen from Row106
36*592f4aedSMax Krummenacher{pmic_i2c, 0xAE, 0x01}, // Auto gen from Row108
37*592f4aedSMax Krummenacher{pmic_i2c, 0xB0, 0x2C}, // Auto gen from Row110
38*592f4aedSMax Krummenacher{pmic_i2c, 0xB1, 0x04}, // Auto gen from Row111
39*592f4aedSMax Krummenacher{pmic_i2c, 0xB2, 0x01}, // Auto gen from Row112
40*592f4aedSMax Krummenacher{pmic_i2c, 0xB4, 0x2C}, // Auto gen from Row114
41*592f4aedSMax Krummenacher{pmic_i2c, 0xB5, 0x04}, // Auto gen from Row115
42*592f4aedSMax Krummenacher{pmic_i2c, 0xB6, 0x01}, // Auto gen from Row116
43*592f4aedSMax Krummenacher{pmic_i2c, 0xB8, 0x18}, // Auto gen from Row118
44*592f4aedSMax Krummenacher{pmic_i2c, 0xBA, 0x01}, // Auto gen from Row120
45*592f4aedSMax Krummenacher{pmic_i2c, 0xBD, 0x1F}, // Auto gen from Row123
46*592f4aedSMax Krummenacher{pmic_i2c, 0xC0, 0x06}, // Auto gen from Row126
47*592f4aedSMax Krummenacher{pmic_i2c, 0xC4, 0x04}, // Auto gen from Row130
48*592f4aedSMax Krummenacher{pmic_i2c, 0xC8, 0x0E}, // Auto gen from Row134
49*592f4aedSMax Krummenacher{pmic_i2c, 0xC9, 0x08}, // Auto gen from Row135
50*592f4aedSMax Krummenacher{pmic_i2c, 0xCC, 0x0E}, // Auto gen from Row138
51*592f4aedSMax Krummenacher{pmic_i2c, 0xCD, 0x05}, // Auto gen from Row139
52*592f4aedSMax Krummenacher{pmic_i2c, 0xD0, 0x0C}, // Auto gen from Row142
53*592f4aedSMax Krummenacher{pmic_i2c, 0xD1, 0x05}, // Auto gen from Row143
54*592f4aedSMax Krummenacher{pmic_i2c, 0xD5, 0x07}, // Auto gen from Row147
55*592f4aedSMax Krummenacher{pmic_i2c, 0xD8, 0x07}, // Auto gen from Row150
56*592f4aedSMax Krummenacher{pmic_i2c, 0xD9, 0x06}, // Auto gen from Row151
57*592f4aedSMax Krummenacher{pmic_i2c, 0xDC, 0x0A}, // Auto gen from Row154
58*592f4aedSMax Krummenacher{pmic_i2c, 0xDD, 0x03}, // Auto gen from Row155
59*592f4aedSMax Krummenacher{pmic_i2c, 0xE0, 0x07}, // Auto gen from Row158
60*592f4aedSMax Krummenacher
61*592f4aedSMax Krummenacher#if 0 /* TBB mode */
62*592f4aedSMax Krummenacher{pmic_i2c, 0xE4, 0x80}, // TBB_POR = 1
63*592f4aedSMax Krummenacher{pmic_delay, 0, 10},
64*592f4aedSMax Krummenacher#else
65*592f4aedSMax Krummenacher// Write OTP
66*592f4aedSMax Krummenacher{pmic_i2c, 0xE4, 0x02}, // FUSE POR1=1
67*592f4aedSMax Krummenacher{pmic_i2c, 0xE5, 0x02}, // FUSE POR2=1
68*592f4aedSMax Krummenacher{pmic_i2c, 0xE6, 0x02}, // FUSE POR3=1
69*592f4aedSMax Krummenacher{pmic_i2c, 0xF0, 0x1F}, // Enable ECC for fuse banks 1 to 5 by writing to OTP EN ECC0 register
70*592f4aedSMax Krummenacher{pmic_i2c, 0xF1, 0x1F}, // Enable ECC for fuse banks 6 to 10 by writing to OTP EN ECC1 register
71*592f4aedSMax Krummenacher{pmic_i2c, 0x7F, 0x02}, // Access PF0100 EXT Page2
72*592f4aedSMax Krummenacher{pmic_i2c, 0xD0, 0x1F}, // Set Auto ECC for fuse banks 1 to 5 by writing to OTP AUTO ECC0 register
73*592f4aedSMax Krummenacher{pmic_i2c, 0xD1, 0x1F}, // Set Auto ECC for fuse banks 6 to 10 by writing to OTP AUTO ECC1 register
74*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
75*592f4aedSMax Krummenacher{pmic_i2c, 0xF1, 0x00}, // Reset Bank 1 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
76*592f4aedSMax Krummenacher{pmic_i2c, 0xF2, 0x00}, // Reset Bank 2 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
77*592f4aedSMax Krummenacher{pmic_i2c, 0xF3, 0x00}, // Reset Bank 3 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
78*592f4aedSMax Krummenacher{pmic_i2c, 0xF4, 0x00}, // Reset Bank 4 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
79*592f4aedSMax Krummenacher{pmic_i2c, 0xF5, 0x00}, // Reset Bank 5 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
80*592f4aedSMax Krummenacher{pmic_i2c, 0xF6, 0x00}, // Reset Bank 6 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
81*592f4aedSMax Krummenacher{pmic_i2c, 0xF7, 0x00}, // Reset Bank 7 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
82*592f4aedSMax Krummenacher{pmic_i2c, 0xF8, 0x00}, // Reset Bank 8 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
83*592f4aedSMax Krummenacher{pmic_i2c, 0xF9, 0x00}, // Reset Bank 9 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
84*592f4aedSMax Krummenacher{pmic_i2c, 0xFA, 0x00}, // Reset Bank 10 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
85*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
86*592f4aedSMax Krummenacher{pmic_vpgm, 0, 1}, // Turn ON 8V SWBST
87*592f4aedSMax Krummenacher//VPGM:DOWN:n
88*592f4aedSMax Krummenacher//VPGM:UP:n
89*592f4aedSMax Krummenacher{pmic_delay, 0, 500}, // Adds 500msec delay to allow VPGM time to ramp up
90*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
91*592f4aedSMax Krummenacher// PF0100 OTP MANUAL-PROGRAMMING (BANK 1 thru 10)
92*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
93*592f4aedSMax Krummenacher// BANK 1
94*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
95*592f4aedSMax Krummenacher{pmic_i2c, 0xF1, 0x00}, // Reset Bank 1 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
96*592f4aedSMax Krummenacher{pmic_i2c, 0xF1, 0x03}, // Set Bank 1 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
97*592f4aedSMax Krummenacher{pmic_i2c, 0xF1, 0x0B}, // Set Bank 1 ANTIFUSE_EN
98*592f4aedSMax Krummenacher{pmic_delay, 0, 10}, // Allow time for bank programming to complete
99*592f4aedSMax Krummenacher{pmic_i2c, 0xF1, 0x03}, // Reset Bank 1 ANTIFUSE_EN
100*592f4aedSMax Krummenacher{pmic_i2c, 0xF1, 0x00}, // Reset Bank 1 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
101*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
102*592f4aedSMax Krummenacher// BANK 2
103*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
104*592f4aedSMax Krummenacher{pmic_i2c, 0xF2, 0x00}, // Reset Bank 2 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
105*592f4aedSMax Krummenacher{pmic_i2c, 0xF2, 0x03}, // Set Bank 2 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
106*592f4aedSMax Krummenacher{pmic_i2c, 0xF2, 0x0B}, // Set Bank 2 ANTIFUSE_EN
107*592f4aedSMax Krummenacher{pmic_delay, 0, 10}, // Allow time for bank programming to complete
108*592f4aedSMax Krummenacher{pmic_i2c, 0xF2, 0x03}, // Reset Bank 2 ANTIFUSE_EN
109*592f4aedSMax Krummenacher{pmic_i2c, 0xF2, 0x00}, // Reset Bank 2 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
110*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
111*592f4aedSMax Krummenacher// BANK 3
112*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
113*592f4aedSMax Krummenacher{pmic_i2c, 0xF3, 0x00}, // Reset Bank 3 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
114*592f4aedSMax Krummenacher{pmic_i2c, 0xF3, 0x03}, // Set Bank 3 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
115*592f4aedSMax Krummenacher{pmic_i2c, 0xF3, 0x0B}, // Set Bank 3 ANTIFUSE_EN
116*592f4aedSMax Krummenacher{pmic_delay, 0, 10}, // Allow time for bank programming to complete
117*592f4aedSMax Krummenacher{pmic_i2c, 0xF3, 0x03}, // Reset Bank 3 ANTIFUSE_EN
118*592f4aedSMax Krummenacher{pmic_i2c, 0xF3, 0x00}, // Reset Bank 3 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
119*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
120*592f4aedSMax Krummenacher// BANK 4
121*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
122*592f4aedSMax Krummenacher{pmic_i2c, 0xF4, 0x00}, // Reset Bank 4 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
123*592f4aedSMax Krummenacher{pmic_i2c, 0xF4, 0x03}, // Set Bank 4 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
124*592f4aedSMax Krummenacher{pmic_i2c, 0xF4, 0x0B}, // Set Bank 4 ANTIFUSE_EN
125*592f4aedSMax Krummenacher{pmic_delay, 0, 10}, // Allow time for bank programming to complete
126*592f4aedSMax Krummenacher{pmic_i2c, 0xF4, 0x03}, // Reset Bank 4 ANTIFUSE_EN
127*592f4aedSMax Krummenacher{pmic_i2c, 0xF4, 0x00}, // Reset Bank 4 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
128*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
129*592f4aedSMax Krummenacher// BANK 5
130*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
131*592f4aedSMax Krummenacher{pmic_i2c, 0xF5, 0x00}, // Reset Bank 5 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
132*592f4aedSMax Krummenacher{pmic_i2c, 0xF5, 0x03}, // Set Bank 5 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
133*592f4aedSMax Krummenacher{pmic_i2c, 0xF5, 0x0B}, // Set Bank 5 ANTIFUSE_EN
134*592f4aedSMax Krummenacher{pmic_delay, 0, 10}, // Allow time for bank programming to complete
135*592f4aedSMax Krummenacher{pmic_i2c, 0xF5, 0x03}, // Reset Bank 5 ANTIFUSE_EN
136*592f4aedSMax Krummenacher{pmic_i2c, 0xF5, 0x00}, // Reset Bank 5 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
137*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
138*592f4aedSMax Krummenacher// BANK 6
139*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
140*592f4aedSMax Krummenacher{pmic_i2c, 0xF6, 0x00}, // Reset Bank 6 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
141*592f4aedSMax Krummenacher{pmic_i2c, 0xF6, 0x03}, // Set Bank 6 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
142*592f4aedSMax Krummenacher{pmic_i2c, 0xF6, 0x0B}, // Set Bank 6 ANTIFUSE_EN
143*592f4aedSMax Krummenacher{pmic_delay, 0, 10}, // Allow time for bank programming to complete
144*592f4aedSMax Krummenacher{pmic_i2c, 0xF6, 0x03}, // Reset Bank 6 ANTIFUSE_EN
145*592f4aedSMax Krummenacher{pmic_i2c, 0xF6, 0x00}, // Reset Bank 6 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
146*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
147*592f4aedSMax Krummenacher// BANK 7
148*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
149*592f4aedSMax Krummenacher{pmic_i2c, 0xF7, 0x00}, // Reset Bank 7 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
150*592f4aedSMax Krummenacher{pmic_i2c, 0xF7, 0x03}, // Set Bank 7 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
151*592f4aedSMax Krummenacher{pmic_i2c, 0xF7, 0x0B}, // Set Bank 7 ANTIFUSE_EN
152*592f4aedSMax Krummenacher{pmic_delay, 0, 10}, // Allow time for bank programming to complete
153*592f4aedSMax Krummenacher{pmic_i2c, 0xF7, 0x03}, // Reset Bank 7 ANTIFUSE_EN
154*592f4aedSMax Krummenacher{pmic_i2c, 0xF7, 0x00}, // Reset Bank 7 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
155*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
156*592f4aedSMax Krummenacher// BANK 8
157*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
158*592f4aedSMax Krummenacher{pmic_i2c, 0xF8, 0x00}, // Reset Bank 8 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
159*592f4aedSMax Krummenacher{pmic_i2c, 0xF8, 0x03}, // Set Bank 8 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
160*592f4aedSMax Krummenacher{pmic_i2c, 0xF8, 0x0B}, // Set Bank 8 ANTIFUSE_EN
161*592f4aedSMax Krummenacher{pmic_delay, 0, 10}, // Allow time for bank programming to complete
162*592f4aedSMax Krummenacher{pmic_i2c, 0xF8, 0x03}, // Reset Bank 8 ANTIFUSE_EN
163*592f4aedSMax Krummenacher{pmic_i2c, 0xF8, 0x00}, // Reset Bank 8 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
164*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
165*592f4aedSMax Krummenacher// BANK 9
166*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
167*592f4aedSMax Krummenacher{pmic_i2c, 0xF9, 0x00}, // Reset Bank 9 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
168*592f4aedSMax Krummenacher{pmic_i2c, 0xF9, 0x03}, // Set Bank 9 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
169*592f4aedSMax Krummenacher{pmic_i2c, 0xF9, 0x0B}, // Set Bank 9 ANTIFUSE_EN
170*592f4aedSMax Krummenacher{pmic_delay, 0, 10}, // Allow time for bank programming to complete
171*592f4aedSMax Krummenacher{pmic_i2c, 0xF9, 0x03}, // Reset Bank 9 ANTIFUSE_EN
172*592f4aedSMax Krummenacher{pmic_i2c, 0xF9, 0x00}, // Reset Bank 9 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
173*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
174*592f4aedSMax Krummenacher// BANK 10
175*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
176*592f4aedSMax Krummenacher{pmic_i2c, 0xFA, 0x00}, // Reset Bank 10 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
177*592f4aedSMax Krummenacher{pmic_i2c, 0xFA, 0x03}, // Set Bank 10 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
178*592f4aedSMax Krummenacher{pmic_i2c, 0xFA, 0x0B}, // Set Bank 10 ANTIFUSE_EN
179*592f4aedSMax Krummenacher{pmic_delay, 0, 10}, // Allow time for bank programming to complete
180*592f4aedSMax Krummenacher{pmic_i2c, 0xFA, 0x03}, // Reset Bank 10 ANTIFUSE_EN
181*592f4aedSMax Krummenacher{pmic_i2c, 0xFA, 0x00}, // Reset Bank 10 ANTIFUSE_RW and ANTIFUSE_BYPASS bits
182*592f4aedSMax Krummenacher//-----------------------------------------------------------------------------------
183*592f4aedSMax Krummenacher{pmic_vpgm, 0, 0}, // Turn off 8V SWBST
184*592f4aedSMax Krummenacher{pmic_delay, 0, 500}, // Adds delay to allow VPGM to bleed off
185*592f4aedSMax Krummenacher{pmic_i2c, 0xD0, 0x00}, // Clear
186*592f4aedSMax Krummenacher{pmic_i2c, 0xD1, 0x00}, // Clear
187*592f4aedSMax Krummenacher{pmic_pwr, 0, 0}, // PWRON LOW to reload new OTP data
188*592f4aedSMax Krummenacher{pmic_delay, 0, 500},
189*592f4aedSMax Krummenacher{pmic_pwr, 0, 1},
190*592f4aedSMax Krummenacher#endif
191*592f4aedSMax Krummenacher};