From patchwork Wed Jan 20 11:37:02 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mohamed Mediouni X-Patchwork-Id: 12032135 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=-10.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham 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 224B0C433E0 for ; Wed, 20 Jan 2021 11:39:01 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 C4E9022AAA for ; Wed, 20 Jan 2021 11:39:00 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C4E9022AAA Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=caramail.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=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:To:Date:Message-Id:Subject:Mime-Version:From: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=XNVGbY4ZWovjWFigI/+yGaXjYgWXGC+0tVIH6SNElR4=; b=1rdDJkGWJ2lved6C5yvoAi54Xt M4W87QSTEDJyVV1S7npy6WHsAEwnZe92tjcuap5sSG3nS8kJHWRiyMpjjE8PZZ1SlqzDU0DazmAUF F8A8m400D3776KHebG136M/LbKNKoUSP+xN0AA0V+beOANRyqeRNDzyp7ZMersd3Ximqjloap2G1m IVJs3nN4yLZ8UZ8S82hcxyrYqzUykduhddQ7mrja0kISi2cyCOaqUPZSD6ToMPW9wticpqU5S7MCY M7eyoU9xjBFKs2W69pUM7biiYcG46Uljj6ZghbwHJjcsjc4FAZizXANhg9rKBdgNkZ6tdNTSA9cly uauHpWUg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l2Bnc-0003B6-HZ; Wed, 20 Jan 2021 11:37:20 +0000 Received: from mout.gmx.net ([212.227.17.20]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1l2BnT-00039O-2H for linux-arm-kernel@lists.infradead.org; Wed, 20 Jan 2021 11:37:12 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1611142623; bh=yP+0ZpEyODQg4IQgrFLqLHkUEaxLQnyVarhdKMvY+Ew=; h=X-UI-Sender-Class:From:Subject:Date:Cc:To; b=NidgcRekJDfzb+7vs8u2A5qpqDVYwChkU6hZx25xb87lgh9e1MOepMBqBd76mZmI4 IipsRmJChZ5/nJwb5YNaBT+JwnATdKESpc9dH66Hx7sMgA2QUr7ArVn70U93HdgVQA Vx0HJGrtEAVvXqL4VBfPcc58GjHFYdLCnLXzATa0= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [10.42.0.78] ([83.204.192.78]) by mail.gmx.net (mrgmx104 [212.227.17.174]) with ESMTPSA (Nemesis) id 1N2mBQ-1m0vh43aA8-0132VU; Wed, 20 Jan 2021 12:37:03 +0100 From: Mohamed Mediouni Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.60.0.2.5\)) Subject: [PATCH 3/3] arm64: mm: use nGnRnE instead of nGnRE on Apple processors Message-Id: Date: Wed, 20 Jan 2021 12:37:02 +0100 To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org X-Mailer: Apple Mail (2.3654.60.0.2.5) X-Provags-ID: V03:K1:LqipaoXg1JiKrBNorCn8+FwCfrzoRZrJ9EZuGtcEElXHOzz6vPB 5h9Axeed+jmKMBiQzSOm4DnrO6Qxsy38Pn5BCZ7DjgmpKvALx6JxHjTUXXdO853F1wobyon LFjV1yo+vkNQn8AF2mwPL2pPH31q0Mdx8HTWx055vLJggoB2Chsi90CZlOoiWIUwo6otIMn 7lI08uR3Nb9w1hDK3qz0w== X-UI-Out-Filterresults: notjunk:1;V03:K0:YWTH2k09Pjc=:ekdBfAdYjnPaVM/vkUpGmN 5QogswEZLhOsx3vsb30ktDLV5aVF7PDTVctRPm3XyWQrKH8kTkf6hJC1YUJTQ07F4NpvsTHRV nNxDLm2bw0Xn2znW/Cx6FQc/yiyd7veYwJxH2hiEpIpwlDlHlPSxhPlmllqLJFnHV8XrDD6PY l5d7QTU35Azliwid1IbClWUSgdXNU6+zZuG7jK+a9oYhLdO6On0OhR4KKthKx+Qdn3RjOcjgS A6SaC5LZtMfXADc1ali2y5+r+IJY+oqOQrNu1Qdd54NYBd7KtKjfQbSf9okjo3DtDRSauQdJM gc/Z52KYc4idMORGG/TZdyC0iNXVUpz+cdBfzFyY8MlUAevEsTY7Saq4nBl9l/jNasc4IFRgf R5cUAn8xRxdPCp65caEG9ZIeRXEUW3GZT+uLYACVX+1d4IddkE73I+xWuQCLLLchbceXfQ8Hw 3yqkpCATYdMekyhuHcQNR/W3jILPGq6pCNZtDw0inufklUV2vAa9Ez44avQarqDATQKjtBzM7 vqrQZWDryCWrw3P8irtPn7CGCa5X0U1zI3L3simRNdh3hkO+o1ppkEMAKBI+//MZ4s91dnzp6 zCfJMpGRgeeB9tCEbVXtQRqA7wk5j+0O6LYaTXR7oTDHHnyvxw94Nl9znT2N9yVdQ6CakgIq2 a/m6UaTmIlQ7M0aDHdnjQCQZGBE9FA/wh5C8ddRK1Whb5cO73cI2lbAh+Z2amhHkrKl+svDay VrTiHJvx8aKyiRxOC6F3tl16KzT9JQC9+dMxE/rWFsXx2UVMUvnTLnBCP/kWbweysmsOTonZi BfLEKWPW5BXVcf7gqFnmt/hMDeUXEqi7XB81aRVQzDxR79PZZdTlj0BC1bVhsyLEN41TfuDHj k7hcpYXW1leFbkL+lbNBW6QIYl6l8p4+dHW8wQ+no= X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210120_063711_394072_71DDB8A5 X-CRM114-Status: GOOD ( 12.03 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Catalin Marinas , Will Deacon , Stan Skowronek Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Mohamed Mediouni Use nGnRnE instead of nGnRE on Apple SoCs to workaround a serious hardware quirk. On Apple processors, writes using the nGnRE device memory type get dropped in flight, getting to nowhere. Signed-off-by: Mohamed Mediouni Signed-off-by: Stan Skowronek --- arch/arm64/mm/proc.S | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S index 1f7ee8c8b7b8..06436916f137 100644 --- a/arch/arm64/mm/proc.S +++ b/arch/arm64/mm/proc.S @@ -51,6 +51,25 @@ #define TCR_KASAN_HW_FLAGS 0 #endif +#ifdef CONFIG_ARCH_APPLE + +/* + * Apple cores appear to black-hole writes done with nGnRE. + * We settled on a work-around that uses MAIR vs changing every single user of + * nGnRE across the arm64 code. + */ + +#define MAIR_EL1_SET_APPLE \ + (MAIR_ATTRIDX(MAIR_ATTR_DEVICE_nGnRnE, MT_DEVICE_nGnRnE) | \ + MAIR_ATTRIDX(MAIR_ATTR_DEVICE_nGnRnE, MT_DEVICE_nGnRE) | \ + MAIR_ATTRIDX(MAIR_ATTR_DEVICE_GRE, MT_DEVICE_GRE) | \ + MAIR_ATTRIDX(MAIR_ATTR_NORMAL_NC, MT_NORMAL_NC) | \ + MAIR_ATTRIDX(MAIR_ATTR_NORMAL, MT_NORMAL) | \ + MAIR_ATTRIDX(MAIR_ATTR_NORMAL_WT, MT_NORMAL_WT) | \ + MAIR_ATTRIDX(MAIR_ATTR_NORMAL, MT_NORMAL_TAGGED)) + +#endif + /* * Default MAIR_EL1. MT_NORMAL_TAGGED is initially mapped as Normal memory and * changed during __cpu_setup to Normal Tagged if the system supports MTE. @@ -432,6 +451,13 @@ SYM_FUNC_START(__cpu_setup) * Memory region attributes */ mov_q x5, MAIR_EL1_SET +#ifdef CONFIG_ARCH_APPLE + mrs x0, MIDR_EL1 + lsr w0, w0, #24 + mov_q x1, MAIR_EL1_SET_APPLE + cmp x0, #0x61 // 0x61 = Implementer: Apple + csel x5, x1, x5, eq +#endif #ifdef CONFIG_ARM64_MTE mte_tcr .req x20