Skip to content
Snippets Groups Projects
Forked from KED Software Projects / Miscellaneous / KED U-Boot Fork
Source project has a limited visibility.
  • eric.gao@rock-chips.com's avatar
    bc8e8fe4
    rockchip: rk3399: Add missing sentinel in syscon · bc8e8fe4
    eric.gao@rock-chips.com authored
    
    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: default avatarEric Gao <eric.gao@rock-chips.com>
    Reviewed-by: default avatarKever Yang <kever.yang@rock-chips.com>
    Tested-by: default avatarKever Yang <kever.yang@rock-chips.com>
    bc8e8fe4
    History
    rockchip: rk3399: Add missing sentinel in syscon
    eric.gao@rock-chips.com authored
    
    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: default avatarEric Gao <eric.gao@rock-chips.com>
    Reviewed-by: default avatarKever Yang <kever.yang@rock-chips.com>
    Tested-by: default avatarKever Yang <kever.yang@rock-chips.com>