Patchwork [15/25] PPC: e500: dt: create /soc8544 node dynamically

login
register
mail settings
Submitter Alexander Graf
Date May 30, 2012, 11 a.m.
Message ID <1338375646-15064-16-git-send-email-agraf@suse.de>
Download mbox | patch
Permalink /patch/161961/
State New
Headers show

Comments

Alexander Graf - May 30, 2012, 11 a.m.
Signed-off-by: Alexander Graf <agraf@suse.de>
---
 hw/ppce500_mpc8544ds.c |   17 +++++++++++++++++
 pc-bios/mpc8544ds.dts  |    9 ---------
 2 files changed, 17 insertions(+), 9 deletions(-)
Scott Wood - May 31, 2012, 9:58 p.m.
On 05/30/2012 06:00 AM, Alexander Graf wrote:
> @@ -179,6 +182,20 @@ static int mpc8544_load_device_tree(CPUPPCState *env,
>          }
>      }
>  
> +    /* XXX These should go into their respective devices' code */
> +    sprintf(soc, "/soc8544@%x", MPC8544_CCSRBAR_BASE);

This should just be "/soc@%x" (something like "ccsr@%x" or "immr@%x"
would be better, but hasn't really caught on yet).  "soc8544"-type names
have been discouraged for a while now.

> +    qemu_devtree_setprop_string(fdt, soc, "compatible", "simple-bus");

It should also have a compatible of "fsl,mpc8544-immr".

> +    qemu_devtree_setprop_cell2(fdt, soc, "reg", MPC8544_CCSRBAR_BASE,
> +                               MPC8544_CCSRBAR_REGSIZE);

We don't need reg here anymore.

I realize this was probably meant to produce the same output as the
current device tree, but if we're introducing new code to generate this
stuff we should follow current best practices.

-Scott
Alexander Graf - May 31, 2012, 10:15 p.m.
On 31.05.2012, at 23:58, Scott Wood wrote:

> On 05/30/2012 06:00 AM, Alexander Graf wrote:
>> @@ -179,6 +182,20 @@ static int mpc8544_load_device_tree(CPUPPCState *env,
>>         }
>>     }
>> 
>> +    /* XXX These should go into their respective devices' code */
>> +    sprintf(soc, "/soc8544@%x", MPC8544_CCSRBAR_BASE);
> 
> This should just be "/soc@%x" (something like "ccsr@%x" or "immr@%x"
> would be better, but hasn't really caught on yet).  "soc8544"-type names
> have been discouraged for a while now.
> 
>> +    qemu_devtree_setprop_string(fdt, soc, "compatible", "simple-bus");
> 
> It should also have a compatible of "fsl,mpc8544-immr".
> 
>> +    qemu_devtree_setprop_cell2(fdt, soc, "reg", MPC8544_CCSRBAR_BASE,
>> +                               MPC8544_CCSRBAR_REGSIZE);
> 
> We don't need reg here anymore.
> 
> I realize this was probably meant to produce the same output as the
> current device tree, but if we're introducing new code to generate this
> stuff we should follow current best practices.

Good point. I guess we should clean that up as a patch at the end of the series though. First convert the state 1:1 over, then improve it.


Alex

Patch

diff --git a/hw/ppce500_mpc8544ds.c b/hw/ppce500_mpc8544ds.c
index 63515bb..5ff2d24 100644
--- a/hw/ppce500_mpc8544ds.c
+++ b/hw/ppce500_mpc8544ds.c
@@ -43,6 +43,8 @@ 
 #define RAM_SIZES_ALIGN            (64UL << 20)
 
 #define MPC8544_CCSRBAR_BASE       0xE0000000
+#define MPC8544_CCSRBAR_REGSIZE    0x00001000
+#define MPC8544_CCSRBAR_SIZE       0x00100000
 #define MPC8544_MPIC_REGS_BASE     (MPC8544_CCSRBAR_BASE + 0x40000)
 #define MPC8544_SERIAL0_REGS_BASE  (MPC8544_CCSRBAR_BASE + 0x4500)
 #define MPC8544_SERIAL1_REGS_BASE  (MPC8544_CCSRBAR_BASE + 0x4600)
@@ -78,6 +80,7 @@  static int mpc8544_load_device_tree(CPUPPCState *env,
     int i;
     char compatible[] = "MPC8544DS\0MPC85xxDS";
     char model[] = "MPC8544DS";
+    char soc[128];
 
     filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, BINARY_DEVICE_TREE_FILE);
     if (!filename) {
@@ -179,6 +182,20 @@  static int mpc8544_load_device_tree(CPUPPCState *env,
         }
     }
 
+    /* XXX These should go into their respective devices' code */
+    sprintf(soc, "/soc8544@%x", MPC8544_CCSRBAR_BASE);
+    qemu_devtree_add_subnode(fdt, soc);
+    qemu_devtree_setprop_string(fdt, soc, "device_type", "soc");
+    qemu_devtree_setprop_string(fdt, soc, "compatible", "simple-bus");
+    qemu_devtree_setprop_cell(fdt, soc, "#address-cells", 1);
+    qemu_devtree_setprop_cell(fdt, soc, "#size-cells", 1);
+    qemu_devtree_setprop_cell3(fdt, soc, "ranges", 0x0, MPC8544_CCSRBAR_BASE,
+                               MPC8544_CCSRBAR_SIZE);
+    qemu_devtree_setprop_cell2(fdt, soc, "reg", MPC8544_CCSRBAR_BASE,
+                               MPC8544_CCSRBAR_REGSIZE);
+    /* XXX should contain a reasonable value */
+    qemu_devtree_setprop_cell(fdt, soc, "bus-frequency", 0);
+
     ret = rom_add_blob_fixed(BINARY_DEVICE_TREE_FILE, fdt, fdt_size, addr);
     if (ret < 0) {
         goto out;
diff --git a/pc-bios/mpc8544ds.dts b/pc-bios/mpc8544ds.dts
index 1eac8ef..01b53ba 100644
--- a/pc-bios/mpc8544ds.dts
+++ b/pc-bios/mpc8544ds.dts
@@ -18,15 +18,6 @@ 
 	};
 
 	soc8544@e0000000 {
-		#address-cells = <1>;
-		#size-cells = <1>;
-		device_type = "soc";
-		compatible = "simple-bus";
-
-		ranges = <0x0 0xe0000000 0x100000>;
-		reg = <0xe0000000 0x1000>;	// CCSRBAR 1M
-		bus-frequency = <0>;		// Filled out by uboot.
-
 		serial0: serial@4500 {
 			cell-index = <0>;
 			device_type = "serial";