From mboxrd@z Thu Jan 1 00:00:00 1970 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=-16.8 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 A28DEC433B4 for ; Thu, 8 Apr 2021 04:12:27 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (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 2BA0961157 for ; Thu, 8 Apr 2021 04:12:27 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2BA0961157 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=desiato.20200630; 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=w4tjLuT88XI7esg9mATGYdwrDDwW4QIa1+frpU2SCPY=; b=dNpV/HCb8Yf7ePnmCRbYa1I5c dResGZU6n719c8eXskcDSiHWVnhUKtg8WGsuD8i75cHtOmJkyfnot1ZeaaxCHCg2ul5mww07qbitb c8TEBDtYVrvUoeRbYxwy8J4H2Jv/x3TML6k3KQ2Ms2jQ096JAD/7FQDXvDpBwZFt+Ykp0ibixVALB eioDA2KY3F/iojwgr8rvIKEfYrDusfLEHvH/snTJoe54WEYh8wSWRroi4iD+JtJYPZeyPtFMmurAE mF/zrNGeieWdlk7QbB5eLCwhG7VA3HxeQX9MUCBhm8g5UyGID0NgmkKfNM26SRvI4ntqPbBS7f2Qk //knCgn6A==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lUM0A-006nVf-SZ; Thu, 08 Apr 2021 04:10:43 +0000 Received: from mail-qv1-xf36.google.com ([2607:f8b0:4864:20::f36]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lULvY-006leZ-2F for linux-arm-kernel@lists.infradead.org; Thu, 08 Apr 2021 04:05:59 +0000 Received: by mail-qv1-xf36.google.com with SMTP id c9so245959qvv.13 for ; Wed, 07 Apr 2021 21:05:55 -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=ATHDsIlQRij0i8p3z1/oZchje9DfRT1VSEQgV22ghC4=; b=cZfP06UdFwUbDXzsBkl1RZmPvCxQFFD555CU5BZSd+vAYM+/Oe+q5LF6b+AeDb3hx2 LFsT7XpzjiKY3Si2YsqeQ/IsmJpOiDmMG/HNxXKVtP9KTMFFrpTt/zWcuY6K4+nYd9LP 9ZKSsnmvV+2+q+Pmt93pKHZ0lgdpVdpMXDll0Wv1hibDF4r0T45CgLAGXvLMQJPDkBFz 9IzjdkP1g6YNXrx/gkwrI/Ofe/tf10DE04Grydz47vkZEbw+ldvrJuhINzXNy4tlgWG7 P+aKh8JBXoF2aRQrMgr5pwbBamx/FerBKZ1ntwmSE4A+0xIGTTmKGW08lsKS3Z2H1qJG Decw== 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=ATHDsIlQRij0i8p3z1/oZchje9DfRT1VSEQgV22ghC4=; b=Ymdu68QMAUYglYl+fPqw2z/QKZGwBnZ78bg92Kdt0mZ39qnwa/0Pcpms8WAkHWiEXn QfIcpWcmxKzDRAvrgwQMzVNP5KMqOE7Dyr1ywA81m+2kT1hdYqcfq7Bzwi7ZvRfXoAfV fP84zCXjwUx+CtDw64rXY64lZHJ8E+nzWqsj0pw/uuq7HZ33qAfz6FDK8EFz5MEJPRrY hz7AKlv2ElnURx9+l7QykNizOhAsCLjj01MgfA/xaNqY5YMVPB8ru7R7dkUi/sCa55xp 6bRQgmbgsh5QmLLut8gww3kBN0S+56Ll1+rLtp1c+B2tHgCn0B/0L/ng4LeTcWsEZyja 8f6Q== X-Gm-Message-State: AOAM532b4TKV2pNvtwKiwpiUGkCccMQzBEnqCKb8vB8qQagNyPjvjyeL Z4z1zGlPMpSQHFdzo+fAl4xxTg== X-Google-Smtp-Source: ABdhPJyQo5a7wag6qg1KfAN2lYACfcQS04kFQ7QD+1uKAF30/6EW8kWHUAmbTGpYPmRfnaUQw+xfFQ== X-Received: by 2002:a0c:e2cd:: with SMTP id t13mr7015227qvl.21.1617854754850; Wed, 07 Apr 2021 21:05:54 -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 207sm18177874qkl.125.2021.04.07.21.05.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Apr 2021 21:05:54 -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 Subject: [PATCH v13 12/18] arm64: kexec: relocate in EL1 mode Date: Thu, 8 Apr 2021 00:05:31 -0400 Message-Id: <20210408040537.2703241-13-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210408040537.2703241-1-pasha.tatashin@soleen.com> References: <20210408040537.2703241-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-20210408_050557_070305_D08D80B2 X-CRM114-Status: GOOD ( 13.26 ) 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: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 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 1922e7a690f8..f6d95512fec6 100644 --- a/arch/arm64/kernel/cpu-reset.h +++ b/arch/arm64/kernel/cpu-reset.h @@ -20,11 +20,10 @@ static inline void __noreturn cpu_soft_restart(unsigned long entry, { typeof(__cpu_soft_restart) *restart; - unsigned long el2_switch = is_hyp_callable(); restart = (void *)__pa_symbol(__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 fb03b6676fb9..d5940b7889f8 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. */ -- 2.25.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel