diff mbox series

[v2,2/2] xen/ppc: Drop support for pseries/OpenFirmware

Message ID a13e0c54a18c4d87aae88134d9726657f9bdedc5.1694044614.git.sanastasio@raptorengineering.com (mailing list archive)
State Superseded
Headers show
Series ppc: Drop support for QEMU pseries | expand

Commit Message

Shawn Anastasio Sept. 7, 2023, 12:01 a.m. UTC
Since QEMU's PowerNV support has matured to the point where it is
now suitable for development, drop support for booting on the
paravirtualized pseries machine type and its associated interfaces.

Support for booting on pseries was broken by 74b725a64d80 ('xen/ppc:
Implement initial Radix MMU support'), and since there is little
practical value in continuing to support pseries as a target, just drop
support for it entirely.

Signed-off-by: Shawn Anastasio <sanastasio@raptorengineering.com>
Fixes: 74b725a64d80 ('xen/ppc: Implement initial Radix MMU support')
---
 xen/arch/ppc/Makefile           |   1 -
 xen/arch/ppc/boot-of.c          | 113 --------------------------------
 xen/arch/ppc/include/asm/boot.h |  19 ------
 xen/arch/ppc/ppc64/Makefile     |   1 -
 xen/arch/ppc/ppc64/of-call.S    |  83 -----------------------
 xen/arch/ppc/setup.c            |  11 +---
 6 files changed, 3 insertions(+), 225 deletions(-)
 delete mode 100644 xen/arch/ppc/boot-of.c
 delete mode 100644 xen/arch/ppc/ppc64/of-call.S

Comments

Jan Beulich Sept. 7, 2023, 1:23 p.m. UTC | #1
On 07.09.2023 02:01, Shawn Anastasio wrote:
> Since QEMU's PowerNV support has matured to the point where it is
> now suitable for development, drop support for booting on the
> paravirtualized pseries machine type and its associated interfaces.
> 
> Support for booting on pseries was broken by 74b725a64d80 ('xen/ppc:
> Implement initial Radix MMU support'), and since there is little
> practical value in continuing to support pseries as a target, just drop
> support for it entirely.
> 
> Signed-off-by: Shawn Anastasio <sanastasio@raptorengineering.com>
> Fixes: 74b725a64d80 ('xen/ppc: Implement initial Radix MMU support')

(Nit: Fixes: tag first please.)

Acked-by: Jan Beulich <jbeulich@suse.com>
diff mbox series

Patch

diff --git a/xen/arch/ppc/Makefile b/xen/arch/ppc/Makefile
index a059ac4c0a..b3205b8f7a 100644
--- a/xen/arch/ppc/Makefile
+++ b/xen/arch/ppc/Makefile
@@ -1,6 +1,5 @@ 
 obj-$(CONFIG_PPC64) += ppc64/
 
-obj-y += boot-of.init.o
 obj-$(CONFIG_EARLY_PRINTK) += early_printk.init.o
 obj-y += mm-radix.o
 obj-y += opal.o
diff --git a/xen/arch/ppc/boot-of.c b/xen/arch/ppc/boot-of.c
deleted file mode 100644
index d6755ccc8e..0000000000
--- a/xen/arch/ppc/boot-of.c
+++ /dev/null
@@ -1,113 +0,0 @@ 
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/*
- * This file was derived from Xen 3.2's xen/arch/powerpc/boot_of.c,
- * originally licensed under GPL version 2 or later.
- *
- * Copyright IBM Corp. 2005, 2006, 2007
- * Copyright Raptor Engineering, LLC
- *
- * Authors: Jimi Xenidis <jimix@watson.ibm.com>
- *          Hollis Blanchard <hollisb@us.ibm.com>
- *          Shawn Anastasio <sanastasio@raptorengineering.com>
- */
-
-#include <xen/init.h>
-#include <xen/macros.h>
-#include <xen/stdarg.h>
-#include <xen/types.h>
-#include <asm/boot.h>
-#include <asm/byteorder.h>
-#include <asm/early_printk.h>
-
-/*
- * The Open Firmware client interface is called in 32-bit mode with the MMU off,
- * so any addresses passed to it must be physical addresses under 4GB.
- *
- * Since the client interface is only used during early boot before the MMU is on
- * and Xen itself was loaded by Open Firmware (and therefore resides below 4GB),
- * we can achieve the desired result with a simple cast to uint32_t.
- */
-#define ADDR(x) ((uint32_t)(unsigned long)(x))
-
-/* OF entrypoint*/
-static unsigned long __initdata of_vec;
-
-static int __initdata of_out;
-
-static int __init of_call(const char *service, uint32_t nargs, uint32_t nrets,
-                          int32_t rets[], ...)
-{
-    int rc;
-    va_list args;
-    unsigned int i;
-    struct of_service s;
-
-    s.ofs_service = cpu_to_be32(ADDR(service));
-    s.ofs_nargs = cpu_to_be32(nargs);
-    s.ofs_nrets = cpu_to_be32(nrets);
-
-    /* Copy all the params into the args array */
-    va_start(args, rets);
-
-    for ( i = 0; i < nargs; i++ )
-        s.ofs_args[i] = cpu_to_be32(va_arg(args, uint32_t));
-
-    va_end(args);
-
-    rc = enter_of(&s, of_vec);
-
-    /* Copy all return values to the output rets array */
-    for ( i = 0; i < nrets; i++ )
-        rets[i] = be32_to_cpu(s.ofs_args[i + nargs]);
-
-    return rc;
-}
-
-static int __init of_finddevice(const char *devspec)
-{
-    int32_t rets[1] = { OF_FAILURE };
-
-    of_call("finddevice", 1, ARRAY_SIZE(rets), rets, ADDR(devspec));
-    return rets[0];
-}
-
-static int __init of_getprop(int ph, const char *name, void *buf, uint32_t buflen)
-{
-    int32_t rets[1] = { OF_FAILURE };
-
-    of_call("getprop", 4, ARRAY_SIZE(rets), rets, ph, ADDR(name), ADDR(buf),
-            buflen);
-    return rets[0];
-}
-
-int __init of_write(int ih, const char *addr, uint32_t len)
-{
-    int32_t rets[1] = { OF_FAILURE };
-
-    of_call("write", 3, ARRAY_SIZE(rets), rets, ih, ADDR(addr), len);
-    return rets[0];
-}
-
-static void __init of_putchar(char c)
-{
-    if ( c == '\n' )
-    {
-        char buf = '\r';
-        of_write(of_out, &buf, 1);
-    }
-    of_write(of_out, &c, 1);
-}
-
-void __init boot_of_init(unsigned long vec)
-{
-    int bof_chosen;
-
-    of_vec = vec;
-
-    /* Get a handle to the default console */
-    bof_chosen = of_finddevice("/chosen");
-    of_getprop(bof_chosen, "stdout", &of_out, sizeof(of_out));
-    of_out = be32_to_cpu(of_out);
-
-    early_printk_init(of_putchar);
-}
diff --git a/xen/arch/ppc/include/asm/boot.h b/xen/arch/ppc/include/asm/boot.h
index 296539cd9e..d62c3ff6e0 100644
--- a/xen/arch/ppc/include/asm/boot.h
+++ b/xen/arch/ppc/include/asm/boot.h
@@ -4,25 +4,6 @@ 
 
 #include <xen/types.h>
 
-/*
- * OpenFirmware boot interfaces
- */
-
-enum {
-    OF_FAILURE = -1,
-    OF_SUCCESS = 0,
-};
-
-struct of_service {
-    __be32 ofs_service;
-    __be32 ofs_nargs;
-    __be32 ofs_nrets;
-    __be32 ofs_args[10];
-};
-
-int enter_of(struct of_service *args, unsigned long entry);
-void boot_of_init(unsigned long vec);
-
 /*
  * OPAL boot interfaces
  */
diff --git a/xen/arch/ppc/ppc64/Makefile b/xen/arch/ppc/ppc64/Makefile
index b9a91dc15f..5b88355bb2 100644
--- a/xen/arch/ppc/ppc64/Makefile
+++ b/xen/arch/ppc/ppc64/Makefile
@@ -1,3 +1,2 @@ 
 obj-y += head.o
-obj-y += of-call.o
 obj-y += opal-calls.o
diff --git a/xen/arch/ppc/ppc64/of-call.S b/xen/arch/ppc/ppc64/of-call.S
deleted file mode 100644
index 2a2e308f6b..0000000000
--- a/xen/arch/ppc/ppc64/of-call.S
+++ /dev/null
@@ -1,83 +0,0 @@ 
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/*
- * Adapted from Linux's arch/powerpc/kernel/entry_64.S, with the
- * following copyright notice:
- *
- *  PowerPC version
- *    Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
- *  Rewritten by Cort Dougan (cort@cs.nmt.edu) for PReP
- *    Copyright (C) 1996 Cort Dougan <cort@cs.nmt.edu>
- *  Adapted for Power Macintosh by Paul Mackerras.
- *  Low-level exception handlers and MMU support
- *  rewritten by Paul Mackerras.
- *    Copyright (C) 1996 Paul Mackerras.
- *  MPC8xx modifications Copyright (C) 1997 Dan Malek (dmalek@jlc.net).
- */
-
-#include <asm/asm-offsets.h>
-#include <asm/asm-defns.h>
-#include <asm/msr.h>
-
-/* size of minimum stack frame that can hold an entire cpu_user_regs struct */
-#define STACK_SWITCH_FRAME_SIZE UREGS_sizeof
-
-    .section .init.text, "ax", @progbits
-
-ENTRY(enter_of)
-    mflr    %r0
-    std     %r0, 16(%r1)
-    stdu    %r1, -STACK_SWITCH_FRAME_SIZE(%r1) /* Save SP and create stack space */
-
-    /*
-     * Because PROM is running in 32b mode, it clobbers the high order half
-     * of all registers that it saves.  We therefore save those registers
-     * PROM might touch to the stack.  (%r0, %r3-%r13 are caller saved)
-     */
-    SAVE_GPR(2, %r1)
-    SAVE_GPR(13, %r1)
-    SAVE_NVGPRS(%r1)
-    mfcr    %r10
-    mfmsr   %r11
-    std     %r10, UREGS_cr(%r1)
-    std     %r11, UREGS_msr(%r1)
-
-    /* Put PROM address in SRR0 */
-    mtsrr0  %r4
-
-    /* Setup our trampoline return addr in LR */
-    bcl     20, 31, .+4
-0:  mflr    %r4
-    addi    %r4, %r4, 1f - 0b
-    mtlr    %r4
-
-    /* Prepare a 32-bit mode big endian MSR */
-    LOAD_IMM64(%r12, MSR_SF | MSR_LE)
-    andc    %r11, %r11, %r12
-    mtsrr1  %r11
-    rfid
-
-1:  /* Return from OF */
-    FIXUP_ENDIAN
-
-    /* Just make sure that %r1 top 32 bits didn't get corrupt by OF */
-    rldicl  %r1, %r1, 0, 32
-
-    /* Restore the MSR (back to 64 bits) */
-    ld      %r0, UREGS_msr(%r1)
-    mtmsrd  %r0
-    isync
-
-    /* Restore other registers */
-    REST_GPR(2, %r1)
-    REST_GPR(13, %r1)
-    REST_NVGPRS(%r1)
-    ld      %r4, UREGS_cr(%r1)
-    mtcr    %r4
-
-    addi    %r1, %r1, STACK_SWITCH_FRAME_SIZE
-    ld      %r0, 16(%r1)
-    mtlr    %r0
-    blr
-
-    .size enter_of, . - enter_of
-    .type enter_of, %function
diff --git a/xen/arch/ppc/setup.c b/xen/arch/ppc/setup.c
index 0106e9c9da..3fc7705d9b 100644
--- a/xen/arch/ppc/setup.c
+++ b/xen/arch/ppc/setup.c
@@ -14,17 +14,12 @@  void __init noreturn start_xen(unsigned long r3, unsigned long r4,
 {
     if ( r5 )
     {
-        /* OpenFirmware boot protocol */
-        boot_of_init(r5);
+        /* Unsupported OpenFirmware boot protocol */
+        __builtin_trap();
     }
     else
     {
-        /*
-         * kexec boot protocol
-         *
-         * TODO: This currently assumes an OPAL/PowerNV system, but it's also
-         * possible to be kexec'd on an OF system.
-         */
+        /* kexec boot protocol */
         boot_opal_init((void *)r3);
     }