Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757940AbcLBTyW (ORCPT ); Fri, 2 Dec 2016 14:54:22 -0500 Received: from mga11.intel.com ([192.55.52.93]:14706 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750919AbcLBTyU (ORCPT ); Fri, 2 Dec 2016 14:54:20 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,288,1477983600"; d="scan'208";a="12818323" From: Andy Shevchenko To: Jean Delvare , linux-kernel@vger.kernel.org, Mika Westerberg Cc: Andy Shevchenko Subject: [PATCH v1 1/2] firmware: dmi_scan: Split out dmi_get_entry_point() helper Date: Fri, 2 Dec 2016 21:54:15 +0200 Message-Id: <20161202195416.58953-2-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.10.2 In-Reply-To: <20161202195416.58953-1-andriy.shevchenko@linux.intel.com> References: <20161202195416.58953-1-andriy.shevchenko@linux.intel.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2050 Lines: 75 This is preparatory patch to pass DMI entry point to kexec'ed kernel. Signed-off-by: Andy Shevchenko --- drivers/firmware/dmi_scan.c | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c index 88bebe1..b88def6 100644 --- a/drivers/firmware/dmi_scan.c +++ b/drivers/firmware/dmi_scan.c @@ -595,11 +595,8 @@ static int __init dmi_smbios3_present(const u8 *buf) return 1; } -void __init dmi_scan_machine(void) +static resource_size_t __init dmi_get_entry_point(void) { - char __iomem *p, *q; - char buf[32]; - if (efi_enabled(EFI_CONFIG_TABLES)) { /* * According to the DMTF SMBIOS reference spec v3.0.0, it is @@ -614,32 +611,32 @@ void __init dmi_scan_machine(void) * have the 64-bit entry point, but fail to decode it, fall * back to the legacy one (if available) */ - if (efi.smbios3 != EFI_INVALID_TABLE_ADDR) { - p = dmi_early_remap(efi.smbios3, 32); - if (p == NULL) - goto error; - memcpy_fromio(buf, p, 32); - dmi_early_unmap(p, 32); - - if (!dmi_smbios3_present(buf)) { - dmi_available = 1; - goto out; - } - } - if (efi.smbios == EFI_INVALID_TABLE_ADDR) - goto error; + if (efi.smbios3 != EFI_INVALID_TABLE_ADDR) + return efi.smbios3; + if (efi.smbios != EFI_INVALID_TABLE_ADDR) + return efi.smbios; + } + return 0; +} + +void __init dmi_scan_machine(void) +{ + resource_size_t ep = dmi_get_entry_point(); + char __iomem *p, *q; + char buf[32]; + if (ep) { /* This is called as a core_initcall() because it isn't * needed during early boot. This also means we can * iounmap the space when we're done with it. */ - p = dmi_early_remap(efi.smbios, 32); + p = dmi_early_remap(ep, 32); if (p == NULL) goto error; memcpy_fromio(buf, p, 32); dmi_early_unmap(p, 32); - if (!dmi_present(buf)) { + if (!dmi_smbios3_present(buf) || !dmi_present(buf)) { dmi_available = 1; goto out; } -- 2.10.2