Collie/Simpad hacks in head-sa1100.S break booting on other machines

Eric Miao eric.y.miao at
Wed Sep 9 22:14:21 EDT 2009

On Wed, Sep 9, 2009 at 8:54 PM, Dmitry Artamonow <mad_soft at> wrote:
> Hello!
> When trying to boot kernel with both CONFIG_SA1100_COLLIE and
> CONFIG_SA1100_H3600 compiled in on iPaq h3600, I suddenly have been
> bitten by this hack in arch/arm/boot/compressed/head-sa1100.S:
> #ifdef CONFIG_SA1100_COLLIE
>                mov     r7, #MACH_TYPE_COLLIE
> #endif
> Yes, it's silently sets machine ID to MACH_TYPE_COLLIE on _any_ SA1100 machine
> if CONFIG_SA1100_COLLIE is set. And there's also similar hack (or broken
> bootloader workaround, if you like) for Simpad.
> I don't know if these hacks are needed anymore (for Collie with stock
> bootloader probably yes, for Simpad I don't know as I don't have this
> hardware), but I think something should be done at least to prevent
> selecting other machines if CONFIG_SA1100_COLLIE or CONFIG_SA1100_SIMPAD
> selected. Please find not very elegant, but working patch in attahment.
> It just adds "depends on !SA1100_COLLIE && !SA1100_SIMPAD" to every other
> machine. Sadly, I'm not an expert in kconfig - maybe there's a better way
> to do that?

Sadly, this doesn't look like a correct approach. Remember that machines
can just be compiled into a single vmlinux all together without excluding
each other.

This is true on pxa25x/pxa27x with Sharp Zaurus due to their lack of a
compliant boot loader, so that dirty hack is there to detect which model

A good fix would be to the bootloader to tell the kernel about the correct
machine ID, and if that's difficult, a compromised one would be a short
block of detection code which doesn't conflict with other machines.

More information about the linux-arm-kernel mailing list