• Michael Ellerman's avatar
    powerpc/prom: Fix sub-processor option passed to ibm, client-architecture-support · 028750fc
    Michael Ellerman authored
    commit 66443efa upstream.
    
    When booting from an OpenFirmware which supports it, we use the
    "ibm,client-architecture-support" firmware call to communicate
    our capabilities to firmware.
    
    The format of the structure we pass to firmware is specified in
    PAPR (Power Architecture Platform Requirements), or the public version
    LoPAPR (Linux on Power Architecture Platform Reference).
    
    Referring to table 244 in LoPAPR v1.1, option vector 5 contains a 4 byte
    field at bytes 17-20 for the "Platform Facilities Enable". This is
    followed by a 1 byte field at byte 21 for "Sub-Processor Represenation
    Level".
    
    Comparing to the code, there we have the Platform Facilities
    options (OV5_PFO_*) at byte 17, but we fail to pad that field out to its
    full width of 4 bytes. This means the OV5_SUB_PROCESSORS option is
    incorrectly placed at byte 18.
    
    Fix it by adding zero bytes for bytes 18, 19, 20, and comment the bytes
    to hopefully make it clearer in future.
    
    As far as I'm aware nothing actually consumes this value at this time,
    so the effect of this bug is nil in practice.
    
    It does mean we've been incorrectly setting bit 15 of the "Platform
    Facilities Enable" option for the past ~3 1/2 years, so we should avoid
    allocating that bit to anything else in future.
    
    Fixes: df77c799 ("powerpc/pseries: Update ibm,architecture.vec for PAPR 2.7/POWER8")
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    [bwh: Backported to 3.16:
     - Adjust context
     - Length calculations don't use VECTOR_LENGTH()]
    Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
    028750fc
prom_init.c 76.2 KB