From patchwork Mon Feb 12 14:58:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 128139 Delivered-To: patch@linaro.org Received: by 10.46.124.24 with SMTP id x24csp3294742ljc; Mon, 12 Feb 2018 07:05:10 -0800 (PST) X-Google-Smtp-Source: AH8x227HhsF7ENJ2q0kr99Z5EuLdW3bJeix0kDWeIxgKRqaKvNXhJt7AWmVuZauOH8KK98hk5WPi X-Received: by 10.98.196.204 with SMTP id h73mr12136194pfk.143.1518447910776; Mon, 12 Feb 2018 07:05:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518447910; cv=none; d=google.com; s=arc-20160816; b=sB+MPL88ZGbkIPYG39HbxY/ZSQ23WgzyI39b29WWU+9I4L0uzY0zyTDe3RCAZ8VsId 00trHkkiuH6eMrpkxjXPy3Z0NM574ThEeb4HKeVQ5oRY2DJS/P9JR+zRraUJjf9ORY8y 6AKPIrZIyJKhP0kTYADVPMSkn+H6swCQqDyx+lj9HfzWi4GYkog8mOBO6vt/QDQQORTG FHdkV+GgMBmY7fGfMy3E1B3vH/z9p1FJTsPo/C7Resa3NmkW1Bt0t33bTueFRkr98cob +vx7tnG1F/fq3BxlbxZUCI18BlWaGs3EBh9tGdDLpla2cEXC5oB/PLaqYUYtiFp4uQKr IIwA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=1wUMCY+kedNfElCuZfI9lQUkyD2Z2xVbBtYM+bsQBVg=; b=dZTtaotNnKuEwa5VHY/mit2ljAs7Wyjfda/QXS1GJjNP26zz2fvv/MUZZ6zF4FM7Zt SqP+hBg/+8m2JAvI8dl7mWm8sw62kBMznUI2rxLHGI2Lyrv+o1+EFuzaJVsUPskJhjBJ /qMpMNuQJnGagIMDW6GXC/XkBDpV60BicdqszjLI2DcUniSCp62/+eytEXHK1fvTSAdP JI6lhgc65OIQLFeG7585ChaXg533ee+vHKJY89sKo9kZIDVuFeYAsqFh7W5B248f6rCf 91+yc9oPECH6mixjAXnnp0TpRMVVp8k3C9GHstDemQ4wFwtnXZBgoBworTKRpgRdVxor TqBQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=OxZZxhVX; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o1-v6si660115plb.280.2018.02.12.07.05.06; Mon, 12 Feb 2018 07:05:10 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=OxZZxhVX; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934890AbeBLPFE (ORCPT + 15 others); Mon, 12 Feb 2018 10:05:04 -0500 Received: from mail-wr0-f196.google.com ([209.85.128.196]:44138 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932408AbeBLO7A (ORCPT ); Mon, 12 Feb 2018 09:59:00 -0500 Received: by mail-wr0-f196.google.com with SMTP id v65so8696239wrc.11 for ; Mon, 12 Feb 2018 06:58:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=1wUMCY+kedNfElCuZfI9lQUkyD2Z2xVbBtYM+bsQBVg=; b=OxZZxhVXOZGoCbXUrDAVTGLbGSX1aSBNhXkXBWrfZTqmFoW0A6F2GS3blo5N7v6TUz 04kR36MCZr9Y+31cnxWkVebcXg1KSBniblV3yC0EEKJVVEEnl0B8H7rVq6zIdzjYm5JN CahV9M3+BrwBaMGlm+MgzqQjarXd6wz2NaODw3SWnFlLofKG/00/eDrZ5r5BEFEPqMYN 3pGtdRGx+f+BRtMDha7JgeUxBs/nDpN3e6u/F8s3a7856+zfqt5Oz9g2reTtdVll41wG MGHVEa9sSBYXTCy4K8HXFrplbP2lIrd7Oy+QqABlaq5dWbg+FJmqi9iHhnkX5iVI+OTa Uwjg== 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; bh=1wUMCY+kedNfElCuZfI9lQUkyD2Z2xVbBtYM+bsQBVg=; b=iWFg077FrDjLUrnWXzRnBykbRrZr9EimqLbg53oSGnQKXZd0q99cEWFaBFe23YdTIk GzX4g5zbnzchDvCWbkVebyeGn7MoEdLfx33x9a9riBkT30XQGtA3/GEgny8F60Pa02dp btF2XiVK/U3gRMM5jSH+h6iKbPgBk7N0X3t8ab3FBOhuoAIUE5OeaYClmJrfDdJ46qG7 OmEWJ08kbRndy6EmEz/0LdOjDlhJGqwxiEcN1J2hptAnhgpBVviIJVUQuNVyReb/b3Zz diXe/NPuFR2lKp4M8MIxdNI+XKwfEuUB/v9RH7gDG/vDdrVFafpgWU15VBxbFLnCQbFf 4oOg== X-Gm-Message-State: APf1xPBAqLsEpOtjOxNSapRlsj8+Ru0F7zPg2o6TYrQhygdkijBZd0PT +SuXIPypww6Avx6w3sRXbkc5tw== X-Received: by 10.223.134.237 with SMTP id 42mr10950425wry.283.1518447538899; Mon, 12 Feb 2018 06:58:58 -0800 (PST) Received: from boomer.baylibre.local ([90.63.244.31]) by smtp.googlemail.com with ESMTPSA id p21sm4633218wmc.28.2018.02.12.06.58.57 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 12 Feb 2018 06:58:58 -0800 (PST) From: Jerome Brunet To: Neil Armstrong , Kevin Hilman Cc: Jerome Brunet , Stephen Boyd , Michael Turquette , Carlo Caione , linux-amlogic@lists.infradead.org, linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 08/19] clk: meson: add regmap to the clock controllers Date: Mon, 12 Feb 2018 15:58:35 +0100 Message-Id: <20180212145846.19380-9-jbrunet@baylibre.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180212145846.19380-1-jbrunet@baylibre.com> References: <20180212145846.19380-1-jbrunet@baylibre.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This change registers a regmap in meson8b, gxbb and axg controllers. The clock are still accessing their registers directly through iomem. Once all clocks handled by these controllers have been move to regmap, the regmap register will be removed and replaced with a syscon request. This is needed because other drivers, such as the HDMI driver, need to access the HHI register region Acked-by: Martin Blumenstingl Signed-off-by: Jerome Brunet --- drivers/clk/meson/Kconfig | 2 ++ drivers/clk/meson/axg.c | 15 ++++++++++++++- drivers/clk/meson/gxbb.c | 33 +++++++++++++++++++++++---------- drivers/clk/meson/meson8b.c | 14 +++++++++++++- 4 files changed, 52 insertions(+), 12 deletions(-) -- 2.14.3 diff --git a/drivers/clk/meson/Kconfig b/drivers/clk/meson/Kconfig index 33d148e19066..9735335b17a9 100644 --- a/drivers/clk/meson/Kconfig +++ b/drivers/clk/meson/Kconfig @@ -11,6 +11,7 @@ config COMMON_CLK_MESON8B bool depends on COMMON_CLK_AMLOGIC select RESET_CONTROLLER + select REGMAP help Support for the clock controller on AmLogic S802 (Meson8), S805 (Meson8b) and S812 (Meson8m2) devices. Say Y if you @@ -29,6 +30,7 @@ config COMMON_CLK_AXG bool depends on COMMON_CLK_AMLOGIC select RESET_CONTROLLER + select REGMAP help Support for the clock controller on AmLogic A113D devices, aka axg. Say Y if you want peripherals and CPU frequency scaling to work. diff --git a/drivers/clk/meson/axg.c b/drivers/clk/meson/axg.c index bc5c29f13282..aed0f9e64f71 100644 --- a/drivers/clk/meson/axg.c +++ b/drivers/clk/meson/axg.c @@ -11,10 +11,11 @@ #include #include +#include #include #include #include -#include +#include #include "clkc.h" #include "axg.h" @@ -791,12 +792,19 @@ static const struct of_device_id clkc_match_table[] = { {} }; +static const struct regmap_config clkc_regmap_config = { + .reg_bits = 32, + .val_bits = 32, + .reg_stride = 4, +}; + static int axg_clkc_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; const struct clkc_data *clkc_data; struct resource *res; void __iomem *clk_base; + struct regmap *map; int ret, i; clkc_data = of_device_get_match_data(dev); @@ -807,12 +815,17 @@ static int axg_clkc_probe(struct platform_device *pdev) res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) return -EINVAL; + clk_base = devm_ioremap(dev, res->start, resource_size(res)); if (!clk_base) { dev_err(dev, "Unable to map clk base\n"); return -ENXIO; } + map = devm_regmap_init_mmio(dev, clk_base, &clkc_regmap_config); + if (IS_ERR(map)) + return PTR_ERR(map); + /* Populate base address for PLLs */ for (i = 0; i < clkc_data->clk_plls_count; i++) clkc_data->clk_plls[i]->base = clk_base; diff --git a/drivers/clk/meson/gxbb.c b/drivers/clk/meson/gxbb.c index 6609024eee00..e3faf0a0fdb7 100644 --- a/drivers/clk/meson/gxbb.c +++ b/drivers/clk/meson/gxbb.c @@ -19,10 +19,11 @@ #include #include +#include #include #include #include -#include +#include #include "clkc.h" #include "gxbb.h" @@ -1937,10 +1938,18 @@ static const struct of_device_id clkc_match_table[] = { {}, }; +static const struct regmap_config clkc_regmap_config = { + .reg_bits = 32, + .val_bits = 32, + .reg_stride = 4, +}; + static int gxbb_clkc_probe(struct platform_device *pdev) { const struct clkc_data *clkc_data; + struct resource *res; void __iomem *clk_base; + struct regmap *map; int ret, i; struct device *dev = &pdev->dev; @@ -1948,13 +1957,20 @@ static int gxbb_clkc_probe(struct platform_device *pdev) if (!clkc_data) return -EINVAL; - /* Generic clocks and PLLs */ - clk_base = of_iomap(dev->of_node, 0); + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (!res) + return -EINVAL; + + clk_base = devm_ioremap(dev, res->start, resource_size(res)); if (!clk_base) { pr_err("%s: Unable to map clk base\n", __func__); return -ENXIO; } + map = devm_regmap_init_mmio(dev, clk_base, &clkc_regmap_config); + if (IS_ERR(map)) + return PTR_ERR(map); + /* Populate base address for PLLs */ for (i = 0; i < clkc_data->clk_plls_count; i++) clkc_data->clk_plls[i]->base = clk_base; @@ -1991,17 +2007,14 @@ static int gxbb_clkc_probe(struct platform_device *pdev) ret = devm_clk_hw_register(dev, clkc_data->hw_onecell_data->hws[i]); - if (ret) - goto iounmap; + if (ret) { + dev_err(dev, "Clock registration failed\n"); + return ret; + } } - return devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, clkc_data->hw_onecell_data); - -iounmap: - iounmap(clk_base); - return ret; } static struct platform_driver gxbb_driver = { diff --git a/drivers/clk/meson/meson8b.c b/drivers/clk/meson/meson8b.c index db017c29a84c..0981e970de3d 100644 --- a/drivers/clk/meson/meson8b.c +++ b/drivers/clk/meson/meson8b.c @@ -23,11 +23,12 @@ #include #include +#include #include #include #include #include -#include +#include #include "clkc.h" #include "meson8b.h" @@ -804,16 +805,27 @@ static const struct reset_control_ops meson8b_clk_reset_ops = { .deassert = meson8b_clk_reset_deassert, }; +static const struct regmap_config clkc_regmap_config = { + .reg_bits = 32, + .val_bits = 32, + .reg_stride = 4, +}; + static int meson8b_clkc_probe(struct platform_device *pdev) { int ret, i; struct clk_hw *parent_hw; struct clk *parent_clk; struct device *dev = &pdev->dev; + struct regmap *map; if (!clk_base) return -ENXIO; + map = devm_regmap_init_mmio(dev, clk_base, &clkc_regmap_config); + if (IS_ERR(map)) + return PTR_ERR(map); + /* Populate base address for PLLs */ for (i = 0; i < ARRAY_SIZE(meson8b_clk_plls); i++) meson8b_clk_plls[i]->base = clk_base;