[OpenBIOS] [PATCH v2] Updated some device tree properties to match names used by Apple for compatibility with MorphOS

BALATON Zoltan balaton at eik.bme.hu
Tue Apr 15 13:04:20 CEST 2014


The names of some device tree properties are different on old world and 
new world Mac hardware and the name of the root node is always 
"device-tree" on Apple's OpenFirmware implementation. MorphOS on Apple 
hardware expects these names to find these devices.

Signed-off-by: BALATON Zoltan <balaton at eik.bme.hu>
---

v2: improved commit log

---
Index: openbios-devel/arch/ppc/qemu/init.c
===================================================================
--- openbios-devel/arch/ppc/qemu/init.c	(revision 1286)
+++ openbios-devel/arch/ppc/qemu/init.c	(working copy)
@@ -702,6 +732,12 @@
     push_str("/");
     fword("find-device");

+    /* Apple calls the root node device-tree */
+    if (is_apple()) {
+        push_str("device-tree");
+        fword("device-name");
+    }
+
     switch(machine_id) {
     case ARCH_HEATHROW:	/* OldWorld */

Index: openbios-devel/drivers/cuda.c
===================================================================
--- openbios-devel/drivers/cuda.c	(revision 1286)
+++ openbios-devel/drivers/cuda.c	(working copy)
@@ -184,32 +184,33 @@
 	phandle_t ph=get_cur_dev();
 	int props[2];

-	push_str("via-cuda");
+	push_str((is_oldworld() ? "via-cuda" : "via_pmu"));
 	fword("device-type");

 	set_int_property(ph, "#address-cells", 1);
         set_int_property(ph, "#size-cells", 0);

-	set_property(ph, "compatible", "cuda", 5);
-
 	props[0] = __cpu_to_be32(IO_CUDA_OFFSET);
 	props[1] = __cpu_to_be32(IO_CUDA_SIZE);

 	set_property(ph, "reg", (char *)&props, sizeof(props));

-	/* on newworld machines the cuda is on interrupt 0x19 */
+	if (is_oldworld()) {
+		set_property(ph, "compatible", "cuda", 5);
+		/* we emulate an oldworld hardware, so we must use
+		 * non-standard oldworld property (needed by linux 2.6.18)
+		 */
+		set_int_property(ph, "AAPL,interrupts", 0x12);
+	} else {
+		set_property(ph, "compatible", "pmu", 4);
+		/* on newworld machines the cuda is on interrupt 0x19 */

-	props[0] = 0x19;
-	props[1] = 0;
-	NEWWORLD(set_property(ph, "interrupts", (char *)props, sizeof(props)));
-	NEWWORLD(set_int_property(ph, "#interrupt-cells", 2));
+		props[0] = 0x19;
+		props[1] = 0;
+		set_property(ph, "interrupts", (char *)&props, sizeof(props));
+		set_int_property(ph, "#interrupt-cells", 2);
+	}

-	/* we emulate an oldworld hardware, so we must use
-	 * non-standard oldworld property (needed by linux 2.6.18)
-	 */
-
-	OLDWORLD(set_int_property(ph, "AAPL,interrupts", 0x12));
-
         bind_func("ppc32-reset-all", ppc32_reset_all);
         push_str("' ppc32-reset-all to reset-all");
         fword("eval");
@@ -380,7 +381,8 @@

 	ph = find_dev(buf);
 	set_property(ph, "device_type", "power-mgt", 10);
-	set_property(ph, "compatible", "power-mgt", 10);
+	OLDWORLD(set_property(ph, "compatible", "power-mgt", 10));
+	NEWWORLD(set_property(ph, "compatible", "via-pmu-99", 11));
 }

 cuda_t *cuda_init (const char *path, phys_addr_t base)
@@ -395,11 +397,13 @@
 	if (cuda == NULL)
 	    return NULL;

-	snprintf(buf, sizeof(buf), "%s/via-cuda", path);
+	OLDWORLD(snprintf(buf, sizeof(buf), "%s/via-cuda", path));
+	NEWWORLD(snprintf(buf, sizeof(buf), "%s/via-pmu", path));
 	REGISTER_NAMED_NODE(ob_cuda, buf);

 	aliases = find_dev("/aliases");
-	set_property(aliases, "via-cuda", buf, strlen(buf) + 1);
+	OLDWORLD(set_property(aliases, "via-cuda", buf, strlen(buf) + 1));
+	NEWWORLD(set_property(aliases, "via-pmu", buf, strlen(buf) + 1));

 	cuda->base = base;
 	cuda_writeb(cuda, B, cuda_readb(cuda, B) | TREQ | TIP);



More information about the OpenBIOS mailing list