All of lore.kernel.org
 help / color / mirror / Atom feed
From: Maxime Ripard <maxime@cerno.tech>
To: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
Cc: linux-rpi-kernel@lists.infradead.org,
	bcm-kernel-feedback-list@broadcom.com,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	Dave Stevenson <dave.stevenson@raspberrypi.com>,
	Tim Gover <tim.gover@raspberrypi.com>,
	Phil Elwell <phil@raspberrypi.com>,
	Maxime Ripard <maxime@cerno.tech>,
	Michael Turquette <mturquette@baylibre.com>,
	linux-clk@vger.kernel.org, Stephen Boyd <sboyd@kernel.org>
Subject: [PATCH v3 13/25] clk: bcm: rpi: Create a data structure for the clocks
Date: Wed, 27 May 2020 17:45:09 +0200	[thread overview]
Message-ID: <da903789bf0d96b5c9a8845595158c4c2623fdd9.1590594293.git-series.maxime@cerno.tech> (raw)
In-Reply-To: <cover.662a8d401787ef33780d91252a352de91dc4be10.1590594293.git-series.maxime@cerno.tech>

So far the driver has really only been providing a single clock, and stored
both the data associated to that clock in particular with the data
associated to the "controller".

Since we will change that in the future, let's decouple the clock data from
the provider data.

Cc: Michael Turquette <mturquette@baylibre.com>
Cc: linux-clk@vger.kernel.org
Acked-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
Reviewed-by: Stephen Boyd <sboyd@kernel.org>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
 drivers/clk/bcm/clk-raspberrypi.c | 31 +++++++++++++++++++++----------
 1 file changed, 21 insertions(+), 10 deletions(-)

diff --git a/drivers/clk/bcm/clk-raspberrypi.c b/drivers/clk/bcm/clk-raspberrypi.c
index e135ad28d38d..00735704eabc 100644
--- a/drivers/clk/bcm/clk-raspberrypi.c
+++ b/drivers/clk/bcm/clk-raspberrypi.c
@@ -35,8 +35,11 @@ struct raspberrypi_clk {
 	struct device *dev;
 	struct rpi_firmware *firmware;
 	struct platform_device *cpufreq;
+};
 
-	struct clk_hw pllb;
+struct raspberrypi_clk_data {
+	struct clk_hw hw;
+	struct raspberrypi_clk *rpi;
 };
 
 /*
@@ -80,8 +83,9 @@ static int raspberrypi_clock_property(struct rpi_firmware *firmware, u32 tag,
 
 static int raspberrypi_fw_pll_is_on(struct clk_hw *hw)
 {
-	struct raspberrypi_clk *rpi = container_of(hw, struct raspberrypi_clk,
-						   pllb);
+	struct raspberrypi_clk_data *data =
+		container_of(hw, struct raspberrypi_clk_data, hw);
+	struct raspberrypi_clk *rpi = data->rpi;
 	u32 val = 0;
 	int ret;
 
@@ -98,8 +102,9 @@ static int raspberrypi_fw_pll_is_on(struct clk_hw *hw)
 static unsigned long raspberrypi_fw_pll_get_rate(struct clk_hw *hw,
 						 unsigned long parent_rate)
 {
-	struct raspberrypi_clk *rpi = container_of(hw, struct raspberrypi_clk,
-						   pllb);
+	struct raspberrypi_clk_data *data =
+		container_of(hw, struct raspberrypi_clk_data, hw);
+	struct raspberrypi_clk *rpi = data->rpi;
 	u32 val = 0;
 	int ret;
 
@@ -116,8 +121,9 @@ static unsigned long raspberrypi_fw_pll_get_rate(struct clk_hw *hw,
 static int raspberrypi_fw_pll_set_rate(struct clk_hw *hw, unsigned long rate,
 				       unsigned long parent_rate)
 {
-	struct raspberrypi_clk *rpi = container_of(hw, struct raspberrypi_clk,
-						   pllb);
+	struct raspberrypi_clk_data *data =
+		container_of(hw, struct raspberrypi_clk_data, hw);
+	struct raspberrypi_clk *rpi = data->rpi;
 	u32 new_rate = rate / RPI_FIRMWARE_PLLB_ARM_DIV_RATE;
 	int ret;
 
@@ -168,10 +174,15 @@ static const struct clk_ops raspberrypi_firmware_pll_clk_ops = {
 
 static int raspberrypi_register_pllb(struct raspberrypi_clk *rpi)
 {
+	struct raspberrypi_clk_data *data;
 	struct clk_init_data init = {};
 	u32 min_rate = 0, max_rate = 0;
 	int ret;
 
+	data = devm_kzalloc(rpi->dev, sizeof(*data), GFP_KERNEL);
+	if (!data)
+		return -ENOMEM;
+	data->rpi = rpi;
 
 	/* All of the PLLs derive from the external oscillator. */
 	init.parent_names = (const char *[]){ "osc" };
@@ -210,11 +221,11 @@ static int raspberrypi_register_pllb(struct raspberrypi_clk *rpi)
 	dev_info(rpi->dev, "CPU frequency range: min %u, max %u\n",
 		 min_rate, max_rate);
 
-	rpi->pllb.init = &init;
+	data->hw.init = &init;
 
-	ret = devm_clk_hw_register(rpi->dev, &rpi->pllb);
+	ret = devm_clk_hw_register(rpi->dev, &data->hw);
 	if (!ret)
-		clk_hw_set_rate_range(&rpi->pllb,
+		clk_hw_set_rate_range(&data->hw,
 				      min_rate * RPI_FIRMWARE_PLLB_ARM_DIV_RATE,
 				      max_rate * RPI_FIRMWARE_PLLB_ARM_DIV_RATE);
 
-- 
git-series 0.9.1

WARNING: multiple messages have this Message-ID (diff)
From: Maxime Ripard <maxime@cerno.tech>
To: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
Cc: Tim Gover <tim.gover@raspberrypi.com>,
	Dave Stevenson <dave.stevenson@raspberrypi.com>,
	Stephen Boyd <sboyd@kernel.org>,
	Michael Turquette <mturquette@baylibre.com>,
	linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org,
	bcm-kernel-feedback-list@broadcom.com,
	linux-rpi-kernel@lists.infradead.org,
	Phil Elwell <phil@raspberrypi.com>,
	linux-arm-kernel@lists.infradead.org,
	Maxime Ripard <maxime@cerno.tech>
Subject: [PATCH v3 13/25] clk: bcm: rpi: Create a data structure for the clocks
Date: Wed, 27 May 2020 17:45:09 +0200	[thread overview]
Message-ID: <da903789bf0d96b5c9a8845595158c4c2623fdd9.1590594293.git-series.maxime@cerno.tech> (raw)
In-Reply-To: <cover.662a8d401787ef33780d91252a352de91dc4be10.1590594293.git-series.maxime@cerno.tech>

So far the driver has really only been providing a single clock, and stored
both the data associated to that clock in particular with the data
associated to the "controller".

Since we will change that in the future, let's decouple the clock data from
the provider data.

Cc: Michael Turquette <mturquette@baylibre.com>
Cc: linux-clk@vger.kernel.org
Acked-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
Reviewed-by: Stephen Boyd <sboyd@kernel.org>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
 drivers/clk/bcm/clk-raspberrypi.c | 31 +++++++++++++++++++++----------
 1 file changed, 21 insertions(+), 10 deletions(-)

diff --git a/drivers/clk/bcm/clk-raspberrypi.c b/drivers/clk/bcm/clk-raspberrypi.c
index e135ad28d38d..00735704eabc 100644
--- a/drivers/clk/bcm/clk-raspberrypi.c
+++ b/drivers/clk/bcm/clk-raspberrypi.c
@@ -35,8 +35,11 @@ struct raspberrypi_clk {
 	struct device *dev;
 	struct rpi_firmware *firmware;
 	struct platform_device *cpufreq;
+};
 
-	struct clk_hw pllb;
+struct raspberrypi_clk_data {
+	struct clk_hw hw;
+	struct raspberrypi_clk *rpi;
 };
 
 /*
@@ -80,8 +83,9 @@ static int raspberrypi_clock_property(struct rpi_firmware *firmware, u32 tag,
 
 static int raspberrypi_fw_pll_is_on(struct clk_hw *hw)
 {
-	struct raspberrypi_clk *rpi = container_of(hw, struct raspberrypi_clk,
-						   pllb);
+	struct raspberrypi_clk_data *data =
+		container_of(hw, struct raspberrypi_clk_data, hw);
+	struct raspberrypi_clk *rpi = data->rpi;
 	u32 val = 0;
 	int ret;
 
@@ -98,8 +102,9 @@ static int raspberrypi_fw_pll_is_on(struct clk_hw *hw)
 static unsigned long raspberrypi_fw_pll_get_rate(struct clk_hw *hw,
 						 unsigned long parent_rate)
 {
-	struct raspberrypi_clk *rpi = container_of(hw, struct raspberrypi_clk,
-						   pllb);
+	struct raspberrypi_clk_data *data =
+		container_of(hw, struct raspberrypi_clk_data, hw);
+	struct raspberrypi_clk *rpi = data->rpi;
 	u32 val = 0;
 	int ret;
 
@@ -116,8 +121,9 @@ static unsigned long raspberrypi_fw_pll_get_rate(struct clk_hw *hw,
 static int raspberrypi_fw_pll_set_rate(struct clk_hw *hw, unsigned long rate,
 				       unsigned long parent_rate)
 {
-	struct raspberrypi_clk *rpi = container_of(hw, struct raspberrypi_clk,
-						   pllb);
+	struct raspberrypi_clk_data *data =
+		container_of(hw, struct raspberrypi_clk_data, hw);
+	struct raspberrypi_clk *rpi = data->rpi;
 	u32 new_rate = rate / RPI_FIRMWARE_PLLB_ARM_DIV_RATE;
 	int ret;
 
@@ -168,10 +174,15 @@ static const struct clk_ops raspberrypi_firmware_pll_clk_ops = {
 
 static int raspberrypi_register_pllb(struct raspberrypi_clk *rpi)
 {
+	struct raspberrypi_clk_data *data;
 	struct clk_init_data init = {};
 	u32 min_rate = 0, max_rate = 0;
 	int ret;
 
+	data = devm_kzalloc(rpi->dev, sizeof(*data), GFP_KERNEL);
+	if (!data)
+		return -ENOMEM;
+	data->rpi = rpi;
 
 	/* All of the PLLs derive from the external oscillator. */
 	init.parent_names = (const char *[]){ "osc" };
@@ -210,11 +221,11 @@ static int raspberrypi_register_pllb(struct raspberrypi_clk *rpi)
 	dev_info(rpi->dev, "CPU frequency range: min %u, max %u\n",
 		 min_rate, max_rate);
 
-	rpi->pllb.init = &init;
+	data->hw.init = &init;
 
-	ret = devm_clk_hw_register(rpi->dev, &rpi->pllb);
+	ret = devm_clk_hw_register(rpi->dev, &data->hw);
 	if (!ret)
-		clk_hw_set_rate_range(&rpi->pllb,
+		clk_hw_set_rate_range(&data->hw,
 				      min_rate * RPI_FIRMWARE_PLLB_ARM_DIV_RATE,
 				      max_rate * RPI_FIRMWARE_PLLB_ARM_DIV_RATE);
 
-- 
git-series 0.9.1

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2020-05-27 15:46 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-27 15:44 [PATCH v3 00/25] clk: bcm: rpi: Add support for BCM2711 firmware clocks Maxime Ripard
2020-05-27 15:44 ` Maxime Ripard
2020-05-27 15:44 ` [PATCH v3 01/25] dt-bindings: arm: bcm: Convert BCM2835 firmware binding to YAML Maxime Ripard
2020-05-27 15:44   ` Maxime Ripard
2020-05-27 15:44 ` [PATCH v3 02/25] dt-bindings: clock: Add a binding for the RPi Firmware clocks Maxime Ripard
2020-05-27 15:44   ` Maxime Ripard
2020-05-29 18:14   ` Rob Herring
2020-05-29 18:14     ` Rob Herring
2020-05-29 21:17   ` Stephen Boyd
2020-05-29 21:17     ` Stephen Boyd
2020-05-30 16:23     ` Maxime Ripard
2020-05-30 16:23       ` Maxime Ripard
2020-05-27 15:44 ` [PATCH v3 03/25] firmware: rpi: Only create clocks device if we don't have a node for it Maxime Ripard
2020-05-27 15:44   ` Maxime Ripard
2020-06-04 17:50   ` Nicolas Saenz Julienne
2020-06-04 17:50     ` Nicolas Saenz Julienne
2020-05-27 15:45 ` [PATCH v3 04/25] clk: bcm: rpi: Allow the driver to be probed by DT Maxime Ripard
2020-05-27 15:45   ` Maxime Ripard
2020-05-29 21:17   ` Stephen Boyd
2020-05-29 21:17     ` Stephen Boyd
2020-06-04 17:52   ` Nicolas Saenz Julienne
2020-06-04 17:52     ` Nicolas Saenz Julienne
2020-05-27 15:45 ` [PATCH v3 05/25] clk: bcm: rpi: Statically init clk_init_data Maxime Ripard
2020-05-27 15:45   ` Maxime Ripard
2020-05-27 15:45 ` [PATCH v3 06/25] clk: bcm: rpi: Use clk_hw_register for pllb_arm Maxime Ripard
2020-05-27 15:45   ` Maxime Ripard
2020-05-27 15:45 ` [PATCH v3 07/25] clk: bcm: rpi: Remove global pllb_arm clock pointer Maxime Ripard
2020-05-27 15:45   ` Maxime Ripard
2020-05-27 15:45 ` [PATCH v3 08/25] clk: bcm: rpi: Make sure pllb_arm is removed Maxime Ripard
2020-05-27 15:45   ` Maxime Ripard
2020-05-27 15:45 ` [PATCH v3 09/25] clk: bcm: rpi: Remove pllb_arm_lookup global pointer Maxime Ripard
2020-05-27 15:45   ` Maxime Ripard
2020-05-27 15:45 ` [PATCH v3 10/25] clk: bcm: rpi: Switch to clk_hw_register_clkdev Maxime Ripard
2020-05-27 15:45   ` Maxime Ripard
2020-05-27 15:45 ` [PATCH v3 11/25] clk: bcm: rpi: Make sure the clkdev lookup is removed Maxime Ripard
2020-05-27 15:45   ` Maxime Ripard
2020-05-27 15:45 ` [PATCH v3 12/25] clk: bcm: rpi: Use CCF boundaries instead of rolling our own Maxime Ripard
2020-05-27 15:45   ` Maxime Ripard
2020-06-04 18:02   ` Nicolas Saenz Julienne
2020-06-04 18:02     ` Nicolas Saenz Julienne
2020-06-05  9:28     ` Maxime Ripard
2020-06-05  9:28       ` Maxime Ripard
2020-06-05  9:34       ` Nicolas Saenz Julienne
2020-06-05  9:34         ` Nicolas Saenz Julienne
2020-05-27 15:45 ` Maxime Ripard [this message]
2020-05-27 15:45   ` [PATCH v3 13/25] clk: bcm: rpi: Create a data structure for the clocks Maxime Ripard
2020-05-27 15:45 ` [PATCH v3 14/25] clk: bcm: rpi: Add clock id to data Maxime Ripard
2020-05-27 15:45   ` Maxime Ripard
2020-05-27 15:45 ` [PATCH v3 15/25] clk: bcm: rpi: Pass the clocks data to the firmware function Maxime Ripard
2020-05-27 15:45   ` Maxime Ripard
2020-05-27 15:45 ` [PATCH v3 16/25] clk: bcm: rpi: Rename is_prepared function Maxime Ripard
2020-05-27 15:45   ` Maxime Ripard
2020-05-27 15:45 ` [PATCH v3 17/25] clk: bcm: rpi: Split pllb clock hooks Maxime Ripard
2020-05-27 15:45   ` Maxime Ripard
2020-06-05 10:34   ` Nicolas Saenz Julienne
2020-06-05 10:34     ` Nicolas Saenz Julienne
2020-05-27 15:45 ` [PATCH v3 18/25] clk: bcm: rpi: Make the PLLB registration function return a clk_hw Maxime Ripard
2020-05-27 15:45   ` Maxime Ripard
2020-06-05 10:38   ` Nicolas Saenz Julienne
2020-06-05 10:38     ` Nicolas Saenz Julienne
2020-05-27 15:45 ` [PATCH v3 19/25] clk: bcm: rpi: Add DT provider for the clocks Maxime Ripard
2020-05-27 15:45   ` Maxime Ripard
2020-06-05 10:42   ` Nicolas Saenz Julienne
2020-06-05 10:42     ` Nicolas Saenz Julienne
2020-05-27 15:45 ` [PATCH v3 20/25] clk: bcm: rpi: Add an enum for the firmware clocks Maxime Ripard
2020-05-27 15:45   ` Maxime Ripard
2020-06-05 12:04   ` Nicolas Saenz Julienne
2020-06-05 12:04     ` Nicolas Saenz Julienne
2020-06-05 13:09     ` Nicolas Saenz Julienne
2020-06-05 13:09       ` Nicolas Saenz Julienne
2020-05-27 15:45 ` [PATCH v3 21/25] clk: bcm: rpi: Discover " Maxime Ripard
2020-05-27 15:45   ` Maxime Ripard
2020-06-05 12:45   ` Nicolas Saenz Julienne
2020-06-05 12:45     ` Nicolas Saenz Julienne
2020-05-27 15:45 ` [PATCH v3 22/25] clk: bcm: rpi: Give firmware clocks a name Maxime Ripard
2020-05-27 15:45   ` Maxime Ripard
2020-06-05 12:49   ` Nicolas Saenz Julienne
2020-06-05 12:49     ` Nicolas Saenz Julienne
2020-05-27 15:45 ` [PATCH v3 23/25] Revert "clk: bcm2835: remove pllb" Maxime Ripard
2020-05-27 15:45   ` Maxime Ripard
2020-05-27 15:45 ` [PATCH v3 24/25] clk: bcm: rpi: Remove the quirks for the CPU clock Maxime Ripard
2020-05-27 15:45   ` Maxime Ripard
2020-05-27 15:45 ` [PATCH v3 25/25] ARM: dts: bcm2711: Add firmware clocks node Maxime Ripard
2020-05-27 15:45   ` Maxime Ripard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=da903789bf0d96b5c9a8845595158c4c2623fdd9.1590594293.git-series.maxime@cerno.tech \
    --to=maxime@cerno.tech \
    --cc=bcm-kernel-feedback-list@broadcom.com \
    --cc=dave.stevenson@raspberrypi.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rpi-kernel@lists.infradead.org \
    --cc=mturquette@baylibre.com \
    --cc=nsaenzjulienne@suse.de \
    --cc=phil@raspberrypi.com \
    --cc=sboyd@kernel.org \
    --cc=tim.gover@raspberrypi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.