[OpenBIOS] [PATCH] prep: change residual data model name to IBM PPS Model 6015
Programmingkid
programmingkidx at gmail.com
Sun Sep 9 20:46:10 CEST 2018
> On Sep 9, 2018, at 8:42 AM, Mark Cave-Ayland <mark.cave-ayland at ilande.co.uk> wrote:
>
> With the corresponding QEMU patches applied, it is now possible to change the
> reported firmware name to that of a real 40p machine and boot to a working
> userspace with the Linux sandalfoot zImage.
>
> Note that whilst guest OSs should be relying on residual data rather than the
> OF device tree to determine the hardware, we still update the interrupt
> properties to match the new code in QEMU for consistency.
>
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at ilande.co.uk>
> ---
> arch/ppc/qemu/context.c | 2 +-
> drivers/pci.c | 24 ++++++++++++++++++++----
> 2 files changed, 21 insertions(+), 5 deletions(-)
>
> diff --git a/arch/ppc/qemu/context.c b/arch/ppc/qemu/context.c
> index 06e0122..5815895 100644
> --- a/arch/ppc/qemu/context.c
> +++ b/arch/ppc/qemu/context.c
> @@ -111,7 +111,7 @@ static void *
> residual_build(uint32_t memsize, uint32_t load_base, uint32_t load_size)
> {
> residual_t *res;
> - const unsigned char model[] = "Qemu\0PPC\0";
> + const unsigned char model[] = "IBM PPS Model 6015\0";
> int i;
>
> res = malloc(sizeof(residual_t));
> diff --git a/drivers/pci.c b/drivers/pci.c
> index 8f97ae1..df6d9d0 100644
> --- a/drivers/pci.c
> +++ b/drivers/pci.c
> @@ -1986,10 +1986,26 @@ static phandle_t ob_pci_host_set_interrupt_map(phandle_t host)
> static void ob_pci_host_bus_interrupt(ucell dnode, u32 *props, int *ncells, u32 addr, u32 intno)
> {
> *ncells += pci_encode_phys_addr(props + *ncells, 0, 0, addr, 0, 0);
> - props[(*ncells)++] = intno;
> - props[(*ncells)++] = dnode;
> - props[(*ncells)++] = arch->irqs[((intno - 1) + (addr >> 11)) & 3];
> - props[(*ncells)++] = 1;
> +
> + if (is_oldworld() || is_newworld()) {
> + /* Mac machines */
> + props[(*ncells)++] = intno;
> + props[(*ncells)++] = dnode;
> + props[(*ncells)++] = arch->irqs[((intno - 1) + (addr >> 11)) & 3];
> + props[(*ncells)++] = 1;
> + } else {
> + /* PReP machines */
> + props[(*ncells)++] = intno;
> + props[(*ncells)++] = dnode;
> +
> + if (PCI_DEV(addr) == 1 && PCI_FN(addr) == 0) {
> + /* LSI SCSI has fixed routing */
> + props[(*ncells)++] = 2;
> + } else {
> + props[(*ncells)++] = arch->irqs[((intno - 1) + (addr >> 11)) & 1];
> + }
> + props[(*ncells)++] = 1;
> + }
> }
>
> #elif defined(CONFIG_SPARC64)
I was kind of hoping we had a is_40P() or is_IBM_PReP() function we could use instead of assuming/defaulting to PReP. This way if the user were to move the OpenBIOS binary to another version of QEMU, any differences in configuration would be handled better.
This is what I wish for:
if (is_oldworld() || isnewworld()) {
...
}
else if (is_IBM_6015()) {
...
}
else {
printf("Sorry but this computer model is not supported: %s\n", get_model_name());
}
More information about the OpenBIOS
mailing list