From patchwork Tue Feb 9 13:53:43 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robert Richter X-Patchwork-Id: 61530 Delivered-To: patch@linaro.org Received: by 10.112.43.199 with SMTP id y7csp2057156lbl; Tue, 9 Feb 2016 05:56:43 -0800 (PST) X-Received: by 10.98.72.77 with SMTP id v74mr50043129pfa.33.1455026202167; Tue, 09 Feb 2016 05:56:42 -0800 (PST) Return-Path: Received: from bombadil.infradead.org (bombadil.infradead.org. [2001:1868:205::9]) by mx.google.com with ESMTPS id lm9si54227918pab.142.2016.02.09.05.56.41 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 09 Feb 2016 05:56:42 -0800 (PST) Received-SPF: pass (google.com: domain of linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org designates 2001:1868:205::9 as permitted sender) client-ip=2001:1868:205::9; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org designates 2001:1868:205::9 as permitted sender) smtp.mailfrom=linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1aT8lY-0006Cy-LN; Tue, 09 Feb 2016 13:55:40 +0000 Received: from mail-bn1on0669.outbound.protection.outlook.com ([2a01:111:f400:fc10::669] helo=na01-bn1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1aT8kq-0004gt-DB for linux-arm-kernel@lists.infradead.org; Tue, 09 Feb 2016 13:54:58 +0000 Authentication-Results: linaro.org; dkim=none (message not signed) header.d=none;linaro.org; dmarc=none action=none header.from=caviumnetworks.com; Received: from rric.localdomain (92.224.192.127) by CY1PR0701MB1614.namprd07.prod.outlook.com (10.163.20.151) with Microsoft SMTP Server (TLS) id 15.1.403.16; Tue, 9 Feb 2016 13:54:37 +0000 From: Robert Richter To: Ard Biesheuvel , Will Deacon , Matt Fleming Subject: [PATCH v4 3/6] efi: move FDT handling to separate object file Date: Tue, 9 Feb 2016 14:53:43 +0100 Message-ID: <1455026026-11571-4-git-send-email-rrichter@caviumnetworks.com> X-Mailer: git-send-email 2.7.0.rc3 In-Reply-To: <1455026026-11571-1-git-send-email-rrichter@caviumnetworks.com> References: <1455026026-11571-1-git-send-email-rrichter@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [92.224.192.127] X-ClientProxiedBy: AM2PR09CA0006.eurprd09.prod.outlook.com (25.161.22.144) To CY1PR0701MB1614.namprd07.prod.outlook.com (25.163.20.151) X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1614; 2:ezEZ1MbYLURDfzW5E5rohjW4THFo8TSZml+bm866TXd8tysrtuecS+F2WpCQqyL0+oNefl4UKKetcR0kItR/PrevDCMhOS/IejQ30uFdOdpNczGsWMRg7OkRco5goAGiZ8Ghf8ajH1IgClw0V/LazQ==; 3:Mlfe3E8nP7em+MZm8X6ifxBYxqvI4jv46mdVM33HXMcPTJ/Xk7gzX+A/jYZevL+gTY2CegSVC0Oj2WGdhyVikIInDbydDFkIVwspeGjBawLzon0jh2o84WpfzPQsWxYr; 25:pv20QdsW7xC+DBIJop4kbivQcgmHaJ1YRbQn5GU9yOiN+mV41IJeklWYy0UXCfXVXS67HBqppfOinCH7CKiUzT/8j6oE7vv2LxGJBcQPh/mJRbFSHox4OXVlusaoXZRUNnsp2tlZ4GZln7zYZb8HEJS0p5++LDpzwJxnpopOJsvn0R4q8viAZKmT3nEQ1wykc9NptaEVtrU4Tw74CpsCfA1Cq3ZoG+rPb4/uegHEgu2Bu88BCLUDpMW1/RmYlKD7fFDQX64LiN3sXHom7XaoB5xAJ+E+vNkxX5HFZYiTFY6Y9UxXYDFcxD+jweSo4gXq X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0701MB1614; X-MS-Office365-Filtering-Correlation-Id: 312ce60f-e859-4e25-91c6-08d331588e62 X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1614; 20:E2IEydn68JlXCq6olNha+8YwxIZdfFcUjxbEuB7wHD1sPO+Ses+8KURvYXKmpM0l3N/5WwCe/q4gFtfCCzssXdN4TjpjmmCmaJyvLPOVtlvas9c8zJDpz3gqkKtgleerjN9p7y1lsnMN7w8hQJtsvzgDvG4WPyDiOQFKAXzippgI9y78MrW7lGrPJ9UWiO+Wq9NOgyYPXI4NdtyY2Fb8qLbeFj0VSt0sziEFoty2h23oT4P3ygL+HRyiaqsCZtYAqpQTtF1c5xbmziRV5VbDIke7/RejIjvWOcAZDEGlJF1MWrs8tgnZtpYqFcnnaIsCTdC+38vMOyGlNRHPkQ/rgin4FwTsnc06jxEseYyTeixT+NqRMzCLf3Hm2EynOZv6y8LQfmoe49oByRSYJ4nfc73pVgnvqui9HdSgSElPyL3njP/XVTD9saKbwMYiGxJo3ZtFhlBNaODEFWkyNNyFMtEtHTQKhKdl+XCS/DAskQS94NeuaIoa5G4wqBUzPXnKa9zM8jNSb/K4eKHitc4KyyWJF7pUMG/66+vfyR/MuWiIeZuBMkbav1pKML53h9DyzIiTlsYt+ZEI2GME3vO223peKCtigXi5G8vMuJG6648= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046); SRVR:CY1PR0701MB1614; BCL:0; PCL:0; RULEID:; SRVR:CY1PR0701MB1614; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1614; 4:UasFDLRE+4LOonHmHRaJt3VMm8Ee8by1G+ljfF3gQ7pgJU1SHusAOSjmM8SNPJwCUDH89c/zYEdj6sdzZRg0RqscrVQSr70a1nbWbDq6kKaHTQL5iVnjjTMie9S/cywia/yqrVpwlcR2xIIxRq+zlf+mcq12M9wqI8+KWhLSSCxU0kIku5Q4S/ltQRYwMMzNjAgVTAwcyYvTtiNCKvG3aG2mgkmDNrSQiREH4ST0lA6It3n6BydmbqTaLzjY2iNLDHghOLcH+IFHUSy/itblD5yMO5NyIK81z7FjPaz6WXHbQePDKNJpG+ukg9Dfe5yN2L+xnYyirvjbSS3i1lG0ilUs5R9/PTfCNHDRi3OAozZPCiBr0NUz/gkWpdJdW7C+ X-Forefront-PRVS: 08476BC6EF X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(40100003)(229853001)(48376002)(33646002)(5001770100001)(5001960100002)(5003940100001)(36756003)(122386002)(76176999)(50986999)(42186005)(50466002)(92566002)(50226001)(2950100001)(4326007)(2906002)(189998001)(5008740100001)(5004730100002)(19580395003)(77096005)(66066001)(19580405001)(1096002)(47776003)(6116002)(87976001)(586003)(3846002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0701MB1614; H:rric.localdomain; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1614; 23:yX18a4bk3KzfQLnNZsf+8xzuze9a2cgVvhqOcN3sfp+xyWvsTu4Kqob38tA1GP90eyz6bkDVyVBua45rT+6se5PbaPep+2jjymm3/pax4jcQHogrQyA0uofjUiG2gdmmUF7WIR4JcfoJMaQzQGldEGl3tbCFl2jitAdM9V0epOroLW+NjBsq1cVTV3WKUauYJWDPOLbovwX81JpCkbXM1fhDcIy/X5qTX5s9PBSkx3hNx534HOAXVdoFba7iYgH1j36DjBsnwhQLBcdmGji/rUAoH0Zve3liS/8OgQaFibD48bLVej/pFs9wbsChEGiB5c/O84KWppgS1144wZ+2LVneSgdPJyf+wP8o/hVeq/iFcdbLuBpRImaBZ2gTtLCI6BUeoKTsogzeqgmx/35yXtAQMmuTa41Yoax7i47WufqKlMvMiGunNKqyzEkHM29hX3+WFRUQZg8W3DX3fGB4aNUS3vJy/1qSSP3F+mrG6u/pAtOWbmL6Gc4MsDzq9CI6mbKGR/TXPHRdEyzhU9coDcWgdpVDm1eqyK1OU43BlaGb0AeAkckhq4WYon27rP16CoLGUOpjX6LRsqF0h9JLgUHzY3gOwBjaU/lYi/lC8s7I8krJrdc2CPI9aL3QhsaX/ncWiAtiPMq76iAHpjS5megPYg1LNCiW5kfl6yHgFAMa7JRTNi6kWCXAlZzDfuO/70mnuR7wSW+Ts0m/HOT/tlTLYw0i8BQsyVTq0eCvAqf4wai+Pb76Y0Qituxbq5vlDTN6FH9MvKV9zb6xGXfvBeIslgXj3WRqmfnFaHhl6Hcxfka76hP0SIGR9uRySBnickuIqve+oE1agMH3BUqlaYXFLNAhTYwJl6yig8/mYoKabTfKoa58283x9gERpZXcfTb60w+yRsKgWFdSioZJmA== X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1614; 5:PklYWuDS8L/PDcEC6/dW2GbWTmeT/C70m5xe9cXu3L5b1Uzd/Jr7J5d0eiI2SlZQ3GCS1/LzALfMM7n2t+YZ1VluPGwSvz1sHyLkpCqPiKetvEU7LtJDY5YupjW4tiiIyvGKNLlcWezUhS62u3yvDg==; 24:Kk4AWjaycA9LSO6T8AK5FGK4xeT6azQ0fcQFwPkM0SAgwhnDfOCNiE96j47Ef5kZDjgvft97ju7nJlUEa+6z2B17z08HwZjLxfa8wlk1PVY= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Feb 2016 13:54:37.9921 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0701MB1614 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160209_055456_763984_22DF46E4 X-CRM114-Status: GOOD ( 17.92 ) X-Spam-Score: -1.9 (-) X-Spam-Report: SpamAssassin version 3.4.0 on bombadil.infradead.org summary: Content analysis details: (-1.9 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [2a01:111:f400:fc10:0:0:0:669 listed in] [list.dnswl.org] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , linux-efi@vger.kernel.org, Catalin Marinas , linux-kernel@vger.kernel.org, Leif Lindholm , Robert Richter , Mark Salter , Ganapatrao Kulkarni , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org From: Ard Biesheuvel The EFI specific FDT handling is compiled conditionally, and is logically independent of the rest of efi.o. So move it to a separate file before making changes to it in subsequent patches. Acked-by: Matt Fleming Acked-by: Leif Lindholm Signed-off-by: Ard Biesheuvel Message-Id: <1442881288-13962-4-git-send-email-ard.biesheuvel@linaro.org> [ rric: Ported to v4.5-rc1 ] Signed-off-by: Robert Richter --- drivers/firmware/efi/Makefile | 1 + drivers/firmware/efi/efi-fdt.c | 91 ++++++++++++++++++++++++++++++++++++++++++ drivers/firmware/efi/efi.c | 84 -------------------------------------- 3 files changed, 92 insertions(+), 84 deletions(-) create mode 100644 drivers/firmware/efi/efi-fdt.c -- 2.7.0.rc3 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel diff --git a/drivers/firmware/efi/Makefile b/drivers/firmware/efi/Makefile index 62e654f255f4..bb7ec2fac25c 100644 --- a/drivers/firmware/efi/Makefile +++ b/drivers/firmware/efi/Makefile @@ -18,6 +18,7 @@ obj-$(CONFIG_EFI_RUNTIME_MAP) += runtime-map.o obj-$(CONFIG_EFI_RUNTIME_WRAPPERS) += runtime-wrappers.o obj-$(CONFIG_EFI_STUB) += libstub/ obj-$(CONFIG_EFI_FAKE_MEMMAP) += fake_mem.o +obj-$(CONFIG_EFI_PARAMS_FROM_FDT) += efi-fdt.o arm-obj-$(CONFIG_EFI) := arm-init.o arm-runtime.o obj-$(CONFIG_ARM) += $(arm-obj-y) diff --git a/drivers/firmware/efi/efi-fdt.c b/drivers/firmware/efi/efi-fdt.c new file mode 100644 index 000000000000..8f3ce66e2b02 --- /dev/null +++ b/drivers/firmware/efi/efi-fdt.c @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2013 - 2015 Linaro Ltd. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include +#include + +#define UEFI_PARAM(name, prop, field) \ + { \ + { name }, \ + { prop }, \ + offsetof(struct efi_fdt_params, field), \ + FIELD_SIZEOF(struct efi_fdt_params, field) \ + } + +static __initdata struct { + const char name[32]; + const char propname[32]; + int offset; + int size; +} dt_params[] = { + UEFI_PARAM("System Table", "linux,uefi-system-table", system_table), + UEFI_PARAM("MemMap Address", "linux,uefi-mmap-start", mmap), + UEFI_PARAM("MemMap Size", "linux,uefi-mmap-size", mmap_size), + UEFI_PARAM("MemMap Desc. Size", "linux,uefi-mmap-desc-size", desc_size), + UEFI_PARAM("MemMap Desc. Version", "linux,uefi-mmap-desc-ver", desc_ver) +}; + +struct param_info { + int found; + void *params; +}; + +static int __init fdt_find_uefi_params(unsigned long node, const char *uname, + int depth, void *data) +{ + struct param_info *info = data; + const void *prop; + void *dest; + u64 val; + int i, len; + + if (depth != 1 || strcmp(uname, "chosen") != 0) + return 0; + + for (i = 0; i < ARRAY_SIZE(dt_params); i++) { + prop = of_get_flat_dt_prop(node, dt_params[i].propname, &len); + if (!prop) + return 0; + dest = info->params + dt_params[i].offset; + info->found++; + + val = of_read_number(prop, len / sizeof(u32)); + + if (dt_params[i].size == sizeof(u32)) + *(u32 *)dest = val; + else + *(u64 *)dest = val; + + if (efi_enabled(EFI_DBG)) + pr_info(" %s: 0x%0*llx\n", dt_params[i].name, + dt_params[i].size * 2, val); + } + return 1; +} + +int __init efi_get_fdt_params(struct efi_fdt_params *params) +{ + struct param_info info; + int ret; + + pr_info("Getting EFI parameters from FDT:\n"); + + info.found = 0; + info.params = params; + + ret = of_scan_flat_dt(fdt_find_uefi_params, &info); + if (!info.found) + pr_info("UEFI not found.\n"); + else if (!ret) + pr_err("Can't find '%s' in device tree!\n", + dt_params[info.found].name); + + return ret; +} diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index 2cd37dad67a6..7c41c4284814 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -20,8 +20,6 @@ #include #include #include -#include -#include #include #include @@ -490,88 +488,6 @@ static int __init efi_load_efivars(void) device_initcall(efi_load_efivars); #endif -#ifdef CONFIG_EFI_PARAMS_FROM_FDT - -#define UEFI_PARAM(name, prop, field) \ - { \ - { name }, \ - { prop }, \ - offsetof(struct efi_fdt_params, field), \ - FIELD_SIZEOF(struct efi_fdt_params, field) \ - } - -static __initdata struct { - const char name[32]; - const char propname[32]; - int offset; - int size; -} dt_params[] = { - UEFI_PARAM("System Table", "linux,uefi-system-table", system_table), - UEFI_PARAM("MemMap Address", "linux,uefi-mmap-start", mmap), - UEFI_PARAM("MemMap Size", "linux,uefi-mmap-size", mmap_size), - UEFI_PARAM("MemMap Desc. Size", "linux,uefi-mmap-desc-size", desc_size), - UEFI_PARAM("MemMap Desc. Version", "linux,uefi-mmap-desc-ver", desc_ver) -}; - -struct param_info { - int found; - void *params; -}; - -static int __init fdt_find_uefi_params(unsigned long node, const char *uname, - int depth, void *data) -{ - struct param_info *info = data; - const void *prop; - void *dest; - u64 val; - int i, len; - - if (depth != 1 || strcmp(uname, "chosen") != 0) - return 0; - - for (i = 0; i < ARRAY_SIZE(dt_params); i++) { - prop = of_get_flat_dt_prop(node, dt_params[i].propname, &len); - if (!prop) - return 0; - dest = info->params + dt_params[i].offset; - info->found++; - - val = of_read_number(prop, len / sizeof(u32)); - - if (dt_params[i].size == sizeof(u32)) - *(u32 *)dest = val; - else - *(u64 *)dest = val; - - if (efi_enabled(EFI_DBG)) - pr_info(" %s: 0x%0*llx\n", dt_params[i].name, - dt_params[i].size * 2, val); - } - return 1; -} - -int __init efi_get_fdt_params(struct efi_fdt_params *params) -{ - struct param_info info; - int ret; - - pr_info("Getting EFI parameters from FDT:\n"); - - info.found = 0; - info.params = params; - - ret = of_scan_flat_dt(fdt_find_uefi_params, &info); - if (!info.found) - pr_info("UEFI not found.\n"); - else if (!ret) - pr_err("Can't find '%s' in device tree!\n", - dt_params[info.found].name); - - return ret; -} -#endif /* CONFIG_EFI_PARAMS_FROM_FDT */ - static __initdata char memory_type_name[][20] = { "Reserved", "Loader Code",