spapr: Fix DR properties of the root node
commit776e887f088a93c0c45b2fb98dbb737a6e7cf0ed
authorGreg Kurz <groug@kaod.org>
Mon, 14 Dec 2020 11:19:55 +0000 (14 12:19 +0100)
committerDavid Gibson <david@gibson.dropbear.id.au>
Wed, 6 Jan 2021 00:09:59 +0000 (6 11:09 +1100)
tree546521c1f80d97ebeb903f2a2ca41e63a2d23daa
parentab9c93c25c16e48065428f8daa760592cba3226c
spapr: Fix DR properties of the root node

Section 13.5.2 of LoPAPR mandates various DR related indentifiers
for all hot-pluggable entities to be exposed in the "ibm,drc-indexes",
"ibm,drc-power-domains", "ibm,drc-names" and "ibm,drc-types" properties
of their parent node. These properties are created with spapr_dt_drc().

PHBs and LMBs are both children of the machine. Their DR identifiers
are thus supposed to be exposed in the afore mentioned properties of
the root node.

When PHB hot-plug support was added, an extra call to spapr_dt_drc()
was introduced: this overwrites the existing properties, previously
populated with the LMB identifiers, and they end up containing only
PHB identifiers. This went unseen so far because linux doesn't care,
but this is still not conformant with LoPAPR.

Fortunately spapr_dt_drc() is able to handle multiple DR entity types
at the same time. Use that to handle DR indentifiers for PHBs and LMBs
with a single call to spapr_dt_drc(). While here also account for PMEM
DR identifiers, which were forgotten when NVDIMM hot-plug support was
added. Also add an assert to prevent further misuse of spapr_dt_drc().

With -m 1G,maxmem=2G,slots=8 passed on the QEMU command line we get:

Without this patch:

/proc/device-tree/ibm,drc-indexes
 0000001f 20000001 20000002 20000003
 20000000 20000005 20000006 20000007
 20000004 20000009 20000008 20000010
 20000011 20000012 20000013 20000014
 20000015 20000016 20000017 20000018
 20000019 2000000a 2000000b 2000000c
 2000000d 2000000e 2000000f 2000001a
 2000001b 2000001c 2000001d 2000001e

These are the DRC indexes for the 31 possible PHBs.

With this patch:

/proc/device-tree/ibm,drc-indexes
 0000002b 90000000 90000001 90000002
 90000003 90000004 90000005 90000006
 90000007 20000001 20000002 20000003
 20000000 20000005 20000006 20000007
 20000004 20000009 20000008 20000010
 20000011 20000012 20000013 20000014
 20000015 20000016 20000017 20000018
 20000019 2000000a 2000000b 2000000c
 2000000d 2000000e 2000000f 2000001a
 2000001b 2000001c 2000001d 2000001e
 80000004 80000005 80000006 80000007

And now we also have the 4 ((2G - 1G) / 256M) LMBs and the
8 (slots) PMEMs.

Fixes: 3998ccd09298 ("spapr: populate PHB DRC entries for root DT node")
Signed-off-by: Greg Kurz <groug@kaod.org>
Message-Id: <160794479566.35245.17809158217760761558.stgit@bahia.lan>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
hw/ppc/spapr.c
hw/ppc/spapr_drc.c