From patchwork Fri May 4 05:59:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 134955 Delivered-To: patch@linaro.org Received: by 10.46.151.6 with SMTP id r6csp439934lji; Thu, 3 May 2018 23:04:35 -0700 (PDT) X-Google-Smtp-Source: AB8JxZpVt7mIoTSfcnwfraPAfrS0tjlg7tnA7gg34r8Ax+lRgog7LTlMIPSXmX2c6W++PCvOrX12 X-Received: by 10.98.11.3 with SMTP id t3mr25781601pfi.32.1525413875646; Thu, 03 May 2018 23:04:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525413875; cv=none; d=google.com; s=arc-20160816; b=klj43GGRWb8jlNmb7T+R5wziAfU5CQ/mOGKUemkSPnP3Kbx+W9b1q8Jd5b/5d0Ylma 9Z+LSf/SuWRs4A4Wd0zWpus3Bkhu/aA1pbWTUXoxAxNPaQjTR7PcvSg8wadzmyvqtJgm Nq1QsjA/dyFk1aOzYFNFz8/g7puJa5FVbo2FrNnTtaFOFma9McyokMc8Vw1K6jaDmQ3w 1gvg9XJA8+efEXSoh4DvoKkazFjawMg62vlH03x0G5O81KD5QqwoXkUvZe0130h/kT3O UyPZFckLGSOovZfn3Uc3HH/HlbEks5k5ffPnNjrIHwCEsOJWF2pVg7UutbjLljTP8UTh 6s/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=KvCxDSRHdOyHoYgKRF2IbBwEBUVlnXJv6YDuHIuwOUo=; b=nrOxRPnpQddBNjLD5O4Dn6phi9lRWaXcGpuzOCe7/mr1cTyqt+ges/a7nUzzsA3AXq RSlfq0QP+6TwhwAeAb52nGUwhH/QM618aidEz7jkEBSeit8wZs+2O4pEMggMqo1QD4X9 RXA24wfvB7ObVBf4jS+mIc6O7DPYxzL96nIKAH1sS/rXPsyNdE5daW7ZRtmoa2l9DaLO hSF2mBFauNPNmfsk0P0soQwxU9UcEWTDsjIbfUHGU6hBQknTwEgTfjb2rFOcvyBAXxth ACsfpRep6xvA9kdzhswvqjwcgkEiJLEv4t/xe6/o7F6+g/HWQrWyktiJwuN+Jf7qR3WL ksJQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=TOkTKS2L; spf=pass (google.com: best guess record for domain of linux-efi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-efi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u8-v6si15687131plm.134.2018.05.03.23.04.35; Thu, 03 May 2018 23:04:35 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-efi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=TOkTKS2L; spf=pass (google.com: best guess record for domain of linux-efi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-efi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751704AbeEDGEd (ORCPT + 2 others); Fri, 4 May 2018 02:04:33 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:36148 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751455AbeEDGBK (ORCPT ); Fri, 4 May 2018 02:01:10 -0400 Received: by mail-wm0-f68.google.com with SMTP id n10-v6so2568244wmc.1 for ; Thu, 03 May 2018 23:01:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=4kYvxvaCIBrrdSstTEOT+7ONeGYF0WWkfOJyKh52j0k=; b=TOkTKS2LwLrAehTTwLeK3/33HAiubtubYvUK66lVI+NAFuO2rI3lhSeJy/GMgwqJte 4nO4FumQmwGn5ovggU8jnR5ll53PZ9DQy2OsF2LK9t6SBh11oUIrfZ89BqonfWzdjNcn Cv8A9GbXLRg9BRW/f2fWgOJFnqeXrbI4xBQvA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=4kYvxvaCIBrrdSstTEOT+7ONeGYF0WWkfOJyKh52j0k=; b=X17LmMeUOGv0USrMlHXoeW4pNN9WSfzTpUpS2bLE/000LrHpMYbXWuE2ZaM9S+fB4I C838/U07NlNhWBP7SF5QnVqE/pakrZfSfMpPOpB9GVskPxQ+lJcIQLrVBfbQY3okCzdb D3n01Eoh3yEyns+svUdJLTkIQKyLEbRFJneKZtCJNfk14+KCc9Iu2M+HbN3aRV3xLGZK htmkRa4SW7OHt2DdYfIF1vzCBlpC1cHd8b7OIrVMelwDHneJdrY8K+60jzxuOOCoLG45 YWsM3vo5aHhDeuFVjSrkeJKVOvofWSL5Uxf7RZtQPenwjeko1y1G2XHf6rHDfrOlci6K wPaw== X-Gm-Message-State: ALQs6tALQpCtwQKsGRh9skmaQUc1YrHjOaxNJxglbGmdFduX3pK16g1S N4WYIuTu+nHSumZdgTBUceGGmXSADXM= X-Received: by 10.28.203.136 with SMTP id b130mr9389041wmg.78.1525413668978; Thu, 03 May 2018 23:01:08 -0700 (PDT) Received: from localhost.localdomain ([2a01:e35:3995:5470:200:1aff:fe1b:b328]) by smtp.gmail.com with ESMTPSA id i30-v6sm32411863wra.38.2018.05.03.23.01.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 03 May 2018 23:01:08 -0700 (PDT) From: Ard Biesheuvel To: linux-efi@vger.kernel.org, Ingo Molnar , Thomas Gleixner Cc: Yazen Ghannam , Ard Biesheuvel , linux-kernel@vger.kernel.org Subject: [PATCH 04/17] efi: Decode IA32/X64 Processor Error Section Date: Fri, 4 May 2018 07:59:50 +0200 Message-Id: <20180504060003.19618-5-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180504060003.19618-1-ard.biesheuvel@linaro.org> References: <20180504060003.19618-1-ard.biesheuvel@linaro.org> Sender: linux-efi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-efi@vger.kernel.org From: Yazen Ghannam Recognize the IA32/X64 Processor Error Section. Do the section decoding in a new "cper-x86.c" file and add this to the Makefile depending on a new "UEFI_CPER_X86" config option. Print the Local APIC ID and CPUID info from the Processor Error Record. The "Processor Error Info" and "Processor Context" fields will be decoded in following patches. Based on UEFI 2.7 Table 252. Processor Error Record. Signed-off-by: Yazen Ghannam Signed-off-by: Ard Biesheuvel --- drivers/firmware/efi/Kconfig | 5 +++++ drivers/firmware/efi/Makefile | 1 + drivers/firmware/efi/cper-x86.c | 23 +++++++++++++++++++++++ drivers/firmware/efi/cper.c | 10 ++++++++++ include/linux/cper.h | 2 ++ 5 files changed, 41 insertions(+) create mode 100644 drivers/firmware/efi/cper-x86.c -- 2.17.0 -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/firmware/efi/Kconfig b/drivers/firmware/efi/Kconfig index 3098410abad8..781a4a337557 100644 --- a/drivers/firmware/efi/Kconfig +++ b/drivers/firmware/efi/Kconfig @@ -174,6 +174,11 @@ config UEFI_CPER_ARM depends on UEFI_CPER && ( ARM || ARM64 ) default y +config UEFI_CPER_X86 + bool + depends on UEFI_CPER && X86 + default y + config EFI_DEV_PATH_PARSER bool depends on ACPI diff --git a/drivers/firmware/efi/Makefile b/drivers/firmware/efi/Makefile index cb805374f4bc..5f9f5039de50 100644 --- a/drivers/firmware/efi/Makefile +++ b/drivers/firmware/efi/Makefile @@ -31,3 +31,4 @@ obj-$(CONFIG_ARM) += $(arm-obj-y) obj-$(CONFIG_ARM64) += $(arm-obj-y) obj-$(CONFIG_EFI_CAPSULE_LOADER) += capsule-loader.o obj-$(CONFIG_UEFI_CPER_ARM) += cper-arm.o +obj-$(CONFIG_UEFI_CPER_X86) += cper-x86.o diff --git a/drivers/firmware/efi/cper-x86.c b/drivers/firmware/efi/cper-x86.c new file mode 100644 index 000000000000..863f0cd2a0ff --- /dev/null +++ b/drivers/firmware/efi/cper-x86.c @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (C) 2018, Advanced Micro Devices, Inc. + +#include + +/* + * We don't need a "CPER_IA" prefix since these are all locally defined. + * This will save us a lot of line space. + */ +#define VALID_LAPIC_ID BIT_ULL(0) +#define VALID_CPUID_INFO BIT_ULL(1) + +void cper_print_proc_ia(const char *pfx, const struct cper_sec_proc_ia *proc) +{ + if (proc->validation_bits & VALID_LAPIC_ID) + printk("%sLocal APIC_ID: 0x%llx\n", pfx, proc->lapic_id); + + if (proc->validation_bits & VALID_CPUID_INFO) { + printk("%sCPUID Info:\n", pfx); + print_hex_dump(pfx, "", DUMP_PREFIX_OFFSET, 16, 4, proc->cpuid, + sizeof(proc->cpuid), 0); + } +} diff --git a/drivers/firmware/efi/cper.c b/drivers/firmware/efi/cper.c index ab21f1614007..3bf0dca378a6 100644 --- a/drivers/firmware/efi/cper.c +++ b/drivers/firmware/efi/cper.c @@ -467,6 +467,16 @@ cper_estatus_print_section(const char *pfx, struct acpi_hest_generic_data *gdata cper_print_proc_arm(newpfx, arm_err); else goto err_section_too_small; +#endif +#if defined(CONFIG_UEFI_CPER_X86) + } else if (guid_equal(sec_type, &CPER_SEC_PROC_IA)) { + struct cper_sec_proc_ia *ia_err = acpi_hest_get_payload(gdata); + + printk("%ssection_type: IA32/X64 processor error\n", newpfx); + if (gdata->error_data_length >= sizeof(*ia_err)) + cper_print_proc_ia(newpfx, ia_err); + else + goto err_section_too_small; #endif } else { const void *err = acpi_hest_get_payload(gdata); diff --git a/include/linux/cper.h b/include/linux/cper.h index 4b5f8459b403..9c703a0abe6e 100644 --- a/include/linux/cper.h +++ b/include/linux/cper.h @@ -551,5 +551,7 @@ const char *cper_mem_err_unpack(struct trace_seq *, struct cper_mem_err_compact *); void cper_print_proc_arm(const char *pfx, const struct cper_sec_proc_arm *proc); +void cper_print_proc_ia(const char *pfx, + const struct cper_sec_proc_ia *proc); #endif