From: Lukas Wunner <lu...@wunner.de>

[ Upstream commit 6fb9367a15d1a126d222d738b2702c7958594a5f ]

The CPER parser assumes that the class code is big endian, but at least
on this edk2-derived Intel Purley platform it's little endian:

    efi: EFI v2.50 by EDK II BIOS ID:PLYDCRB1.86B.0119.R05.1701181843
    DMI: Intel Corporation PURLEY/PURLEY, BIOS PLYDCRB1.86B.0119.R05.1701181843 
01/18/2017

    {1}[Hardware Error]:   device_id: 0000:5d:00.0
    {1}[Hardware Error]:   slot: 0
    {1}[Hardware Error]:   secondary_bus: 0x5e
    {1}[Hardware Error]:   vendor_id: 0x8086, device_id: 0x2030
    {1}[Hardware Error]:   class_code: 000406
                                       ^^^^^^ (should be 060400)

Signed-off-by: Lukas Wunner <lu...@wunner.de>
Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org>
Cc: Ben Dooks <ben.do...@codethink.co.uk>
Cc: Dave Young <dyo...@redhat.com>
Cc: Jarkko Sakkinen <jarkko.sakki...@linux.intel.com>
Cc: Jerry Snitselaar <jsnit...@redhat.com>
Cc: Linus Torvalds <torva...@linux-foundation.org>
Cc: Lyude Paul <ly...@redhat.com>
Cc: Matthew Garrett <mj...@google.com>
Cc: Octavian Purdila <octavian.purd...@intel.com>
Cc: Peter Jones <pjo...@redhat.com>
Cc: Peter Zijlstra <pet...@infradead.org>
Cc: Scott Talbert <s...@techie.net>
Cc: Thomas Gleixner <t...@linutronix.de>
Cc: linux-efi@vger.kernel.org
Cc: linux-integr...@vger.kernel.org
Link: https://lkml.kernel.org/r/20191002165904.8819-2-ard.biesheu...@linaro.org
Signed-off-by: Ingo Molnar <mi...@kernel.org>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 drivers/firmware/efi/cper.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/firmware/efi/cper.c b/drivers/firmware/efi/cper.c
index f40f7df4b7344..c0e54396f2502 100644
--- a/drivers/firmware/efi/cper.c
+++ b/drivers/firmware/efi/cper.c
@@ -375,7 +375,7 @@ static void cper_print_pcie(const char *pfx, const struct 
cper_sec_pcie *pcie,
                printk("%s""vendor_id: 0x%04x, device_id: 0x%04x\n", pfx,
                       pcie->device_id.vendor_id, pcie->device_id.device_id);
                p = pcie->device_id.class_code;
-               printk("%s""class_code: %02x%02x%02x\n", pfx, p[0], p[1], p[2]);
+               printk("%s""class_code: %02x%02x%02x\n", pfx, p[2], p[1], p[0]);
        }
        if (pcie->validation_bits & CPER_PCIE_VALID_SERIAL_NUMBER)
                printk("%s""serial number: 0x%04x, 0x%04x\n", pfx,
-- 
2.20.1

Reply via email to