armv6 kernel support for Raspberry Pi 3 in default aarch32 mode

Sylvain Garrigues sylvain at sylvaingarrigues.com
Fri Aug 11 09:35:37 UTC 2017


Actually, with latest u-boot and static RPI2 DTB embedded in kernel, I've
managed to make the RPI2 kernel boot on my RPI3 and recognize all
cortex-a53 processors.

I've got errors then because the DTB mustn't be static, the RPI firmware
patches it with required values before giving control to kernel.

I still need to figure out why the kernel doesn't like the DTB provided by
firmware when it's not static, and panics with "OF_init failed with the
found device tree" in initarm, but apart from that I feel like we are close
to having a 32-bit OS for RPI3 and new RPI2 v1.2.


Copyright (c) 1992-2017 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 12.0-CURRENT #45 14d0c5770e7(master)-dirty: Fri Aug 11 17:31:04
CEST 2017
    root at box.sylvaingarrigues.com:/usr/obj/arm.armv6/usr/src/sys/GENERIC arm
FreeBSD clang version 5.0.0 (branches/release_50 309439) (based on LLVM
5.0.0svn)
VT: init without driver.
CPU: ARM Cortex-A53 r0p4 (ECO: 0x00000080)
CPU Features:
  Multiprocessing, Thumb2, Security, Virtualization, Generic Timer, VMSAv7,
  PXN, LPAE, Coherent Walk
Optional instructions:
  SDIV/UDIV, UMULL, SMULL, SIMD(ext)
LoUU:2 LoC:3 LoUIS:2
Cache level 1:
 32KB/64B 4-way data cache WB Read-Alloc Write-Alloc
 32KB/64B 2-way instruction cache Read-Alloc
Cache level 2:
 512KB/64B 16-way unified cache WB Read-Alloc Write-Alloc
...



2017-08-10 18:04 GMT+02:00 Mark Millard <markmi at dsl-only.net>:

> 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