From patchwork Thu May 16 21:48:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Urja Rannikko X-Patchwork-Id: 1100740 X-Patchwork-Delegate: ykai007@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="eHzD55Ha"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 454lRs1FhRz9s7h for ; Fri, 17 May 2019 07:48:57 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id DC5B6C21D72; Thu, 16 May 2019 21:48:53 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 297D7C21C3F; Thu, 16 May 2019 21:48:51 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 2ED91C21C3F; Thu, 16 May 2019 21:48:50 +0000 (UTC) Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by lists.denx.de (Postfix) with ESMTPS id D16A9C21C29 for ; Thu, 16 May 2019 21:48:49 +0000 (UTC) Received: by mail-wm1-f68.google.com with SMTP id x64so5023439wmb.5 for ; Thu, 16 May 2019 14:48:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=yOitqeF09dsXbdc/M6EUnKhNYH7TN3IhA1HFZe71t1A=; b=eHzD55HaG9pzEikmwM8moTma5s5PzeafqGpo1Gv59Wh4FLQCkoIbMOmdU6WKgzPuUq DvGjH5ZbazTwa3Fyiuci7G6n9Be0HXvLV2bpVLKILTXdtueYTYQP/6PGQiR9IA2G91Bh a5npxcDagpNJ/xu8o2tuNw2vWqlyDBPQrBtVW9/YMB5aSsTDKu9t1DsWXG8aW2tx4b3m yx2eDPj03AnDZfr6Wt8VDBek12FZnMlW8QRaftVNpM2h/kngxXFktM546oxgGXAAk8Ka bflhhOhvZxne5rx79FghS20Qj4Zk+3uVWO+LFYWnaDlED5Smbwz7WOmZ2HxDKyaesm87 FxNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=yOitqeF09dsXbdc/M6EUnKhNYH7TN3IhA1HFZe71t1A=; b=qe5ZTlyjd+Ju+oZglbkKAY8yffvEQ4K+dDxqLXOPpbkKE1aOkkxDrIdo+luhzby+OH uEN9cHkK80YcxkRTzkqoqsKjnm3+o1SyexemmH2oEr7jzFRJs1+RYs0aK7xuAESXVnnk AacqlEjVwiVSvkjkPa4LPyh3Vx/2bJL2edE5IJEMgsF41fjlCrnpEtfiAX3vmkWMxcmm B0MXdt8VgA3GxH1kckfnfa9/hUH2Khb131SrpyOt40km6V6oHp518RHOvhDjJ30gpFNw kZHsKoQERunfSgQNRnQVb1DLlpN9E/7NStDpKinr3OimbHBob8r842roBQuU5EUc5kaf cGsA== X-Gm-Message-State: APjAAAU7M2ufJCEgvcVu73p92N06BWCh1JSGMqjBILbtFfTBIQd326vE DqaFueyIYCtsr8fHQ1eAsuO5r7SM4g== X-Google-Smtp-Source: APXvYqyGdREaPdSvr0eREr76RjcEne88p+f+ZFixrjPkbDi77Rp7rw7AdzQ0cipGU+chKORhVoTfxQ== X-Received: by 2002:a1c:3c2:: with SMTP id 185mr11299062wmd.91.1558043329228; Thu, 16 May 2019 14:48:49 -0700 (PDT) Received: from localhost.localdomain (esm-84-240-79-214.netplaza.fi. [84.240.79.214]) by smtp.gmail.com with ESMTPSA id m17sm7745545wmc.6.2019.05.16.14.48.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 16 May 2019 14:48:48 -0700 (PDT) From: Urja Rannikko To: u-boot@lists.denx.de Date: Thu, 16 May 2019 21:48:41 +0000 Message-Id: <20190516214843.1557-1-urjaman@gmail.com> X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 Subject: [U-Boot] [PATCH v2 1/3] sysreset: switch to using SYSRESET_POWER_OFF for poweroff X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" It seems that SYSRESET_POWER_OFF was added recently, and all previous code used SYSRESET_POWER for poweroff. SYSRESET_POWER is supposed to be a PMIC-level power cycle, not a poweroff. Signed-off-by: Urja Rannikko Reviewed-by: Patrick Delaunay --- v2: Do not change STPMIC1 driver (thats actually SYSRESET_POWER) Note: I didnt touch the test/dm/sysreset.c code yet, mostly because I wanted to get feedback on this first and that i'd need to understand the tests properly to do that (and i havent used them before at all). --- arch/arm/mach-stm32mp/cmd_poweroff.c | 2 +- arch/sandbox/cpu/state.c | 2 +- drivers/sysreset/sysreset_psci.c | 2 +- drivers/sysreset/sysreset_sandbox.c | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/arm/mach-stm32mp/cmd_poweroff.c b/arch/arm/mach-stm32mp/cmd_poweroff.c index f54dd1daf2..62347425a0 100644 --- a/arch/arm/mach-stm32mp/cmd_poweroff.c +++ b/arch/arm/mach-stm32mp/cmd_poweroff.c @@ -14,7 +14,7 @@ int do_poweroff(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) puts("poweroff ...\n"); mdelay(100); - ret = sysreset_walk(SYSRESET_POWER); + ret = sysreset_walk(SYSRESET_POWER_OFF); if (ret == -EINPROGRESS) mdelay(1000); diff --git a/arch/sandbox/cpu/state.c b/arch/sandbox/cpu/state.c index d3b9c05985..dee5fde4f7 100644 --- a/arch/sandbox/cpu/state.c +++ b/arch/sandbox/cpu/state.c @@ -355,7 +355,7 @@ void state_reset_for_test(struct sandbox_state *state) { /* No reset yet, so mark it as such. Always allow power reset */ state->last_sysreset = SYSRESET_COUNT; - state->sysreset_allowed[SYSRESET_POWER] = true; + state->sysreset_allowed[SYSRESET_POWER_OFF] = true; memset(&state->wdt, '\0', sizeof(state->wdt)); memset(state->spi, '\0', sizeof(state->spi)); diff --git a/drivers/sysreset/sysreset_psci.c b/drivers/sysreset/sysreset_psci.c index de2ec8aeb1..c7907b3226 100644 --- a/drivers/sysreset/sysreset_psci.c +++ b/drivers/sysreset/sysreset_psci.c @@ -18,7 +18,7 @@ static int psci_sysreset_request(struct udevice *dev, enum sysreset_t type) case SYSRESET_COLD: function_id = PSCI_0_2_FN_SYSTEM_RESET; break; - case SYSRESET_POWER: + case SYSRESET_POWER_OFF: function_id = PSCI_0_2_FN_SYSTEM_OFF; break; default: diff --git a/drivers/sysreset/sysreset_sandbox.c b/drivers/sysreset/sysreset_sandbox.c index 38e2a7e241..8bc9f4b4cc 100644 --- a/drivers/sysreset/sysreset_sandbox.c +++ b/drivers/sysreset/sysreset_sandbox.c @@ -57,13 +57,13 @@ static int sandbox_sysreset_request(struct udevice *dev, enum sysreset_t type) case SYSRESET_COLD: state->last_sysreset = type; break; - case SYSRESET_POWER: + case SYSRESET_POWER_OFF: state->last_sysreset = type; if (!state->sysreset_allowed[type]) return -EACCES; sandbox_exit(); break; - case SYSRESET_POWER_OFF: + case SYSRESET_POWER: if (!state->sysreset_allowed[type]) return -EACCES; default: From patchwork Thu May 16 21:48:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Urja Rannikko X-Patchwork-Id: 1100744 X-Patchwork-Delegate: ykai007@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="OeyO9Ce5"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 454lSz2m3dz9s4Y for ; Fri, 17 May 2019 07:49:55 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 194EFC21DED; Thu, 16 May 2019 21:49:28 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 580AEC21C29; Thu, 16 May 2019 21:49:14 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id AE112C21DF3; Thu, 16 May 2019 21:49:09 +0000 (UTC) Received: from mail-wm1-f67.google.com (mail-wm1-f67.google.com [209.85.128.67]) by lists.denx.de (Postfix) with ESMTPS id F0652C21DE8 for ; Thu, 16 May 2019 21:49:08 +0000 (UTC) Received: by mail-wm1-f67.google.com with SMTP id x64so5023950wmb.5 for ; Thu, 16 May 2019 14:49:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qUW76i1yhE0UWJ60qax9uiqmdynmgL9ITcuWM7bSKvA=; b=OeyO9Ce5dz5/oVGx0V2JqZQtBlpmDHXU5w4vQmwhEXYmMNcr8wGaWobU5qzxOJr45j 8n8OvhBgcLZ3Pqmr6eO6cIDiPg+sSCtajb7Moww2++++e0c5Qhi/b9Yrja5mKMsVOT/G pKCiCixGRvCEyuCPMRqdo5dpfZK2OKjbXAaT6sayLc68NojUAA9RqbS/YijFwKxt809l be8XtqQ/JonLIsE8GW9L41dejxbFfItpApSVtH2/43AC5ywe7jUeIFSYGVP9g20kF/We lJEzjILAele51+q8lGPVXjpG7ukKqDEqk5Bxu7mIcUTcOz51sGevjjZLkukGnFrdF4+q ZN/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qUW76i1yhE0UWJ60qax9uiqmdynmgL9ITcuWM7bSKvA=; b=C2zYv2a0Kk6gEoDdEcb2jPcrBRodvGFh8x+13riuNVhnVTxTbYmD8fZ53KaAa0tDAn +yAWT0cHuuj0+eAqAkYZB3lZ7ihokM2EbqmomsaeTAzKphpJJyPhUWmOZ7CjqA7Y7TJx CsgQRKN92Qg0tE9wv3oAWbIqmipyDonv48ObCOVB9hLTWij+nCcrqiTjt7C7IOqcoD13 uUuWm9ogFfovaC5H1jP21GY8xJRIrrGQZM7djEJiYLQoNv2/kNrntMCDEGynJt5aOGoF c6KidnWStJRivKomtM1hnTOy8s2ZvGMbCX5OjykY+jaDxGuK7OYWY7ctANb8hKYfnppm +jDw== X-Gm-Message-State: APjAAAV6a14hSpfjCDSSh89SUi0N0nYHgCEXPRIAY8mhZ3/+isujZsv7 r+N6Ep8tbm9tltLh9LX7VMDP5VW/cw== X-Google-Smtp-Source: APXvYqwJ09XedKbLYNx1TbOjbvObeS4SAUL2JAXv8JD7N5u7HmU9h/nDz8e0vc3grRkxNX2GNyZd/Q== X-Received: by 2002:a7b:c76b:: with SMTP id x11mr20017451wmk.22.1558043348461; Thu, 16 May 2019 14:49:08 -0700 (PDT) Received: from localhost.localdomain (esm-84-240-79-214.netplaza.fi. [84.240.79.214]) by smtp.gmail.com with ESMTPSA id m17sm7745545wmc.6.2019.05.16.14.49.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 16 May 2019 14:49:07 -0700 (PDT) From: Urja Rannikko To: u-boot@lists.denx.de Date: Thu, 16 May 2019 21:48:42 +0000 Message-Id: <20190516214843.1557-2-urjaman@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190516214843.1557-1-urjaman@gmail.com> References: <20190516214843.1557-1-urjaman@gmail.com> MIME-Version: 1.0 Subject: [U-Boot] [PATCH v2 2/3] sysreset: move stm32mp sysreset poweroff implementation to sysreset uclass X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" This is a generic implementation. Add CONFIG_SYSRESET_CMD_POWEROFF to signal when we need it. Enable it from the STPMIC1 config and in sandbox. The config flag is transitionary, that is it can be removed after all poweroff implementations use sysreset, and just have CMD_POWEROFF depend on sysreset. Signed-off-by: Urja Rannikko Reviewed-by: Patrice Chotard Reviewed-by: Patrick Delaunay Tested-by: Patrick Delaunay --- v2: Fixup STPMIC1 config selection of CONFIG_SYSRESET_CMD_POWEROFF --- arch/Kconfig | 1 + arch/arm/mach-stm32mp/Makefile | 3 --- arch/arm/mach-stm32mp/cmd_poweroff.c | 24 ------------------------ drivers/power/pmic/Kconfig | 1 + drivers/sysreset/Kconfig | 10 ++++++++++ drivers/sysreset/sysreset-uclass.c | 18 ++++++++++++++++++ 6 files changed, 30 insertions(+), 27 deletions(-) delete mode 100644 arch/arm/mach-stm32mp/cmd_poweroff.c diff --git a/arch/Kconfig b/arch/Kconfig index 239289b885..83ff21dfd7 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -91,6 +91,7 @@ config SANDBOX select LZO select SPI select SUPPORT_OF_CONTROL + select SYSRESET_CMD_POWEROFF if CMD_POWEROFF imply BITREVERSE select BLOBLIST imply CMD_DM diff --git a/arch/arm/mach-stm32mp/Makefile b/arch/arm/mach-stm32mp/Makefile index 1493914a11..f59ced5ee1 100644 --- a/arch/arm/mach-stm32mp/Makefile +++ b/arch/arm/mach-stm32mp/Makefile @@ -11,9 +11,6 @@ ifdef CONFIG_SPL_BUILD obj-y += spl.o else obj-y += bsec.o -ifndef CONFIG_STM32MP1_TRUSTED -obj-$(CONFIG_SYSRESET) += cmd_poweroff.o -endif endif obj-$(CONFIG_ARMV7_PSCI) += psci.o obj-$(CONFIG_$(SPL_)DM_REGULATOR) += pwr_regulator.o diff --git a/arch/arm/mach-stm32mp/cmd_poweroff.c b/arch/arm/mach-stm32mp/cmd_poweroff.c deleted file mode 100644 index 62347425a0..0000000000 --- a/arch/arm/mach-stm32mp/cmd_poweroff.c +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause -/* - * Copyright (C) 2019, STMicroelectronics - All Rights Reserved - */ - -#include -#include -#include - -int do_poweroff(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - int ret; - - puts("poweroff ...\n"); - mdelay(100); - - ret = sysreset_walk(SYSRESET_POWER_OFF); - - if (ret == -EINPROGRESS) - mdelay(1000); - - /*NOTREACHED when power off*/ - return CMD_RET_FAILURE; -} diff --git a/drivers/power/pmic/Kconfig b/drivers/power/pmic/Kconfig index b0cd260354..52edb29b48 100644 --- a/drivers/power/pmic/Kconfig +++ b/drivers/power/pmic/Kconfig @@ -234,6 +234,7 @@ config DM_PMIC_TPS65910 config PMIC_STPMIC1 bool "Enable support for STMicroelectronics STPMIC1 PMIC" depends on DM_PMIC && DM_I2C + select SYSRESET_CMD_POWEROFF if CMD_POWEROFF && !ARM_PSCI_FW ---help--- The STPMIC1 PMIC provides 4 BUCKs, 6 LDOs, 1 VREF and 2 power switches. It is accessed via an I2C interface. The device is used with STM32MP1 diff --git a/drivers/sysreset/Kconfig b/drivers/sysreset/Kconfig index 30aed2c4c1..4c883923bf 100644 --- a/drivers/sysreset/Kconfig +++ b/drivers/sysreset/Kconfig @@ -33,6 +33,16 @@ config TPL_SYSRESET if SYSRESET +if CMD_POWEROFF + +config SYSRESET_CMD_POWEROFF + bool "sysreset implementation of the poweroff command" + help + This should be selected by the appropriate PMIC driver if + the poweroff command is enabled. + +endif + config SYSRESET_GPIO bool "Enable support for GPIO reset driver" select DM_GPIO diff --git a/drivers/sysreset/sysreset-uclass.c b/drivers/sysreset/sysreset-uclass.c index ad831c703a..39202588ae 100644 --- a/drivers/sysreset/sysreset-uclass.c +++ b/drivers/sysreset/sysreset-uclass.c @@ -118,6 +118,24 @@ int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) return 0; } +#if IS_ENABLED(CONFIG_SYSRESET_CMD_POWEROFF) +int do_poweroff(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ + int ret; + + puts("poweroff ...\n"); + mdelay(100); + + ret = sysreset_walk(SYSRESET_POWER_OFF); + + if (ret == -EINPROGRESS) + mdelay(1000); + + /*NOTREACHED when power off*/ + return CMD_RET_FAILURE; +} +#endif + static int sysreset_post_bind(struct udevice *dev) { #if defined(CONFIG_NEEDS_MANUAL_RELOC) From patchwork Thu May 16 21:48:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Urja Rannikko X-Patchwork-Id: 1100742 X-Patchwork-Delegate: ykai007@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="fskL/Pwd"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 454lST6Xlcz9s4Y for ; Fri, 17 May 2019 07:49:29 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 85C8FC21DD4; Thu, 16 May 2019 21:49:15 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id B2B76C21DED; Thu, 16 May 2019 21:49:13 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 53BE7C21DD3; Thu, 16 May 2019 21:49:11 +0000 (UTC) Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by lists.denx.de (Postfix) with ESMTPS id 679D9C21D4A for ; Thu, 16 May 2019 21:49:11 +0000 (UTC) Received: by mail-wr1-f65.google.com with SMTP id d9so5010977wrx.0 for ; Thu, 16 May 2019 14:49:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=rxkgbBp1VRAgYXxVy9ci5jokaqUQ0E/X3HN9UbByCME=; b=fskL/Pwdxcep6CnNLsOzj1sGGsYiqvWx7+MNlcE5r33tAXqFgwFDgGSlJU83bvCT0Y kde2GeUzqO1z7jLjV/R5r4qz13/x1ExOUUwl0G9zPYWfpG3geSRO+nzMD3IZjJ5aVmJq qvfTOoeUKMPAllPuNcNQUD/Jip8Q5QMagkmFNNQFMsqomA537MC91xD0F3ARGV6SIyal 7VB1sSH1CrPBY8l4ZaXo2KUg9ar9f2Fq3kbH2MtnybuHx9V6byH1FpHedLrDEcT++jqS U/l7arlS7atlnvqQjoJnf6YQ47HS64KchqKiCDf24XzL0PytSKQd01UqTDtljnjK2UP+ iM8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=rxkgbBp1VRAgYXxVy9ci5jokaqUQ0E/X3HN9UbByCME=; b=G7Qoqf8T5RYUQLrpjtdKV6rJ2itfCawLmEYOJRqT7zEII/NprL+n31rMhxkwmLKNZ9 PIQTl9o16epCpr724GNa200ApdG1EdrTxXK5PjJrcgXhqTlxljj7E5SHjIYKTA35l/20 4GsJHx0MzQeR3gIFbxTGgUzWrdi71J0srQz/az5lh0ooAvmEYwu3YMmQcfs2lW7WJ1ti 7jJzcpnQs7Sg5YHfAS31aj9N4eyG2R66RVtl/dteE4+cocIvjDnYlO1k3uGpNwT3+T48 +LgKOy9YwKn+Ew4Vkz9IqOi8ZYN+a8dFmzh/jiuK4udDBv6VOotFuIcfjDj3K9ISnVVx PGnA== X-Gm-Message-State: APjAAAVfQSJb08jNbvm1zSojnj1dkRX3CotGDIGWqRFIg5QYssj503wr NPfOU7b1gBgM2nDsbKyrHTZjK946gQ== X-Google-Smtp-Source: APXvYqyrJ+Eu6BmdRAZyTRithFEkFzXMIkLSOuKazZMI1zL+rYzxtHGzG+cFisaKiei88b77SedOkg== X-Received: by 2002:a05:6000:1250:: with SMTP id j16mr12967271wrx.200.1558043350907; Thu, 16 May 2019 14:49:10 -0700 (PDT) Received: from localhost.localdomain (esm-84-240-79-214.netplaza.fi. [84.240.79.214]) by smtp.gmail.com with ESMTPSA id m17sm7745545wmc.6.2019.05.16.14.49.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 16 May 2019 14:49:10 -0700 (PDT) From: Urja Rannikko To: u-boot@lists.denx.de Date: Thu, 16 May 2019 21:48:43 +0000 Message-Id: <20190516214843.1557-3-urjaman@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190516214843.1557-1-urjaman@gmail.com> References: <20190516214843.1557-1-urjaman@gmail.com> MIME-Version: 1.0 Subject: [U-Boot] [PATCH v2 3/3] rk8xx: add a sysreset driver for poweroff X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Based on snooping around the linux kernel rk8xx driver. Tested on an ASUS C201. Signed-off-by: Urja Rannikko --- drivers/power/pmic/Kconfig | 1 + drivers/power/pmic/rk8xx.c | 62 +++++++++++++++++++++++++++++++++++--- include/power/rk8xx_pmic.h | 4 +++ 3 files changed, 63 insertions(+), 4 deletions(-) diff --git a/drivers/power/pmic/Kconfig b/drivers/power/pmic/Kconfig index 52edb29b48..3f6e30d503 100644 --- a/drivers/power/pmic/Kconfig +++ b/drivers/power/pmic/Kconfig @@ -124,6 +124,7 @@ config PMIC_PM8916 config PMIC_RK8XX bool "Enable support for Rockchip PMIC RK8XX" depends on DM_PMIC + select SYSRESET_CMD_POWEROFF if CMD_POWEROFF ---help--- The Rockchip RK808 PMIC provides four buck DC-DC convertors, 8 LDOs, an RTC and two low Rds (resistance (drain to source)) switches. It is diff --git a/drivers/power/pmic/rk8xx.c b/drivers/power/pmic/rk8xx.c index 25c339ab12..52e41051ae 100644 --- a/drivers/power/pmic/rk8xx.c +++ b/drivers/power/pmic/rk8xx.c @@ -6,6 +6,9 @@ #include #include +#include +#include +#include #include #include #include @@ -49,9 +52,9 @@ static int rk8xx_read(struct udevice *dev, uint reg, uint8_t *buff, int len) return 0; } -#if CONFIG_IS_ENABLED(PMIC_CHILDREN) static int rk8xx_bind(struct udevice *dev) { +#if CONFIG_IS_ENABLED(PMIC_CHILDREN) ofnode regulators_node; int children; @@ -68,10 +71,15 @@ static int rk8xx_bind(struct udevice *dev) if (!children) debug("%s: %s - no child found\n", __func__, dev->name); +#endif + + if (CONFIG_IS_ENABLED(SYSRESET)) + return device_bind_driver(dev, "rk8xx-sysreset", + "rk8xx-sysreset", NULL); + /* Always return success for this device */ return 0; } -#endif static int rk8xx_probe(struct udevice *dev) { @@ -103,10 +111,56 @@ U_BOOT_DRIVER(pmic_rk8xx) = { .name = "rk8xx pmic", .id = UCLASS_PMIC, .of_match = rk8xx_ids, -#if CONFIG_IS_ENABLED(PMIC_CHILDREN) .bind = rk8xx_bind, -#endif .priv_auto_alloc_size = sizeof(struct rk8xx_priv), .probe = rk8xx_probe, .ops = &rk8xx_ops, }; + +#if IS_ENABLED(CONFIG_SYSRESET) +/* NOTE: Should only enable this function if the rockchip,system-power-manager + * property is in the device tree node, but it is there in every board that has + * an rk8xx in u-boot currently, so this is left as an excercise for later. + */ +static int rk8xx_sysreset_request(struct udevice *dev, enum sysreset_t type) +{ + struct udevice *pmic_dev; + struct rk8xx_priv *priv; + int ret; + u8 bits; + + if (type != SYSRESET_POWER_OFF) + return -EPROTONOSUPPORT; + + ret = uclass_get_device_by_driver(UCLASS_PMIC, + DM_GET_DRIVER(pmic_rk8xx), + &pmic_dev); + + if (ret) + return -EOPNOTSUPP; + + priv = dev_get_priv(pmic_dev); + + if (priv->variant == RK818_ID) + bits = DEV_OFF; + else + bits = DEV_OFF_RST; + + ret = pmic_clrsetbits(pmic_dev, REG_DEVCTRL, 0, bits); + + if (ret < 0) + return ret; + + return -EINPROGRESS; +} + +static struct sysreset_ops rk8xx_sysreset_ops = { + .request = rk8xx_sysreset_request, +}; + +U_BOOT_DRIVER(rk8xx_sysreset) = { + .name = "rk8xx-sysreset", + .id = UCLASS_SYSRESET, + .ops = &rk8xx_sysreset_ops, +}; +#endif diff --git a/include/power/rk8xx_pmic.h b/include/power/rk8xx_pmic.h index c06248f751..565b35985e 100644 --- a/include/power/rk8xx_pmic.h +++ b/include/power/rk8xx_pmic.h @@ -177,6 +177,10 @@ enum { #define RK8XX_ID_MSK 0xfff0 +/* DEVCTRL bits for poweroff */ +#define DEV_OFF_RST BIT(3) +#define DEV_OFF BIT(0) + struct rk8xx_reg_table { char *name; u8 reg_ctl;