Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp1169436pxb; Sat, 30 Oct 2021 07:21:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxU1qKXp1OjnK5DjeOWNoX9GoVPgjIi77JVIcgQeewXhFN1b2+hQs0Ggwqi5KMdgwUCFgR3 X-Received: by 2002:a05:6638:329e:: with SMTP id f30mr11359612jav.63.1635603697581; Sat, 30 Oct 2021 07:21:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1635603697; cv=none; d=google.com; s=arc-20160816; b=NE9jj4G3LPr/ynAUn8eEUpM6s/pZ+AYyc46c0Hda1NiKLN/pLihVgqYEJFZ5mB5bD9 OvlKQo6YLquh4Lpz5Dyhgc9CZi4nHgF+/ouL+IHqpCYvOaGa6f8dqmvOpxEiAl8Cbwfz pbKr58TOyosuVfFbBvA5C5BBVWuux2VeHYPIUx1o48jrVWRnW+MBivrXi9XNupSFF/nK WiiBXRIobb9k1YgNPrrTSaSnNgLvF/HqNP5bl2pfLo/SzXTKeeWv4BHcFL1CwVrfxk16 GILLaGgB6S4atw0zzT/16sHLGAgehwWEgrU8hnllOaxDlmgRibQ0EMKv5/8gJcUK4cCx DbNA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=F5x1oqtvVP/PGtFgO2U9FSpcbZxZK7r+xhICFV95IKo=; b=tFsz6U4IY+u26bQR6TFWwVcGpMw0SNUU6GYNLmH1NKySP9EW2xEWPP/Z+Bfk4q1/lE JsclKBz5fZUjaFxEOgX/8ocgsVUnIeCVyI8Ug+73fTA1dU+cwsK2EIR1RW96NpEb5P8M 5H+Kls7WddMTTqBMQVJkDlDgIWcaxtuV+a0d9jvgUqjvPYnhTD04xFUMrM2Hv/ugKqnb dmkoUqNg2F8JKfuRPHGXjvmwlErmGmrfN4euzw5icEnHSbFOP6GSpX9ZeFD/afflr06K AfkneiuEgggZrHTKpu6hCmpBPWtLYvmLJ3+hC1xzTuGlVsiobE4bJXJGcguI+2AcpuSX InAQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=KkVOt+LA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ay41si10830730jab.95.2021.10.30.07.21.26; Sat, 30 Oct 2021 07:21:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=KkVOt+LA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229585AbhJ3OWu (ORCPT + 99 others); Sat, 30 Oct 2021 10:22:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49162 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230303AbhJ3OWp (ORCPT ); Sat, 30 Oct 2021 10:22:45 -0400 Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 54C17C061570; Sat, 30 Oct 2021 07:20:15 -0700 (PDT) Received: by mail-wr1-x42a.google.com with SMTP id v17so21170323wrv.9; Sat, 30 Oct 2021 07:20:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=F5x1oqtvVP/PGtFgO2U9FSpcbZxZK7r+xhICFV95IKo=; b=KkVOt+LAZlq1nTiNsYPYr/MlwIStQYb0R/EKITJAyNqUIykthIosrTrJEUoLSPg/K7 8REM4Wv1pQ7EXJp+X58Z6e4/jJ1A3LOK+UpDA4UkIgaM48ULQx5iLbDm1MRs8LGpsHD1 yrEg9r8WgVR376MgDhP9qEI/0rYXOLzn74oqOsXnv9koKgMdQOyxLazmq5jkmfA3zH0g jAzC/Qyt4FWLKHqbNEMWU5rG/89MhgURScmA0yfcWyLZ/orKHZQt/bJAVXMbO2KUyZJf 8g3ixTTh+oQFWW9+qyrPrhOH9dZuZwkWnZN8cB6Zoq+sUlBCOIpQMs3XuLVydRSZ/7SN yFzQ== 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=F5x1oqtvVP/PGtFgO2U9FSpcbZxZK7r+xhICFV95IKo=; b=ymoNDWkmqUZiEGWj2jODFcQZly3+Roo60r4NgAEerTdmjJ/d2OuH2UYbv6xt9aubMt siB9eMG8FzBPIpWAD0QVvWsKqZ0/Assi8NLGSV9KRZnVPZ7wvXfgGQqWuC/m9UCbrZUC WdyDHXw1kiW7Ec3qEQH9YiWBtHA1qJMP4UBpOP08jzsdLDh83mRunrB15iryL1quzoyO IQk+kYLTHCh049s9JsyF5gofgzhQE1X0e18BarAMMMGCWyuDbZJhTaRNDyV4Z1ebo4Cp +s5lw5prPPabaBnAfSH4F/1rQkHvfbI5AfEDRDiRw34c7JNCSa5i9BPgD5VjNR68SErp F/Cw== X-Gm-Message-State: AOAM532XbAyiwvUOA7JCse4cQ5HXhZUZlEvnLn9f9EtZ/duCGye59x4+ Ajr1oXYy8CUdRUiYivzUrWrrKe5gce7deQ== X-Received: by 2002:a05:6000:2a4:: with SMTP id l4mr23395325wry.221.1635603613662; Sat, 30 Oct 2021 07:20:13 -0700 (PDT) Received: from localhost.localdomain (252.red-83-54-181.dynamicip.rima-tde.net. [83.54.181.252]) by smtp.gmail.com with ESMTPSA id m12sm8208521wrq.69.2021.10.30.07.20.12 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 30 Oct 2021 07:20:13 -0700 (PDT) From: Sergio Paracuellos To: linux-clk@vger.kernel.org Cc: linux-kernel@vger.kernel.org, sboyd@kernel.org, john@phrozen.org, linux-staging@lists.linux.dev, gregkh@linuxfoundation.org, neil@brown.name Subject: [PATCH v3 3/4] clk: ralink: make system controller node a reset provider Date: Sat, 30 Oct 2021 16:20:06 +0200 Message-Id: <20211030142007.27085-4-sergio.paracuellos@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211030142007.27085-1-sergio.paracuellos@gmail.com> References: <20211030142007.27085-1-sergio.paracuellos@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org MT7621 system controller node is already providing the clocks for the whole system but must also serve as a reset provider. Hence, add reset controller related code to the clock driver itself. Signed-off-by: Sergio Paracuellos --- drivers/clk/ralink/clk-mt7621.c | 79 +++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/drivers/clk/ralink/clk-mt7621.c b/drivers/clk/ralink/clk-mt7621.c index a2c045390f00..f149dd2d1325 100644 --- a/drivers/clk/ralink/clk-mt7621.c +++ b/drivers/clk/ralink/clk-mt7621.c @@ -11,14 +11,17 @@ #include #include #include +#include #include #include +#include /* Configuration registers */ #define SYSC_REG_SYSTEM_CONFIG0 0x10 #define SYSC_REG_SYSTEM_CONFIG1 0x14 #define SYSC_REG_CLKCFG0 0x2c #define SYSC_REG_CLKCFG1 0x30 +#define SYSC_REG_RESET_CTRL 0x34 #define SYSC_REG_CUR_CLK_STS 0x44 #define MEMC_REG_CPU_PLL 0x648 @@ -398,6 +401,76 @@ static void __init mt7621_clk_init(struct device_node *node) } CLK_OF_DECLARE_DRIVER(mt7621_clk, "mediatek,mt7621-sysc", mt7621_clk_init); +struct mt7621_rst { + struct reset_controller_dev rcdev; + struct regmap *sysc; +}; + +static inline struct mt7621_rst *to_mt7621_rst(struct reset_controller_dev *dev) +{ + return container_of(dev, struct mt7621_rst, rcdev); +} + +static int mt7621_assert_device(struct reset_controller_dev *rcdev, + unsigned long id) +{ + struct mt7621_rst *data = to_mt7621_rst(rcdev); + struct regmap *sysc = data->sysc; + + if (id == MT7621_RST_SYS) + return -1; + + return regmap_update_bits(sysc, SYSC_REG_RESET_CTRL, BIT(id), BIT(id)); +} + +static int mt7621_deassert_device(struct reset_controller_dev *rcdev, + unsigned long id) +{ + struct mt7621_rst *data = to_mt7621_rst(rcdev); + struct regmap *sysc = data->sysc; + + if (id == MT7621_RST_SYS) + return -1; + + return regmap_update_bits(sysc, SYSC_REG_RESET_CTRL, BIT(id), 0); +} + +static int mt7621_reset_device(struct reset_controller_dev *rcdev, + unsigned long id) +{ + int ret; + + ret = mt7621_assert_device(rcdev, id); + if (ret < 0) + return ret; + + return mt7621_deassert_device(rcdev, id); +} + +static const struct reset_control_ops reset_ops = { + .reset = mt7621_reset_device, + .assert = mt7621_assert_device, + .deassert = mt7621_deassert_device +}; + +static int mt7621_reset_init(struct device *dev, struct regmap *sysc) +{ + struct mt7621_rst *rst_data; + + rst_data = kzalloc(sizeof(*rst_data), GFP_KERNEL); + if (!rst_data) + return -ENOMEM; + + rst_data->sysc = sysc; + rst_data->rcdev.ops = &reset_ops; + rst_data->rcdev.owner = THIS_MODULE; + rst_data->rcdev.nr_resets = 32; + rst_data->rcdev.of_reset_n_cells = 1; + rst_data->rcdev.of_node = dev_of_node(dev); + + return devm_reset_controller_register(dev, &rst_data->rcdev); +} + static int mt7621_clk_probe(struct platform_device *pdev) { struct device_node *np = pdev->dev.of_node; @@ -424,6 +497,12 @@ static int mt7621_clk_probe(struct platform_device *pdev) return ret; } + ret = mt7621_reset_init(dev, priv->sysc); + if (ret) { + dev_err(dev, "Could not init reset controller\n"); + return ret; + } + count = ARRAY_SIZE(mt7621_clks_base) + ARRAY_SIZE(mt7621_fixed_clks) + ARRAY_SIZE(mt7621_gates); clk_data = devm_kzalloc(dev, struct_size(clk_data, hws, count), -- 2.33.0