Project

General

Profile

Actions

BootloaderIncompatibleWithLinux

Devices with the Exynos 4412

Introduction

The bootloader of the following devices is incompatible with upstream Linux:
  • Galaxy SIII (GT-I9300)
  • Galaxy SIII 4G (GT-I9305)
  • Galaxy Note II (GT-N7100)
  • Galaxy Note II 4G (GT-N7105)
When jumping to Linux, the booloader still has:
  • the instruction cache on
  • the data cache on
  • the MMU on
Documentation/arm/booting.rst which is there since 2003 states that:
  • "The MMU must be off."
  • "Data cache must be off."

And upstream Linux won't accept patches to disable the MMU, or the data cache in Linux as they have very good reasons to do that, and they are supposed to be already disabled.

Supporting s-boot

To workaround that we need to: However as the kernel evolved we needed to patch it more and more:
  • The patch disabling the caches was not necessary on Linux 3.4
  • Disabling CONFIG_GCC_PLUGINS was also not necessary on older kernel where the option was not even present

So it's not a viable option in the long run.

Devices with the Exynos 4412

The bootloader of the following devices seems1 to be incompatible with upstream Linux:
  • Galaxy SII (GT-I9100)

However we don't have details yet on what is wrong there (caches, MMU, etc).

1 from #replicant on freenode: <pcercuei> I'm trying to boot a mainline kernel [on the GT-I9100], for some reason it only works if I boot it with u-boot

Longer term options

As u-boot disables the instruction cache in the boot commands before jumping to Linux, we might be able to replace the boot.img by u-boot to workaround the stock bootloader issues.

Having u-boot would also enable many benefits, such as the ability to have Replicant images that run on multiple devices.

As u-boot is capable of running in different ways, when upstreaming the code we will need to make sure that it can run as boot.img but also in other ways depending on the device.

For instance on midas, u-boot can also run with the nonfree and non-redistributable BL1. So it might be interesting to support that as well with the same code because:
  • Other people are interested in that so we could collaborate on the same code even if it doesn't run the same way
  • If we manage to get rid of the BL1 at some point, many of the upstreaming work will already been done.

Updated by Kurtis Hanna 21 days ago · 15 revisions