[OpenBIOS] r646 - trunk/openbios-devel/drivers
svn at openbios.org
svn at openbios.org
Sat Dec 19 00:38:08 CET 2009
Author: laurent
Date: 2009-12-19 00:38:08 +0100 (Sat, 19 Dec 2009)
New Revision: 646
Modified:
trunk/openbios-devel/drivers/escc.c
trunk/openbios-devel/drivers/macio.c
Log:
When running qemu in -M mac99 mode, interrupts failed on me all the
time.
I finally managed to track things down and it seems like we're missing
some properties in several devices.
While at it, I also bumped the ESCC IRQs to 0x24 / 0x25, as that's what
qemu now maps them on.
This patch (plus the qemu set) gets PPC64 Linux booting with
console=ttyPZ0.
Signed-off-by: Alexander Graf <agraf at suse.de>
Modified: trunk/openbios-devel/drivers/escc.c
===================================================================
--- trunk/openbios-devel/drivers/escc.c 2009-12-18 20:41:51 UTC (rev 645)
+++ trunk/openbios-devel/drivers/escc.c 2009-12-18 23:38:08 UTC (rev 646)
@@ -418,6 +418,11 @@
OLDWORLD(set_property(dnode, "AAPL,interrupts",
(char *)&props, 1 * sizeof(cell)));
+ props[0] = 0;
+ props[0] = (0x24) + offset;
+ NEWWORLD(set_property(dnode, "interrupts",
+ (char *)&props, 2 * sizeof(cell)));
+
device_end();
uart_init_line((unsigned char*)addr + IO_ESCC_OFFSET + offset * 0x20,
Modified: trunk/openbios-devel/drivers/macio.c
===================================================================
--- trunk/openbios-devel/drivers/macio.c 2009-12-18 20:41:51 UTC (rev 645)
+++ trunk/openbios-devel/drivers/macio.c 2009-12-18 23:38:08 UTC (rev 646)
@@ -145,6 +145,7 @@
static void
openpic_init(const char *path, uint32_t addr)
{
+ phandle_t target_node;
phandle_t dnode;
int props[2];
char buf[128];
@@ -154,7 +155,6 @@
fword("new-device");
push_str("interrupt-controller");
fword("device-name");
- fword("finish-device");
snprintf(buf, sizeof(buf), "%s/interrupt-controller", path);
dnode = find_dev(buf);
@@ -168,6 +168,21 @@
set_int_property(dnode, "#address-cells", 0);
set_property(dnode, "interrupt-controller", "", 0);
set_int_property(dnode, "clock-frequency", 4166666);
+
+ fword("finish-device");
+
+ if (is_newworld()) {
+ /* patch in interrupt parent */
+ dnode = find_dev(buf);
+ target_node = find_dev("/pci");
+ set_int_property(target_node, "interrupt-parent", dnode);
+
+ target_node = find_dev("/pci/mac-io/escc/ch-a");
+ set_int_property(target_node, "interrupt-parent", dnode);
+
+ target_node = find_dev("/pci/mac-io/escc/ch-b");
+ set_int_property(target_node, "interrupt-parent", dnode);
+ }
}
DECLARE_NODE(ob_macio, INSTALL_OPEN, sizeof(int), "Tmac-io");
More information about the OpenBIOS
mailing list