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 Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 0930DC433EF for ; Tue, 18 Jan 2022 10:14:11 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 1403183818; Tue, 18 Jan 2022 11:13:58 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=baylibre.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=baylibre-com.20210112.gappssmtp.com header.i=@baylibre-com.20210112.gappssmtp.com header.b="YD8UToJX"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id DDE0B837FA; Tue, 18 Jan 2022 11:13:48 +0100 (CET) Received: from mail-wm1-x32b.google.com (mail-wm1-x32b.google.com [IPv6:2a00:1450:4864:20::32b]) (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 C6A22837FA for ; Tue, 18 Jan 2022 11:13:40 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=aouledameur@baylibre.com Received: by mail-wm1-x32b.google.com with SMTP id l12-20020a7bc34c000000b003467c58cbdfso4493855wmj.2 for ; Tue, 18 Jan 2022 02:13:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=RWHr/35764H5SGPvSz2J9E1U6Wn/Xa0dPScwneuqrQE=; b=YD8UToJX8gX/VnimLjkxstzMXkVlTIuH/Ua/ghZumbPw5+JF0/09MV50pnAXO8/Os8 I0eJ3P8vcjckEVVOR2QIQZHhDGrycfZQDjOwgiyWfFNe9E4od/PG++9B+Wf4Ue2SVWV+ 0q2SIPsnm6qFIC3Ko1bhe+ghCDzzsnLZ7XNABFb0TTdqUuENZbXRaBQKwp/6MJVtk7yA Y+hVM/3IMVyKwJGiMqIX0w8dQCkHe838wu+wThGpxEdpQtg4eIDkHC/A4SyTogQoIp4N ynFbde5pDGDDMymWdevitS3Vb5Jo2FVaBYImllHo14gWxHo3tLo2ZXpgLO2O7nSeSDI4 SiiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=RWHr/35764H5SGPvSz2J9E1U6Wn/Xa0dPScwneuqrQE=; b=u3hH3wtultgce/KwnLp5aUkC2IUHrpPkY1Zy4I/8wowTFMlA/f0d0zjYI3ai0sNDSW ZDnFZgQrefL040uSjDIRktWIaBo6jm/L0an2OKaZlGWoXYBvSwOqI/NWCZv0e9dZutcL WGVvwgW2XD2Lt/YYoi29U3fPEzxFrxwxs4Mzy60hfy6Br/z6nO852E3vUD6RbuRplZai jO5eR40zC+s8m26pwzf8t9NZDURU45ATP1ry7dVUw6lx4Spz2mRFTAXmbLiNm0tqI4DZ 46SXsP/mQmKkExjgFCpS2MaJrzNkUAhjktm/VfGOx8ei0mf90kmA3aRKK+rtH+d0ZL/H XJTw== X-Gm-Message-State: AOAM531qGlzw5xaoCTadeXgnOusrSWXRJRnS4OmAlEyomL96ISbHjSOB T5v+TUYemXgdSUn3alA0AQ8Zb2DJBfAirQ== X-Google-Smtp-Source: ABdhPJzMVoNL6H/46kdGqdKhueDKonVpx0HXHAT6dYuIsWV2az4I2cGJMSOMygHqbcKDNd68/mL2sw== X-Received: by 2002:a5d:47c3:: with SMTP id o3mr10512637wrc.566.1642500820404; Tue, 18 Jan 2022 02:13:40 -0800 (PST) Received: from localhost.localdomain (203.247.120.78.rev.sfr.net. [78.120.247.203]) by smtp.googlemail.com with ESMTPSA id f16sm2213622wmg.48.2022.01.18.02.13.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Jan 2022 02:13:40 -0800 (PST) From: Amjad Ouled-Ameur To: u-boot@lists.denx.de Cc: khilman@baylibre.com, Keerthy , Amjad Ouled-Ameur , Bin Meng , "Chia-Wei, Wang" , Green Wan , Leo Yu-Chi Liang , Michal Simek , Ryan Chen Subject: [PATCH v3 02/11] reset: dra7: Add a reset driver Date: Tue, 18 Jan 2022 11:12:40 +0100 Message-Id: <20220118101249.87031-3-aouledameur@baylibre.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220118101249.87031-1-aouledameur@baylibre.com> References: <20220118101249.87031-1-aouledameur@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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.2 at phobos.denx.de X-Virus-Status: Clean From: Keerthy Add a reset driver to bring IPs out of reset. Signed-off-by: Keerthy [Amjad: reset_ops structure member "free" has been renamed to "rfree", use the latter instead] Signed-off-by: Amjad Ouled-Ameur --- (no changes since v1) MAINTAINERS | 1 + drivers/reset/Kconfig | 6 +++ drivers/reset/Makefile | 1 + drivers/reset/reset-dra7.c | 97 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 105 insertions(+) create mode 100644 drivers/reset/reset-dra7.c diff --git a/MAINTAINERS b/MAINTAINERS index 38c68ee87d41..bd9cc4107cbe 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -536,6 +536,7 @@ F: drivers/ram/k3* F: drivers/remoteproc/k3_system_controller.c F: drivers/remoteproc/pruc_rpoc.c F: drivers/remoteproc/ti* +F: drivers/reset/reset-dra7.c F: drivers/reset/reset-ti-sci.c F: drivers/rtc/davinci.c F: drivers/serial/serial_omap.c diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig index d73daf5e3189..b57714111b5a 100644 --- a/drivers/reset/Kconfig +++ b/drivers/reset/Kconfig @@ -206,4 +206,10 @@ config RESET_ZYNQMP passing request via Xilinx firmware interface to TF-A and PMU firmware. +config RESET_DRA7 + bool "Support for TI's DRA7 Reset driver" + depends on DM_RESET + help + Support for TI DRA7-RESET subsystem. Basic Assert/Deassert + is supported. endmenu diff --git a/drivers/reset/Makefile b/drivers/reset/Makefile index d69486bdeb9e..97e3a782c0d8 100644 --- a/drivers/reset/Makefile +++ b/drivers/reset/Makefile @@ -30,3 +30,4 @@ obj-$(CONFIG_RESET_SYSCON) += reset-syscon.o obj-$(CONFIG_RESET_RASPBERRYPI) += reset-raspberrypi.o obj-$(CONFIG_RESET_SCMI) += reset-scmi.o obj-$(CONFIG_RESET_ZYNQMP) += reset-zynqmp.o +obj-$(CONFIG_RESET_DRA7) += reset-dra7.o diff --git a/drivers/reset/reset-dra7.c b/drivers/reset/reset-dra7.c new file mode 100644 index 000000000000..585f8323c52e --- /dev/null +++ b/drivers/reset/reset-dra7.c @@ -0,0 +1,97 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Texas Instruments DRA7 reset driver + * + * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com/ + * Author: Keerthy + */ + +#include +#include +#include +#include +#include + +struct dra7_reset_priv { + u32 rstctrl; + u32 rstst; + u8 nreset; +}; + +static int dra7_reset_request(struct reset_ctl *reset_ctl) +{ + return 0; +} + +static int dra7_reset_free(struct reset_ctl *reset_ctl) +{ + return 0; +} + +static inline void dra7_reset_rmw(u32 addr, u32 value, u32 mask) +{ + writel(((readl(addr) & (~mask)) | (value & mask)), addr); +} + +static int dra7_reset_deassert(struct reset_ctl *reset_ctl) +{ + struct dra7_reset_priv *priv = dev_get_priv(reset_ctl->dev); + int mask = 1 << reset_ctl->id; + + if (reset_ctl->id < 0 || reset_ctl->id >= priv->nreset) + return -EINVAL; + + dra7_reset_rmw(priv->rstctrl, 0x0, mask); + + while ((readl(priv->rstst) & mask) != mask) + ; + + return 0; +} + +static int dra7_reset_assert(struct reset_ctl *reset_ctl) +{ + struct dra7_reset_priv *priv = dev_get_priv(reset_ctl->dev); + int mask = 1 << reset_ctl->id; + + if (reset_ctl->id < 0 || reset_ctl->id >= priv->nreset) + return -EINVAL; + + dra7_reset_rmw(priv->rstctrl, mask, 0x0); + + return 0; +} + +struct reset_ops dra7_reset_ops = { + .request = dra7_reset_request, + .rfree = dra7_reset_free, + .rst_assert = dra7_reset_assert, + .rst_deassert = dra7_reset_deassert, +}; + +static const struct udevice_id dra7_reset_ids[] = { + { .compatible = "ti,dra7-reset" }, + { } +}; + +static int dra7_reset_probe(struct udevice *dev) +{ + struct dra7_reset_priv *priv = dev_get_priv(dev); + + priv->rstctrl = dev_read_addr(dev); + priv->rstst = priv->rstctrl + 0x4; + priv->nreset = dev_read_u32_default(dev, "ti,nresets", 1); + + dev_info(dev, "dra7-reset successfully probed %s\n", dev->name); + + return 0; +} + +U_BOOT_DRIVER(dra7_reset) = { + .name = "dra7_reset", + .id = UCLASS_RESET, + .of_match = dra7_reset_ids, + .probe = dra7_reset_probe, + .ops = &dra7_reset_ops, + .priv_auto = sizeof(struct dra7_reset_priv), +}; -- 2.25.1