* [Qemu-devel] [PATCH] fix PPC OpenHackWare for Linux 2.6
@ 2008-05-06 16:00 René Rebe
2008-05-06 16:30 ` Laurent Vivier
0 siblings, 1 reply; 2+ messages in thread
From: René Rebe @ 2008-05-06 16:00 UTC (permalink / raw)
To: qemu-devel; +Cc: Jocelyn Mayer
Hi all,
after quite some debugging thru the early startup code of Linux 2.6
I fixed some issues in the OpenHackWare "BIOS" for PPC emulation.
The diff below is against the Qemu pc-bios/ohw.diff, I can also
provide the resulting binary if interested.
First I fixed the linker script to actually work at all (actually
I also installed an old toolchain, just to find out that even that
one would not link OHW, ...
Second, Linux 2.6 flatten_device_tree stuff in arch/powerpc/kernel/prom_init.c
check for a return value of 1, as I do not have the IEEE spec on my desk
I assumed it means success, and with the change the flattened device
tree is no longer empty, helping a great deal continuing to boot ...
Third, when selecting a core99 machine, Linux assumes to find an NVRAM,
and panics in some init_timer if there isn't one. Though a core99 machine
does not yet work perfectly, further investigation to be done.
Linewise the FB CLUT is with Linux 2.6 has some issue and the FB thus
shows false colors, but good enough to work with for now.
Oh, and last but not least with a self built prom, I hit this
"error booting from CD-ROM bug, that Jocelyn hacked around in
r3309. As that was just a binary only blob fix and there is no
newer version of OHW I just commented out the "return on error"
which allowed to boot CD images on my side.
As this is the first nightly track thru the guts of Qemu any
comment welcome:
--- qemu-svn/pc-bios/ohw.diff (revision 4353)
+++ qemu-svn/pc-bios/ohw.diff (working copy)
@@ -1,3 +1,19 @@
+Make it link at al.
+
+ - Rene Rebe <rene@exactcode.de>
+
+--- OpenHackWare-release-0.4/src/main.ld 2005-03-31 09:23:33.000000000 +0200
++++ OpenHackWare-release-0.4-hacked/src/main.ld 2008-05-06 11:23:29.000000000 +0200
+@@ -49,7 +49,7 @@
+ _sdata_end = . ;
+ . = ALIGN(4) ;
+ _ro_start = . ;
+- .rodata : { *(.rodata) } > bios
++ .rodata : { *(.rodata*) } > bios
+ _ro_end = . ;
+ . = ALIGN(4) ;
+ _RTAS_start = .;
+
diff -wruN --exclude '*~' --exclude '*.o' --exclude '*.bin' --exclude '*.out' --exclude mkdiff OpenHackWare-release-0.4.org/src/bios.h OpenHackWare-release-0.4/src/bios.h
--- OpenHackWare-release-0.4.org/src/bios.h 2005-04-06 23:20:22.000000000 +0200
+++ OpenHackWare-release-0.4/src/bios.h 2005-07-07 01:10:20.000000000 +0200
@@ -748,24 +764,14 @@
{
/* Hack taken 'as-is' from PearPC */
unsigned char info[] = {
-@@ -1596,7 +1627,9 @@
- OF_node_put(OF_env, brom);
+@@ -1596,6 +1627,7 @@
OF_node_put(OF_env, rom);
}
-+#if 0
/* From here, hardcoded hacks to get a Mac-like machine */
-+ /* XXX: Core99 does not seem to like this NVRAM tree */
++ /* XXX: Not yet perfect, but Linux 2.6 does oops on boot on Core99 without NVRAM node */
/* "/nvram@fff04000" node */
{
OF_regprop_t regs;
-@@ -1617,6 +1650,7 @@
- OF_prop_int_new(OF_env, chs, "nvram", OF_pack_handle(OF_env, nvr));
- OF_node_put(OF_env, nvr);
- }
-+#endif
- /* "/pseudo-hid" : hid emulation as Apple does */
- {
- OF_node_t *hid;
@@ -1663,7 +1697,27 @@
}
OF_node_put(OF_env, hid);
@@ -1841,3 +1847,40 @@
case ARCH_MAC99:
/* We are supposed to have 3 host bridges:
* - the uninorth AGP bridge at 0xF0000000
+
+
+The 2.6 Linux kernel checks for 1, as I do not have the IEEE spec on
+my desk I can only guess it should return 1 on success, not the
+string length.
+
+ - Rene Rebe <rene@exactcode.de>
+
+--- OpenHackWare-release-0.4/src/of.c 2005-04-06 23:17:26.000000000 +0200
++++ OpenHackWare-release-0.4-hacked/src/of.c 2008-05-06 14:50:48.000000000 +0200
+@@ -3841,7 +4061,7 @@
+ OF_DPRINTF("Return property name [%s]\n", next->name);
+ OF_sts(next_name, (void *)(next->name));
+ OF_DUMP_STRING(OF_env, next_name);
+- pushd(OF_env, strlen(next->name) + 1);
++ pushd(OF_env, 1); /* ReneR: Linux 2.6 flatten_device_tree */
+ }
+ }
+ }
+
+
+In qemu r3309 j_mayer did some "Quickly hack PowerPC BIOS able to boot
+on CDROM again.", as I did not feel like disassemble to find out this
+worked for me for now.
+
+ - Rene Rebe <rene@exactcode.de>
+
+--- OpenHackWare-release-0.4/src/bloc.c 2005-04-06 23:21:00.000000000 +0200
++++ OpenHackWare-release-0.4-hacked/src/bloc.c 2008-05-06 14:20:10.000000000 +0200
+@@ -1021,7 +1038,7 @@
+ status = ide_port_read(bd, 0x07);
+ if (status != 0x08) {
+ ERROR("ATAPI TEST_UNIT_READY : status %0x != 0x08\n", status);
+- return -1;
++ /*return -1;*/ /* fails to boot from cdrom? */
+ }
+ for (i = 0; i < 3; i++) {
--
René Rebe - ExactCODE GmbH - Europe, Germany, Berlin
http://exactcode.de | http://t2-project.org | http://rene.rebe.name
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [Qemu-devel] [PATCH] fix PPC OpenHackWare for Linux 2.6
2008-05-06 16:00 [Qemu-devel] [PATCH] fix PPC OpenHackWare for Linux 2.6 René Rebe
@ 2008-05-06 16:30 ` Laurent Vivier
0 siblings, 0 replies; 2+ messages in thread
From: Laurent Vivier @ 2008-05-06 16:30 UTC (permalink / raw)
To: qemu-devel; +Cc: Jocelyn Mayer, René Rebe
Nice work,
Le mardi 06 mai 2008 à 18:00 +0200, René Rebe a écrit :
> Hi all,
>
> after quite some debugging thru the early startup code of Linux 2.6
> I fixed some issues in the OpenHackWare "BIOS" for PPC emulation.
>
> The diff below is against the Qemu pc-bios/ohw.diff, I can also
> provide the resulting binary if interested.
>
> First I fixed the linker script to actually work at all (actually
> I also installed an old toolchain, just to find out that even that
> one would not link OHW, ...
>
> Second, Linux 2.6 flatten_device_tree stuff in arch/powerpc/kernel/prom_init.c
> check for a return value of 1, as I do not have the IEEE spec on my desk
> I assumed it means success, and with the change the flattened device
> tree is no longer empty, helping a great deal continuing to boot ...
>
> Third, when selecting a core99 machine, Linux assumes to find an NVRAM,
> and panics in some init_timer if there isn't one. Though a core99 machine
> does not yet work perfectly, further investigation to be done.
>
> Linewise the FB CLUT is with Linux 2.6 has some issue and the FB thus
> shows false colors, but good enough to work with for now.
>
> Oh, and last but not least with a self built prom, I hit this
> "error booting from CD-ROM bug, that Jocelyn hacked around in
> r3309. As that was just a binary only blob fix and there is no
> newer version of OHW I just commented out the "return on error"
> which allowed to boot CD images on my side.
>
> As this is the first nightly track thru the guts of Qemu any
> comment welcome:
>
> --- qemu-svn/pc-bios/ohw.diff (revision 4353)
> +++ qemu-svn/pc-bios/ohw.diff (working copy)
> @@ -1,3 +1,19 @@
> +Make it link at al.
> +
> + - Rene Rebe <rene@exactcode.de>
> +
> +--- OpenHackWare-release-0.4/src/main.ld 2005-03-31 09:23:33.000000000 +0200
> ++++ OpenHackWare-release-0.4-hacked/src/main.ld 2008-05-06 11:23:29.000000000 +0200
> +@@ -49,7 +49,7 @@
> + _sdata_end = . ;
> + . = ALIGN(4) ;
> + _ro_start = . ;
> +- .rodata : { *(.rodata) } > bios
> ++ .rodata : { *(.rodata*) } > bios
> + _ro_end = . ;
> + . = ALIGN(4) ;
> + _RTAS_start = .;
> +
I think you should also remove .rodata.str1.4 from .data section:
@@ -35,7 +35,7 @@
.OpenFirmware : { *(.OpenFirmware) } > bios
. = ALIGN(4) ;
_data_start = . ;
- .data : { *(.data) *(.rodata.str1.4) } > bios
+ .data : { *(.data) } > bios
_data_end = . ;
. = ALIGN(4) ;
_OF_vars_start = . ;
> diff -wruN --exclude '*~' --exclude '*.o' --exclude '*.bin' --exclude '*.out' --exclude mkdiff OpenHackWare-release-0.4.org/src/bios.h OpenHackWare-release-0.4/src/bios.h
> --- OpenHackWare-release-0.4.org/src/bios.h 2005-04-06 23:20:22.000000000 +0200
> +++ OpenHackWare-release-0.4/src/bios.h 2005-07-07 01:10:20.000000000 +0200
> @@ -748,24 +764,14 @@
> {
> /* Hack taken 'as-is' from PearPC */
> unsigned char info[] = {
> -@@ -1596,7 +1627,9 @@
> - OF_node_put(OF_env, brom);
> +@@ -1596,6 +1627,7 @@
> OF_node_put(OF_env, rom);
> }
> -+#if 0
> /* From here, hardcoded hacks to get a Mac-like machine */
> -+ /* XXX: Core99 does not seem to like this NVRAM tree */
> ++ /* XXX: Not yet perfect, but Linux 2.6 does oops on boot on Core99 without NVRAM node */
> /* "/nvram@fff04000" node */
> {
> OF_regprop_t regs;
> -@@ -1617,6 +1650,7 @@
> - OF_prop_int_new(OF_env, chs, "nvram", OF_pack_handle(OF_env, nvr));
> - OF_node_put(OF_env, nvr);
> - }
> -+#endif
> - /* "/pseudo-hid" : hid emulation as Apple does */
> - {
> - OF_node_t *hid;
> @@ -1663,7 +1697,27 @@
> }
> OF_node_put(OF_env, hid);
> @@ -1841,3 +1847,40 @@
> case ARCH_MAC99:
> /* We are supposed to have 3 host bridges:
> * - the uninorth AGP bridge at 0xF0000000
> +
> +
> +The 2.6 Linux kernel checks for 1, as I do not have the IEEE spec on
> +my desk I can only guess it should return 1 on success, not the
> +string length.
> +
> + - Rene Rebe <rene@exactcode.de>
> +
> +--- OpenHackWare-release-0.4/src/of.c 2005-04-06 23:17:26.000000000 +0200
> ++++ OpenHackWare-release-0.4-hacked/src/of.c 2008-05-06 14:50:48.000000000 +0200
> +@@ -3841,7 +4061,7 @@
> + OF_DPRINTF("Return property name [%s]\n", next->name);
> + OF_sts(next_name, (void *)(next->name));
> + OF_DUMP_STRING(OF_env, next_name);
> +- pushd(OF_env, strlen(next->name) + 1);
> ++ pushd(OF_env, 1); /* ReneR: Linux 2.6 flatten_device_tree */
> + }
> + }
> + }
> +
> +
> +In qemu r3309 j_mayer did some "Quickly hack PowerPC BIOS able to boot
> +on CDROM again.", as I did not feel like disassemble to find out this
> +worked for me for now.
> +
> + - Rene Rebe <rene@exactcode.de>
> +
> +--- OpenHackWare-release-0.4/src/bloc.c 2005-04-06 23:21:00.000000000 +0200
> ++++ OpenHackWare-release-0.4-hacked/src/bloc.c 2008-05-06 14:20:10.000000000 +0200
> +@@ -1021,7 +1038,7 @@
> + status = ide_port_read(bd, 0x07);
> + if (status != 0x08) {
> + ERROR("ATAPI TEST_UNIT_READY : status %0x != 0x08\n", status);
> +- return -1;
> ++ /*return -1;*/ /* fails to boot from cdrom? */
> + }
> + for (i = 0; i < 3; i++) {
>
Regards,
Laurent
--
------------- Laurent.Vivier@bull.net ---------------
"The best way to predict the future is to invent it."
- Alan Kay
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2008-05-06 16:30 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-06 16:00 [Qemu-devel] [PATCH] fix PPC OpenHackWare for Linux 2.6 René Rebe
2008-05-06 16:30 ` Laurent Vivier
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).