From patchwork Thu May 27 15:05:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pasha Tatashin X-Patchwork-Id: 12284655 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A31CBC47089 for ; Thu, 27 May 2021 16:00:23 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6EE13613C5 for ; Thu, 27 May 2021 16:00:23 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6EE13613C5 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=soleen.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Gx3J4pdV3ytEUYwO4iZYSuvzzVWVaQcM5rVaKF+hjrE=; b=lrfnUqx5MadNrN 87vmitk/OAoVCtas3UebCR16ewMfQa4p9jlGYpNig420brcX8QkMpcKTb4uRM4LnJLRHdFbRx0JC9 4GnIswOc38KwPnNYPYwK+VufzA+LU2dfGEzPlYxHermTCI4Rm8MnDLo72XmR8GJEXdyZ8ujICH/JL Cof4+YIHJ761WPNLuA12QrXLr1qw5NDAscw6WIkxgqRVkAJXpqUtB7GG4RJIJnvVb9SjOMM4tJAAM ACe0C0wMqjLCBFRWSrZxSAV+VIpPHz9/wSMV8Lz0HWgz+8eLMeCO10tFwxoAwzH4aHaVXtlfLbZ9E rEIx6jM4OWIh6TXwzAzw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1lmIOM-007PXL-On; Thu, 27 May 2021 15:57:52 +0000 Received: from mail-qk1-x72a.google.com ([2607:f8b0:4864:20::72a]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1lmHa1-0071pO-MR for linux-arm-kernel@lists.infradead.org; Thu, 27 May 2021 15:05:52 +0000 Received: by mail-qk1-x72a.google.com with SMTP id v8so945068qkv.1 for ; Thu, 27 May 2021 08:05:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=spq5ynnfnR8TM5XEPzllfdybPKsLwK1jYCVhSyBxi9M=; b=kEzFCK/OZq65q45023j25DBKIv6t/KPooiYfjWWPP3IJOjjHeRmCpQtuVLJkoQfk0m LLZVUvatSqsTefwkG844IqhjmqYz+eKjmIWMguCbE//G/PZilV1ovqWDnr3/kiQThoLe 8J5fE0vuDmRoHMifm12gmszoCPbgL/6vKPWVbsXnCVp6POQBaG8mMnHIcVImT2bPCI1y BV/yFm5eIJfxxYVdS1bcl46gMJrIytDeVhMlnOV5TIYrxeOwAZcaQxROJ+GyKDP9GrtS PtTEcv1/j/uuZXYBfqEmqGTXfvUSywNUrIEs2IE6VveTwxDnHBc/1L6sfb2iuapuRDjs +mIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=spq5ynnfnR8TM5XEPzllfdybPKsLwK1jYCVhSyBxi9M=; b=fFm/T0LCrMlI+hLggcsXrrwBECRF4fMJJ0/fTX1vhri+j3FhxtCV/ZgVHrpLUnBsNZ S/A+frpZ0IuWAswO/6xBlte0SB2Qq3U5hFbFakOlblpRwXvVGVrw2tiuzeBU/64C2VOC 85hdWF/Hf9YTpg7Cl6PZsKnVOWGxxJEoJm0G0u0w5FtpmADnXPwGpizpxuLcGT7sZp2o fFzN5+TvsJ8E1W2KX5iVkH1mf1OKcaWWbkVbCsncSdiMJXRaY7VFeD8dLBcC1ro8g3Q9 8tSfsyxbDR4ZhkpmuLDbas33zDBTX9fFH2Zm/HVYIg9JcqplAlaw1kYDWWtjNVtBKc1t 3zwA== X-Gm-Message-State: AOAM532JsmhvK4/qnCW0yJJpV23iZH/hHHusUII5EhRtJXAgQtgwDGEM 2yb1dqKhGF2+kU6KYo5SiwX2sQ== X-Google-Smtp-Source: ABdhPJwCPp5AbyvNOecFI+FqtUWaR34fdNcgOcCR3qCe2Y2zX902CBP0VehAshlb1076RC/1us6hfg== X-Received: by 2002:a05:620a:2282:: with SMTP id o2mr3866648qkh.479.1622127946786; Thu, 27 May 2021 08:05:46 -0700 (PDT) Received: from localhost.localdomain (c-73-69-118-222.hsd1.nh.comcast.net. [73.69.118.222]) by smtp.gmail.com with ESMTPSA id x10sm1447468qkh.124.2021.05.27.08.05.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 May 2021 08:05:46 -0700 (PDT) From: Pavel Tatashin To: pasha.tatashin@soleen.com, jmorris@namei.org, sashal@kernel.org, ebiederm@xmission.com, kexec@lists.infradead.org, linux-kernel@vger.kernel.org, corbet@lwn.net, catalin.marinas@arm.com, will@kernel.org, linux-arm-kernel@lists.infradead.org, maz@kernel.org, james.morse@arm.com, vladimir.murzin@arm.com, matthias.bgg@gmail.com, linux-mm@kvack.org, mark.rutland@arm.com, steve.capper@arm.com, rfontana@redhat.com, tglx@linutronix.de, selindag@gmail.com, tyhicks@linux.microsoft.com, kernelfans@gmail.com, akpm@linux-foundation.org, madvenka@linux.microsoft.com Subject: [PATCH 12/18] arm64: kexec: relocate in EL1 mode Date: Thu, 27 May 2021 11:05:20 -0400 Message-Id: <20210527150526.271941-13-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210527150526.271941-1-pasha.tatashin@soleen.com> References: <20210527150526.271941-1-pasha.tatashin@soleen.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210527_080549_978155_45DC6905 X-CRM114-Status: GOOD ( 13.03 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Since we are going to keep MMU enabled during relocation, we need to keep EL1 mode throughout the relocation. Keep EL1 enabled, and switch EL2 only before enterying the new world. Suggested-by: James Morse Signed-off-by: Pavel Tatashin --- arch/arm64/kernel/cpu-reset.h | 3 +-- arch/arm64/kernel/machine_kexec.c | 4 ++-- arch/arm64/kernel/relocate_kernel.S | 13 +++++++++++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/arch/arm64/kernel/cpu-reset.h b/arch/arm64/kernel/cpu-reset.h index 48d0ed48c147..296abbac7192 100644 --- a/arch/arm64/kernel/cpu-reset.h +++ b/arch/arm64/kernel/cpu-reset.h @@ -20,11 +20,10 @@ static inline void __noreturn __nocfi cpu_soft_restart(unsigned long entry, { typeof(__cpu_soft_restart) *restart; - unsigned long el2_switch = is_hyp_callable(); restart = (void *)__pa_symbol(function_nocfi(__cpu_soft_restart)); cpu_install_idmap(); - restart(el2_switch, entry, arg0, arg1, arg2); + restart(0, entry, arg0, arg1, arg2); unreachable(); } diff --git a/arch/arm64/kernel/machine_kexec.c b/arch/arm64/kernel/machine_kexec.c index 9f74791cb1d0..c9993f029262 100644 --- a/arch/arm64/kernel/machine_kexec.c +++ b/arch/arm64/kernel/machine_kexec.c @@ -231,8 +231,8 @@ void machine_kexec(struct kimage *kimage) } else { if (is_hyp_callable()) __hyp_set_vectors(kimage->arch.el2_vectors); - cpu_soft_restart(kimage->arch.kern_reloc, virt_to_phys(kimage), - 0, 0); + cpu_soft_restart(kimage->arch.kern_reloc, + virt_to_phys(kimage), 0, 0); } BUG(); /* Should never get here. */ diff --git a/arch/arm64/kernel/relocate_kernel.S b/arch/arm64/kernel/relocate_kernel.S index 36b4496524c3..df023b82544b 100644 --- a/arch/arm64/kernel/relocate_kernel.S +++ b/arch/arm64/kernel/relocate_kernel.S @@ -13,6 +13,7 @@ #include #include #include +#include /* * arm64_relocate_new_kernel - Put a 2nd stage image in place and boot it. @@ -61,12 +62,20 @@ SYM_CODE_START(arm64_relocate_new_kernel) isb /* Start new image. */ + ldr x1, [x0, #KIMAGE_ARCH_EL2_VECTORS] /* relocation start */ + cbz x1, .Lel1 + ldr x1, [x0, #KIMAGE_START] /* relocation start */ + ldr x2, [x0, #KIMAGE_ARCH_DTB_MEM] /* dtb address */ + mov x3, xzr + mov x4, xzr + mov x0, #HVC_SOFT_RESTART + hvc #0 /* Jumps from el2 */ +.Lel1: ldr x4, [x0, #KIMAGE_START] /* relocation start */ ldr x0, [x0, #KIMAGE_ARCH_DTB_MEM] /* dtb address */ - mov x1, xzr mov x2, xzr mov x3, xzr - br x4 + br x4 /* Jumps from el1 */ SYM_CODE_END(arm64_relocate_new_kernel) .align 3 /* To keep the 64-bit values below naturally aligned. */