Platform: ROCKCHIP
OS: Android 6.0
Kernel: 3.10.92
現象:
在成功Download之後又遇到了無法開機的問題,kernel列印幾條log就停住了.
log如下:
Starting kernel ...
<hit enter to activate fiq debugger>
[ 0.000000] Booting Linux on physical CPU 0x500
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 3.10.0 ([email protected]) (gcc version 4.6.x-google 20120106 (prerelease) (GCC) ) #35 SMP PREEMPT Fri Oct 28 14:37:53 CST 2016
[ 0.000000] CPU: ARMv7 Processor [410fc0d1] revision 1 (ARMv7), cr=10c5387d
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] Machine: Rockchip RK3288 (Flattened Device Tree), model: rockchip,rk3288
[ 0.000000] rockchip_uboot_logo_setup: mem: [email protected], offset:0x01000000
[ 0.000000] rockchip_uboot_mem_reserve: reserve [email protected] for uboot logo
[ 0.000000] rockchip_ion_reserve
[ 0.000000] ion heap(drm): base(0) size(0) align(0)
[ 0.000000] ion heap(cma): base(0) size(28000000) align(0)
[ 0.000000] ion heap(vmalloc): base(0) size(0) align(0
分析:
相對之前能正常開機的sdk闆,主要的改動有eMMC/LPDDR3型号更新,PMU從ACT8846改成了RK818.
Log每次停在同一位置,是以基本上不會是LPDDR3的原因,而eMMC也不應該是此現象.
針對RK818,手上暫時沒datasheet,dts配置是參考rk3288-tb.dts
湊巧測試了使用RK818的Android5.1, 可以正常開機.
後來對比替換使用了Android5.1的rk818.c驅動,系統也能起來了,但是還有問題,比如touch
子產品無電壓輸出,直接拿掉rk818驅動後雖然系統使用u-boot中的初始化配置也能工作,但是像dvfs子產品
調節頻率要改變電壓就不能正常工作了.
後來更新代碼後,發現有個VR産品主dts也用的是rk818,替換之後能終于能正常開機!
解決辦法:
使用rk3288-vr.dts而不是rk3288-tb.dts中的rk818配置, 添加如下:
/include/ "rk818.dtsi"
&rk818 {
gpios = <&gpio0 GPIO_A4 GPIO_ACTIVE_HIGH>,
<&gpio0 GPIO_A0 GPIO_ACTIVE_LOW>;
rk818,system-power-controller;
regulators {
rk818_dcdc1_reg: [email protected]{
regulator-name= "vdd_logic";
regulator-min-microvolt = <700000>;
regulator-max-microvolt = <1500000>;
regulator-initial-mode = <0x2>;
regulator-initial-state = <3>;
regulator-boot-on-volt = <1150000>;
regulator-state-mem {
regulator-state-mode = <0x2>;
regulator-state-enabled;
regulator-state-uv = <1000000>;
};
};
rk818_dcdc2_reg: [email protected] {
regulator-name= "vdd_gpu";
regulator-min-microvolt = <700000>;
regulator-max-microvolt = <1500000>;
regulator-initial-mode = <0x2>;
regulator-initial-state = <3>;
regulator-boot-on-volt = <1150000>;
regulator-state-mem {
regulator-state-mode = <0x2>;
regulator-state-disabled;
regulator-state-uv = <900000>;
};
};
rk818_dcdc3_reg: [email protected] {
regulator-name= "rk818_dcdc3";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>;
regulator-initial-mode = <0x2>;
regulator-initial-state = <3>;
regulator-state-mem {
regulator-state-mode = <0x2>;
regulator-state-enabled;
regulator-state-uv = <1200000>;
};
};
rk818_dcdc4_reg: [email protected] {
regulator-name= "vccio";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
regulator-initial-mode = <0x2>;
regulator-initial-state = <3>;
regulator-state-mem {
regulator-state-mode = <0x2>;
regulator-state-enabled;
regulator-state-uv = <3000000>;
};
};
rk818_ldo1_reg: [email protected] {
regulator-name= "rk818_ldo1";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-initial-state = <3>;
regulator-state-mem {
regulator-state-enabled;
regulator-state-uv = <3300000>;
};
};
rk818_ldo2_reg: [email protected] {
regulator-name= "rk818_ldo2";
regulator-always-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-initial-state = <3>;
regulator-state-mem {
regulator-state-enabled;
regulator-state-uv = <3300000>;
};
};
rk818_ldo3_reg: [email protected] {
regulator-name= "rk818_ldo3";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-initial-state = <3>;
regulator-state-mem {
regulator-state-enabled;
regulator-state-uv = <1000000>;
};
};
rk818_ldo4_reg:[email protected] {
regulator-name= "rk818_ldo4";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-initial-state = <3>;
regulator-state-mem {
regulator-state-disabled;
regulator-state-uv = <1800000>;
};
};
rk818_ldo5_reg: [email protected] {
regulator-name= "rk818_ldo5";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-initial-state = <3>;
regulator-state-mem {
regulator-state-disabled;
regulator-state-uv = <3300000>;
};
};
rk818_ldo6_reg: [email protected] {
regulator-name= "rk818_ldo6";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-initial-state = <3>;
regulator-state-mem {
regulator-state-disabled;
regulator-state-uv = <1000000>;
};
};
rk818_ldo7_reg: [email protected] {
regulator-name= "rk818_ldo7";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-initial-state = <3>;
regulator-state-mem {
regulator-state-enabled;
regulator-state-uv = <1800000>;
};
};
rk818_ldo8_reg: [email protected] {
regulator-name= "rk818_ldo8";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-initial-state = <3>;
regulator-state-mem {
regulator-state-enabled;
regulator-state-uv = <3300000>;
};
};
rk818_ldo9_reg: [email protected] {
regulator-name= "vcc_sd";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-initial-state = <3>;
regulator-state-mem {
regulator-state-enabled;
regulator-state-uv = <3300000>;
};
};
rk818_ldo10_reg: [email protected] {
regulator-name= "rk818_ldo10";
regulator-state-mem {
regulator-state-disabled;
};
};
};
battery {
ocv_table =
<3400 3599 3671 3701 3728 3746 3762 3772 3781 3792 3816 3836
3866 3910 3942 3971 4002 4050 4088 4132 4183 >;
design_capacity = <4000>;
design_qmax = <4100>;
bat_res = <100>;
max_input_current = <2000>;
max_chrg_current = <1800>;
max_chrg_voltage = <4200>;
sleep_enter_current = <300>;
sleep_exit_current = <300>;
power_off_thresd = <3400>;
zero_algorithm_vol = <3850>;
fb_temperature = <115>;
max_soc_offset = <60>;
monitor_sec = <5>;
virtual_power = <0>;
power_dc2otg = <0>;
dc_det_adc = <0>;
};
};
此問題花了我不少時間,希望對遇到同樣問題的朋友有幫助.