From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39464) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VW7ZB-0001X9-40 for qemu-devel@nongnu.org; Tue, 15 Oct 2013 12:33:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VW7Z4-0002cM-51 for qemu-devel@nongnu.org; Tue, 15 Oct 2013 12:33:53 -0400 From: =?UTF-8?q?Andreas=20F=C3=A4rber?= Date: Tue, 15 Oct 2013 18:33:37 +0200 Message-Id: <1381854817-19552-3-git-send-email-afaerber@suse.de> In-Reply-To: <1381854817-19552-1-git-send-email-afaerber@suse.de> References: <1381854817-19552-1-git-send-email-afaerber@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH v3 2/2] spapr: Use DeviceClass::fw_name for device tree CPU node List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: aik@ozlabs.ru, Alexander Graf , "open list:sPAPR" , =?UTF-8?q?Andreas=20F=C3=A4rber?= , Prerna Saxena Instead of relying on cpu_model, obtain the device tree node label per CPU. Use DeviceClass::fw_name as source. Whenever DeviceClass::fw_name is unknown, default to "PowerPC,UNKNOWN". As a consequence, spapr_fixup_cpu_dt() can operate on each CPU's fw_name, obsoleting sPAPREnvironment::cpu_model, and spapr_create_fdt_skel() can drop its cpu_model argument. Signed-off-by: Prerna Saxena Signed-off-by: Andreas F=C3=A4rber --- hw/ppc/spapr.c | 26 ++++++-------------------- include/hw/ppc/spapr.h | 1 - target-ppc/translate_init.c | 2 ++ 3 files changed, 8 insertions(+), 21 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 004184d..6c00a8f 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -185,9 +185,8 @@ static int spapr_fixup_cpu_dt(void *fdt, sPAPREnviron= ment *spapr) int smt =3D kvmppc_smt_threads(); uint32_t pft_size_prop[] =3D {0, cpu_to_be32(spapr->htab_shift)}; =20 - assert(spapr->cpu_model); - CPU_FOREACH(cpu) { + DeviceClass *dc =3D DEVICE_GET_CLASS(cpu); uint32_t associativity[] =3D {cpu_to_be32(0x5), cpu_to_be32(0x0), cpu_to_be32(0x0), @@ -199,7 +198,7 @@ static int spapr_fixup_cpu_dt(void *fdt, sPAPREnviron= ment *spapr) continue; } =20 - snprintf(cpu_model, 32, "/cpus/%s@%x", spapr->cpu_model, + snprintf(cpu_model, 32, "/cpus/%s@%x", dc->fw_name, cpu->cpu_index); =20 offset =3D fdt_path_offset(fdt, cpu_model); @@ -269,8 +268,7 @@ static size_t create_page_sizes_prop(CPUPPCState *env= , uint32_t *prop, } while (0) =20 =20 -static void *spapr_create_fdt_skel(const char *cpu_model, - hwaddr initrd_base, +static void *spapr_create_fdt_skel(hwaddr initrd_base, hwaddr initrd_size, hwaddr kernel_size, const char *boot_device, @@ -286,7 +284,6 @@ static void *spapr_create_fdt_skel(const char *cpu_mo= del, char qemu_hypertas_prop[] =3D "hcall-memop1"; uint32_t refpoints[] =3D {cpu_to_be32(0x4), cpu_to_be32(0x4)}; uint32_t interrupt_server_ranges_prop[] =3D {0, cpu_to_be32(smp_cpus= )}; - char *modelname; int i, smt =3D kvmppc_smt_threads(); unsigned char vec5[] =3D {0x0, 0x0, 0x0, 0x0, 0x0, 0x80}; =20 @@ -342,18 +339,10 @@ static void *spapr_create_fdt_skel(const char *cpu_= model, _FDT((fdt_property_cell(fdt, "#address-cells", 0x1))); _FDT((fdt_property_cell(fdt, "#size-cells", 0x0))); =20 - modelname =3D g_strdup(cpu_model); - - for (i =3D 0; i < strlen(modelname); i++) { - modelname[i] =3D toupper(modelname[i]); - } - - /* This is needed during FDT finalization */ - spapr->cpu_model =3D g_strdup(modelname); - CPU_FOREACH(cs) { PowerPCCPU *cpu =3D POWERPC_CPU(cs); CPUPPCState *env =3D &cpu->env; + DeviceClass *dc =3D DEVICE_GET_CLASS(cs); PowerPCCPUClass *pcc =3D POWERPC_CPU_GET_CLASS(cs); int index =3D cs->cpu_index; uint32_t servers_prop[smp_threads]; @@ -370,7 +359,7 @@ static void *spapr_create_fdt_skel(const char *cpu_mo= del, continue; } =20 - nodename =3D g_strdup_printf("%s@%x", modelname, index); + nodename =3D g_strdup_printf("%s@%x", dc->fw_name, index); =20 _FDT((fdt_begin_node(fdt, nodename))); =20 @@ -450,8 +439,6 @@ static void *spapr_create_fdt_skel(const char *cpu_mo= del, _FDT((fdt_end_node(fdt))); } =20 - g_free(modelname); - _FDT((fdt_end_node(fdt))); =20 /* RTAS */ @@ -1329,8 +1316,7 @@ static void ppc_spapr_init(QEMUMachineInitArgs *arg= s) &savevm_htab_handlers, spapr); =20 /* Prepare the device tree */ - spapr->fdt_skel =3D spapr_create_fdt_skel(cpu_model, - initrd_base, initrd_size, + spapr->fdt_skel =3D spapr_create_fdt_skel(initrd_base, initrd_size, kernel_size, boot_device, kernel_cmdline, spapr->epow_irq); diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index e37b419..74361f3 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -29,7 +29,6 @@ typedef struct sPAPREnvironment { target_ulong entry_point; uint32_t next_irq; uint64_t rtc_offset; - char *cpu_model; bool has_graphics; =20 uint32_t epow_irq; diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c index 5f6a836..32f6cdd 100644 --- a/target-ppc/translate_init.c +++ b/target-ppc/translate_init.c @@ -8578,6 +8578,8 @@ static void ppc_cpu_class_init(ObjectClass *oc, voi= d *data) #else cc->gdb_core_xml_file =3D "power-core.xml"; #endif + + dc->fw_name =3D "PowerPC,UNKNOWN"; } =20 static const TypeInfo ppc_cpu_type_info =3D { --=20 1.8.1.4