All of lore.kernel.org
 help / color / mirror / Atom feed
From: BALATON Zoltan <balaton@eik.bme.hu>
To: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Cc: Howard Spoelstra <hsp.cat7@gmail.com>,
	qemu-ppc@nongnu.org, qemu-devel@nongnu.org,
	David Gibson <david@gibson.dropbear.id.au>
Subject: Re: [PATCH v5 01/11] mac_oldworld: Allow loading binary ROM image
Date: Fri, 26 Jun 2020 23:57:16 +0200 (CEST)	[thread overview]
Message-ID: <alpine.BSF.2.22.395.2006262354340.64843@zero.eik.bme.hu> (raw)
In-Reply-To: <38a2c38b-4f2b-2306-1a10-ec111364c1a4@ilande.co.uk>

On Fri, 26 Jun 2020, Mark Cave-Ayland wrote:
> On 16/06/2020 14:47, BALATON Zoltan wrote:
>> The beige G3 Power Macintosh has a 4MB firmware ROM. Fix the size of
>> the rom region and fall back to loading a binary image with -bios if
>> loading ELF image failed. This allows testing emulation with a ROM
>> image from real hardware as well as using an ELF OpenBIOS image.
>>
>> Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
>> ---
>> v4: use load address from ELF to check if ROM is too big
>>
>>  hw/ppc/mac_oldworld.c | 29 ++++++++++++++++++++---------
>>  1 file changed, 20 insertions(+), 9 deletions(-)
>>
>> diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c
>> index f8c204ead7..baf3da6f90 100644
>> --- a/hw/ppc/mac_oldworld.c
>> +++ b/hw/ppc/mac_oldworld.c
>> @@ -59,6 +59,8 @@
>>  #define NDRV_VGA_FILENAME "qemu_vga.ndrv"
>>
>>  #define GRACKLE_BASE 0xfec00000
>> +#define PROM_BASE 0xffc00000
>> +#define PROM_SIZE (4 * MiB)
>>
>>  static void fw_cfg_boot_set(void *opaque, const char *boot_device,
>>                              Error **errp)
>> @@ -99,6 +101,7 @@ static void ppc_heathrow_init(MachineState *machine)
>>      SysBusDevice *s;
>>      DeviceState *dev, *pic_dev;
>>      BusState *adb_bus;
>> +    uint64_t bios_addr;
>>      int bios_size;
>>      unsigned int smp_cpus = machine->smp.cpus;
>>      uint16_t ppc_boot_device;
>> @@ -127,24 +130,32 @@ static void ppc_heathrow_init(MachineState *machine)
>>
>>      memory_region_add_subregion(sysmem, 0, machine->ram);
>>
>> -    /* allocate and load BIOS */
>> -    memory_region_init_rom(bios, NULL, "ppc_heathrow.bios", BIOS_SIZE,
>> +    /* allocate and load firmware ROM */
>> +    memory_region_init_rom(bios, NULL, "ppc_heathrow.bios", PROM_SIZE,
>>                             &error_fatal);
>> +    memory_region_add_subregion(sysmem, PROM_BASE, bios);
>>
>> -    if (bios_name == NULL)
>> +    if (!bios_name) {
>>          bios_name = PROM_FILENAME;
>> +    }
>>      filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
>> -    memory_region_add_subregion(sysmem, PROM_ADDR, bios);
>> -
>> -    /* Load OpenBIOS (ELF) */
>>      if (filename) {
>> -        bios_size = load_elf(filename, NULL, 0, NULL, NULL, NULL, NULL, NULL,
>> -                             1, PPC_ELF_MACHINE, 0, 0);
>> +        /* Load OpenBIOS (ELF) */
>> +        bios_size = load_elf(filename, NULL, NULL, NULL, NULL, &bios_addr,
>> +                             NULL, NULL, 1, PPC_ELF_MACHINE, 0, 0);
>> +        if (bios_size <= 0) {
>> +            /* or load binary ROM image */
>> +            bios_size = load_image_targphys(filename, PROM_BASE, PROM_SIZE);
>> +            bios_addr = PROM_BASE;
>> +        } else {
>> +            /* load_elf sets high 32 bits for some reason, strip those */
>> +            bios_addr &= 0xffffffffULL;
>
> This is certainly the approach I suggested, but this seems wrong - otherwise
> load_elf() would be broken for quite a few use cases.
>
>> +        }
>>          g_free(filename);
>>      } else {
>>          bios_size = -1;
>>      }
>> -    if (bios_size < 0 || bios_size > BIOS_SIZE) {
>> +    if (bios_size < 0 || bios_addr - PROM_BASE + bios_size > PROM_SIZE) {
>>          error_report("could not load PowerPC bios '%s'", bios_name);
>>          exit(1);
>>      }
>
> (goes and looks)
>
> This is similar to how the SPARC32 loader works and it seems fine there:
> https://git.qemu.org/?p=qemu.git;a=blob;f=hw/sparc/sun4m.c;h=ee52b5cbbcd22284384225c80ad50cdbd1415743;hb=HEAD#l721.
> Looks like you might have the wrong addr parameter here?

I don't get this. Can you explain more please what is wrong and what's the 
proposed solution?

Regards,
BALATON Zoltan


  reply	other threads:[~2020-06-26 22:32 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-16 13:47 [PATCH v5 00/11] Mac Old World ROM experiment BALATON Zoltan
2020-06-16 13:47 ` [PATCH v5 05/11] grackle: Set revision in PCI config to match hardware BALATON Zoltan
2020-06-26 12:51   ` Mark Cave-Ayland
2020-06-16 13:47 ` [PATCH v5 09/11] macio: Add dummy screamer register area BALATON Zoltan
2020-06-26 13:12   ` Mark Cave-Ayland
2020-06-28 12:26     ` BALATON Zoltan
2020-06-28 14:08       ` BALATON Zoltan
2020-06-28 14:29         ` BALATON Zoltan
2020-06-28 14:53           ` BALATON Zoltan
2020-06-28 15:04             ` BALATON Zoltan
2020-06-16 13:47 ` [PATCH v5 08/11] mac_oldworld: Add machine ID register BALATON Zoltan
2020-06-26 13:07   ` Mark Cave-Ayland
2020-06-16 13:47 ` [PATCH v5 10/11] WIP macio/cuda: Attempt to add i2c support BALATON Zoltan
2020-06-28 12:37   ` [RFC PATCH] " BALATON Zoltan
2020-06-16 13:47 ` [PATCH v5 06/11] mac_oldworld: Rename ppc_heathrow_reset to ppc_heathrow_cpu_reset BALATON Zoltan
2020-06-26 12:55   ` Mark Cave-Ayland
2020-06-26 22:22     ` BALATON Zoltan
2020-06-16 13:47 ` [PATCH v5 07/11] mac_oldworld: Map macio to expected address at reset BALATON Zoltan
2020-06-26 13:03   ` Mark Cave-Ayland
2020-06-26 22:25     ` BALATON Zoltan
2020-06-16 13:47 ` [PATCH v5 02/11] mac_newworld: Allow loading binary ROM image BALATON Zoltan
2020-06-26 12:42   ` Mark Cave-Ayland
2020-06-16 13:47 ` [PATCH v5 11/11] mac_oldworld: Add SPD data to cover RAM BALATON Zoltan
2020-06-16 13:47 ` [PATCH v5 01/11] mac_oldworld: Allow loading binary ROM image BALATON Zoltan
2020-06-26 12:38   ` Mark Cave-Ayland
2020-06-26 21:57     ` BALATON Zoltan [this message]
2020-06-16 13:47 ` [PATCH v5 04/11] mac_oldworld: Drop some variables BALATON Zoltan
2020-06-26 12:46   ` Mark Cave-Ayland
2020-06-16 13:47 ` [PATCH v5 03/11] mac_oldworld: Drop a variable, use get_system_memory() directly BALATON Zoltan
2020-06-26 12:42   ` Mark Cave-Ayland
2020-06-26 10:21 ` [PATCH v5 00/11] Mac Old World ROM experiment BALATON Zoltan
2020-06-26 12:23   ` Mark Cave-Ayland
2020-06-28 18:34     ` BALATON Zoltan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.BSF.2.22.395.2006262354340.64843@zero.eik.bme.hu \
    --to=balaton@eik.bme.hu \
    --cc=david@gibson.dropbear.id.au \
    --cc=hsp.cat7@gmail.com \
    --cc=mark.cave-ayland@ilande.co.uk \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.