From patchwork Sun Aug 27 08:21:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Svyatoslav Ryhel X-Patchwork-Id: 1826473 X-Patchwork-Delegate: jh80.chung@samsung.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=NIcWy7GW; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RYRVf0FlCz1yZ9 for ; Sun, 27 Aug 2023 18:21:45 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 9A67A8608A; Sun, 27 Aug 2023 10:21:33 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="NIcWy7GW"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 14AD080726; Sun, 27 Aug 2023 10:21:32 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-ed1-x52e.google.com (mail-ed1-x52e.google.com [IPv6:2a00:1450:4864:20::52e]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 7CAA98470A for ; Sun, 27 Aug 2023 10:21:29 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=clamor95@gmail.com Received: by mail-ed1-x52e.google.com with SMTP id 4fb4d7f45d1cf-52a069edca6so3243139a12.3 for ; Sun, 27 Aug 2023 01:21:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693124489; x=1693729289; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BSNYImZ+6x42mOnLRUPZUyMatggRfflCcWQ6vewDBZQ=; b=NIcWy7GWxlPwsIjnOrR86ynNfrI/5jY5WeacIqsrfK8PLzBp3vXrut4HJ+cXE9zT99 I3P/vyFIbAaEOpP6hhqFYDBIEkH+eGktJJyzJ4mH0mGdEwlW/bkAr9Iv9o4ZTVmqKR2+ Dc0h6tacrtSjUBFrHcZxreA8sYMb32o6rFQadmYLYejfi9jDV7l/RqdccaJBoFZGgGGP zEU+t3v0up4Q1ZI4XOSQFDRgqHzjXIIGe6VqAl45p2WstrnmF1noc9nG4qqn/5Sk4C5a zhdtkcmvXVL6cQUFmt23tZiSqK1V3t2N3ff+gsP729OBRbdGQjOP9CL1SWtoZSNKGNJM 7Tng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693124489; x=1693729289; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BSNYImZ+6x42mOnLRUPZUyMatggRfflCcWQ6vewDBZQ=; b=bmH/8RFV4ckjt5J+fK3XGScj76zwHQ084Zdm65UtVzCgyHUa2KJjYJ593Is1Sod5ue kuxWiDnYMN95kfTJM4XY3b5yjSm6tjHQPfvMfe6vfVnuuflMXMJIGhU6dl1EIyhXrw2j HF8bO0hqqESiYSA7gOi4u8JGmQM/LggsM0JBunBADqP9fODkd9KsjGRSbq3lmr5+tbWO LPZACymz5nM4S9fYS6g6r7ekPzaerhUEZSozfte/SCuqYrtm+GlwxYCt6qHz4JSsBFhX B9BgJlm0ThonRt4dK0bAbQH3FfUCB9vpbeulvLF7EcFTexKPhjcu5UuQXB63Tt07/R+q L80A== X-Gm-Message-State: AOJu0Yyl0AqnysRm1sWFay1KBlc81XYiWwuRJnFLFm3TZypfrPZvz+7j xPgdBTV+57fK/T3NAAHWQfc= X-Google-Smtp-Source: AGHT+IGttXp0+y/vZbR+20MYH6LLkEoOmWrW1u7T8C17kDLkHsorPMhM7cmEbI9M5tcfHdRc4mm96A== X-Received: by 2002:a17:906:519b:b0:9a1:fa4e:ca83 with SMTP id y27-20020a170906519b00b009a1fa4eca83mr9139320ejk.65.1693124488550; Sun, 27 Aug 2023 01:21:28 -0700 (PDT) Received: from xeon.. ([188.163.112.64]) by smtp.gmail.com with ESMTPSA id i10-20020a170906250a00b0099b5a71b0bfsm3153433ejb.94.2023.08.27.01.21.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Aug 2023 01:21:28 -0700 (PDT) From: Svyatoslav Ryhel To: Thierry Reding , Jaehoon Chung , Svyatoslav Ryhel , Simon Glass Cc: u-boot@lists.denx.de Subject: [PATCH v2 1/6] sysreset: tegra: create arch specific sysreset driver Date: Sun, 27 Aug 2023 11:21:01 +0300 Message-Id: <20230827082106.6255-2-clamor95@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230827082106.6255-1-clamor95@gmail.com> References: <20230827082106.6255-1-clamor95@gmail.com> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Tegra uses built in Power Management Controller (PMC) to perform CPU reset. Code to perform this was located in mach-tegra, so lest create DM driver to handle this. Signed-off-by: Svyatoslav Ryhel --- drivers/sysreset/Kconfig | 6 ++++ drivers/sysreset/Makefile | 1 + drivers/sysreset/sysreset_tegra.c | 46 +++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 drivers/sysreset/sysreset_tegra.c diff --git a/drivers/sysreset/Kconfig b/drivers/sysreset/Kconfig index bdbe2a9536..eab556c349 100644 --- a/drivers/sysreset/Kconfig +++ b/drivers/sysreset/Kconfig @@ -137,6 +137,12 @@ config SYSRESET_SOCFPGA_SOC64 This enables the system reset driver support for Intel SOCFPGA SoC64 SoCs. +config SYSRESET_TEGRA + bool "Tegra PMC system reset driver" + depends on ARCH_TEGRA + help + This enables the system reset ability of PMC used in Tegra SoCs. + config SYSRESET_TI_SCI bool "TI System Control Interface (TI SCI) system reset driver" depends on TI_SCI_PROTOCOL diff --git a/drivers/sysreset/Makefile b/drivers/sysreset/Makefile index 40c876764a..a9ac123754 100644 --- a/drivers/sysreset/Makefile +++ b/drivers/sysreset/Makefile @@ -16,6 +16,7 @@ obj-$(CONFIG_SYSRESET_PSCI) += sysreset_psci.o obj-$(CONFIG_SYSRESET_SBI) += sysreset_sbi.o obj-$(CONFIG_SYSRESET_SOCFPGA) += sysreset_socfpga.o obj-$(CONFIG_SYSRESET_SOCFPGA_SOC64) += sysreset_socfpga_soc64.o +obj-$(CONFIG_SYSRESET_TEGRA) += sysreset_tegra.o obj-$(CONFIG_SYSRESET_TI_SCI) += sysreset-ti-sci.o obj-$(CONFIG_SYSRESET_SYSCON) += sysreset_syscon.o obj-$(CONFIG_SYSRESET_WATCHDOG) += sysreset_watchdog.o diff --git a/drivers/sysreset/sysreset_tegra.c b/drivers/sysreset/sysreset_tegra.c new file mode 100644 index 0000000000..ee95826a29 --- /dev/null +++ b/drivers/sysreset/sysreset_tegra.c @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright(C) 2023 Svyatoslav Ryhel + */ + +#include +#include +#include +#include +#include +#include + +static int tegra_sysreset_request(struct udevice *dev, + enum sysreset_t type) +{ + u32 value; + + switch (type) { + case SYSRESET_WARM: + case SYSRESET_COLD: + /* resets everything but scratch 0 and reset status */ + value = tegra_pmc_readl(PMC_CNTRL); + value |= PMC_CNTRL_MAIN_RST; + tegra_pmc_writel(value, PMC_CNTRL); + break; + default: + return -EPROTONOSUPPORT; + } + + return -EINPROGRESS; +} + +static struct sysreset_ops tegra_sysreset = { + .request = tegra_sysreset_request, +}; + +U_BOOT_DRIVER(sysreset_tegra) = { + .id = UCLASS_SYSRESET, + .name = "sysreset_tegra", + .ops = &tegra_sysreset, +}; + +/* Link to Tegra PMC once there is a driver */ +U_BOOT_DRVINFO(sysreset_tegra) = { + .name = "sysreset_tegra" +}; From patchwork Sun Aug 27 08:21:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Svyatoslav Ryhel X-Patchwork-Id: 1826474 X-Patchwork-Delegate: jh80.chung@samsung.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=BxLVCulP; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RYRVq2svvz1yZ9 for ; Sun, 27 Aug 2023 18:21:55 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id E043784702; Sun, 27 Aug 2023 10:21:35 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="BxLVCulP"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 7BAEF86177; Sun, 27 Aug 2023 10:21:34 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-ej1-x632.google.com (mail-ej1-x632.google.com [IPv6:2a00:1450:4864:20::632]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 02C3684B20 for ; Sun, 27 Aug 2023 10:21:30 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=clamor95@gmail.com Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-99c4923195dso268291066b.2 for ; Sun, 27 Aug 2023 01:21:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693124489; x=1693729289; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VWPD7jJgudMcQ465nZQXIm308+0rV5CUNp5J9ozOswI=; b=BxLVCulPH1zLfVC09San5kQLiT/A3jvOP8P2E9oi9yr/bXkDOM3Kxww2AD1X94mqC3 dgFjJiTvlr4n8qf9Q0jMtqWOkppwBOQ7z++sCHIgUiJWjjyGU8D8VbZ9vGpeC6jkAdap YlQpHQ7Yq0tTtvjjfKxE0yfrjzTwk6fRHzLNAd4Yu9djdOa5hlrF00B+NadBES3CefuR ewyqHMaRjWcLv9t6+txD3b6LeaGaSWRK0t5sAE82wOCwJcSXyZVg0eP0ryTIG2iRulAA jec7QFMxELJstoxo1TzWJKoJ0ozhVmbXcTHK6/9dyIOLgUm1EqyeSA2lctS5zKfJClEI 4gbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693124489; x=1693729289; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VWPD7jJgudMcQ465nZQXIm308+0rV5CUNp5J9ozOswI=; b=NlpTv1yQGn7+uZlu7GRNfiuXKzEzgQNLIZQWK+P99z4oA5R3fLq8c/JoqhW5Wz7xv8 +OmW2vch8zYy6FAkLxDeK1BRDdQZkL5z9nwQIb+nha9Izasq4eZYd5pInGJnlAMgIXLJ k/uBHHzElTlJfExXLS5/AjTpZBZfsQmQO/EO14131qzLP0+nl4oK6CQO3vNPXcJ17JZd IRfgBtIIpGmbHBPxAb3Jvd633C4OiAVZr/pA21uMdcW2DideMVXiRjP2OOWv1DTVEACU yKXUJgn+TQ60rYUs2KyS8KTrZmeUgv8BxUN1tPdSSXe9Omd2YBs9NC504ysLIwMy5bxZ S9Ow== X-Gm-Message-State: AOJu0YwSwl/XH/8/N/Yrq12zv3FsbUZTD9RP6upn4JyC6obtXn7wkTwj qrcE8mN+lHzCAYe7UUwJ8cQ= X-Google-Smtp-Source: AGHT+IG733jWDQNRCREv5iK0JmFupj15o9g7+TDtmRXeLJOb+4suhKtajZl6X3/ReKMGIJtH1TmNpg== X-Received: by 2002:a17:906:18:b0:9a1:c42e:5e5e with SMTP id 24-20020a170906001800b009a1c42e5e5emr11833257eja.42.1693124489225; Sun, 27 Aug 2023 01:21:29 -0700 (PDT) Received: from xeon.. ([188.163.112.64]) by smtp.gmail.com with ESMTPSA id i10-20020a170906250a00b0099b5a71b0bfsm3153433ejb.94.2023.08.27.01.21.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Aug 2023 01:21:29 -0700 (PDT) From: Svyatoslav Ryhel To: Thierry Reding , Jaehoon Chung , Svyatoslav Ryhel , Simon Glass Cc: u-boot@lists.denx.de Subject: [PATCH v2 2/6] arm: mach-tegra: enable sysreset driver Date: Sun, 27 Aug 2023 11:21:02 +0300 Message-Id: <20230827082106.6255-3-clamor95@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230827082106.6255-1-clamor95@gmail.com> References: <20230827082106.6255-1-clamor95@gmail.com> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Signed-off-by: Svyatoslav Ryhel --- arch/arm/mach-tegra/Kconfig | 3 +++ arch/arm/mach-tegra/pmc.c | 9 --------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig index 464bd0798f..453f94bcf2 100644 --- a/arch/arm/mach-tegra/Kconfig +++ b/arch/arm/mach-tegra/Kconfig @@ -61,6 +61,9 @@ config TEGRA_COMMON select MISC select OF_CONTROL select SPI + select SYSRESET + select SPL_SYSRESET + select SYSRESET_TEGRA imply CMD_DM imply CRC32_VERIFY diff --git a/arch/arm/mach-tegra/pmc.c b/arch/arm/mach-tegra/pmc.c index 8d617bee63..c4f5106750 100644 --- a/arch/arm/mach-tegra/pmc.c +++ b/arch/arm/mach-tegra/pmc.c @@ -84,12 +84,3 @@ void tegra_pmc_writel(u32 value, unsigned long offset) writel(value, NV_PA_PMC_BASE + offset); } - -void reset_cpu(void) -{ - u32 value; - - value = tegra_pmc_readl(PMC_CNTRL); - value |= PMC_CNTRL_MAIN_RST; - tegra_pmc_writel(value, PMC_CNTRL); -} From patchwork Sun Aug 27 08:21:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Svyatoslav Ryhel X-Patchwork-Id: 1826475 X-Patchwork-Delegate: jh80.chung@samsung.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=jrlQSZRz; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RYRW15Tmfz1yZ9 for ; Sun, 27 Aug 2023 18:22:05 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 2C68C852DB; Sun, 27 Aug 2023 10:21:36 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="jrlQSZRz"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id A5DD484B20; Sun, 27 Aug 2023 10:21:34 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-ej1-x62b.google.com (mail-ej1-x62b.google.com [IPv6:2a00:1450:4864:20::62b]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id DEEF1852DB for ; Sun, 27 Aug 2023 10:21:30 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=clamor95@gmail.com Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-99c3d3c3db9so281635666b.3 for ; Sun, 27 Aug 2023 01:21:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693124490; x=1693729290; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=V0s7IluXy0RtCLJccliKO61miFWonYR4B66GnTJxdGc=; b=jrlQSZRzaRCZoN7suve3sc4budcxdARRV8699/DlGWch1HkmiBFZ9levYYemlAKc9G +UQX60KF9x30hWdfVZ8VYhHwQMqf2ixnt+mjRiKkaKA8DQ/67Qm2vqQo0rhsECrdC3gM N3lk3+Xtk2csxE0SU54izKX897iccCUQAtDC9UCDfhjqZ06nC+tPYDH/U2BnFs5xn54t yXwZqka0QwpLXcvMLnRqICaNChtw03PRN96ovxNBs7/7hm+jghxrI3oBmicvQnmHmqpG A+qqnH9nl29QclsavhjfbyVUSe+OvY3s1uM4gxdx03oBd4DlA4WpUepcAZzV5s58GMrW SiPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693124490; x=1693729290; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=V0s7IluXy0RtCLJccliKO61miFWonYR4B66GnTJxdGc=; b=aoX8uAlMkKec2+rUesApjtfBS5yeCxsxaWp2LhG+fh5Mp5w4Nid3sqFQE81+63Rhwv loJzB/lkDQZIPekDPTU3q35CUYrirKfqkmHHToREHf0v/qCDokB74/6jswsrckBNvWBf iUn7Fb0w7Kf5kaOR1xdXndytU5gaTW0I+0fFKJANgZxKvWFTzdHTXDOPQRkzqudPRePo yHJ3Wz5eOXrhhOb1FNn1EayhTBJdNbU5Tgva8v/s0mLwurphoKV80WfbjuX3cgNzbRe7 Cwsd0C2yutaHevSth6zAalN+GQ+s62D9kevF9+I0lT7MzyR7y00vj+0OzbG64JVkGapA /nsA== X-Gm-Message-State: AOJu0YxHYOK9a27gUgIzXj0M/1eedtt0lXnX15SR+a2H+zg/qX6sk57K pz4t6msVtej/cJcCsc2rLB4= X-Google-Smtp-Source: AGHT+IFHEFiHFwEXjuSScc/PaRQUbKdPhwR1xFXz1hIfUqxdch/7A3/Ar1Fp7s6KymI2NWXW+muspw== X-Received: by 2002:a17:906:76d0:b0:9a1:bd82:de1c with SMTP id q16-20020a17090676d000b009a1bd82de1cmr11212930ejn.41.1693124490224; Sun, 27 Aug 2023 01:21:30 -0700 (PDT) Received: from xeon.. ([188.163.112.64]) by smtp.gmail.com with ESMTPSA id i10-20020a170906250a00b0099b5a71b0bfsm3153433ejb.94.2023.08.27.01.21.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Aug 2023 01:21:29 -0700 (PDT) From: Svyatoslav Ryhel To: Thierry Reding , Jaehoon Chung , Svyatoslav Ryhel , Simon Glass Cc: u-boot@lists.denx.de Subject: [PATCH v2 3/6] sysreset: implement MAX77663 sysreset functions Date: Sun, 27 Aug 2023 11:21:03 +0300 Message-Id: <20230827082106.6255-4-clamor95@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230827082106.6255-1-clamor95@gmail.com> References: <20230827082106.6255-1-clamor95@gmail.com> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean MAX77663 PMIC has embedded poweroff function used by some device to initiane device power off. Implement it as sysreset driver. Signed-off-by: Svyatoslav Ryhel --- drivers/power/pmic/max77663.c | 12 ++++++- drivers/sysreset/Kconfig | 7 ++++ drivers/sysreset/Makefile | 1 + drivers/sysreset/sysreset_max77663.c | 53 ++++++++++++++++++++++++++++ include/power/max77663.h | 5 +++ 5 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 drivers/sysreset/sysreset_max77663.c diff --git a/drivers/power/pmic/max77663.c b/drivers/power/pmic/max77663.c index 4070235d3c..e333c8dcf5 100644 --- a/drivers/power/pmic/max77663.c +++ b/drivers/power/pmic/max77663.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -49,7 +50,16 @@ static int max77663_read(struct udevice *dev, uint reg, uint8_t *buff, int len) static int max77663_bind(struct udevice *dev) { ofnode regulators_node; - int children; + int children, ret; + + if (IS_ENABLED(CONFIG_SYSRESET_MAX77663)) { + ret = device_bind_driver(dev, MAX77663_RST_DRIVER, + "sysreset", NULL); + if (ret) { + log_err("cannot bind SYSRESET (ret = %d)\n", ret); + return ret; + } + } regulators_node = dev_read_subnode(dev, "regulators"); if (!ofnode_valid(regulators_node)) { diff --git a/drivers/sysreset/Kconfig b/drivers/sysreset/Kconfig index eab556c349..bc35896101 100644 --- a/drivers/sysreset/Kconfig +++ b/drivers/sysreset/Kconfig @@ -74,6 +74,13 @@ config SYSRESET_GPIO example on Microblaze where reset logic can be controlled via GPIO pin which triggers cpu reset. +config SYSRESET_MAX77663 + bool "Enable support for MAX77663 PMIC System Reset" + depends on DM_PMIC_MAX77663 + select SYSRESET_CMD_POWEROFF if CMD_POWEROFF + help + Enable system power management functions found in MAX77663 PMIC. + config SYSRESET_MICROBLAZE bool "Enable support for Microblaze soft reset" depends on MICROBLAZE diff --git a/drivers/sysreset/Makefile b/drivers/sysreset/Makefile index a9ac123754..c31f51c581 100644 --- a/drivers/sysreset/Makefile +++ b/drivers/sysreset/Makefile @@ -9,6 +9,7 @@ obj-$(CONFIG_ARCH_STI) += sysreset_sti.o obj-$(CONFIG_SANDBOX) += sysreset_sandbox.o obj-$(CONFIG_POWEROFF_GPIO) += poweroff_gpio.o obj-$(CONFIG_SYSRESET_GPIO) += sysreset_gpio.o +obj-$(CONFIG_$(SPL_TPL_)SYSRESET_MAX77663) += sysreset_max77663.o obj-$(CONFIG_SYSRESET_MPC83XX) += sysreset_mpc83xx.o obj-$(CONFIG_SYSRESET_MICROBLAZE) += sysreset_microblaze.o obj-$(CONFIG_SYSRESET_OCTEON) += sysreset_octeon.o diff --git a/drivers/sysreset/sysreset_max77663.c b/drivers/sysreset/sysreset_max77663.c new file mode 100644 index 0000000000..4a2a2275df --- /dev/null +++ b/drivers/sysreset/sysreset_max77663.c @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright(C) 2023 Svyatoslav Ryhel + */ + +#include +#include +#include +#include +#include +#include +#include + +static int max77663_sysreset_request(struct udevice *dev, + enum sysreset_t type) +{ + int val; + + val = pmic_reg_read(dev->parent, MAX77663_REG_ONOFF_CFG1); + if (val < 0) + return val; + + /* clear both bits */ + val &= ~ONOFF_SFT_RST; + val &= ~ONOFF_PWR_OFF; + + switch (type) { + case SYSRESET_POWER: + /* MAX77663: SFT_RST > ONOFF_CFG1 */ + pmic_reg_write(dev->parent, MAX77663_REG_ONOFF_CFG1, + val | ONOFF_SFT_RST); + break; + case SYSRESET_POWER_OFF: + /* MAX77663: PWR_OFF > ONOFF_CFG1 */ + pmic_reg_write(dev->parent, MAX77663_REG_ONOFF_CFG1, + val | ONOFF_PWR_OFF); + break; + default: + return -EPROTONOSUPPORT; + } + + return -EINPROGRESS; +} + +static struct sysreset_ops max77663_sysreset = { + .request = max77663_sysreset_request, +}; + +U_BOOT_DRIVER(sysreset_max77663) = { + .id = UCLASS_SYSRESET, + .name = MAX77663_RST_DRIVER, + .ops = &max77663_sysreset, +}; diff --git a/include/power/max77663.h b/include/power/max77663.h index 0f764bcbcc..b3ae3dabf4 100644 --- a/include/power/max77663.h +++ b/include/power/max77663.h @@ -12,6 +12,7 @@ /* Drivers name */ #define MAX77663_LDO_DRIVER "max77663_ldo" #define MAX77663_SD_DRIVER "max77663_sd" +#define MAX77663_RST_DRIVER "max77663_rst" /* Step-Down (SD) Regulator calculations */ #define SD_STATUS_MASK 0x30 @@ -39,4 +40,8 @@ #define LDO_VOLT_BASE 800000 +#define MAX77663_REG_ONOFF_CFG1 0x41 +#define ONOFF_SFT_RST BIT(7) +#define ONOFF_PWR_OFF BIT(1) + #endif /* _MAX77663_H_ */ From patchwork Sun Aug 27 08:21:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Svyatoslav Ryhel X-Patchwork-Id: 1826477 X-Patchwork-Delegate: jh80.chung@samsung.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=PKMfgpib; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RYRWR2VXmz1yZ9 for ; Sun, 27 Aug 2023 18:22:27 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id B540185C98; Sun, 27 Aug 2023 10:21:40 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="PKMfgpib"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id C703E80726; Sun, 27 Aug 2023 10:21:35 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-ej1-x634.google.com (mail-ej1-x634.google.com [IPv6:2a00:1450:4864:20::634]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id D70D785C98 for ; Sun, 27 Aug 2023 10:21:31 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=clamor95@gmail.com Received: by mail-ej1-x634.google.com with SMTP id a640c23a62f3a-99bcc0adab4so287490866b.2 for ; Sun, 27 Aug 2023 01:21:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693124491; x=1693729291; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/4EjHTWrrMZAr/nbcIg7G9BYFDFhy0nomMgZ1Ak+ebE=; b=PKMfgpib9oYXmonAtIyIdReQ2HJQynwHtvdeu2gb+WbBVcgwJvcTR+GQWwj5XmqrWB bD2sSsxSML7EyFUU98K5PhaifWdrhVHp534ISDplADCNYHB6jSbaFYVTfPIgea3EsADd 26tLNOTNOLUPDza/unvn0KwSZKjHhCZA1G+tqUwPDD7mMIsdAtGJ3kriBz8r6Y97sUXf F9C1FuznrMclwOWqyoU/nnwS45PY/kRMrz4Rn0n9BscR+uQbyq0cmXjaB3YOpdNVUHQl hJ/AT4JwZVvehx62oZdw6h7oFwnhb0HYH2DHW4/Wf3Hbh9b0xorlNevUDj19CQG/6jCT 7CMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693124491; x=1693729291; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/4EjHTWrrMZAr/nbcIg7G9BYFDFhy0nomMgZ1Ak+ebE=; b=SIR0P88NVa+RDkxAjgsX9ko49qWwHnaC5KWYNQ5bzqRkks3eqaRpbm3aGrausNXppg gSY57Pp7Sax0IouUeHfHagpzi1eIVIKd5qp3MgvArEJ2Tg6qbD+vr7c/t8JBOIndoHoi 0UufLz0XGc18aQlXmrvCzramyXFHnVVBTCR+EUBuwIK70VfO5ePZbLv6dj+4HM+WpT5l ReRJtXbg+/mzF8hxRDLIN9GjKXcrxTHcXDAMlYXpRZWkoib+vGDTeYfxLRE3jsj5Z3HT uWTxJMzMRvpUQe2WSsSSlZNpNbE/ZzxoAad2kgzpoZUYbBEMSG84im6ytPolArIbDY9o jy1A== X-Gm-Message-State: AOJu0Yyq7dhAlUvmbCGYK0Mx8e2t8Bz7wdXTznP5Skv5hEGkSxESEFML Mm37/tZVB4FuiLS3guH4F7g= X-Google-Smtp-Source: AGHT+IEam0PTbFTlcjwEarbuG9axVqAlv21PXm5RigCxAxl82I6cXkq8EU4p6mDCS76dNii3fdWamg== X-Received: by 2002:a17:906:225c:b0:9a1:c376:9d7b with SMTP id 28-20020a170906225c00b009a1c3769d7bmr9795309ejr.32.1693124491262; Sun, 27 Aug 2023 01:21:31 -0700 (PDT) Received: from xeon.. ([188.163.112.64]) by smtp.gmail.com with ESMTPSA id i10-20020a170906250a00b0099b5a71b0bfsm3153433ejb.94.2023.08.27.01.21.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Aug 2023 01:21:30 -0700 (PDT) From: Svyatoslav Ryhel To: Thierry Reding , Jaehoon Chung , Svyatoslav Ryhel , Simon Glass Cc: u-boot@lists.denx.de Subject: [PATCH v2 4/6] sysreset: implement TPS80031 sysreset functions Date: Sun, 27 Aug 2023 11:21:04 +0300 Message-Id: <20230827082106.6255-5-clamor95@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230827082106.6255-1-clamor95@gmail.com> References: <20230827082106.6255-1-clamor95@gmail.com> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean TPS80031/TPS80032 PMICs have embedded power control functions used by some device to initiane device power off. Implement it as sysreset driver. Signed-off-by: Svyatoslav Ryhel --- drivers/power/pmic/tps80031.c | 12 +++++++- drivers/sysreset/Kconfig | 8 ++++++ drivers/sysreset/Makefile | 1 + drivers/sysreset/sysreset_tps80031.c | 41 ++++++++++++++++++++++++++++ include/power/tps80031.h | 5 ++++ 5 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 drivers/sysreset/sysreset_tps80031.c diff --git a/drivers/power/pmic/tps80031.c b/drivers/power/pmic/tps80031.c index c2b04fffdf..45e89ba5c9 100644 --- a/drivers/power/pmic/tps80031.c +++ b/drivers/power/pmic/tps80031.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -49,7 +50,16 @@ static int tps80031_read(struct udevice *dev, uint reg, uint8_t *buff, int len) static int tps80031_bind(struct udevice *dev) { ofnode regulators_node; - int children; + int children, ret; + + if (IS_ENABLED(CONFIG_SYSRESET_TPS80031)) { + ret = device_bind_driver(dev, TPS80031_RST_DRIVER, + "sysreset", NULL); + if (ret) { + log_err("cannot bind SYSRESET (ret = %d)\n", ret); + return ret; + } + } regulators_node = dev_read_subnode(dev, "regulators"); if (!ofnode_valid(regulators_node)) { diff --git a/drivers/sysreset/Kconfig b/drivers/sysreset/Kconfig index bc35896101..cdb4ae2bb1 100644 --- a/drivers/sysreset/Kconfig +++ b/drivers/sysreset/Kconfig @@ -157,6 +157,14 @@ config SYSRESET_TI_SCI This enables the system reset driver support over TI System Control Interface available on some new TI's SoCs. +config SYSRESET_TPS80031 + bool "Enable support for TPS80031/TPS80032 PMIC System Reset" + depends on DM_PMIC_TPS80031 + select SYSRESET_CMD_POWEROFF if CMD_POWEROFF + help + Enable system power management functions found in TPS80031/TPS80032 + PMICs. + config SYSRESET_SYSCON bool "Enable support for mfd syscon reboot driver" select REGMAP diff --git a/drivers/sysreset/Makefile b/drivers/sysreset/Makefile index c31f51c581..f62db899da 100644 --- a/drivers/sysreset/Makefile +++ b/drivers/sysreset/Makefile @@ -19,6 +19,7 @@ obj-$(CONFIG_SYSRESET_SOCFPGA) += sysreset_socfpga.o obj-$(CONFIG_SYSRESET_SOCFPGA_SOC64) += sysreset_socfpga_soc64.o obj-$(CONFIG_SYSRESET_TEGRA) += sysreset_tegra.o obj-$(CONFIG_SYSRESET_TI_SCI) += sysreset-ti-sci.o +obj-$(CONFIG_$(SPL_TPL_)SYSRESET_TPS80031) += sysreset_tps80031.o obj-$(CONFIG_SYSRESET_SYSCON) += sysreset_syscon.o obj-$(CONFIG_SYSRESET_WATCHDOG) += sysreset_watchdog.o obj-$(CONFIG_SYSRESET_RESETCTL) += sysreset_resetctl.o diff --git a/drivers/sysreset/sysreset_tps80031.c b/drivers/sysreset/sysreset_tps80031.c new file mode 100644 index 0000000000..ea35f48ebd --- /dev/null +++ b/drivers/sysreset/sysreset_tps80031.c @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright(C) 2023 Svyatoslav Ryhel + */ + +#include +#include +#include +#include +#include +#include +#include + +static int tps80031_sysreset_request(struct udevice *dev, + enum sysreset_t type) +{ + switch (type) { + case SYSRESET_POWER: + /* TPS80031: SW_RESET > PHOENIX_DEV_ON */ + pmic_reg_write(dev->parent, TPS80031_PHOENIX_DEV_ON, SW_RESET); + break; + case SYSRESET_POWER_OFF: + /* TPS80031: DEVOFF > PHOENIX_DEV_ON */ + pmic_reg_write(dev->parent, TPS80031_PHOENIX_DEV_ON, DEVOFF); + break; + default: + return -EPROTONOSUPPORT; + } + + return -EINPROGRESS; +} + +static struct sysreset_ops tps80031_sysreset = { + .request = tps80031_sysreset_request, +}; + +U_BOOT_DRIVER(sysreset_tps80031) = { + .id = UCLASS_SYSRESET, + .name = TPS80031_RST_DRIVER, + .ops = &tps80031_sysreset, +}; diff --git a/include/power/tps80031.h b/include/power/tps80031.h index c80692a8af..983c841bfe 100644 --- a/include/power/tps80031.h +++ b/include/power/tps80031.h @@ -12,6 +12,7 @@ /* Drivers name */ #define TPS80031_LDO_DRIVER "tps80031_ldo" #define TPS80031_SMPS_DRIVER "tps80031_smps" +#define TPS80031_RST_DRIVER "tps80031_rst" #define TPS80031_SMPS_OFFSET 0xe0 #define TPS80031_OFFSET_FLAG BIT(0) @@ -35,6 +36,10 @@ #define LDO_VOLT_MIN 1018000 #define LDO_VOLT_BASE 916000 +#define TPS80031_PHOENIX_DEV_ON 0x25 +#define SW_RESET BIT(6) +#define DEVOFF BIT(0) + /* register groups */ enum { CTRL, From patchwork Sun Aug 27 08:21:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Svyatoslav Ryhel X-Patchwork-Id: 1826476 X-Patchwork-Delegate: jh80.chung@samsung.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=TQlMHCkK; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RYRWD6V3vz1yZ9 for ; Sun, 27 Aug 2023 18:22:16 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 70D368620C; Sun, 27 Aug 2023 10:21:36 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="TQlMHCkK"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 2B41584B20; Sun, 27 Aug 2023 10:21:35 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-ej1-x62e.google.com (mail-ej1-x62e.google.com [IPv6:2a00:1450:4864:20::62e]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 87C0080726 for ; Sun, 27 Aug 2023 10:21:32 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=clamor95@gmail.com Received: by mail-ej1-x62e.google.com with SMTP id a640c23a62f3a-99d937b83efso287457466b.3 for ; Sun, 27 Aug 2023 01:21:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693124492; x=1693729292; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=StnoIU3cb0ZvDVEiq/IpcJGjq7MVSOr0kMTAEH7njfw=; b=TQlMHCkKL54MjYiXwI+KhcQiqMVSasUjUaQIQlaZ4c+JBOgFrdTBYFuJ6MY2ODGhPn 3M8QBi5UUKv2lWN5N/OS3WoxFmAYXI5f9l6ghjGlaNlLl5u8NCnfTFSBwMXP4jSpIA8p MaIDt/c8o1EL/Oqr0MDsYZFjk43KzKel3BRM/LjVDSfS2kNBbf9U0iKTGSqoLl68saWM 05XbjSMl4McXXp/E2+WRrLJfTyiKL6ds24n6j9k44EY3jqc85d8uQxhlXVxgX8coamWB lFfsmnK+UdfjnbM7QC9+4V93/B2FmbgQwZasw6xzTnzEIrl5ajt5aqAvLlo0Wo8nvqzX PVMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693124492; x=1693729292; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=StnoIU3cb0ZvDVEiq/IpcJGjq7MVSOr0kMTAEH7njfw=; b=UoURUlgT5VPkDoaJf0Hd3+EsXnI/+CQDU1GHyoXCRZwJYs4GVahXQHtiNBmMuU6sHh 8/dFdKdnCSm9ENXctVONLOqn0KJrSQ3HBfP0VxFmx0f88c3WlMBWTvZUIA/cN2z5vBsz AzYoYMB1nhMEZzFBLk7CLf/kG9OMyiI2sRCrA8BkOlt2nqokzbDdnkI8viJiVRi+zjjA S8Sbu9aQlnEtEsAyMQrzSHzarEIeYpLHY9X9/tnxXP+TYsbQmkfqNPCe4rTL3BLQAeCK 3g6627HDuBR7IWYdmn3xnNEG6cNiqxDpYfiGuJ8m5zOe+VcSo7s/mGnRpT3E/bV2P60s BR2w== X-Gm-Message-State: AOJu0YygfVv/MYihKyuZSPSDCQnhAWCFCi7vceamTavHU3zPFtdGUGrs 0rNrMJPizSKMwVC0fHS5ftg= X-Google-Smtp-Source: AGHT+IGfw32E3qRFJr42gAI5S4wxy29GgMMo87G4qJn5v0ywo1N3Src6F9+3KSnVjFzmiUzMWKPiRw== X-Received: by 2002:a17:906:4ca:b0:99b:c038:fdac with SMTP id g10-20020a17090604ca00b0099bc038fdacmr16959461eja.20.1693124491982; Sun, 27 Aug 2023 01:21:31 -0700 (PDT) Received: from xeon.. ([188.163.112.64]) by smtp.gmail.com with ESMTPSA id i10-20020a170906250a00b0099b5a71b0bfsm3153433ejb.94.2023.08.27.01.21.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Aug 2023 01:21:31 -0700 (PDT) From: Svyatoslav Ryhel To: Thierry Reding , Jaehoon Chung , Svyatoslav Ryhel , Simon Glass Cc: u-boot@lists.denx.de Subject: [PATCH v2 5/6] sysreset: implement TPS65910 sysreset functions Date: Sun, 27 Aug 2023 11:21:05 +0300 Message-Id: <20230827082106.6255-6-clamor95@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230827082106.6255-1-clamor95@gmail.com> References: <20230827082106.6255-1-clamor95@gmail.com> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean TPS65910/TPS65911 PMICs have embedded power control functions used by some device to initiane device power off. Implement it as sysreset driver. Signed-off-by: Svyatoslav Ryhel --- drivers/power/pmic/pmic_tps65910_dm.c | 12 +++++- drivers/sysreset/Kconfig | 8 ++++ drivers/sysreset/Makefile | 1 + drivers/sysreset/sysreset_tps65910.c | 55 +++++++++++++++++++++++++++ include/power/tps65910_pmic.h | 7 ++++ 5 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 drivers/sysreset/sysreset_tps65910.c diff --git a/drivers/power/pmic/pmic_tps65910_dm.c b/drivers/power/pmic/pmic_tps65910_dm.c index 53af3171cc..b9c2326d5b 100644 --- a/drivers/power/pmic/pmic_tps65910_dm.c +++ b/drivers/power/pmic/pmic_tps65910_dm.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -58,7 +59,16 @@ static int pmic_tps65910_bind(struct udevice *dev) const struct pmic_child_info *tps6591x_children_info = (struct pmic_child_info *)dev_get_driver_data(dev); ofnode regulators_node; - int children; + int children, ret; + + if (IS_ENABLED(CONFIG_SYSRESET_TPS65910)) { + ret = device_bind_driver(dev, TPS65910_RST_DRIVER, + "sysreset", NULL); + if (ret) { + log_err("cannot bind SYSRESET (ret = %d)\n", ret); + return ret; + } + } regulators_node = dev_read_subnode(dev, "regulators"); if (!ofnode_valid(regulators_node)) { diff --git a/drivers/sysreset/Kconfig b/drivers/sysreset/Kconfig index cdb4ae2bb1..659170d156 100644 --- a/drivers/sysreset/Kconfig +++ b/drivers/sysreset/Kconfig @@ -157,6 +157,14 @@ config SYSRESET_TI_SCI This enables the system reset driver support over TI System Control Interface available on some new TI's SoCs. +config SYSRESET_TPS65910 + bool "Enable support for TPS65910/TPS65911 PMIC System Reset" + depends on DM_PMIC_TPS65910 + select SYSRESET_CMD_POWEROFF if CMD_POWEROFF + help + Enable system power management functions found in TPS65910/TPS65911 + PMICs. + config SYSRESET_TPS80031 bool "Enable support for TPS80031/TPS80032 PMIC System Reset" depends on DM_PMIC_TPS80031 diff --git a/drivers/sysreset/Makefile b/drivers/sysreset/Makefile index f62db899da..0d96a204a9 100644 --- a/drivers/sysreset/Makefile +++ b/drivers/sysreset/Makefile @@ -19,6 +19,7 @@ obj-$(CONFIG_SYSRESET_SOCFPGA) += sysreset_socfpga.o obj-$(CONFIG_SYSRESET_SOCFPGA_SOC64) += sysreset_socfpga_soc64.o obj-$(CONFIG_SYSRESET_TEGRA) += sysreset_tegra.o obj-$(CONFIG_SYSRESET_TI_SCI) += sysreset-ti-sci.o +obj-$(CONFIG_$(SPL_TPL_)SYSRESET_TPS65910) += sysreset_tps65910.o obj-$(CONFIG_$(SPL_TPL_)SYSRESET_TPS80031) += sysreset_tps80031.o obj-$(CONFIG_SYSRESET_SYSCON) += sysreset_syscon.o obj-$(CONFIG_SYSRESET_WATCHDOG) += sysreset_watchdog.o diff --git a/drivers/sysreset/sysreset_tps65910.c b/drivers/sysreset/sysreset_tps65910.c new file mode 100644 index 0000000000..1a362dea0d --- /dev/null +++ b/drivers/sysreset/sysreset_tps65910.c @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright(C) 2023 Svyatoslav Ryhel + */ + +#include +#include +#include +#include +#include +#include +#include + +static int tps65910_sysreset_request(struct udevice *dev, + enum sysreset_t type) +{ + int val; + + val = pmic_reg_read(dev->parent, TPS65910_REG_DEVICE_CTRL); + if (val < 0) + return val; + + /* define power-off to be sequential */ + val |= PWR_OFF_SEQ; + pmic_reg_write(dev->parent, TPS65910_REG_DEVICE_CTRL, val); + + val &= ~DEV_ON; + + switch (type) { + case SYSRESET_POWER: + /* TPS65910: DEV_OFF_RST > DEVICE_CTRL */ + pmic_reg_write(dev->parent, TPS65910_REG_DEVICE_CTRL, + val | DEV_OFF_RST); + break; + case SYSRESET_POWER_OFF: + /* TPS65910: DEV_OFF > DEVICE_CTRL */ + pmic_reg_write(dev->parent, TPS65910_REG_DEVICE_CTRL, + val | DEV_OFF); + break; + default: + return -EPROTONOSUPPORT; + } + + return -EINPROGRESS; +} + +static struct sysreset_ops tps65910_sysreset = { + .request = tps65910_sysreset_request, +}; + +U_BOOT_DRIVER(sysreset_tps65910) = { + .id = UCLASS_SYSRESET, + .name = TPS65910_RST_DRIVER, + .ops = &tps65910_sysreset, +}; diff --git a/include/power/tps65910_pmic.h b/include/power/tps65910_pmic.h index 7d6545abdf..2026ec2f42 100644 --- a/include/power/tps65910_pmic.h +++ b/include/power/tps65910_pmic.h @@ -17,6 +17,12 @@ #define TPS65910_SUPPLY_STATE_OFF 0x0 #define TPS65910_SUPPLY_STATE_ON 0x1 +/* TPS65910 DEVICE_CTRL bits */ +#define PWR_OFF_SEQ BIT(7) +#define DEV_OFF_RST BIT(3) +#define DEV_ON BIT(2) +#define DEV_OFF BIT(0) + /* i2c registers */ enum { TPS65910_REG_RTC_SEC = 0x00, @@ -125,6 +131,7 @@ struct tps65910_regulator_pdata { #define TPS65910_BUCK_DRIVER "tps65910_buck" #define TPS65910_BOOST_DRIVER "tps65910_boost" #define TPS65910_LDO_DRIVER "tps65910_ldo" +#define TPS65910_RST_DRIVER "tps65910_rst" /* tps65911 i2c registers */ enum { From patchwork Sun Aug 27 08:21:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Svyatoslav Ryhel X-Patchwork-Id: 1826478 X-Patchwork-Delegate: jh80.chung@samsung.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=fdoRcO7c; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RYRWd6S72z1yZ9 for ; Sun, 27 Aug 2023 18:22:37 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 05A3C86308; Sun, 27 Aug 2023 10:21:41 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="fdoRcO7c"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id DE35484B20; Sun, 27 Aug 2023 10:21:35 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-ej1-x62d.google.com (mail-ej1-x62d.google.com [IPv6:2a00:1450:4864:20::62d]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 31FA28470A for ; Sun, 27 Aug 2023 10:21:33 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=clamor95@gmail.com Received: by mail-ej1-x62d.google.com with SMTP id a640c23a62f3a-99c0cb7285fso290028266b.0 for ; Sun, 27 Aug 2023 01:21:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693124493; x=1693729293; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mneJ8R77MkCsuvBwXGitbP5mJ5FsHYCuGR5BOG8Sg9U=; b=fdoRcO7chc2m9ocbUGE84M8+IypvEUgfe8tLE2MklU71uTX7ZRyW8Q95nhZ0tXbMw8 wrbxY37gbW8Qp94gHSQTkJVBHbhRdpx/5MxddjnLEKTWR80bpHW4AyJfYQuji4PJpK4P mKtu9Ytytaxew1kvHkzJ5bvIJFSHIMaL5WaVJXlrbAdmCyxlqJlkf97UGaQ9qbEMdVOG wsSMywuaSoMs4fmi6Kb10tf3IcYk2smrXFJsVP/L6ctg5KO/VM3nLjJMSlASFNv+jaa5 eN0V/nqWFHV3JZaBtZq2T45R68+6hQWjlzsc9ER9vxFRB6F2pk4dROdOv5Zaa5HNXhRD LJig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693124493; x=1693729293; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mneJ8R77MkCsuvBwXGitbP5mJ5FsHYCuGR5BOG8Sg9U=; b=gab+B9x515f0E/+Du2aejRc57WuaQBk4SHefxH3q3ddQCKibL2z4rf4dqGhazNDbXo P80ReOtzICYNQVRKxLGhOvxg1J45Nb3CIshEYKLboUs/HnhFb4w08BG3OJRLgKvfc+2g 3Rz3rKtDWd/54hYPtgKTIYfwsbUA68LwaDl05Dzyamvb47mSmxOCPyo3z/v49lVy50ZT YQdYgkgCBuGQ8ZbXte4QZ4+b3VdmVIWduj6VJ3M54GUSx/zoaVXQgX4F7p67xsqXexce qIF1hvi+6QDwsgTljn0JysrXitUwUGHtLd/xyQaBCfCwgmC4KhgvJA0r4qXzMknhPWyl o+Yg== X-Gm-Message-State: AOJu0Yy9X9lV12NG6ffnm/HFX4k2ALIdrN5a4BTI/pGUCY6Nq2mZ6Xt6 waQKRb8r9hA7tEJenamkskQ= X-Google-Smtp-Source: AGHT+IHanrpylWwB91LttVwp3LhEZ3HWnwZBkZaQTnKo3VPsvEiV60kqv0/waGre5BkqM09IDYpIgw== X-Received: by 2002:a17:906:51d0:b0:9a2:24f9:fabd with SMTP id v16-20020a17090651d000b009a224f9fabdmr5348530ejk.73.1693124492738; Sun, 27 Aug 2023 01:21:32 -0700 (PDT) Received: from xeon.. ([188.163.112.64]) by smtp.gmail.com with ESMTPSA id i10-20020a170906250a00b0099b5a71b0bfsm3153433ejb.94.2023.08.27.01.21.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Aug 2023 01:21:32 -0700 (PDT) From: Svyatoslav Ryhel To: Thierry Reding , Jaehoon Chung , Svyatoslav Ryhel , Simon Glass Cc: u-boot@lists.denx.de Subject: [PATCH v2 6/6] sysreset: implement PALMAS sysreset functions Date: Sun, 27 Aug 2023 11:21:06 +0300 Message-Id: <20230827082106.6255-7-clamor95@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230827082106.6255-1-clamor95@gmail.com> References: <20230827082106.6255-1-clamor95@gmail.com> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean PALMAS PMIC family has embedded poweroff function used by some device to initiane device power off. Implement it as sysreset driver. Signed-off-by: Svyatoslav Ryhel --- drivers/power/pmic/palmas.c | 33 +++++++++++++++++-- drivers/sysreset/Kconfig | 7 ++++ drivers/sysreset/Makefile | 1 + drivers/sysreset/sysreset_palmas.c | 53 ++++++++++++++++++++++++++++++ include/power/palmas.h | 11 +++++++ 5 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 drivers/sysreset/sysreset_palmas.c diff --git a/drivers/power/pmic/palmas.c b/drivers/power/pmic/palmas.c index d6eb9cb433..eaa323ef8f 100644 --- a/drivers/power/pmic/palmas.c +++ b/drivers/power/pmic/palmas.c @@ -10,10 +10,10 @@ #include #include #include +#include #include #include #include -#include static const struct pmic_child_info pmic_children_info[] = { { .prefix = "ldo", .driver = PALMAS_LDO_DRIVER }, @@ -46,7 +46,16 @@ static int palmas_bind(struct udevice *dev) { ofnode pmic_node = ofnode_null(), regulators_node; ofnode subnode; - int children; + int children, ret; + + if (IS_ENABLED(CONFIG_SYSRESET_PALMAS)) { + ret = device_bind_driver(dev, PALMAS_RST_DRIVER, + "sysreset", NULL); + if (ret) { + log_err("cannot bind SYSRESET (ret = %d)\n", ret); + return ret; + } + } dev_for_each_subnode(subnode, dev) { const char *name; @@ -80,6 +89,24 @@ static int palmas_bind(struct udevice *dev) return 0; } +static int palmas_probe(struct udevice *dev) +{ + struct dm_i2c_chip *chip = dev_get_parent_plat(dev); + struct palmas_priv *priv = dev_get_priv(dev); + struct udevice *bus = dev_get_parent(dev); + u32 chip2_addr = chip->chip_addr + 1; + int ret; + + /* Palmas PMIC is multi chip and chips are located in a row */ + ret = i2c_get_chip(bus, chip2_addr, 1, &priv->chip2); + if (ret) { + log_err("cannot get second PMIC I2C chip (err %d)\n", ret); + return ret; + } + + return 0; +} + static struct dm_pmic_ops palmas_ops = { .read = palmas_read, .write = palmas_write, @@ -97,5 +124,7 @@ U_BOOT_DRIVER(pmic_palmas) = { .id = UCLASS_PMIC, .of_match = palmas_ids, .bind = palmas_bind, + .probe = palmas_probe, .ops = &palmas_ops, + .priv_auto = sizeof(struct palmas_priv), }; diff --git a/drivers/sysreset/Kconfig b/drivers/sysreset/Kconfig index 659170d156..0e52f99628 100644 --- a/drivers/sysreset/Kconfig +++ b/drivers/sysreset/Kconfig @@ -109,6 +109,13 @@ config SYSRESET_SPL_AT91 This enables the system reset driver support for Microchip/Atmel SoCs in SPL. +config SYSRESET_PALMAS + bool "Enable support for PALMAS System Reset" + depends on PMIC_PALMAS + select SYSRESET_CMD_POWEROFF if CMD_POWEROFF + help + Enable system power management functions found in PLAMAS PMIC family. + config SYSRESET_PSCI bool "Enable support for PSCI System Reset" depends on ARM_PSCI_FW diff --git a/drivers/sysreset/Makefile b/drivers/sysreset/Makefile index 0d96a204a9..c9f1c625ae 100644 --- a/drivers/sysreset/Makefile +++ b/drivers/sysreset/Makefile @@ -13,6 +13,7 @@ obj-$(CONFIG_$(SPL_TPL_)SYSRESET_MAX77663) += sysreset_max77663.o obj-$(CONFIG_SYSRESET_MPC83XX) += sysreset_mpc83xx.o obj-$(CONFIG_SYSRESET_MICROBLAZE) += sysreset_microblaze.o obj-$(CONFIG_SYSRESET_OCTEON) += sysreset_octeon.o +obj-$(CONFIG_$(SPL_TPL_)SYSRESET_PALMAS) += sysreset_palmas.o obj-$(CONFIG_SYSRESET_PSCI) += sysreset_psci.o obj-$(CONFIG_SYSRESET_SBI) += sysreset_sbi.o obj-$(CONFIG_SYSRESET_SOCFPGA) += sysreset_socfpga.o diff --git a/drivers/sysreset/sysreset_palmas.c b/drivers/sysreset/sysreset_palmas.c new file mode 100644 index 0000000000..d853c33504 --- /dev/null +++ b/drivers/sysreset/sysreset_palmas.c @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright(C) 2023 Svyatoslav Ryhel + */ + +#include +#include +#include +#include +#include +#include +#include + +static int palmas_sysreset_request(struct udevice *dev, + enum sysreset_t type) +{ + struct palmas_priv *priv = dev_get_priv(dev->parent); + int ret; + + /* + * Mask INT3 on second page which detects vbus + * or device will immediately turn on. + */ + ret = dm_i2c_reg_clrset(priv->chip2, PALMAS_INT3_MASK, + MASK_VBUS, MASK_VBUS); + if (ret < 0) + return ret; + + switch (type) { + case SYSRESET_POWER: + /* PALMAS: SW_RST > DEV_CTRL */ + pmic_reg_write(dev->parent, PALMAS_DEV_CTRL, SW_RST); + break; + case SYSRESET_POWER_OFF: + /* PALMAS: DEV_OFF > DEV_CTRL */ + pmic_reg_write(dev->parent, PALMAS_DEV_CTRL, DEV_OFF); + break; + default: + return -EPROTONOSUPPORT; + } + + return -EINPROGRESS; +} + +static struct sysreset_ops palmas_sysreset = { + .request = palmas_sysreset_request, +}; + +U_BOOT_DRIVER(sysreset_palmas) = { + .id = UCLASS_SYSRESET, + .name = PALMAS_RST_DRIVER, + .ops = &palmas_sysreset, +}; diff --git a/include/power/palmas.h b/include/power/palmas.h index df5f15c5bd..0a612052f0 100644 --- a/include/power/palmas.h +++ b/include/power/palmas.h @@ -2,6 +2,10 @@ #define TPS659038 0x1 #define TPS65917 0x2 +struct palmas_priv { + struct udevice *chip2; +}; + /* I2C device address for pmic palmas */ #define PALMAS_I2C_ADDR (0x12 >> 1) #define PALMAS_LDO_NUM 11 @@ -10,6 +14,7 @@ /* Drivers name */ #define PALMAS_LDO_DRIVER "palmas_ldo" #define PALMAS_SMPS_DRIVER "palmas_smps" +#define PALMAS_RST_DRIVER "palmas_rst" #define PALMAS_SMPS_VOLT_MASK 0x7F #define PALMAS_SMPS_RANGE_MASK 0x80 @@ -24,3 +29,9 @@ #define PALMAS_LDO_MODE_MASK 0x1 #define PALMAS_LDO_STATUS_MASK 0x10 #define PALMAS_LDO_BYPASS_EN 0x40 + +#define PALMAS_DEV_CTRL 0xA0 +#define SW_RST BIT(1) +#define DEV_OFF 0x00 +#define PALMAS_INT3_MASK 0x1B +#define MASK_VBUS BIT(7)