From patchwork Mon Sep 14 08:42:21 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shannon Zhao X-Patchwork-Id: 7174021 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 69868BEEC1 for ; Mon, 14 Sep 2015 09:00:43 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 60684205B6 for ; Mon, 14 Sep 2015 09:00:42 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 3F531205CA for ; Mon, 14 Sep 2015 09:00:41 +0000 (UTC) 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 1ZbPb9-0007BX-FX; Mon, 14 Sep 2015 08:58:51 +0000 Received: from szxga02-in.huawei.com ([119.145.14.65]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZbPb6-0006wr-Dl for linux-arm-kernel@lists.infradead.org; Mon, 14 Sep 2015 08:58:50 +0000 Received: from 172.24.1.50 (EHLO szxeml430-hub.china.huawei.com) ([172.24.1.50]) by szxrg02-dlp.huawei.com (MOS 4.3.7-GA FastPath queued) with ESMTP id CSH46512; Mon, 14 Sep 2015 16:42:37 +0800 (CST) Received: from [127.0.0.1] (10.177.16.142) by szxeml430-hub.china.huawei.com (10.82.67.185) with Microsoft SMTP Server id 14.3.235.1; Mon, 14 Sep 2015 16:42:23 +0800 Message-ID: <55F6886D.1090900@huawei.com> Date: Mon, 14 Sep 2015 16:42:21 +0800 From: Shannon Zhao User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Thunderbird/24.4.0 MIME-Version: 1.0 To: Daniel Kiper , Ard Biesheuvel Subject: Re: [PATCH] efi/libstub/fdt: Standardize the names of EFI stub parameters References: <20150910112418.GC29293@leverpostej> <20150910121514.GE29293@leverpostej> <20150910144938.GI29293@leverpostej> <20150910162302.GN29293@leverpostej> <20150911124643.GB4530@olila.local.net-space.pl> <20150911154534.GD4530@olila.local.net-space.pl> In-Reply-To: <20150911154534.GD4530@olila.local.net-space.pl> X-Originating-IP: [10.177.16.142] X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20150914_015849_070693_74BE355A X-CRM114-Status: GOOD ( 27.47 ) X-Spam-Score: -4.2 (----) 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 , "devicetree@vger.kernel.org" , "linux-efi@vger.kernel.org" , "Ian.Campbell@citrix.com" , Konrad Rzeszutek Wilk , Stefano Stabellini , "linux-doc@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "leif.lindholm@linaro.org" , "xen-devel@lists.xen.org" , "julien.grall@citrix.com" , "freebsd-arm@freebsd.org" , "matt.fleming@intel.com" , "christoffer.dall@linaro.org" , "jbeulich@suse.com" , "peter.huangpeng@huawei.com" , "linux-arm-kernel@lists.infradead.org" , "shannon.zhao@linaro.org" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP On 2015/9/11 23:45, Daniel Kiper wrote: > On Fri, Sep 11, 2015 at 03:30:15PM +0200, Ard Biesheuvel wrote: >> On 11 September 2015 at 15:14, Stefano Stabellini >> wrote: >>> On Fri, 11 Sep 2015, Daniel Kiper wrote: >>>> On Thu, Sep 10, 2015 at 05:23:02PM +0100, Mark Rutland wrote: >>>>>>> C) When you could go: >>>>>>> >>>>>>> DT -> Discover Xen -> Xen-specific stuff -> Xen-specific EFI/ACPI discovery >>>>>> >>>>>> I take you mean discovering Xen with the usual Xen hypervisor node on >>>>>> device tree. I think that C) is a good option actually. I like it. Not >>>>>> sure why we didn't think about this earlier. Is there anything EFI or >>>>>> ACPI which is needed before Xen support is discovered by >>>>>> arch/arm64/kernel/setup.c:setup_arch -> xen_early_init()? >>>>> >>>>> Currently lots (including the memory map). With the stuff to support >>>>> SPCR, the ACPI discovery would be moved before xen_early_init(). >>>>> >>>>>> If not, we could just go for this. A lot of complexity would go away. >>>>> >>>>> I suspect this would still be fairly complex, but would at least prevent >>>>> the Xen-specific EFI handling from adversely affecting the native case. >>>>> >>>>>>> D) If you want to be generic: >>>>>>> EFI -> EFI application -> EFI tables -> ACPI tables -> Xen-specific stuff >>>>>>> \------------------------------------------/ >>>>>>> (virtualize these, provide shims to Dom0, but handle >>>>>>> everything in Xen itself) >>>>>> >>>>>> I think that this is good in theory but could turn out to be a lot of >>>>>> work in practice. We could probably virtualize the RuntimeServices but >>>>>> the BootServices are troublesome. >>>>> >>>>> What's troublesome with the boot services? >>>>> >>>>> What can't be simulated? >>>> >>>> How do you want to access bare metal EFI boot services from dom0 if they >>>> were shutdown long time ago before loading dom0 image? What do you need >>>> from EFI boot services in dom0? >>> >>> That's right. Trying to emulate BootServices after the real >>> ExitBootServices has already been called seems like a very bad plan. >>> >>> I think that whatever interface we come up with, would need to be past >>> ExitBootServices. >> >> It feels like this discussion is going in circles. >> >> When we discussed this six months ago, we already concluded that, >> since UEFI is the only specified way that the presence of ACPI is >> advertised on an ARM system, we need to emulate UEFI to some extent. >> >> So we need the EFI system table to expose the UEFI configuration table >> that carries the ACPI root pointer. >> >> Since ACPI support also relies on the UEFI memory map (I think?), we >> need that as well. >> >> These two items are exactly what we pass via the UEFI DT properties, >> so we should indeed promote the current de-facto binding to a proper >> binding, and renaming the properties makes sense in that context. >> >> I agree that this should also include a description of the expected >> state of the firmware, i.e., that ExitBootServices() has been called, >> and that the memory map has been populated with virtual address, which >> have been installed using SetVirtualAddressMap() if they differ from >> the physical addresses. (The current implementation on the kernel side >> is perfectly capable of dealing with a 1:1 mapping). >> >> Beyond that, there is no point in pretending to be a full UEFI >> implementation, imo. Boot services are not required, nor are runtime >> services (only the current EFI init code on arm needs to be modified >> to deal with a NULL runtime services pointer) > > Taking into account above I think that you have most of the code in place. > Please take a look at linux/arch/x86/xen/efi.c, linux/drivers/acpi/osl.c > and linux/drivers/xen/efi.c (maybe somewhere else). In general you should > create ARM version of xen_efi_init() (x86 version you can find in > linux/drivers/xen/efi.c; it is very simple thing), maybe add some > code in a few places and voila. > It only needs to apply following patch to fix a bug in Linux kernel when mapping EFI_MEMORY_RUNTIME memory. Author: Shannon Zhao Date: Thu Aug 20 14:54:58 2015 +0800 arm64/efi: Fix a bug when no EFI_MEMORY_RUNTIME memory found Currently if the attribute type of all the EFI Memory Descriptors are not EFI_MEMORY_RUNTIME, efi_virtmap_init will return true. But at this case, it expect false as there are no EFI memory for RUNTIME. Fix it by introducing a status to show whether it finds EFI_MEMORY_RUNTIME. Signed-off-by: Shannon Zhao diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c index e8ca6ea..bad7f87 100644 --- a/arch/arm64/kernel/efi.c +++ b/arch/arm64/kernel/efi.c @@ -233,6 +233,7 @@ void __init efi_init(void) static bool __init efi_virtmap_init(void) { efi_memory_desc_t *md; + bool status = false; for_each_efi_memory_desc(&memmap, md) { u64 paddr, npages, size; @@ -264,8 +265,11 @@ static bool __init efi_virtmap_init(void) prot = PAGE_KERNEL; create_pgd_mapping(&efi_mm, paddr, md->virt_addr, size, prot); + status = true; } - return true; + if (status) + return true; + return false; }