Message ID | 20220929142251.1987025-6-mpe@ellerman.id.au (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [v2,1/6] powerpc: Add hardware description string | expand |
Michael Ellerman <mpe@ellerman.id.au> writes: > Add firmware version details to the hardware description, which is > printed at boot and in case of an oops. > > Use /hypervisor if we find it, though currently it only exists if we're > running under qemu. > > Look for "ibm,powervm-partition" which is specified in PAPR+ v2.11 and > tells us we're running under PowerVM. > > Failing that look for "ibm,fw-net-version" which is seen on PowerVM > going back to at least Power6. > > eg: Hardware name: ... of:'IBM,FW860.42 (SV860_138)' hv:'phyp' > > Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> > --- > arch/powerpc/platforms/pseries/setup.c | 30 ++++++++++++++++++++++++++ > 1 file changed, 30 insertions(+) > > v2: Look for "ibm,powervm-partition" as suggested by Nathan. > Use of_property_read_string(). LGTM. I noticed that we don't get an "of:" report with qemu+vof, because there's no /openprom node. $ qemu-system-ppc64 -nographic -vga none -M pseries,x-vof=off -kernel vmlinux | grep Hardware Hardware name: model:'IBM pSeries (emulated by qemu)' cpu:'POWER9 (raw)' pvr:0x4e1200 lpvr:0xf000005 of:'SLOF,HEAD' machine:pSeries $ qemu-system-ppc64 -nographic -vga none -M pseries,x-vof=on -kernel vmlinux | grep Hardware Hardware name: model:'IBM pSeries (emulated by qemu)' cpu:'POWER9 (raw)' pvr:0x4e1200 lpvr:0xf000005 machine:pSeries $ qemu-system-ppc64 --version QEMU emulator version 7.0.0 (qemu-7.0.0-6.fc36) I didn't see anything in the vof device tree that would help though. > diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c > index 5e44c65a032c..83b047db35da 100644 > --- a/arch/powerpc/platforms/pseries/setup.c > +++ b/arch/powerpc/platforms/pseries/setup.c > @@ -41,6 +41,7 @@ > #include <linux/of_pci.h> > #include <linux/memblock.h> > #include <linux/swiotlb.h> > +#include <linux/seq_buf.h> > > #include <asm/mmu.h> > #include <asm/processor.h> > @@ -1011,6 +1012,33 @@ static void __init pSeries_cmo_feature_init(void) > pr_debug(" <- fw_cmo_feature_init()\n"); > } > > +static void __init pseries_add_hw_description(void) > +{ > + struct device_node *dn; > + const char *s; > + > + dn = of_find_node_by_path("/openprom"); > + if (dn) { > + if (of_property_read_string(dn, "model", &s) == 0) > + seq_buf_printf(&ppc_hw_desc, "of:'%s' ", s); > + > + of_node_put(dn); > + } > + > + dn = of_find_node_by_path("/hypervisor"); > + if (dn) { > + if (of_property_read_string(dn, "compatible", &s) == 0) > + seq_buf_printf(&ppc_hw_desc, "hv:'%s' ", s); > + > + of_node_put(dn); > + return; > + } > + > + if (of_property_read_bool(of_root, "ibm,powervm-partition") || > + of_property_read_bool(of_root, "ibm,fw-net-version")) > + seq_buf_printf(&ppc_hw_desc, "hv:'phyp' "); > +}
Nathan Lynch <nathanl@linux.ibm.com> writes: > Michael Ellerman <mpe@ellerman.id.au> writes: >> Add firmware version details to the hardware description, which is >> printed at boot and in case of an oops. >> >> Use /hypervisor if we find it, though currently it only exists if we're >> running under qemu. >> >> Look for "ibm,powervm-partition" which is specified in PAPR+ v2.11 and >> tells us we're running under PowerVM. >> >> Failing that look for "ibm,fw-net-version" which is seen on PowerVM >> going back to at least Power6. >> >> eg: Hardware name: ... of:'IBM,FW860.42 (SV860_138)' hv:'phyp' >> >> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> >> --- >> arch/powerpc/platforms/pseries/setup.c | 30 ++++++++++++++++++++++++++ >> 1 file changed, 30 insertions(+) >> >> v2: Look for "ibm,powervm-partition" as suggested by Nathan. >> Use of_property_read_string(). > > LGTM. > > I noticed that we don't get an "of:" report with qemu+vof, because there's no > /openprom node. > > $ qemu-system-ppc64 -nographic -vga none -M pseries,x-vof=off -kernel vmlinux | grep Hardware > Hardware name: model:'IBM pSeries (emulated by qemu)' cpu:'POWER9 (raw)' pvr:0x4e1200 lpvr:0xf000005 of:'SLOF,HEAD' machine:pSeries > $ qemu-system-ppc64 -nographic -vga none -M pseries,x-vof=on -kernel vmlinux | grep Hardware > Hardware name: model:'IBM pSeries (emulated by qemu)' cpu:'POWER9 (raw)' pvr:0x4e1200 lpvr:0xf000005 machine:pSeries > $ qemu-system-ppc64 --version > QEMU emulator version 7.0.0 (qemu-7.0.0-6.fc36) > > I didn't see anything in the vof device tree that would help though. OK. We don't boot via prom_init when booting with vof, so in that sense there is no OF. I think the combo of seeing qemu but no "of" is sufficient to recognise that case. cheers
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c index 5e44c65a032c..83b047db35da 100644 --- a/arch/powerpc/platforms/pseries/setup.c +++ b/arch/powerpc/platforms/pseries/setup.c @@ -41,6 +41,7 @@ #include <linux/of_pci.h> #include <linux/memblock.h> #include <linux/swiotlb.h> +#include <linux/seq_buf.h> #include <asm/mmu.h> #include <asm/processor.h> @@ -1011,6 +1012,33 @@ static void __init pSeries_cmo_feature_init(void) pr_debug(" <- fw_cmo_feature_init()\n"); } +static void __init pseries_add_hw_description(void) +{ + struct device_node *dn; + const char *s; + + dn = of_find_node_by_path("/openprom"); + if (dn) { + if (of_property_read_string(dn, "model", &s) == 0) + seq_buf_printf(&ppc_hw_desc, "of:'%s' ", s); + + of_node_put(dn); + } + + dn = of_find_node_by_path("/hypervisor"); + if (dn) { + if (of_property_read_string(dn, "compatible", &s) == 0) + seq_buf_printf(&ppc_hw_desc, "hv:'%s' ", s); + + of_node_put(dn); + return; + } + + if (of_property_read_bool(of_root, "ibm,powervm-partition") || + of_property_read_bool(of_root, "ibm,fw-net-version")) + seq_buf_printf(&ppc_hw_desc, "hv:'phyp' "); +} + /* * Early initialization. Relocation is on but do not reference unbolted pages */ @@ -1018,6 +1046,8 @@ static void __init pseries_init(void) { pr_debug(" -> pseries_init()\n"); + pseries_add_hw_description(); + #ifdef CONFIG_HVC_CONSOLE if (firmware_has_feature(FW_FEATURE_LPAR)) hvc_vio_init_early();
Add firmware version details to the hardware description, which is printed at boot and in case of an oops. Use /hypervisor if we find it, though currently it only exists if we're running under qemu. Look for "ibm,powervm-partition" which is specified in PAPR+ v2.11 and tells us we're running under PowerVM. Failing that look for "ibm,fw-net-version" which is seen on PowerVM going back to at least Power6. eg: Hardware name: ... of:'IBM,FW860.42 (SV860_138)' hv:'phyp' Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> --- arch/powerpc/platforms/pseries/setup.c | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) v2: Look for "ibm,powervm-partition" as suggested by Nathan. Use of_property_read_string().