From patchwork Mon Jul 29 16:14:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Rutland X-Patchwork-Id: 13745382 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 828FBC3DA61 for ; Mon, 29 Jul 2024 16:18:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=BU270ZpBBvm8aDrMqeF/b8RFoPUdF2MZtueBl4qmaSs=; b=oEvHPpfsWEhnekvzfaOh+AY5aG tNHJtt6MxHqavkaYLOBmjrJ8mgokcKt7ldixJLhzP4hjtT/arxKf9lwmvlJcgfDjXMDgM6ekeVQW/ KTTwJqG2E43W4IhAQdU8S8Vd4D3fnipSDIdTrSSMwGDAMsE2nXTCbEEOy/wBhqLLcJKxzfU6cQQO1 6RMnFCvzRXniSTizf2UlSVzaotCrlPwuZM7mGlseeUpN/8oFJ3N+c9eeHIWilRN3o/i3zBCkLoyTd +2moAP9Hpt8BtWMZoiyLIsP7MaWs3HPKBP2kztC7IKMZK8ohVlVMqTxXf/BfxRKlFCv6Bm6G+cq2B PZkSqeUQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sYT4o-0000000Bz3U-3hVZ; Mon, 29 Jul 2024 16:18:22 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sYT1w-0000000ByMz-0mfl for linux-arm-kernel@lists.infradead.org; Mon, 29 Jul 2024 16:15:25 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id ED05F143D; Mon, 29 Jul 2024 09:15:48 -0700 (PDT) Received: from lakrids.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 84A1A3F766; Mon, 29 Jul 2024 09:15:22 -0700 (PDT) From: Mark Rutland To: linux-arm-kernel@lists.infradead.org Cc: akos.denke@arm.com, andre.przywara@arm.com, luca.fancellu@arm.com, mark.rutland@arm.com, maz@kernel.org Subject: [BOOT-WRAPPER 07/11] aarch32: Always enter kernel via exception return Date: Mon, 29 Jul 2024 17:14:57 +0100 Message-Id: <20240729161501.1806271-8-mark.rutland@arm.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20240729161501.1806271-1-mark.rutland@arm.com> References: <20240729161501.1806271-1-mark.rutland@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240729_091524_325706_7D8B2E66 X-CRM114-Status: GOOD ( 11.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 When the boot-wrapper is entered at Seculre PL1 it will enter the kernel via an exception return, ERET, and when entered at Hyp it will branch to the kernel directly. This is an artifact of the way the boot-wrapper was originally written in assembly, and it would be preferable to always enter the kernel via an exception return so that PSTATE is always initialized to a known-good value. Rework jump_kernel() to always enter the kernel via ERET, matching the stype of the AArch64 version of jump_kernel() Signed-off-by: Mark Rutland Cc: Akos Denke Cc: Andre Przywara Cc: Luca Fancellu Cc: Marc Zyngier --- arch/aarch32/boot.S | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/arch/aarch32/boot.S b/arch/aarch32/boot.S index a6f0751..11fd7aa 100644 --- a/arch/aarch32/boot.S +++ b/arch/aarch32/boot.S @@ -76,10 +76,6 @@ reset_at_hyp: bl setup_stack - mov r0, #1 - ldr r1, =flag_no_el3 - str r0, [r1] - bl cpu_init_bootwrapper bl cpu_init_arch @@ -96,9 +92,10 @@ err_invalid_id: * r1-r3, sp[0]: kernel arguments */ ASM_FUNC(jump_kernel) - sub sp, #4 @ Ignore fourth argument - push {r0 - r3} - mov r5, sp + mov r4, r0 + mov r5, r1 + mov r6, r2 + mov r7, r3 ldr r0, =HSCTLR_KERNEL mcr p15, 4, r0, c1, c0, 0 @ HSCTLR @@ -111,19 +108,24 @@ ASM_FUNC(jump_kernel) bl find_logical_id bl setup_stack - ldr lr, [r5], #4 - ldm r5, {r0 - r2} - - ldr r4, =flag_no_el3 - ldr r4, [r4] - cmp r4, #1 - bxeq lr @ no EL3 + mov r0, r5 + mov r1, r6 + mov r2, r7 + ldr r3, =SPSR_KERNEL + + mrs r5, cpsr + and r5, #PSR_MODE_MASK + cmp r5, #PSR_MON + beq eret_at_mon + cmp r5, #PSR_HYP + beq eret_at_hyp + b . - ldr r4, =SPSR_KERNEL - msr spsr_cxf, r4 +eret_at_mon: + mov lr, r4 + msr spsr_cxf, r3 movs pc, lr - - .section .data - .align 2 -flag_no_el3: - .long 0 +eret_at_hyp: + msr elr_hyp, r4 + msr spsr_cxf, r3 + eret