From patchwork Mon Sep 12 17:51:54 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robin Murphy X-Patchwork-Id: 9327391 X-Patchwork-Delegate: agross@codeaurora.org Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 3184560231 for ; Mon, 12 Sep 2016 17:52:05 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2D1D128E63 for ; Mon, 12 Sep 2016 17:52:05 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 21B0328E65; Mon, 12 Sep 2016 17:52:05 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8E6E428E63 for ; Mon, 12 Sep 2016 17:52:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932205AbcILRwC (ORCPT ); Mon, 12 Sep 2016 13:52:02 -0400 Received: from foss.arm.com ([217.140.101.70]:59072 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932199AbcILRv6 (ORCPT ); Mon, 12 Sep 2016 13:51:58 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 5DF0F22E; Mon, 12 Sep 2016 10:51:57 -0700 (PDT) Received: from [10.1.211.71] (e104324-lin.cambridge.arm.com [10.1.211.71]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 36DDF3F21A; Mon, 12 Sep 2016 10:51:56 -0700 (PDT) Subject: Re: [PATCH] ARM: decompressor: reset ttbcr fields to use TTBR0 on ARMv7 To: Srinivas Ramana , linux@armlinux.org.uk, nicolas.pitre@linaro.org, will.deacon@arm.com References: <57D3C06D.4030908@codeaurora.org> <1473663420-18629-1-git-send-email-sramana@codeaurora.org> Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org From: Robin Murphy Message-ID: <7608c508-0537-267c-0cdf-6995445b811e@arm.com> Date: Mon, 12 Sep 2016 18:51:54 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: <1473663420-18629-1-git-send-email-sramana@codeaurora.org> Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP On 12/09/16 07:57, Srinivas Ramana wrote: > If the bootloader uses the long descriptor format and jumps to > kernel decompressor code, TTBCR may not be in a right state. > Before enabling the MMU, it is required to clear the TTBCR.PD0 > field to use TTBR0 for translation table walks. > > The 'commit dbece45894d3a ("ARM: 7501/1: decompressor: > reset ttbcr for VMSA ARMv7 cores")' does the reset of TTBCR.N, but > doesn't consider all the bits for the size of TTBCR.N. > > Clear TTBCR.PD0 field and reset all the three bits of TTBCR.N to > indicate the use of TTBR0 and the correct base address width. > > Signed-off-by: Srinivas Ramana > --- > arch/arm/boot/compressed/head.S | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S > index af11c2f8f3b7..fc6d541549a2 100644 > --- a/arch/arm/boot/compressed/head.S > +++ b/arch/arm/boot/compressed/head.S > @@ -779,7 +779,7 @@ __armv7_mmu_cache_on: > orrne r0, r0, #1 @ MMU enabled > movne r1, #0xfffffffd @ domain 0 = client > bic r6, r6, #1 << 31 @ 32-bit translation system Hmm, if TTBCR.EAE _was_ actually set... > - bic r6, r6, #3 << 0 @ use only ttbr0 > + bic r6, r6, #(7 << 0) | (1 << 4) @ use only ttbr0 > mcrne p15, 0, r3, c2, c0, 0 @ load page table pointer > mcrne p15, 0, r1, c3, c0, 0 @ load domain access control > mcrne p15, 0, r6, c2, c0, 2 @ load ttb control ...then strictly the TLBIALL needs to happen after the ISB following this update. Otherwise per B3.10.2 of DDI406C.c I think we might be into unpredictable territory - i.e. if the TLB happens to treat long- and short-descriptor entries differently then the TLBI beforehand (with EAE set) may be at liberty to only discard long-descriptor entries and leave bogus short-descriptor entries sitting around. In other words, something like (completely untested): ---8<--- Robin. Acked-by: Robin Murphy --- To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index af11c2f8f3b7..536b7781024a 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S @@ -764,7 +764,6 @@ __armv7_mmu_cache_on: mov r0, #0 mcr p15, 0, r0, c7, c10, 4 @ drain write buffer tst r11, #0xf @ VMSA - mcrne p15, 0, r0, c8, c7, 0 @ flush I,D TLBs #endif mrc p15, 0, r0, c1, c0, 0 @ read control reg bic r0, r0, #1 << 28 @ clear SCTLR.TRE @@ -783,8 +782,11 @@ __armv7_mmu_cache_on: mcrne p15, 0, r3, c2, c0, 0 @ load page table pointer mcrne p15, 0, r1, c3, c0, 0 @ load domain access control mcrne p15, 0, r6, c2, c0, 2 @ load ttb control -#endif mcr p15, 0, r0, c7, c5, 4 @ ISB + mcrne p15, 0, r0, c8, c7, 0 @ flush I,D TLBs +#else + mcr p15, 0, r0, c7, c5, 4 @ ISB +#endif mcr p15, 0, r0, c1, c0, 0 @ load control register mrc p15, 0, r0, c1, c0, 0 @ and read it back ---8<---