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

Mark Cave-Ayland mark.cave-ayland at ilande.co.uk
Sun May 4 23:48:22 CEST 2014


On 21/04/14 21:58, BALATON Zoltan wrote:

> 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
> v3: fixed a typo in the device type of the pmu node (via-pmu instead of via_pmu)
>
> ---
> 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);

This looks reasonable to me. Alex, are you able to apply or Ack as 
appropriate?


ATB,

Mark.




More information about the OpenBIOS mailing list