* [Qemu-devel] Re: [PATCH 0/2][RFC][PPC] openbios support
@ 2008-12-19 8:54 laurent
2008-12-19 10:23 ` Aurelien Jarno
0 siblings, 1 reply; 7+ messages in thread
From: laurent @ 2008-12-19 8:54 UTC (permalink / raw)
To: aurelien; +Cc: blauwirbel, qemu-devel
>Laurent Vivier a écrit :
>> These two patches allows to load an openbios elf image instead of an
>> openhackware image.
>>
>> [PATCH 1/2][RFC] Modify hw/ppc_oldword.c to use qemu_ram_alloc().
>> [PATCH 2/2][RFC] Load an OpenBios ELF image instead of OpenHackware binary
>
>Great job! We are closer to get rid of OpenHackware.
>
>However I have tried those patches with the latest SVN from OpenBios,
>and I am unable to get the machine booting. Do we need other patches for
>OpenBios or QEMU? It would be nice to make them available, even if they
>are not ready for merge.
Yes, we need more patches:
- for qemu, an nvram cleanup I already sent some month ago, and a little PCI cleanup patch.
- for openbios, at leat one patch to remap ROM in RAM.
I'm working hard to make them available, but currently, openbios is able to load Yaboot and Yaboot is able to load linux, but linux crashes when it is building its flattened device tree.
Regards,
Laurent
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Qemu-devel] Re: [PATCH 0/2][RFC][PPC] openbios support
2008-12-19 8:54 [Qemu-devel] Re: [PATCH 0/2][RFC][PPC] openbios support laurent
@ 2008-12-19 10:23 ` Aurelien Jarno
0 siblings, 0 replies; 7+ messages in thread
From: Aurelien Jarno @ 2008-12-19 10:23 UTC (permalink / raw)
To: laurent; +Cc: blauwirbel, qemu-devel
On Fri, Dec 19, 2008 at 09:54:54AM +0100, laurent@lvivier.info wrote:
> >Laurent Vivier a écrit :
> >> These two patches allows to load an openbios elf image instead of an
> >> openhackware image.
> >>
> >> [PATCH 1/2][RFC] Modify hw/ppc_oldword.c to use qemu_ram_alloc().
> >> [PATCH 2/2][RFC] Load an OpenBios ELF image instead of OpenHackware binary
> >
> >Great job! We are closer to get rid of OpenHackware.
> >
> >However I have tried those patches with the latest SVN from OpenBios,
> >and I am unable to get the machine booting. Do we need other patches for
> >OpenBios or QEMU? It would be nice to make them available, even if they
> >are not ready for merge.
>
> Yes, we need more patches:
>
> - for qemu, an nvram cleanup I already sent some month ago, and a little PCI cleanup patch.
Could you please resent it? I will apply it if everything is ok.
--
.''`. Aurelien Jarno | GPG: 1024D/F1BCDB73
: :' : Debian developer | Electrical Engineer
`. `' aurel32@debian.org | aurelien@aurel32.net
`- people.debian.org/~aurel32 | www.aurel32.net
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Qemu-devel] Re: [PATCH 0/2][RFC][PPC] openbios support
@ 2008-12-19 10:55 laurent
2008-12-19 17:50 ` Blue Swirl
0 siblings, 1 reply; 7+ messages in thread
From: laurent @ 2008-12-19 10:55 UTC (permalink / raw)
To: aurelien; +Cc: blauwirbel, qemu-devel
[-- Attachment #1: Type: text/plain, Size: 992 bytes --]
>On Fri, Dec 19, 2008 at 09:54:54AM +0100, laurent@lvivier.info wrote:
>> >Laurent Vivier a écrit :
>> >> These two patches allows to load an openbios elf image instead of an
>> >> openhackware image.
>> >>
>> >> [PATCH 1/2][RFC] Modify hw/ppc_oldword.c to use qemu_ram_alloc().
>> >> [PATCH 2/2][RFC] Load an OpenBios ELF image instead of OpenHackware
>binary
>> >
>> >Great job! We are closer to get rid of OpenHackware.
>> >
>> >However I have tried those patches with the latest SVN from OpenBios,
>> >and I am unable to get the machine booting. Do we need other patches for
>> >OpenBios or QEMU? It would be nice to make them available, even if they
>> >are not ready for merge.
>>
>> Yes, we need more patches:
>>
>> - for qemu, an nvram cleanup I already sent some month ago, and a little PCI
>cleanup patch.
>
>Could you please resent it? I will apply it if everything is ok.
Here it is.
Note that the NVRAM is stored into a file.
Regards,
Laurent
[-- Attachment #2: 0001-PowerMac-NVRAM-cleanup.patch --]
[-- Type: application/octet-stream, Size: 7403 bytes --]
>From 7d45ab963a98c4b26bd087dedd6714d9f3c2fd5e Mon Sep 17 00:00:00 2001
From: Laurent Vivier <Laurent@lvivier.info>
Date: Thu, 18 Dec 2008 22:08:00 +0100
Subject: [PATCH] PowerMac NVRAM cleanup
Signed-off-by: Laurent Vivier <Laurent@lvivier.info>
---
hw/mac_nvram.c | 122 ++++++++++++++++++++++++++++++++++++++++++-----------
hw/ppc_mac.h | 4 +-
hw/ppc_oldworld.c | 4 +-
3 files changed, 101 insertions(+), 29 deletions(-)
diff --git a/hw/mac_nvram.c b/hw/mac_nvram.c
index f608ace..95b249e 100644
--- a/hw/mac_nvram.c
+++ b/hw/mac_nvram.c
@@ -23,12 +23,17 @@
* THE SOFTWARE.
*/
#include "hw.h"
+#include "firmware_abi.h"
#include "ppc_mac.h"
+#define DEF_SYSTEM_SIZE 0xc10
+
struct MacIONVRAMState {
+ target_phys_addr_t mem_base;
target_phys_addr_t size;
+ QEMUFile *file;
int mem_index;
- uint8_t data[0x2000];
+ uint8_t data[NVRAM_SIZE];
};
/* Direct access to NVRAM */
@@ -38,7 +43,7 @@ uint32_t macio_nvram_read (void *opaque, uint32_t addr)
uint32_t ret;
// printf("%s: %p addr %04x\n", __func__, s, addr);
- if (addr < 0x2000)
+ if (addr < NVRAM_SIZE)
ret = s->data[addr];
else
ret = -1;
@@ -51,7 +56,7 @@ void macio_nvram_write (void *opaque, uint32_t addr, uint32_t val)
MacIONVRAMState *s = opaque;
// printf("%s: %p addr %04x val %02x\n", __func__, s, addr, val);
- if (addr < 0x2000)
+ if (addr < NVRAM_SIZE)
s->data[addr] = val;
}
@@ -61,9 +66,14 @@ static void macio_nvram_writeb (void *opaque,
{
MacIONVRAMState *s = opaque;
- addr = (addr >> 4) & 0x1fff;
+ addr = (addr >> 4) & (NVRAM_SIZE-1);
s->data[addr] = value;
// printf("macio_nvram_writeb %04x = %02x\n", addr, value);
+ if (s->file) {
+ qemu_fseek(s->file, addr, SEEK_SET);
+ qemu_put_byte(s->file, value);
+ qemu_fflush(s->file);
+ }
}
static uint32_t macio_nvram_readb (void *opaque, target_phys_addr_t addr)
@@ -71,7 +81,7 @@ static uint32_t macio_nvram_readb (void *opaque, target_phys_addr_t addr)
MacIONVRAMState *s = opaque;
uint32_t value;
- addr = (addr >> 4) & 0x1fff;
+ addr = (addr >> 4) & (NVRAM_SIZE-1);
value = s->data[addr];
// printf("macio_nvram_readb %04x = %02x\n", addr, value);
@@ -90,17 +100,32 @@ static CPUReadMemoryFunc *nvram_read[] = {
&macio_nvram_readb,
};
-MacIONVRAMState *macio_nvram_init (int *mem_index, target_phys_addr_t size)
+MacIONVRAMState *macio_nvram_init (int *mem_index, const char *filename)
{
MacIONVRAMState *s;
+ QEMUFile *file;
s = qemu_mallocz(sizeof(MacIONVRAMState));
if (!s)
return NULL;
- s->size = size;
+ s->size = NVRAM_SIZE << 4;
s->mem_index = cpu_register_io_memory(0, nvram_read, nvram_write, s);
*mem_index = s->mem_index;
+ /* Read current file */
+ file = qemu_fopen(filename, "rb");
+ if (file) {
+ /* Read nvram contents */
+ qemu_get_buffer(file, s->data, s->size >> 4);
+ qemu_fclose(file);
+ }
+ s->file = qemu_fopen(filename, "wb");
+ if (s->file) {
+ /* Write back contents, as 'wb' mode cleaned the file */
+ qemu_put_buffer(s->file, s->data, s->size >> 4);
+ qemu_fflush(s->file);
+ }
+
return s;
}
@@ -112,26 +137,73 @@ void macio_nvram_map (void *opaque, target_phys_addr_t mem_base)
cpu_register_physical_memory(mem_base, s->size, s->mem_index);
}
-static uint8_t nvram_chksum (const uint8_t *buf, int n)
+static void nvram_set_header(MacIONVRAMState *nvr,
+ uint32_t addr,
+ uint8_t signature,
+ uint16_t size,
+ const char* name)
+{
+ struct OpenBIOS_nvpart_v1 *nvpart = (struct OpenBIOS_nvpart_v1 *)(nvr->data + addr);
+
+ memset(nvpart, 0, sizeof(*nvpart));
+ nvpart->signature = signature;
+ strncpy(nvpart->name, name, sizeof(nvpart->name));
+ OpenBIOS_finish_partition(nvpart, size);
+}
+
+static void create_free_part(MacIONVRAMState *nvr, uint32_t addr, int size )
+{
+ nvram_set_header(nvr, addr, OPENBIOS_PART_FREE, size, "777777777777");
+}
+
+static int
+next_nvpart(MacIONVRAMState *nvr, uint32_t *addr, uint32_t end)
+{
+ struct OpenBIOS_nvpart_v1 *nvpart = (struct OpenBIOS_nvpart_v1 *)(nvr->data + *addr);
+ int len;
+
+ len = be16_to_cpu(nvpart->len);
+ if (len == 0)
+ return 1;
+
+ *addr = (*addr) + len;
+ if( *addr < end )
+ return 1;
+ if( *addr == end )
+ return 0;
+ return -1;
+}
+
+static int create_nv_part(MacIONVRAMState *nvr, uint32_t base, int max_size,
+ int signature, const char *name, int size )
{
- int sum, i;
- sum = 0;
- for(i = 0; i < n; i++)
- sum += buf[i];
- return (sum & 0xff) + (sum >> 8);
+ struct OpenBIOS_nvpart_v1 *nvpart;
+ uint32_t addr = base;
+ uint32_t end = base + max_size;
+ int len;
+
+ do {
+ nvpart = (struct OpenBIOS_nvpart_v1 *)(nvr->data + addr);
+
+ if (nvpart->signature != OPENBIOS_PART_FREE)
+ continue;
+
+ len = be16_to_cpu(nvpart->len) << 4;
+ if (len < size)
+ size = len;
+
+ nvram_set_header(nvr, addr, signature, size, name);
+ if (len > size)
+ create_free_part(nvr, addr + size, len - size);
+ return size;
+ } while (next_nvpart(nvr, &addr, end) > 0 );
+ return -1;
}
-/* set a free Mac OS NVRAM partition */
-void pmac_format_nvram_partition (MacIONVRAMState *nvr, int len)
+/* set a system Mac OS NVRAM partition */
+void pmac_format_nvram_partition (MacIONVRAMState *nvr)
{
- uint8_t *buf;
- char partition_name[12] = "wwwwwwwwwwww";
-
- buf = nvr->data;
- buf[0] = 0x7f; /* free partition magic */
- buf[1] = 0; /* checksum */
- buf[2] = len >> 8;
- buf[3] = len;
- memcpy(buf + 4, partition_name, 12);
- buf[1] = nvram_chksum(buf, 16);
+ create_free_part(nvr, 0, sizeof(nvr->data));
+ create_nv_part(nvr, 0, sizeof(nvr->data),
+ OPENBIOS_PART_SYSTEM, "common", DEF_SYSTEM_SIZE);
}
diff --git a/hw/ppc_mac.h b/hw/ppc_mac.h
index c833d17..343c91e 100644
--- a/hw/ppc_mac.h
+++ b/hw/ppc_mac.h
@@ -64,9 +64,9 @@ PCIBus *pci_pmac_init(qemu_irq *pic);
/* Mac NVRAM */
typedef struct MacIONVRAMState MacIONVRAMState;
-MacIONVRAMState *macio_nvram_init (int *mem_index, target_phys_addr_t size);
+MacIONVRAMState *macio_nvram_init (int *mem_index, const char *filename);
void macio_nvram_map (void *opaque, target_phys_addr_t mem_base);
-void pmac_format_nvram_partition (MacIONVRAMState *nvr, int len);
+void pmac_format_nvram_partition (MacIONVRAMState *nvr);
uint32_t macio_nvram_read (void *opaque, uint32_t addr);
void macio_nvram_write (void *opaque, uint32_t addr, uint32_t val);
diff --git a/hw/ppc_oldworld.c b/hw/ppc_oldworld.c
index 73cf4ab..eb9f33f 100644
--- a/hw/ppc_oldworld.c
+++ b/hw/ppc_oldworld.c
@@ -348,8 +348,8 @@ static void ppc_heathrow_init (ram_addr_t ram_size, int vga_ram_size,
adb_kbd_init(&adb_bus);
adb_mouse_init(&adb_bus);
- nvr = macio_nvram_init(&nvram_mem_index, 0x2000);
- pmac_format_nvram_partition(nvr, 0x2000);
+ nvr = macio_nvram_init(&nvram_mem_index, "g3bw_nvram");
+ pmac_format_nvram_partition(nvr);
dbdma_init(&dbdma_mem_index);
--
1.5.6.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] Re: [PATCH 0/2][RFC][PPC] openbios support
2008-12-19 10:55 laurent
@ 2008-12-19 17:50 ` Blue Swirl
2008-12-19 19:41 ` Laurent Vivier
0 siblings, 1 reply; 7+ messages in thread
From: Blue Swirl @ 2008-12-19 17:50 UTC (permalink / raw)
To: laurent@lvivier.info; +Cc: qemu-devel, aurelien
On 12/19/08, laurent@lvivier.info <laurent@lvivier.info> wrote:
> >On Fri, Dec 19, 2008 at 09:54:54AM +0100, laurent@lvivier.info wrote:
> >> >Laurent Vivier a écrit :
> >> >> These two patches allows to load an openbios elf image instead of an
> >> >> openhackware image.
> >> >>
> >> >> [PATCH 1/2][RFC] Modify hw/ppc_oldword.c to use qemu_ram_alloc().
> >> >> [PATCH 2/2][RFC] Load an OpenBios ELF image instead of OpenHackware
> >binary
> >> >
> >> >Great job! We are closer to get rid of OpenHackware.
> >> >
> >> >However I have tried those patches with the latest SVN from OpenBios,
> >> >and I am unable to get the machine booting. Do we need other patches for
> >> >OpenBios or QEMU? It would be nice to make them available, even if they
> >> >are not ready for merge.
> >>
> >> Yes, we need more patches:
> >>
> >> - for qemu, an nvram cleanup I already sent some month ago, and a little PCI
> >cleanup patch.
> >
> >Could you please resent it? I will apply it if everything is ok.
>
>
> Here it is.
>
> Note that the NVRAM is stored into a file.
One problem with this is that the file is written to current
directory, so running Qemu leaves these files everywhere. Maybe the
user should explicitly request using a NVRAM file and with that also
specify the location of it?
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Qemu-devel] Re: [PATCH 0/2][RFC][PPC] openbios support
2008-12-19 17:50 ` Blue Swirl
@ 2008-12-19 19:41 ` Laurent Vivier
0 siblings, 0 replies; 7+ messages in thread
From: Laurent Vivier @ 2008-12-19 19:41 UTC (permalink / raw)
To: Blue Swirl; +Cc: qemu-devel, aurelien
Le 19 déc. 08 à 18:50, Blue Swirl a écrit :
> On 12/19/08, laurent@lvivier.info <laurent@lvivier.info> wrote:
>>> On Fri, Dec 19, 2008 at 09:54:54AM +0100, laurent@lvivier.info
>>> wrote:
>>>>> Laurent Vivier a écrit :
>>>>>> These two patches allows to load an openbios elf image instead
>>>>>> of an
>>>>>> openhackware image.
>>>>>>
>>>>>> [PATCH 1/2][RFC] Modify hw/ppc_oldword.c to use qemu_ram_alloc().
>>>>>> [PATCH 2/2][RFC] Load an OpenBios ELF image instead of
>>>>>> OpenHackware
>>> binary
>>>>>
>>>>> Great job! We are closer to get rid of OpenHackware.
>>>>>
>>>>> However I have tried those patches with the latest SVN from
>>>>> OpenBios,
>>>>> and I am unable to get the machine booting. Do we need other
>>>>> patches for
>>>>> OpenBios or QEMU? It would be nice to make them available, even
>>>>> if they
>>>>> are not ready for merge.
>>>>
>>>> Yes, we need more patches:
>>>>
>>>> - for qemu, an nvram cleanup I already sent some month ago, and a
>>>> little PCI
>>> cleanup patch.
>>>
>>> Could you please resent it? I will apply it if everything is ok.
>>
>>
>> Here it is.
>>
>> Note that the NVRAM is stored into a file.
>
> One problem with this is that the file is written to current
> directory, so running Qemu leaves these files everywhere. Maybe the
> user should explicitly request using a NVRAM file and with that also
> specify the location of it?
Yes, I think it's a good idea, if no parameters is given the nvram is
only stored in memory. I rework this patch
Thank you,
Laurent
----------------------- Laurent Vivier ----------------------
"The best way to predict the future is to invent it."
- Alan Kay
^ permalink raw reply [flat|nested] 7+ messages in thread
[parent not found: <1229635267-16897-1-git-send-email-Laurent@lvivier.info>]
* [Qemu-devel] Re: [PATCH 0/2][RFC][PPC] openbios support
[not found] <1229635267-16897-1-git-send-email-Laurent@lvivier.info>
@ 2008-12-19 8:45 ` Aurelien Jarno
2008-12-20 7:54 ` François Revol
0 siblings, 1 reply; 7+ messages in thread
From: Aurelien Jarno @ 2008-12-19 8:45 UTC (permalink / raw)
To: Laurent Vivier; +Cc: Blue Swirl, qemu-devel
Laurent Vivier a écrit :
> These two patches allows to load an openbios elf image instead of an
> openhackware image.
>
> [PATCH 1/2][RFC] Modify hw/ppc_oldword.c to use qemu_ram_alloc().
> [PATCH 2/2][RFC] Load an OpenBios ELF image instead of OpenHackware binary
Great job! We are closer to get rid of OpenHackware.
However I have tried those patches with the latest SVN from OpenBios,
and I am unable to get the machine booting. Do we need other patches for
OpenBios or QEMU? It would be nice to make them available, even if they
are not ready for merge.
--
.''`. Aurelien Jarno | GPG: 1024D/F1BCDB73
: :' : Debian developer | Electrical Engineer
`. `' aurel32@debian.org | aurelien@aurel32.net
`- people.debian.org/~aurel32 | www.aurel32.net
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] Re: [PATCH 0/2][RFC][PPC] openbios support
2008-12-19 8:45 ` Aurelien Jarno
@ 2008-12-20 7:54 ` François Revol
0 siblings, 0 replies; 7+ messages in thread
From: François Revol @ 2008-12-20 7:54 UTC (permalink / raw)
To: qemu-devel
> Laurent Vivier a écrit :
> > These two patches allows to load an openbios elf image instead of
> > an
> > openhackware image.
> >
> > [PATCH 1/2][RFC] Modify hw/ppc_oldword.c to use qemu_ram_alloc().
> > [PATCH 2/2][RFC] Load an OpenBios ELF image instead of OpenHackware
> > binary
>
> Great job! We are closer to get rid of OpenHackware.
Cool!
Sadly I've lost access to the server I used to test ppc builds (stupid
ISP going bankrupt without warning), I'll have to make room on disks
here to resume work.
François.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2008-12-20 7:49 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-12-19 8:54 [Qemu-devel] Re: [PATCH 0/2][RFC][PPC] openbios support laurent
2008-12-19 10:23 ` Aurelien Jarno
-- strict thread matches above, loose matches on Subject: below --
2008-12-19 10:55 laurent
2008-12-19 17:50 ` Blue Swirl
2008-12-19 19:41 ` Laurent Vivier
[not found] <1229635267-16897-1-git-send-email-Laurent@lvivier.info>
2008-12-19 8:45 ` Aurelien Jarno
2008-12-20 7:54 ` François Revol
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).