From patchwork Fri Jul 29 21:56:22 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lina Iyer X-Patchwork-Id: 73058 Delivered-To: patch@linaro.org Received: by 10.140.29.52 with SMTP id a49csp1601339qga; Fri, 29 Jul 2016 14:57:23 -0700 (PDT) X-Received: by 10.98.103.70 with SMTP id b67mr72649108pfc.30.1469829419907; Fri, 29 Jul 2016 14:56:59 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 195si20379500pfz.17.2016.07.29.14.56.59; Fri, 29 Jul 2016 14:56:59 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-arm-msm-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=pass (google.com: best guess record for domain of linux-arm-msm-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-arm-msm-owner@vger.kernel.org; dmarc=fail (p=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754189AbcG2V46 (ORCPT + 8 others); Fri, 29 Jul 2016 17:56:58 -0400 Received: from mail-pa0-f45.google.com ([209.85.220.45]:33897 "EHLO mail-pa0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754058AbcG2V45 (ORCPT ); Fri, 29 Jul 2016 17:56:57 -0400 Received: by mail-pa0-f45.google.com with SMTP id fi15so34629956pac.1 for ; Fri, 29 Jul 2016 14:56:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=anuWZ84nB8of07eRxaEnLi3jRI5uYVhQOGm2Ls7xRb0=; b=LC0fdJPvTEuC6HI+8820qytOeAcFvhWp1AyCShqU/1NGOPcc94tVNcdBTrYQhydfBu KjtdLiJ2JF4X/f2JDWBEY6qc/z08lxlxRoVnW58Pq7S3fHXyijFuaLRKD+o0JnLQFGNh QsVglC1XMGFccd9z1fq/lUOCg3MUpCH8YewRw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=anuWZ84nB8of07eRxaEnLi3jRI5uYVhQOGm2Ls7xRb0=; b=aDVzs7ytagsK5lLXqVz1ESkmQkvBToGVJQRIPb2qGcu4eMySCZuITEMQPkptWU1iN8 M084Apkzf06ot0DrlKw2Hd6us6J7VBDhzXLL7P+ADvdajiI/lKeO1gFKtPrhdVeNkjBV RlPTumbIJRdLAFRtMCKMeZbSV4FsoOMAfRQ0muxw/Q3xqN0YgWACbP/yMbJL0ENes0hy EVjFzW9tdUUfNQndtsyelGYB1SJL2MZZamHtZIQfUV1Nw4bzucoWViCWePXKUqxEdgjk BYwH06AWXP415b/SQb53jwBslni3yEE/gdCHIgDoQFyI2kwu9M+dBISYfOhlIQ4tKtN3 MmeA== X-Gm-Message-State: AEkoousU0+jxm0H4WFrbcF5J5NLZktztcL3jZclHh5HuD9KmmZcAg4wg54ReLyBx20PuA91F X-Received: by 10.66.236.9 with SMTP id uq9mr73693755pac.145.1469829416777; Fri, 29 Jul 2016 14:56:56 -0700 (PDT) Received: from ubuntu.localdomain (i-global254.qualcomm.com. [199.106.103.254]) by smtp.gmail.com with ESMTPSA id 81sm27196601pfm.90.2016.07.29.14.56.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 29 Jul 2016 14:56:55 -0700 (PDT) From: Lina Iyer To: ulf.hansson@linaro.org, khilman@kernel.org, rjw@rjwysocki.net, linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: andy.gross@linaro.org, sboyd@codeaurora.org, linux-arm-msm@vger.kernel.org, Lina Iyer , Lorenzo Pieralisi , Mark Rutland Subject: [PATCH v2 11/14] drivers: firmware: psci: Allow OS Initiated suspend mode Date: Fri, 29 Jul 2016 15:56:22 -0600 Message-Id: <1469829385-11511-12-git-send-email-lina.iyer@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1469829385-11511-1-git-send-email-lina.iyer@linaro.org> References: <1469829385-11511-1-git-send-email-lina.iyer@linaro.org> Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org PSCI firmware v1.0 onwards may support 2 different modes for CPU_SUSPEND. Platform coordinated mode is the default and every firmware should support it. OS Initiated mode is optional for the firmware to implement and allow Linux to make an better decision on the state of the CPU cluster heirarchy. With the kernel capable of deciding the state for CPU cluster and coherency domains, the OS Initiated mode may now be used by the kernel, provided the firmware supports it. SET_SUSPEND_MODE is a PSCI function available on v1.0 onwards and can be used to set the mode in the firmware. Cc: Lorenzo Pieralisi Cc: Mark Rutland Signed-off-by: Lina Iyer [Ulf: Rebased on 4.7 rc1] Signed-off-by: Ulf Hansson --- drivers/firmware/psci.c | 22 +++++++++++++++++++++- include/uapi/linux/psci.h | 5 +++++ 2 files changed, 26 insertions(+), 1 deletion(-) -- 2.7.4 -- 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/drivers/firmware/psci.c b/drivers/firmware/psci.c index 03e0458..3920aba 100644 --- a/drivers/firmware/psci.c +++ b/drivers/firmware/psci.c @@ -52,6 +52,7 @@ * require cooperation with a Trusted OS driver. */ static int resident_cpu = -1; +static bool psci_has_osi_pd; bool psci_tos_resident_on(int cpu) { @@ -563,10 +564,29 @@ out_put_node: return err; } +static int __init psci_1_0_init(struct device_node *np) +{ + int ret; + + ret = psci_0_2_init(np); + if (ret) + return ret; + + /* Check if PSCI OSI mode is available */ + ret = psci_features(psci_function_id[PSCI_FN_CPU_SUSPEND]); + if (ret & PSCI_1_0_OS_INITIATED) { + ret = psci_features(PSCI_1_0_FN_SET_SUSPEND_MODE); + if (!ret) + psci_has_osi_pd = true; + } + + return 0; +} + static const struct of_device_id psci_of_match[] __initconst = { { .compatible = "arm,psci", .data = psci_0_1_init}, { .compatible = "arm,psci-0.2", .data = psci_0_2_init}, - { .compatible = "arm,psci-1.0", .data = psci_0_2_init}, + { .compatible = "arm,psci-1.0", .data = psci_1_0_init}, {}, }; diff --git a/include/uapi/linux/psci.h b/include/uapi/linux/psci.h index 3d7a0fc..7dd778e 100644 --- a/include/uapi/linux/psci.h +++ b/include/uapi/linux/psci.h @@ -48,6 +48,7 @@ #define PSCI_1_0_FN_PSCI_FEATURES PSCI_0_2_FN(10) #define PSCI_1_0_FN_SYSTEM_SUSPEND PSCI_0_2_FN(14) +#define PSCI_1_0_FN_SET_SUSPEND_MODE PSCI_0_2_FN(15) #define PSCI_1_0_FN64_SYSTEM_SUSPEND PSCI_0_2_FN64(14) @@ -93,6 +94,10 @@ #define PSCI_1_0_FEATURES_CPU_SUSPEND_PF_MASK \ (0x1 << PSCI_1_0_FEATURES_CPU_SUSPEND_PF_SHIFT) +#define PSCI_1_0_OS_INITIATED BIT(0) +#define PSCI_1_0_SUSPEND_MODE_PC 0 +#define PSCI_1_0_SUSPEND_MODE_OSI 1 + /* PSCI return values (inclusive of all PSCI versions) */ #define PSCI_RET_SUCCESS 0 #define PSCI_RET_NOT_SUPPORTED -1