Message ID | 1491789212-9160-1-git-send-email-eric.gao@rock-chips.com |
---|---|
State | Accepted |
Delegated to: | Simon Glass |
Headers | show |
Hi Eric, On 04/10/2017 09:53 AM, Eric Gao wrote: > when enable PMIC rk808,the system will halt at very > early stage,log is shown as bellow. > > INFO: plat_rockchip_pmu_init(1211): pd status 3e > INFO: BL31: Initializing runtime services > INFO: BL31: Preparing for EL3 exit to normal world > INFO: Entry point address = 0x200000 > INFO: SPSR = 0x3c9 > time 44561b, 0 (<<----Just stop here) > > It's caused by the absence of "{ }" in syscon_rk3399.c > ,which will lead to memory overflow like below.According > to Sysmap file ,we can find the function buck_get_value > of rk808 is just follow the compatible struct,the pointer > "of_match" point to "buck_get_value",but it is not a > struct and don't have member of compatible, In this case, > system crash. So,on the face, it looks like that rk808 is > guilty.but he is really innocent. > > while (of_match->compatible) { <<---------- > if (!strcmp(of_match->compatible, compat)) { > *of_idp = of_match; > return 0; > } > of_match++; > } > > Signed-off-by: Eric Gao <eric.gao@rock-chips.com> > --- > > arch/arm/mach-rockchip/rk3399/syscon_rk3399.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/arch/arm/mach-rockchip/rk3399/syscon_rk3399.c b/arch/arm/mach-rockchip/rk3399/syscon_rk3399.c > index d32985b..74d4552 100644 > --- a/arch/arm/mach-rockchip/rk3399/syscon_rk3399.c > +++ b/arch/arm/mach-rockchip/rk3399/syscon_rk3399.c > @@ -14,6 +14,7 @@ static const struct udevice_id rk3399_syscon_ids[] = { > { .compatible = "rockchip,rk3399-pmugrf", .data = ROCKCHIP_SYSCON_PMUGRF }, > { .compatible = "rockchip,rk3399-pmusgrf", .data = ROCKCHIP_SYSCON_PMUSGRF }, > { .compatible = "rockchip,rk3399-cic", .data = ROCKCHIP_SYSCON_CIC }, > + { } > }; > > U_BOOT_DRIVER(syscon_rk3399) = { Reviewed-by: Kever Yang <kever.yang@rock-chips.com> Tested-by: Kever Yang <kever.yang@rock-chips.com> Thanks, - Kever
On 10 April 2017 at 20:13, Kever Yang <kever.yang@rock-chips.com> wrote: > Hi Eric, > > > > On 04/10/2017 09:53 AM, Eric Gao wrote: >> >> when enable PMIC rk808,the system will halt at very >> early stage,log is shown as bellow. >> >> INFO: plat_rockchip_pmu_init(1211): pd status 3e >> INFO: BL31: Initializing runtime services >> INFO: BL31: Preparing for EL3 exit to normal world >> INFO: Entry point address = 0x200000 >> INFO: SPSR = 0x3c9 >> time 44561b, 0 (<<----Just stop here) >> >> It's caused by the absence of "{ }" in syscon_rk3399.c >> ,which will lead to memory overflow like below.According >> to Sysmap file ,we can find the function buck_get_value >> of rk808 is just follow the compatible struct,the pointer >> "of_match" point to "buck_get_value",but it is not a >> struct and don't have member of compatible, In this case, >> system crash. So,on the face, it looks like that rk808 is >> guilty.but he is really innocent. >> >> while (of_match->compatible) { <<---------- >> if (!strcmp(of_match->compatible, compat)) { >> *of_idp = of_match; >> return 0; >> } >> of_match++; >> } >> >> Signed-off-by: Eric Gao <eric.gao@rock-chips.com> >> --- >> >> arch/arm/mach-rockchip/rk3399/syscon_rk3399.c | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/arch/arm/mach-rockchip/rk3399/syscon_rk3399.c >> b/arch/arm/mach-rockchip/rk3399/syscon_rk3399.c >> index d32985b..74d4552 100644 >> --- a/arch/arm/mach-rockchip/rk3399/syscon_rk3399.c >> +++ b/arch/arm/mach-rockchip/rk3399/syscon_rk3399.c >> @@ -14,6 +14,7 @@ static const struct udevice_id rk3399_syscon_ids[] = { >> { .compatible = "rockchip,rk3399-pmugrf", .data = >> ROCKCHIP_SYSCON_PMUGRF }, >> { .compatible = "rockchip,rk3399-pmusgrf", .data = >> ROCKCHIP_SYSCON_PMUSGRF }, >> { .compatible = "rockchip,rk3399-cic", .data = ROCKCHIP_SYSCON_CIC >> }, >> + { } >> }; >> U_BOOT_DRIVER(syscon_rk3399) = { > > > Reviewed-by: Kever Yang <kever.yang@rock-chips.com> > Tested-by: Kever Yang <kever.yang@rock-chips.com> > > Thanks, > - Kever > > > _______________________________________________ > U-Boot mailing list > U-Boot@lists.denx.de > https://lists.denx.de/listinfo/u-boot Applied to u-boot-rockchip, thanks!
diff --git a/arch/arm/mach-rockchip/rk3399/syscon_rk3399.c b/arch/arm/mach-rockchip/rk3399/syscon_rk3399.c index d32985b..74d4552 100644 --- a/arch/arm/mach-rockchip/rk3399/syscon_rk3399.c +++ b/arch/arm/mach-rockchip/rk3399/syscon_rk3399.c @@ -14,6 +14,7 @@ static const struct udevice_id rk3399_syscon_ids[] = { { .compatible = "rockchip,rk3399-pmugrf", .data = ROCKCHIP_SYSCON_PMUGRF }, { .compatible = "rockchip,rk3399-pmusgrf", .data = ROCKCHIP_SYSCON_PMUSGRF }, { .compatible = "rockchip,rk3399-cic", .data = ROCKCHIP_SYSCON_CIC }, + { } }; U_BOOT_DRIVER(syscon_rk3399) = {
when enable PMIC rk808,the system will halt at very early stage,log is shown as bellow. INFO: plat_rockchip_pmu_init(1211): pd status 3e INFO: BL31: Initializing runtime services INFO: BL31: Preparing for EL3 exit to normal world INFO: Entry point address = 0x200000 INFO: SPSR = 0x3c9 time 44561b, 0 (<<----Just stop here) It's caused by the absence of "{ }" in syscon_rk3399.c ,which will lead to memory overflow like below.According to Sysmap file ,we can find the function buck_get_value of rk808 is just follow the compatible struct,the pointer "of_match" point to "buck_get_value",but it is not a struct and don't have member of compatible, In this case, system crash. So,on the face, it looks like that rk808 is guilty.but he is really innocent. while (of_match->compatible) { <<---------- if (!strcmp(of_match->compatible, compat)) { *of_idp = of_match; return 0; } of_match++; } Signed-off-by: Eric Gao <eric.gao@rock-chips.com> --- arch/arm/mach-rockchip/rk3399/syscon_rk3399.c | 1 + 1 file changed, 1 insertion(+)