@@ -27,8 +27,6 @@ extern sunxi_sdhci_t sdhci0;
2727
2828extern uint32_t dram_para [128 ];
2929
30- extern int init_DRAM (int type , void * buff );
31-
3230msh_declare_command (bt );
3331msh_define_help (bt , "backtrace test" , "Usage: bt\n" );
3432int cmd_bt (int argc , const char * * argv ) {
@@ -51,11 +49,99 @@ const msh_command_entry commands[] = {
5149 msh_command_end ,
5250};
5351
52+ static void sunxi_res_ctrl_init (void ) {
53+ uint8_t reg_val ;
54+
55+ reg_val = readl (SID_RES0_1_BASE ) >> 24 ;
56+ if ((reg_val & 0xFF ) == 0 )
57+ return ;
58+
59+ uint8_t res0_val = (reg_val >> 0 ) & 0xF ;
60+ writel ((0x19190000 | (res0_val & 0xF )), INT_DSI_RES_CTRL_REG );
61+ writel ((0x19190000 | res0_val ), INT_CSI_RES_CTRL_REG );
62+ writel ((0x19190000 | res0_val ), INT_USB_RES_CTRL_REG );
63+
64+ uint8_t res1_val = (reg_val >> 4 ) & 0xF ;
65+ writel ((0x19190000 | res1_val ), INT_EDP_RES_CTRL_REG );
66+ writel ((0x19190000 | res1_val ), INT_HS_COMBO_RES_CTRL_REG );
67+ writel ((0x19190000 | res1_val ), INT_DDR_RES_CTRL_REG );
68+
69+ return ;
70+ }
71+
72+ static void sunxi_board_power_init (void ) {
73+ uint32_t sys_vol , gpu_vol ;
74+ uint32_t efuse ;
75+ uint32_t efuse_ext ;
76+
77+ efuse = (readl (SUNXI_SID_BASE + 0x200 + 0x14 ) & 0xff0000 ) >> 16 ;
78+ efuse_ext = (readl (SUNXI_SID_BASE + 0x200 + 0x14 ) & 0xff000000 ) >> 24 ;
79+ if (efuse_ext ) {
80+ efuse = efuse_ext ;
81+ }
82+
83+ switch (efuse ) {
84+ /* VF0/VF4-2/VF3: sys-0.9v gpu-0.94v */
85+ case 0x00 :
86+ case 0x24 :
87+ case 0x03 :
88+ sys_vol = 900 ;
89+ gpu_vol = 940 ;
90+ break ;
91+ /* VF1/VF4-4: sys-0.9v gpu-0.9v */
92+ case 0x01 :
93+ sys_vol = 900 ;
94+ gpu_vol = 980 ;
95+ break ;
96+ case 0x44 :
97+ sys_vol = 900 ;
98+ gpu_vol = 900 ;
99+ break ;
100+ /* VF4-3: sys-0.92v gpu-0.96v */
101+ case 0x34 :
102+ sys_vol = 920 ;
103+ gpu_vol = 960 ;
104+ break ;
105+ /* default: sys-0.9v gpu-0.94v */
106+ default :
107+ sys_vol = 900 ;
108+ gpu_vol = 940 ;
109+ break ;
110+ }
111+
112+ sunxi_i2c_init (& i2c_pmu );
113+
114+ pmu_axp2202_init (& i2c_pmu );
115+ pmu_axp1530_init (& i2c_pmu );
116+
117+ if (readl (SUNXI_SOC_VER_REG ) & SUNXI_SOC_VER_MASK < 2 )
118+ sys_vol = gpu_vol ;
119+
120+ pmu_axp2202_set_vol (& i2c_pmu , "dcdc1" , 1050 , 1 );
121+ pmu_axp2202_set_vol (& i2c_pmu , "dcdc2" , sys_vol , 1 );
122+
123+ pmu_axp1530_set_vol (& i2c_pmu , "dcdc1" , 1000 , 1 );
124+ pmu_axp1530_set_vol (& i2c_pmu , "dcdc2" , 1000 , 1 );
125+ pmu_axp1530_set_vol (& i2c_pmu , "dcdc3" , gpu_vol , 1 );
126+
127+ /* dcdc4 for 3v3 */
128+ pmu_axp2202_set_vol (& i2c_pmu , "dcdc4" , 3300 , 1 );
129+
130+ /* bldo3 for 1v8 */
131+ pmu_axp2202_set_vol (& i2c_pmu , "bldo3" , 1800 , 1 );
132+ }
133+
54134int main (void ) {
55135 sunxi_serial_init (& uart_dbg );
56136
137+ sunxi_res_ctrl_init ();
138+
57139 show_banner ();
58140
141+ sunxi_board_power_init ();
142+
143+ sunxi_dram_init (dram_para );
144+
59145 syterkit_shell_attach (commands );
60146
61147 abort ();
0 commit comments