Skip to content
  • Siarhei Siamashka's avatar
    sunxi: Machine id hack to prevent loading buggy sunxi-3.4 kernels · 77ef1369
    Siarhei Siamashka authored
    
    
    Right now U-Boot supports the CONFIG_OLD_SUNXI_KERNEL_COMPAT option,
    which makes it go out of its way in limiting the selection of PLL clock
    frequencies and PMIC voltages in order not to upset outdated buggy
    sunxi-3.4 kernel releases. And if the CONFIG_OLD_SUNXI_KERNEL_COMPAT
    option is not set, then booting such old kernels exhibits various
    failures at runtime. This is very user unfriendly, and there were
    already several incidents when people wasted their time being hit
    by these runtime failures and trying to debug them.
    
    The right solution is not to add hacks and workarounds to the mainline
    U-Boot, but to fix these bugs in the sunxi-3.4 kernel. And in fact,
    the updated sunxi-3.4 kernels already exist. Still we need to follow
    the 'Principle of Least Surprise' and U-Boot needs to ensure that
    the old buggy kernels are not getting happily booted when the
    CONFIG_OLD_SUNXI_KERNEL_COMPAT option is not set. And this patch
    addresses this particular issue.
    
    This patch makes U-Boot store the 'compatibility revision' number in
    the top 4 bits of the machine id and pass it to the kernel. The old
    buggy kernels will fail to load with a very much googlable error
    message on the serial console (the "r1 = 0x100010bb" part of it):
    
      "Error: unrecognized/unsupported machine ID (r1 = 0x100010bb)"
    
    This error message can be documented in the linux-sunxi wiki with
    proper explanations about how to resolve this situation and where
    to get the necessary bugfixes for the sunxi-3.4 kernel.
    
    The fixed sunxi-3.4 kernels implement a revision compatibility check
    and clear the top 4 bits of the machine id if everything is alright.
    By accepting the machine id with the bits 31:28 set to 1, the sunxi-3.4
    kernel effectively certifies that it has the PLL5 clock speed and
    AXP209 DCDC3 voltage fixes applied.
    
    It is still possible to set the CONFIG_OLD_SUNXI_KERNEL_COMPAT option
    in U-Boot if the user desires to use an outdated unpatched sunxi-3.4
    kernel.
    
    Signed-off-by: default avatarSiarhei Siamashka <siarhei.siamashka@gmail.com>
    Acked-by: default avatarIan Campbell <ijc@hellion.org.uk>
    Acked-by: default avatarHans de Goede <hdegoede@redhat.com>
    Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    77ef1369