From patchwork Fri Apr 12 10:02:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudeep Holla X-Patchwork-Id: 162103 Delivered-To: patch@linaro.org Received: by 2002:a02:c6d8:0:0:0:0:0 with SMTP id r24csp423293jan; Fri, 12 Apr 2019 03:02:39 -0700 (PDT) X-Google-Smtp-Source: APXvYqzKceDdSwBq5PkYEdviEKgWfaghxz74FYNuH3uTI7/ki6qJgCeVSqkfhvV8c7AyzueG27fG X-Received: by 2002:a63:fc5a:: with SMTP id r26mr50007970pgk.97.1555063359219; Fri, 12 Apr 2019 03:02:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555063359; cv=none; d=google.com; s=arc-20160816; b=ZwPdIbszLkROU33QsBtk+thYZyGzV1p1D5OYUzbXlgLtcFwnfUciHUKWAeQcpQfDv0 266UmUZ4leb3tiTsIBAWSb1f8CpQwxdthyJwU3MFoskPMOW0wIIa5+Lki+mlpXYQ+fZF 3s9P8+NH58rR0nikkDCefPo4YUHny8sfbTDHvIHZq/yU5MdeXRa+9IEAbbrix61fMy9n VfBEXWXSlyRG/oYnJNbo/3iK8btRorqtYNa4QAKRfA5QPivFpOa6GNPpemDbcJpC4Usc 0kOJphsvRNg4lTiNcJWrUuqpn+2dB/UNIr94O0BtHboI9VDmkgc/94XugQBeiLokC4BH 5qog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=RsBJMArnjhWsF1PHaT7xod0FmihT5I/yLA0os/THGmg=; b=eDndUrRhcuHHbIU8why8xxgGQMzc9UFMsdzedeyF26ZD4XveosFreyOJLKX28Uaivu agVpRNizZcGnNtbOv5/u8d8SL5ACPcmqzoPbN3/17VnrCbuGfEBdwiHoNrBJdHzdO+9S Qhg4r/N6lRUmtU2N8XIQF3MyjD07SIWHaJhi0U3Egg1z4pTnltbsrKCw6ZYKLz87hMGM 9O4t2VhOBvCL22dgowGlRE0nMwS9DCwgfjoFkNP4PahTm9B2AFUjety++bUQJHgaSDpt oyQTPN7Rf660oXBGInfgQ0NKoThAQn4easJPJjESIcOnLIrdWhlum1+api2+0IurLRbk sgAw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f2si13797413pgc.182.2019.04.12.03.02.38; Fri, 12 Apr 2019 03:02:39 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727170AbfDLKCh (ORCPT + 31 others); Fri, 12 Apr 2019 06:02:37 -0400 Received: from foss.arm.com ([217.140.101.70]:56846 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726128AbfDLKCe (ORCPT ); Fri, 12 Apr 2019 06:02:34 -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 6F09E15AB; Fri, 12 Apr 2019 03:02:34 -0700 (PDT) Received: from usa.arm.com (e107155-lin.cambridge.arm.com [10.1.196.42]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id C26833F68F; Fri, 12 Apr 2019 03:02:32 -0700 (PDT) From: Sudeep Holla To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Sudeep Holla , Aaro Koskinen , Aaro Koskinen , Florian Fainelli , Michal Simek , Mark Rutland , Lorenzo Pieralisi Subject: [PATCH v3] firmware/psci: add support for SYSTEM_RESET2 Date: Fri, 12 Apr 2019 11:02:27 +0100 Message-Id: <20190412100227.15024-1-sudeep.holla@arm.com> X-Mailer: git-send-email 2.17.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PSCI v1.1 introduced SYSTEM_RESET2 to allow both architectural resets where the semantics are described by the PSCI specification itself as well as vendor-specific resets. Currently only system warm reset semantics is defined as part of architectural resets by the specification. This patch implements support for SYSTEM_RESET2 by making using of reboot_mode passed by the reboot infrastructure in the kernel. Cc: Lorenzo Pieralisi Acked-by: Mark Rutland Signed-off-by: Sudeep Holla --- drivers/firmware/psci.c | 24 +++++++++++++++++++++++- include/uapi/linux/psci.h | 2 ++ 2 files changed, 25 insertions(+), 1 deletion(-) v2->v3: - Added else condition so that if SYSTEM_RESET2 fails, it ends up doing a system halt - Wrap single statement if..else with braces because of presence of multiple line comment -- 2.17.1 Tested-by: Aaro Koskinen diff --git a/drivers/firmware/psci.c b/drivers/firmware/psci.c index c80ec1d03274..c9ea8f38bd42 100644 --- a/drivers/firmware/psci.c +++ b/drivers/firmware/psci.c @@ -88,6 +88,7 @@ static u32 psci_function_id[PSCI_FN_MAX]; PSCI_1_0_EXT_POWER_STATE_TYPE_MASK) static u32 psci_cpu_suspend_feature; +static bool psci_system_reset2_supported; static inline bool psci_has_ext_power_state(void) { @@ -253,7 +254,17 @@ static int get_set_conduit_method(struct device_node *np) static void psci_sys_reset(enum reboot_mode reboot_mode, const char *cmd) { - invoke_psci_fn(PSCI_0_2_FN_SYSTEM_RESET, 0, 0, 0); + if ((reboot_mode == REBOOT_WARM || reboot_mode == REBOOT_SOFT) && + psci_system_reset2_supported) { + /* + * reset_type[31] = 0 (architectural) + * reset_type[30:0] = 0 (SYSTEM_WARM_RESET) + * cookie = 0 (ignored by the implementation) + */ + invoke_psci_fn(PSCI_FN_NATIVE(1_1, SYSTEM_RESET2), 0, 0, 0); + } else { + invoke_psci_fn(PSCI_0_2_FN_SYSTEM_RESET, 0, 0, 0); + } } static void psci_sys_poweroff(void) @@ -451,6 +462,16 @@ static const struct platform_suspend_ops psci_suspend_ops = { .enter = psci_system_suspend_enter, }; +static void __init psci_init_system_reset2(void) +{ + int ret; + + ret = psci_features(PSCI_FN_NATIVE(1_1, SYSTEM_RESET2)); + + if (ret != PSCI_RET_NOT_SUPPORTED) + psci_system_reset2_supported = true; +} + static void __init psci_init_system_suspend(void) { int ret; @@ -588,6 +609,7 @@ static int __init psci_probe(void) psci_init_smccc(); psci_init_cpu_suspend(); psci_init_system_suspend(); + psci_init_system_reset2(); } return 0; diff --git a/include/uapi/linux/psci.h b/include/uapi/linux/psci.h index b3bcabe380da..5b0ba0062541 100644 --- a/include/uapi/linux/psci.h +++ b/include/uapi/linux/psci.h @@ -49,8 +49,10 @@ #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_1_FN_SYSTEM_RESET2 PSCI_0_2_FN(18) #define PSCI_1_0_FN64_SYSTEM_SUSPEND PSCI_0_2_FN64(14) +#define PSCI_1_1_FN64_SYSTEM_RESET2 PSCI_0_2_FN64(18) /* PSCI v0.2 power state encoding for CPU_SUSPEND function */ #define PSCI_0_2_POWER_STATE_ID_MASK 0xffff