[prev in list] [next in list] [prev in thread] [next in thread]
List: openbsd-arm
Subject: Re: OpenBSD 7.4+ does not boot on qemu/sbsa-ref with Neoverse-V1/N2 or max cpu core
From: Jonathan Gray <jsg () jsg ! id ! au>
Date: 2024-03-15 12:06:31
Message-ID: ZfQ5x3kxr-rYMHKp () largo ! jsg ! id ! au
[Download RAW message or body]
On Fri, Mar 15, 2024 at 11:29:28AM +0100, Marcin Juszkiewicz via arm wrote:
> W dniu 15.03.2024 o 03:30, Jonathan Gray pisze:
> > > OpenBSD 7.3 boots fine on all core types. OpenBSD 7.4 fails on
> > > Neoverse-V1/N2/max. Same situation with today's 7.5-current snapshot.
> > >
> > > To track the problem I opened a bug against QEMU [1] to have all
> > > information in one place.
> > >
> > > 1.https://gitlab.com/qemu-project/qemu/-/issues/2224
> > >
> > > If I use older cores (like Neoverse-N1 which is default for sbsa-ref)
> > > then installer boots fine:
>
> > I see the same with sbsa-ref using qemu 8.2.1 and the edk2
> > firmware you reference in the qemu issue.
>
> What made me wonder is that it feels like error on OpenBSD side.
> 7.3 release boots, 7.4 and later do not.
I tracked it down to PAC.
https://github.com/openbsd/src/commit/4171e492c627a295b38565e1f04e0b7ba62913f8
If I disable it, qemu sbsa-ref with cpu max boots.
diff --git sys/arch/arm64/arm64/cpu.c sys/arch/arm64/arm64/cpu.c
index b11bf3699ac..1fa647ff6b5 100644
--- sys/arch/arm64/arm64/cpu.c
+++ sys/arch/arm64/arm64/cpu.c
@@ -970,24 +970,29 @@ cpu_attach(struct device *parent, struct device *dev, void *aux)
/*
* Lenovo X13s ships with broken EL2 firmware that
* hangs the machine if we enable PAuth.
*/
if (hw_vendor && hw_prod && strcmp(hw_vendor, "LENOVO") == 0) {
if (strncmp(hw_prod, "21BX", 4) == 0 ||
strncmp(hw_prod, "21BY", 4) == 0) {
cpu_id_aa64isar1 &= ~ID_AA64ISAR1_APA_MASK;
cpu_id_aa64isar1 &= ~ID_AA64ISAR1_GPA_MASK;
}
}
+ if (hw_vendor && strcmp(hw_vendor, "QEMU") == 0) {
+ cpu_id_aa64isar1 &= ~ID_AA64ISAR1_APA_MASK;
+ cpu_id_aa64isar1 &= ~ID_AA64ISAR1_GPA_MASK;
+ }
+
cpu_identify(ci);
if (OF_getproplen(ci->ci_node, "clocks") > 0) {
cpu_node = ci->ci_node;
cpu_cpuspeed = cpu_clockspeed;
}
cpu_init();
#ifdef MULTIPROCESSOR
}
#endif
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic