armv6 kernel support for Raspberry Pi 3 in default aarch32 mode

Mark Millard markmi at dsl-only.net
Thu Aug 10 16:11:33 UTC 2017


On 2017-Aug-10, at 6:51 AM, Sylvain Garrigues <sylvain at sylvaingarrigues.com> wrote:

> 2017-08-10 1:58 GMT+02:00 Mark Millard <markmi at dsl-only.net>:
>> Overall: Supporting aarch32 is not automatic
>> even if one starts from armv7 or specifically
>> a cortex-a53 context unless one was lucky
>> enough to happen to not touch or depend on
>> any of the differences at any stage.
> 
>  Thanks. I guess though that it's quite easily feasible for someone familiar with arm lower level initialization.
> 
> I can see NetBSD managed to make the armv7 kernel boot on Raspberry Pi 3 with one commit:
> Get the RPI3 working (in aarch32 mode) by recognising Cortex A53 CPUs. - https://github.com/IIJ-NetBSD/netbsd-src/commit/00335f7adc380a125d045279c1a0f5525fb557da

Interesting.

> Same for OpenBSD folks:
> http://marc.info/?l=openbsd-tech&m=145692659524971&w=2

This one (OpenBSD) says (note the "including some other
(still) local diffs"):

"This way, and including some other (still) local diffs, I have
the brand new raspberry Pi 3 in multiuser:  http://ix.io/oJV "

So the reference only has some of of the code changes shown.

And the boot log shows:

cpu0 at mainbus0: ARM Cortex A53 rev 4 (ARMv7 core)
cpu0: DC enabled IC enabled WB disabled EABT branch prediction enabled
cpu0: 32KB(64b/l,2way) I-cache, 32KB(64b/l,4way) wr-back D-cache

So just one cpu. But for all I know OpenBSD might not have
been SMP capable on a rpi2 at the time either.

The boot log also shows:

gpio at bcmgpio0 not configured
broadcom0: device bcmsdhc unit 0 not found


So for OpenBSD the code change shown was just the start of the
update as far as I can tell.

> Plus FreeBSD's RPI2 armv6 kernel does boot and recognize the cortex-a53 with qemu-aarch64:
> qemu-system-aarch64 -M raspi2 -cpu cortex-a53 -m 1024 -smp 4 -kernel kernel.bin -serial stdio -dtb rpi2.dtb

Interesting. How clean is the boot log?

At least for raspbian there were separate files for rpi3
when rpi3 was first supported:

arch/arm/boot/dts/bcm2710-rpi-3-b.dts
arch/arm/boot/dts/bcm2710.dtsi

Later there was:

arch/arm/boot/dts/overlays/pi3-disable-bt-overlay.dts
arch/arm/boot/dts/overlays/pi3-miniuart-bt-overlay.dts
arch/arm/boot/dts/overlays/pi3-disable-wifi-overlay.dts
arch/arm/boot/dts/overlays/pi3-act-led-overlay.dts

as well as some updates to some of those files. (I'm
not sure that I found all such files that are rpi3
specific [possibly covering rpi2v1.2 as well?].)

I suspect the qemu-system-aarch64 use is simulating
a rpi2's details as listed in rpi2.dtb instead of the
rpi3's details. (But using a cortex-a53 CPU model.)
There may well be work in supporting the rpi3's
details in the kernel and/or boot loading stages for
all I know.

What happens if a rpi3 dtb file is used instead of
rpi2.dtb ?


> So I guess we too are really not far to boot RPI2 "armv6" kernel on raspberry pi 2 v1.2 and raspberry pi 3.
> I wish I could help.

Since I'm finding these things as I go I've no clue
what I've not found. So I can not tell how close to
correct you are.


===
Mark Millard
markmi at dsl-only.net





More information about the freebsd-arm mailing list