From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33218) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VZova-0003p4-3M for qemu-devel@nongnu.org; Fri, 25 Oct 2013 17:28:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VZovJ-0002bD-W5 for qemu-devel@nongnu.org; Fri, 25 Oct 2013 17:28:18 -0400 From: Alexander Graf Date: Fri, 25 Oct 2013 23:27:54 +0200 Message-Id: <1382736474-32128-30-git-send-email-agraf@suse.de> In-Reply-To: <1382736474-32128-1-git-send-email-agraf@suse.de> References: <1382736474-32128-1-git-send-email-agraf@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PULL 29/29] spapr: Use DeviceClass::fw_name for device tree CPU node List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: QEMU Developers Cc: Blue Swirl , "qemu-ppc@nongnu.org list:PowerPC" , Anthony Liguori , Prerna Saxena , =?UTF-8?q?Andreas=20F=C3=A4rber?= , Aurelien Jarno From: Andreas F=C3=A4rber 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 Signed-off-by: Alexander Graf --- 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 c0613e4..f76b355 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -204,9 +204,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), @@ -218,7 +217,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); @@ -288,8 +287,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, bool little_endian, @@ -306,7 +304,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 @@ -365,18 +362,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]; @@ -393,7 +382,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 @@ -477,8 +466,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 */ @@ -1363,8 +1350,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, kernel_le, boot_device, kernel_cmdline, spapr->epow_irq); diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index 5ae0b58..fdaab2d 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 9e29caa..47825ac 100644 --- a/target-ppc/translate_init.c +++ b/target-ppc/translate_init.c @@ -8587,6 +8587,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