Commit 8535a1af authored by Michael Ellerman's avatar Michael Ellerman
Browse files

powerpc/pseries: Add firmware details to the hardware description



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: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20220930082709.55830-6-mpe@ellerman.id.au
parent 37576cb0
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -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();