Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp236873pxb; Wed, 20 Jan 2021 06:00:08 -0800 (PST) X-Google-Smtp-Source: ABdhPJzv8LXERkb5XnxFp+siStj5j8DEUlle4R2/D7R4p4LmOlXHOTmRBt294vet6D1BoSWh5rnp X-Received: by 2002:a17:906:b244:: with SMTP id ce4mr5994179ejb.159.1611151208385; Wed, 20 Jan 2021 06:00:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611151208; cv=none; d=google.com; s=arc-20160816; b=a3th/zjSCJq04poRLIP1wR1vyjVP52SabUBAw5Cn0nsZbzTzue+RKrfNxVsGDN0xt+ cO2aF5YymIpDJXxcCxxdHkzX15hncP9l2zEmfCfCpd3PMd04VfeyYExDSHR+Gdwg8hqz NjnuPqxucn7HHP70q7vP1ZZMujF54/SVCo3WXSjWYJBLUTakqdLDYLIzx/bQ60k6WhDv MJqCJfE28rNzxxBZlPApgO0ZTbZMP0LTe+h9t6GL7/1siYdzvJgt0rtnESs8mpXy8EJr ESYQaB8P9Y5uTZkwaNEFHIPb7SQ3GT67Kpj7n6v35PX31Ec1GjxaEM5jbrlllNFiWNdM obFA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=kKvn2Ftg6PJhIoz1lLLNwCbaXI95j1nZ7HgT0a4XefA=; b=YMLFsFFev9mimrrks+zsuCuq+/crb2UsXzCJgT5x9OLXAD8N7+U/goLM4gr6SZr/xQ xUYrYYZXirEPAvZZ1mn5R4jwegdEQ9hlnH4cT50T4MJ91WvP7uUjOORrr1y+6mTTF90b TdA5MRDiaIw2Lo6PJ0YTIM1UjMv0/IZ8VA9cwz2BK02DHwA6ZQrfIfhhVw0oRkH1IAbv WoopU5YMQ0dFgA6OJ5RNp9fvpWNcSUH1vqTxqtBivc8bA6vIeEcEOpWErh+U27LWCV47 1HjDBlNXI51X4h8mcdtDracEnV2SqSUt0L06WLcCj2bWR4HOEt7zc95d7a/F0MoA3i/O YcGA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmx.net header.s=badeba3b8450 header.b=akLBpE10; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=caramail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a7si865805edr.457.2021.01.20.05.59.42; Wed, 20 Jan 2021 06:00:08 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmx.net header.s=badeba3b8450 header.b=akLBpE10; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=caramail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388072AbhATN5o (ORCPT + 99 others); Wed, 20 Jan 2021 08:57:44 -0500 Received: from mout.gmx.net ([212.227.15.19]:57827 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389894AbhATN3t (ORCPT ); Wed, 20 Jan 2021 08:29:49 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1611149253; bh=Qa9Di41LcN0RuLnAp68u5mMaALrY7xnIGO1WB315kuo=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=akLBpE10xmN+SQNDTySZETF5P6JMvSSXEEqfrLQ8sbKMcz0aSw6iNRmK/TPMs7+Cr BMD1KfWBWlOcf/0uhYIDqnme+60U+SjD2fTa7zS71kXdWCtzueZ1L23LYAypvFp1YO QqdGA9NwL2upvnFeaZQDj08MTtcCjeVr7uuUexmc= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost.localdomain ([83.204.192.78]) by mail.gmx.net (mrgmx004 [212.227.17.184]) with ESMTPSA (Nemesis) id 1MIwzA-1lIDwF2YO2-00KTG9; Wed, 20 Jan 2021 14:27:33 +0100 From: Mohamed Mediouni To: linux-arm-kernel@lists.infradead.org Cc: Catalin Marinas , Will Deacon , Mark Rutland , Marc Zyngier , Hector Martin , linux-kernel@vger.kernel.org, Stan Skowronek , Mohamed Mediouni Subject: [RFC PATCH 2/7] arm64: kernel: Add a WFI hook. Date: Wed, 20 Jan 2021 14:27:12 +0100 Message-Id: <20210120132717.395873-3-mohamed.mediouni@caramail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210120132717.395873-1-mohamed.mediouni@caramail.com> References: <20210120132717.395873-1-mohamed.mediouni@caramail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:VFpxDb1Pw2xeOZRr7mOJYZKYKFdz9uqWWjqerljkCcZ9LCRlKdN Q5uAw7cv2cLU3r24bGFbFQNqNzTMXIg6nBOdfRDMUyr5RIq0GQVT/xFBaYTO65TMYcvHSBb i839SCKlA6H2az5y/0KNi3nRucCFPMzEe544c0albOKkKGS7nWwImD/LPbJCHj0poBrDyb7 c9bubmzDe876bkTyY9v8Q== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:lptcHETjPWI=:H8zJtTpVUX88hOd4CmTUwM eXCTnZIzj8MEsPy1fz1MiLFlq1mocVd4sID0CDXoIOzaMK+xDCXO8rBzm5+7tipzqd9TKfXTA ZzDXAuX5AS7v64qWbVMzM2nQM2p2jM0wmLX60hWqNPakY0joMKwRf7hgGjnogY6xcI3293CtU ZrVsQzJv7RoIKRDO2ZIDz+oe7SCj9BDumcmQN+q4mhday4hDjh2MLuU9kTw8uP3oba6vzAYIa vvvmPcA0QzM+9DyPxPSi2QIfHY3xuoCYywME/Xu8Hatubcc+c30T9tYEIYk72HaUIFOHXodPl Bt7qK7FSyg+SedxovJ0bs+wqpQA0s2ecXQFkBTsAptEg0qAgR4UfAniyp7+8oqbjGJr/fxd/0 Q89A7v0CRIAazZqW9KD449VmnGYc8OOwU7TWu4lJOaP+fhXVRPKjXkufjRAeMw8mRx2nirp6c 05X0VcYEmHmP27sfLtgWVWcBprFOxocENJeVgVwazranfdzyu1Vk2O1uMVHIV8ajOK0MD0VtC IMUT+4xinygpxTCV2ACoOQhAm1JWbB600HlZx7CYq76MQnkMwdizmWGmDyiBvJv2MSZkRj4tq 6gFJmURf7sbcsyJiA3SpFg2/9S2nyE1qJFSR6/XbhuD9WfCTlcOpPP1W0pbbKLAgJ8EP1Y4rZ 17s20BB1IO4/Vw0fWx2dYwzGoG3F8GgBBBSfwRyP45AunuDWw1MpcI/T3Pu8s0nfb3Pv7G+Ob d4XFRv5u01iNK/2wXtRPpfQAKBtpp2twxgYR7LCwzA8XAZDlxTGqrhsaPqlXVmbwcu0l6KtQZ tR0MoJG+haX4ui5HGVRnjnPPbAiitF5/TKzDPu/L9QGCL8i0aapSC/knWSI5xA0OAA5HBAGUL 2TbISFds5qsTmJ5rTsok6nxcJ4A3UkL9dXNJcvlng= Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Stan Skowronek WFI drops register state on Apple Silicon for SMP systems. This hook will be used for a hardware workaround in the Apple CPU start driver. Signed-off-by: Stan Skowronek Signed-off-by: Mohamed Mediouni =2D-- arch/arm64/include/asm/cpu_ops.h | 2 ++ arch/arm64/kernel/cpu_ops.c | 6 ++++++ arch/arm64/kernel/process.c | 11 +++++++++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/arch/arm64/include/asm/cpu_ops.h b/arch/arm64/include/asm/cpu= _ops.h index e95c4df83911..4be0fc5bcaf9 100644 =2D-- a/arch/arm64/include/asm/cpu_ops.h +++ b/arch/arm64/include/asm/cpu_ops.h @@ -23,6 +23,7 @@ * @cpu_boot: Boots a cpu into the kernel. * @cpu_postboot: Optionally, perform any post-boot cleanup or necessary * synchronisation. Called from the cpu being booted. + * @cpu_wfi: Optionally, replace calls to WFI in default idle with thi= s. * @cpu_can_disable: Determines whether a CPU can be disabled based on * mechanism-specific information. * @cpu_disable: Prepares a cpu to die. May fail for some mechanism-speci= fic @@ -43,6 +44,7 @@ struct cpu_operations { int (*cpu_prepare)(unsigned int); int (*cpu_boot)(unsigned int); void (*cpu_postboot)(void); + void (*cpu_wfi)(void); #ifdef CONFIG_HOTPLUG_CPU bool (*cpu_can_disable)(unsigned int cpu); int (*cpu_disable)(unsigned int cpu); diff --git a/arch/arm64/kernel/cpu_ops.c b/arch/arm64/kernel/cpu_ops.c index e133011f64b5..6979fc4490b2 100644 =2D-- a/arch/arm64/kernel/cpu_ops.c +++ b/arch/arm64/kernel/cpu_ops.c @@ -19,12 +19,18 @@ extern const struct cpu_operations smp_spin_table_ops; extern const struct cpu_operations acpi_parking_protocol_ops; #endif extern const struct cpu_operations cpu_psci_ops; +#ifdef CONFIG_ARCH_APPLE +extern const struct cpu_operations cpu_apple_start_ops; +#endif static const struct cpu_operations *cpu_ops[NR_CPUS] __ro_after_init; static const struct cpu_operations *const dt_supported_cpu_ops[] __initco= nst =3D { &smp_spin_table_ops, &cpu_psci_ops, +#ifdef CONFIG_ARCH_APPLE + &cpu_apple_start_ops, +#endif NULL, }; diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c index 34ec400288d0..611c639e20be 100644 =2D-- a/arch/arm64/kernel/process.c +++ b/arch/arm64/kernel/process.c @@ -57,6 +57,7 @@ #include #include #include +#include #if defined(CONFIG_STACKPROTECTOR) && !defined(CONFIG_STACKPROTECTOR_PER_= TASK) #include @@ -74,8 +75,14 @@ void (*arm_pm_restart)(enum reboot_mode reboot_mode, co= nst char *cmd); static void noinstr __cpu_do_idle(void) { - dsb(sy); - wfi(); + const struct cpu_operations *ops =3D get_cpu_ops(task_cpu(current)); + + if (ops->cpu_wfi) { + ops->cpu_wfi(); + } else { + dsb(sy); + wfi(); + } } static void noinstr __cpu_do_idle_irqprio(void) =2D- 2.29.2