OpenBIOS
Threads by month
- ----- 2026 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2000 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1999 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1998 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1997 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1996 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1995 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1994 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1993 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1992 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1991 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1990 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1989 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1988 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1987 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1986 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1985 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1984 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1983 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1982 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1981 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1980 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1979 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1978 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1977 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1976 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1975 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1974 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1973 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1972 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1971 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1970 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1969 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1968 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1967 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1966 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1965 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1964 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1963 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1962 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1961 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1960 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1959 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1958 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1957 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1956 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1955 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1954 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1953 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1952 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1951 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1950 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1949 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1948 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1947 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1946 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1945 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1944 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1943 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1942 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1941 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1940 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1939 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1938 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1937 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1936 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1935 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1934 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1933 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1932 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1931 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1930 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1929 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1928 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1927 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1926 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1925 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1924 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1923 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1922 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1921 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1920 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1919 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1918 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1917 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1916 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1915 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1914 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1913 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1912 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1911 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1910 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1909 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1908 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1907 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1906 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1905 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1904 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
June 2026
- 3 participants
- 7 discussions
[PATCH] config/scripts/switch-arch: fix build on aarch64 and riscv64 hosts
by Mark Cave-Ayland July 4, 2026
by Mark Cave-Ayland July 4, 2026
July 4, 2026
Ensure that the host compiler builds with -DNATIVE_BITWIDTH_SMALLER_THAN_HOST_BITWIDTH
on aarch64 and riscv64 hosts for 32-bit target architectures, otherwise host pointers
can end up being truncated to 32-bits causing a segfault running forthstrap.
Resolves: https://github.com/openbios/openbios/issues/18
Resolves: https://github.com/openbios/openbios/issues/25
Closes: https://github.com/openbios/openbios/pull/12
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland(a)ilande.co.uk>
---
config/scripts/switch-arch | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/config/scripts/switch-arch b/config/scripts/switch-arch
index 013116b..2c20d27 100755
--- a/config/scripts/switch-arch
+++ b/config/scripts/switch-arch
@@ -38,7 +38,8 @@ longbits()
if test "$cpu" = "sparc64" -o "$cpu" = "ia64" \
-o "$cpu" = "amd64" -o "$cpu" = "x86_64" \
-o "$cpu" = "powerpc64" -o "$cpu" = "ppc64" \
- -o "$cpu" = "ppc64le" -o "$cpu" = "alpha" ; then
+ -o "$cpu" = "ppc64le" -o "$cpu" = "alpha" \
+ -o "$cpu" = "aarch64" -o "$cpu" = "riscv64" ; then
echo 64
else
echo 32
--
2.47.3
1
1
July 4, 2026
The logs for the CI builds are indicating that older actions based upon Node 20
are deprecated. Update the following versions:
actions/checkout@v4 -> actions/checkout@v7
actions/download-artifact@v4 -> actions/download-artifact@v8
actions/upload-artifact@v4 -> actions/upload-artifact@v7
docker/build-push-action@v5 -> docker/build-push-action@v7
docker/login-action@v3 -> docker/login-action@v4
docker/metadata-action@v5 -> docker/metadata-action@v6
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland(a)ilande.co.uk>
---
.github/workflows/build-openbios-builder.yml | 8 ++++----
.github/workflows/main.yml | 6 +++---
.github/workflows/release.yml | 6 +++---
3 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/.github/workflows/build-openbios-builder.yml b/.github/workflows/build-openbios-builder.yml
index 9715e50..93b7531 100644
--- a/.github/workflows/build-openbios-builder.yml
+++ b/.github/workflows/build-openbios-builder.yml
@@ -17,10 +17,10 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v4
+ uses: actions/checkout@v7
- name: Log in to the Container registry
- uses: docker/login-action@v3
+ uses: docker/login-action@v4
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
@@ -28,12 +28,12 @@ jobs:
- name: Extract metadata (tags, labels) for Docker
id: meta
- uses: docker/metadata-action@v5
+ uses: docker/metadata-action@v6
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- name: Build and push Docker image
- uses: docker/build-push-action@v5
+ uses: docker/build-push-action@v7
with:
context: .
file: docker/Dockerfile.builder
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index a903697..9eadfc2 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -16,7 +16,7 @@ jobs:
image: ghcr.io/openbios/openbios-builder:master
steps:
- name: Checkout OpenBIOS
- uses: actions/checkout@v4
+ uses: actions/checkout@v7
- name: Backup Makefile.target
run: cp Makefile.target Makefile.target.orig
@@ -44,7 +44,7 @@ jobs:
run: "mkdir -p release && mv obj-* release"
- name: Store artifacts
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v7
with:
name: openbios-multiarch-latest
path: |
@@ -84,7 +84,7 @@ jobs:
release/obj-sparc64/QEMU,VGA.bin
- name: Prepare pre-release from artifacts
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v8
with:
name: openbios-multiarch-latest
path: archive
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index a8b8895..bdfe932 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -16,7 +16,7 @@ jobs:
image: ghcr.io/openbios/openbios-builder:master
steps:
- name: Checkout OpenBIOS
- uses: actions/checkout@v4
+ uses: actions/checkout@v7
- name: Backup Makefile.target
run: cp Makefile.target Makefile.target.orig
@@ -44,7 +44,7 @@ jobs:
run: "mkdir -p release && mv obj-* release"
- name: Store artifacts
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v7
with:
name: "openbios-multiarch-${{ github.ref_name }}"
path: |
@@ -84,7 +84,7 @@ jobs:
release/obj-sparc64/QEMU,VGA.bin
- name: Prepare release from artifacts
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v8
with:
name: "openbios-multiarch-${{ github.ref_name }}"
path: archive
--
2.47.3
1
1
June 23, 2026
hi!
I spent some time debugging why FreeBSD isn't booting on
qemu+mac99+openbios openfirmware.
I filed an issue (https://github.com/openbios/openbios/issues/27) and
a pull request (https://github.com/openbios/openbios/pull/28) .
The TL;DR - SAVE_SPACE isn't enough to store all the registers - r29,
r30, r31 wrap around to address 0x0 which corrupts that memory. It
doesn't crash in early boot because FreeBSD hasn't yet remapped the
page tables to memory mapped at 0x0 but once it does, the next
openfirmware call traps.
The fix is pretty simple:
diff --git a/arch/ppc/qemu/start.S b/arch/ppc/qemu/start.S
index c679230..4f4678f 100644
--- a/arch/ppc/qemu/start.S
+++ b/arch/ppc/qemu/start.S
@@ -503,7 +503,7 @@ _GLOBAL(saved_stack):
#define SAVE_SPACE 320
#else
#define STKOFF 8
-#define SAVE_SPACE 144
+#define SAVE_SPACE 156
#endif
GLOBL(of_client_callback):
Thanks!
-adrian
2
2
OpenBSD/powernv programs PTCR for LPID 0 with a partition
table size exponent one smaller than QEMU's existing ISA v3.0
interpretation. Try QEMU's existing PATS interpretation first,
then fall back to the OpenBSD LPID 0 form; nonzero LPIDs keep
the old behaviour.
The PSI model now exposes POWER9 IRQ level and pending status
registers, and keeps both updated while delivering through the
existing XIVE LSI source. This lets guests that select the
POWER9 PSI LSI IRQ method continue to receive LPC interrupts.
The blast radius is probably minimal: the partition table
fallback is limited to bare metal LPID 0 after the original
lookup fails, while the PSI change only touches POWER9 PSI
state and reuses the existing delivery path.
Signed-off-by: Kirill A. Korinsky <kirill(a)korins.ky>
---
hw/ppc/pnv_psi.c | 17 ++++-----
target/ppc/mmu-book3s-v3.c | 33 +++++++++++++---
tests/functional/ppc64/meson.build | 2 +
tests/functional/ppc64/test_openbsd.py | 52 ++++++++++++++++++++++++++
4 files changed, 90 insertions(+), 14 deletions(-)
create mode 100755 tests/functional/ppc64/test_openbsd.py
diff --git a/hw/ppc/pnv_psi.c b/hw/ppc/pnv_psi.c
index e8701c6100..941540df2d 100644
--- a/hw/ppc/pnv_psi.c
+++ b/hw/ppc/pnv_psi.c
@@ -688,6 +688,8 @@ static uint64_t pnv_psi_p9_mmio_read(void *opaque, hwaddr addr, unsigned size)
case PSIHB9_ESB_CI_BASE:
case PSIHB9_ESB_NOTIF_ADDR:
case PSIHB9_IVT_OFFSET:
+ case PSIHB9_IRQ_LEVEL:
+ case PSIHB9_IRQ_STAT:
val = psi->regs[reg];
break;
default:
@@ -817,18 +819,15 @@ static const MemoryRegionOps pnv_psi_p9_xscom_ops = {
static void pnv_psi_power9_set_irq(void *opaque, int irq, int state)
{
PnvPsi *psi = opaque;
- uint64_t irq_method = psi->regs[PSIHB_REG(PSIHB9_INTERRUPT_CONTROL)];
+ uint64_t irq_bit = PPC_BIT(irq);
- if (irq_method & PSIHB9_IRQ_METHOD) {
- qemu_log_mask(LOG_GUEST_ERROR, "PSI: LSI IRQ method no supported\n");
- return;
- }
-
- /* Update LSI levels */
+ /* Update LSI levels and pending status */
if (state) {
- psi->regs[PSIHB_REG(PSIHB9_IRQ_LEVEL)] |= PPC_BIT(irq);
+ psi->regs[PSIHB_REG(PSIHB9_IRQ_LEVEL)] |= irq_bit;
+ psi->regs[PSIHB_REG(PSIHB9_IRQ_STAT)] |= irq_bit;
} else {
- psi->regs[PSIHB_REG(PSIHB9_IRQ_LEVEL)] &= ~PPC_BIT(irq);
+ psi->regs[PSIHB_REG(PSIHB9_IRQ_LEVEL)] &= ~irq_bit;
+ psi->regs[PSIHB_REG(PSIHB9_IRQ_STAT)] &= ~irq_bit;
}
qemu_set_irq(psi->qirqs[irq], state);
diff --git a/target/ppc/mmu-book3s-v3.c b/target/ppc/mmu-book3s-v3.c
index 3865556310..4babe4c536 100644
--- a/target/ppc/mmu-book3s-v3.c
+++ b/target/ppc/mmu-book3s-v3.c
@@ -23,19 +23,21 @@
#include "mmu-hash64.h"
#include "mmu-book3s-v3.h"
-bool ppc64_v3_get_pate(PowerPCCPU *cpu, target_ulong lpid, ppc_v3_pate_t *entry)
+static bool ppc64_v3_get_pate_from_size(PowerPCCPU *cpu, target_ulong lpid,
+ ppc_v3_pate_t *entry,
+ uint64_t table_size)
{
uint64_t patb = cpu->env.spr[SPR_PTCR] & PTCR_PATB;
- uint64_t pats = cpu->env.spr[SPR_PTCR] & PTCR_PATS;
+ uint64_t entries;
/* Check if partition table is properly aligned */
- if (patb & MAKE_64BIT_MASK(0, pats + 12)) {
+ if (patb & (table_size - 1)) {
return false;
}
/* Calculate number of entries */
- pats = 1ull << (pats + 12 - 4);
- if (pats <= lpid) {
+ entries = table_size / sizeof(*entry);
+ if (entries <= lpid) {
return false;
}
@@ -45,3 +47,24 @@ bool ppc64_v3_get_pate(PowerPCCPU *cpu, target_ulong lpid, ppc_v3_pate_t *entry)
entry->dw1 = ldq_phys(CPU(cpu)->as, patb + 8);
return true;
}
+
+bool ppc64_v3_get_pate(PowerPCCPU *cpu, target_ulong lpid, ppc_v3_pate_t *entry)
+{
+ uint64_t pats = cpu->env.spr[SPR_PTCR] & PTCR_PATS;
+
+ /*
+ * Keep the existing ISA v3.0 PATS interpretation first. OpenBSD/powernv
+ * uses the PATSIZE value it writes to PTCR as one exponent smaller, and it
+ * only needs that interpretation for the bare metal LPID 0 table.
+ */
+ if (ppc64_v3_get_pate_from_size(cpu, lpid, entry, 1ull << (pats + 12))) {
+ return true;
+ }
+
+ if (lpid == 0) {
+ return ppc64_v3_get_pate_from_size(cpu, lpid, entry,
+ 1ull << (pats + 11));
+ }
+
+ return false;
+}
diff --git a/tests/functional/ppc64/meson.build b/tests/functional/ppc64/meson.build
index f0f8ab8f61..cb3c745624 100644
--- a/tests/functional/ppc64/meson.build
+++ b/tests/functional/ppc64/meson.build
@@ -4,6 +4,7 @@ test_ppc64_timeouts = {
'fadump' : 480,
'hv' : 1000,
'mac99' : 120,
+ 'openbsd' : 240,
'powernv' : 480,
'pseries' : 480,
'replay' : 210,
@@ -20,6 +21,7 @@ tests_ppc64_system_thorough = [
'fadump',
'hv',
'mac99',
+ 'openbsd',
'powernv',
'pseries',
'replay',
diff --git a/tests/functional/ppc64/test_openbsd.py b/tests/functional/ppc64/test_openbsd.py
new file mode 100755
index 0000000000..bdbef6bf82
--- /dev/null
+++ b/tests/functional/ppc64/test_openbsd.py
@@ -0,0 +1,52 @@
+#!/usr/bin/env python3
+#
+# Test that OpenBSD boots on a ppc powernv machine and reaches the installer.
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+from qemu_test import QemuSystemTest, Asset
+from qemu_test import wait_for_console_pattern
+
+
+class OpenBSDPowerNV(QemuSystemTest):
+
+ ASSET_MINIROOT = Asset(
+ 'https://kirill.korins.ky/pub/qemu-powerpc64-openbsd/miniroot79.img',
+ '7829e42b75d81cafd732038b9d63228b79c1f5828d8375872a4bb655e1d6b13c')
+
+ ASSET_BOOTKERNEL = Asset(
+ 'https://kirill.korins.ky/pub/qemu-powerpc64-openbsd/pnor.BOOTKERNEL',
+ '397ce43ce61910e1a2c4f13d301f957e61513a9ec5371bc3e87d3095411fae7b')
+
+ def test_powernv9_openbsd_installer(self):
+ self.set_machine('powernv9')
+ self.require_accelerator('tcg')
+
+ miniroot_path = self.ASSET_MINIROOT.fetch()
+ bootkernel_path = self.ASSET_BOOTKERNEL.fetch()
+
+ self.vm.set_console()
+ self.vm.add_args('-cpu', 'power9',
+ '-accel', 'tcg,thread=single',
+ '-smp', '1,cores=1,threads=1',
+ '-m', '2g',
+ '-kernel', bootkernel_path,
+ '-device',
+ 'ich9-ahci,id=sata0,bus=pcie.0,addr=0x0',
+ '-drive',
+ f'file={miniroot_path},format=raw,if=none,'
+ 'id=bootdisk,snapshot=on',
+ '-device',
+ 'ide-hd,bus=sata0.0,unit=0,drive=bootdisk,'
+ 'bootindex=1')
+ self.vm.launch()
+
+ wait_for_console_pattern(self, 'OpenBSD 7.9 (RAMDISK)', 'panic:')
+ wait_for_console_pattern(
+ self,
+ '(I)nstall, (U)pgrade, (A)utoinstall or (S)hell?',
+ 'panic:')
+
+
+if __name__ == '__main__':
+ QemuSystemTest.main()
--
2.54.0
2
1
OpenBIOS uses the top of guest RAM for its private mappings and
for reverse physical claims. On sun4u guests with more than 4G,
this places firmware owned memory above the range that the existing
SPARC64 setup handles correctly, which trips OpenBIOS before the guest
can boot.
Keep the full RAM size visible to the guest, but cap the firmware
allocation search limit at 4G on SPARC64 and use the same cap for the
early private mapping placement.
---
arch/sparc64/entry.S | 8 +++++++-
libopenbios/ofmem_common.c | 18 +++++++++++++++---
2 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/arch/sparc64/entry.S b/arch/sparc64/entry.S
index 224a53b..7b3f87a 100644
--- a/arch/sparc64/entry.S
+++ b/arch/sparc64/entry.S
@@ -133,13 +133,19 @@ entry:
or %g3, %g4, %g1
! %g1 contains end of memory
+ mov %g1, %g4
+ srlx %g1, 32, %g5
+ brz %g5, 1f
+ nop
+ setx 0x100000000, %g7, %g4
+1:
setx _end, %g7, %g3
set 0x7ffff, %g2
add %g3, %g2, %g3
andn %g3, %g2, %g3
setx _data, %g7, %g2
sub %g3, %g2, %g2
- sub %g1, %g2, %g2 ! %g2 = start of private memory
+ sub %g4, %g2, %g2 ! %g2 = start of private memory
mov %g2, %l0
! setup .data & .bss
diff --git a/libopenbios/ofmem_common.c b/libopenbios/ofmem_common.c
index fc19d27..ccff11d 100644
--- a/libopenbios/ofmem_common.c
+++ b/libopenbios/ofmem_common.c
@@ -44,6 +44,18 @@ static ucell get_ram_size( void )
return ofmem->ramsize;
}
+static phys_addr_t get_claim_phys_top( void )
+{
+ phys_addr_t top = get_ram_size();
+
+#ifdef CONFIG_SPARC64
+ if (top > (phys_addr_t)0x100000000ULL)
+ top = (phys_addr_t)0x100000000ULL;
+#endif
+
+ return top;
+}
+
/************************************************************************/
/* debug */
/************************************************************************/
@@ -521,7 +533,7 @@ phys_addr_t ofmem_claim_phys( phys_addr_t phys, ucell size, ucell align )
" align=" FMT_ucellx "\n",
phys, size, align);
- return ofmem_claim_phys_( phys, size, align, 0, get_ram_size(), 1 );
+ return ofmem_claim_phys_( phys, size, align, 0, get_claim_phys_top(), 1 );
}
static ucell ofmem_claim_virt_( ucell virt, ucell size, ucell align,
@@ -600,7 +612,7 @@ phys_addr_t ofmem_retain( phys_addr_t phys, ucell size, ucell align )
" align=" FMT_ucellx "\n",
phys, size, align);
- retain_phys = ofmem_claim_phys_( phys, size, align, 0, get_ram_size(), 1 /* reverse */ );
+ retain_phys = ofmem_claim_phys_( phys, size, align, 0, get_claim_phys_top(), 1 /* reverse */ );
/* Add to the retain_phys_range list */
retained->retain_phys_range[retained->numentries].next = NULL;
@@ -634,7 +646,7 @@ ucell ofmem_claim( ucell addr, ucell size, ucell align )
} else {
if( align < PAGE_SIZE )
align = PAGE_SIZE;
- phys = ofmem_claim_phys_( -1, size, align, 0, get_ram_size(), 1 /* reverse */ );
+ phys = ofmem_claim_phys_( -1, size, align, 0, get_claim_phys_top(), 1 /* reverse */ );
virt = ofmem_claim_virt_( phys, size, 0, 0, 0, 0 );
if( phys == -1 || virt == -1 ) {
OFMEM_TRACE("ofmem_claim failed\n");
--
2.54.0
1
0
Open Firmware clients call the client interface boot service as a
control transfer; it must not return after a normal reboot request. The
current implementation only prints BOOT and returns, which makes
OpenBSD/sparc64 treat the call as OF_boot() failure and enter DDB after
syncing disks.
---
forth/system/ciface.fs | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/forth/system/ciface.fs b/forth/system/ciface.fs
index 146561a..1f991a5 100644
--- a/forth/system/ciface.fs
+++ b/forth/system/ciface.fs
@@ -263,7 +263,8 @@ external
\ -------------------------------------------------------------
: boot ( bootspec -- )
- ." BOOT"
+ drop
+ reset-all
;
: enter ( -- )
--
2.54.0
1
0
OpenBIOS stores the catch result in args[nargs] before copying declared
return values back to the client. That slot exists only when the client
advertises at least one return value; calls with nret == 0 provide no
space for it.
Avoid writing past the client argument frame when no return slot exists.
This prevents stack and argument corruption during OpenBSD/sparc64 boot,
where set-symbol-lookup is issued with zero return values.
---
libopenbios/client.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/libopenbios/client.c b/libopenbios/client.c
index 8b3d582..958a57c 100644
--- a/libopenbios/client.c
+++ b/libopenbios/client.c
@@ -272,8 +272,9 @@ handle_calls(prom_args_t *pb)
return 0;
}
- /* Store catch result */
- pb->args[pb->nargs] = val;
+ /* Store catch result if the client provided room for it */
+ if (pb->nret)
+ pb->args[pb->nargs] = val;
j = dstackcnt;
for (i = 1; i < pb->nret; i++, j--) {
--
2.54.0
1
0