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=-15.2 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 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 7D6E6C71156 for ; Thu, 3 Dec 2020 10:44:20 +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 181C9208A9 for ; Thu, 3 Dec 2020 10:44:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 181C9208A9 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.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:In-Reply-To:MIME-Version:References:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Z1VEjFrflcRnsvMdCl0BlZKNB/1bqo0PNr8mhdpqsK0=; b=fPMa66nkrzhG1bdbVJc0MmxJH 6HqElPhB5hkogRNeTWZASYCOQEr9ccrDxbxHw83elPcDZU/bY6eCYpaAo7qidnY6Eyr8Dil3e4glQ bc7zAgf/ZW1wEFFYmkyDAzcUAY4tsV3/u8QMJ1EHMEjr4iNvB4U1cwffiGBh9oSp8036B4kVdO6d9 txzcX5WehLAlS6Su71gBv2TZkGpZmsfdsY5uA/8AArg6tJiqnGysiIAuLWBwxo6Ler5Px/JEkqGCh nv3qCX+4KJrIMRR6mrVRTZ3sbUNZ/JCs+HbQEJfaxuELYRLqfO6n+dVBhTyKUhJos5axfJuHOkdy/ JjBusCayw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kkm4k-0006ZQ-Rq; Thu, 03 Dec 2020 10:43:02 +0000 Received: from foss.arm.com ([217.140.110.172]) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kkm4g-0006Yy-HO for linux-arm-kernel@lists.infradead.org; Thu, 03 Dec 2020 10:42:59 +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 3F2AF113E; Thu, 3 Dec 2020 02:42:57 -0800 (PST) Received: from C02TD0UTHF1T.local (unknown [10.57.0.87]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6D5F43F575; Thu, 3 Dec 2020 02:42:53 -0800 (PST) Date: Thu, 3 Dec 2020 10:42:46 +0000 From: Mark Rutland To: David Brazdil Subject: Re: [PATCH v4 04/26] psci: Split functions to v0.1 and v0.2+ variants Message-ID: <20201203104246.GA96754@C02TD0UTHF1T.local> References: <20201202184122.26046-1-dbrazdil@google.com> <20201202184122.26046-5-dbrazdil@google.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20201202184122.26046-5-dbrazdil@google.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201203_054258_708009_531BE8D4 X-CRM114-Status: GOOD ( 22.35 ) 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: Lorenzo Pieralisi , kernel-team@android.com, Jonathan Corbet , Catalin Marinas , Suzuki K Poulose , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Sudeep Holla , James Morse , linux-arm-kernel@lists.infradead.org, Marc Zyngier , Tejun Heo , Dennis Zhou , Christoph Lameter , Will Deacon , kvmarm@lists.cs.columbia.edu, Julien Thierry 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 On Wed, Dec 02, 2020 at 06:41:00PM +0000, David Brazdil wrote: > Refactor implementation of v0.1+ functions (CPU_SUSPEND, CPU_OFF, > CPU_ON, MIGRATE) to have two functions psci_0_1_foo / psci_0_2_foo that > select the function ID and call a common helper __psci_foo. > > This is a small cleanup so that the function ID array is only used for > v0.1 configurations. > > Signed-off-by: David Brazdil Acked-by: Mark Rutland Mark. > --- > drivers/firmware/psci/psci.c | 94 +++++++++++++++++++++++------------- > 1 file changed, 60 insertions(+), 34 deletions(-) > > diff --git a/drivers/firmware/psci/psci.c b/drivers/firmware/psci/psci.c > index ace5b9ac676c..13b9ed71b446 100644 > --- a/drivers/firmware/psci/psci.c > +++ b/drivers/firmware/psci/psci.c > @@ -168,46 +168,80 @@ int psci_set_osi_mode(bool enable) > return psci_to_linux_errno(err); > } > > -static int psci_cpu_suspend(u32 state, unsigned long entry_point) > +static int __psci_cpu_suspend(u32 fn, u32 state, unsigned long entry_point) > { > int err; > - u32 fn; > > - fn = psci_function_id[PSCI_FN_CPU_SUSPEND]; > err = invoke_psci_fn(fn, state, entry_point, 0); > return psci_to_linux_errno(err); > } > > -static int psci_cpu_off(u32 state) > +static int psci_0_1_cpu_suspend(u32 state, unsigned long entry_point) > +{ > + return __psci_cpu_suspend(psci_function_id[PSCI_FN_CPU_SUSPEND], > + state, entry_point); > +} > + > +static int psci_0_2_cpu_suspend(u32 state, unsigned long entry_point) > +{ > + return __psci_cpu_suspend(PSCI_FN_NATIVE(0_2, CPU_SUSPEND), > + state, entry_point); > +} > + > +static int __psci_cpu_off(u32 fn, u32 state) > { > int err; > - u32 fn; > > - fn = psci_function_id[PSCI_FN_CPU_OFF]; > err = invoke_psci_fn(fn, state, 0, 0); > return psci_to_linux_errno(err); > } > > -static int psci_cpu_on(unsigned long cpuid, unsigned long entry_point) > +static int psci_0_1_cpu_off(u32 state) > +{ > + return __psci_cpu_off(psci_function_id[PSCI_FN_CPU_OFF], state); > +} > + > +static int psci_0_2_cpu_off(u32 state) > +{ > + return __psci_cpu_off(PSCI_0_2_FN_CPU_OFF, state); > +} > + > +static int __psci_cpu_on(u32 fn, unsigned long cpuid, unsigned long entry_point) > { > int err; > - u32 fn; > > - fn = psci_function_id[PSCI_FN_CPU_ON]; > err = invoke_psci_fn(fn, cpuid, entry_point, 0); > return psci_to_linux_errno(err); > } > > -static int psci_migrate(unsigned long cpuid) > +static int psci_0_1_cpu_on(unsigned long cpuid, unsigned long entry_point) > +{ > + return __psci_cpu_on(psci_function_id[PSCI_FN_CPU_ON], cpuid, entry_point); > +} > + > +static int psci_0_2_cpu_on(unsigned long cpuid, unsigned long entry_point) > +{ > + return __psci_cpu_on(PSCI_FN_NATIVE(0_2, CPU_ON), cpuid, entry_point); > +} > + > +static int __psci_migrate(u32 fn, unsigned long cpuid) > { > int err; > - u32 fn; > > - fn = psci_function_id[PSCI_FN_MIGRATE]; > err = invoke_psci_fn(fn, cpuid, 0, 0); > return psci_to_linux_errno(err); > } > > +static int psci_0_1_migrate(unsigned long cpuid) > +{ > + return __psci_migrate(psci_function_id[PSCI_FN_MIGRATE], cpuid); > +} > + > +static int psci_0_2_migrate(unsigned long cpuid) > +{ > + return __psci_migrate(PSCI_FN_NATIVE(0_2, MIGRATE), cpuid); > +} > + > static int psci_affinity_info(unsigned long target_affinity, > unsigned long lowest_affinity_level) > { > @@ -352,7 +386,7 @@ static void __init psci_init_system_suspend(void) > > static void __init psci_init_cpu_suspend(void) > { > - int feature = psci_features(psci_function_id[PSCI_FN_CPU_SUSPEND]); > + int feature = psci_features(PSCI_FN_NATIVE(0_2, CPU_SUSPEND)); > > if (feature != PSCI_RET_NOT_SUPPORTED) > psci_cpu_suspend_feature = feature; > @@ -426,24 +460,16 @@ static void __init psci_init_smccc(void) > static void __init psci_0_2_set_functions(void) > { > pr_info("Using standard PSCI v0.2 function IDs\n"); > - psci_ops.get_version = psci_0_2_get_version; > - > - psci_function_id[PSCI_FN_CPU_SUSPEND] = > - PSCI_FN_NATIVE(0_2, CPU_SUSPEND); > - psci_ops.cpu_suspend = psci_cpu_suspend; > - > - psci_function_id[PSCI_FN_CPU_OFF] = PSCI_0_2_FN_CPU_OFF; > - psci_ops.cpu_off = psci_cpu_off; > - > - psci_function_id[PSCI_FN_CPU_ON] = PSCI_FN_NATIVE(0_2, CPU_ON); > - psci_ops.cpu_on = psci_cpu_on; > > - psci_function_id[PSCI_FN_MIGRATE] = PSCI_FN_NATIVE(0_2, MIGRATE); > - psci_ops.migrate = psci_migrate; > - > - psci_ops.affinity_info = psci_affinity_info; > - > - psci_ops.migrate_info_type = psci_migrate_info_type; > + psci_ops = (struct psci_operations){ > + .get_version = psci_0_2_get_version, > + .cpu_suspend = psci_0_2_cpu_suspend, > + .cpu_off = psci_0_2_cpu_off, > + .cpu_on = psci_0_2_cpu_on, > + .migrate = psci_0_2_migrate, > + .affinity_info = psci_affinity_info, > + .migrate_info_type = psci_migrate_info_type, > + }; > > arm_pm_restart = psci_sys_reset; > > @@ -523,22 +549,22 @@ static int __init psci_0_1_init(struct device_node *np) > > if (!of_property_read_u32(np, "cpu_suspend", &id)) { > psci_function_id[PSCI_FN_CPU_SUSPEND] = id; > - psci_ops.cpu_suspend = psci_cpu_suspend; > + psci_ops.cpu_suspend = psci_0_1_cpu_suspend; > } > > if (!of_property_read_u32(np, "cpu_off", &id)) { > psci_function_id[PSCI_FN_CPU_OFF] = id; > - psci_ops.cpu_off = psci_cpu_off; > + psci_ops.cpu_off = psci_0_1_cpu_off; > } > > if (!of_property_read_u32(np, "cpu_on", &id)) { > psci_function_id[PSCI_FN_CPU_ON] = id; > - psci_ops.cpu_on = psci_cpu_on; > + psci_ops.cpu_on = psci_0_1_cpu_on; > } > > if (!of_property_read_u32(np, "migrate", &id)) { > psci_function_id[PSCI_FN_MIGRATE] = id; > - psci_ops.migrate = psci_migrate; > + psci_ops.migrate = psci_0_1_migrate; > } > > return 0; > -- > 2.29.2.454.gaff20da3a2-goog > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel