[PATCH 00/13] IXP4xx spring cleaning

Arnd Bergmann arnd at arndb.de
Wed Jan 26 23:55:12 PST 2022


On Thu, Jan 27, 2022 at 1:36 AM Linus Walleij <linus.walleij at linaro.org> wrote:
>
> This cleans out the remaining board files from IXP4xx and
> makes it an exclusive device tree subarchitecture without any
> special weirdness in arch/arm/mach-ixp4xx.
>
> The biggest noticeable change is the removal of the old PCI
> driver and along with that the removal of the special DMA
> coherency code and defines and the DMA bouncing.

Very nice!

> I tried to convert the IXP4xx to multiplatform on top of
> this but it didn't work because IXP4xx wants to be big
> endian and multiplatform config creates a problem like
> this:
>
> ../arch/arm/kernel/head.S: Assembler messages:
> ../arch/arm/kernel/head.S:94: Error: selected processor does not support `setend be' in ARM mode
>
> I think this is because MULTI_V5 turns on CPUs that cannot
> do big endian, and IXP4xx turn on big endian.

The issue appears to be some mixup between BE8 and BE32 mode,
as this instruction only available on ARMv6 and higher with their
moder BE8 mode, while ARMv5 used the old-style BE32 mode that
does not have the setend instruction. I don't know how you got
to a configuration with BE8 mode on ARMv5, but I'm sure this can
be solved.

> (It crashes if I try to boot in little endian mode, sorry. It really
> wants to run big endian.)

My best guess is that this is caused by drivers using the "wrong"
register accessors, it should be possible to fix as well, but
would likely need fixes in a lot of files. I don't know what the
right way to do register accesses on BE8 is any more, but
apparently ixp4xx was working both ways in the past. It would
be nice to be able to run Debian armel user space.

      Arnd



More information about the linux-arm-kernel mailing list