All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andre Przywara <andre.przywara@arm.com>
To: Samuel Holland <samuel@sholland.org>
Cc: u-boot@lists.denx.de, Jagan Teki <jagan@amarulasolutions.com>,
	Lukasz Majewski <lukma@denx.de>,
	Sean Anderson <seanga2@gmail.com>, Bin Meng <bmeng.cn@gmail.com>,
	Heinrich Schuchardt <xypron.glpk@gmx.de>,
	Maxime Ripard <mripard@kernel.org>
Subject: Re: [PATCH 7/7] reset: sunxi: Reuse the platform data from the clock driver
Date: Tue, 28 Jun 2022 00:45:29 +0100	[thread overview]
Message-ID: <20220628004529.376678ee@slackpad.lan> (raw)
In-Reply-To: <20220509052937.42283-8-samuel@sholland.org>

On Mon,  9 May 2022 00:29:37 -0500
Samuel Holland <samuel@sholland.org> wrote:

Hi,

> The clock and reset drivers use the exact same platform data. Simplify
> them by sharing the object. This is safe because the parent device
> (the clock device) always gets its driver model callbacks run first.
> 
> Signed-off-by: Samuel Holland <samuel@sholland.org>

I am not too familiar with U-Boot's DM internals (device_bind()), but
the idea is certainly good, and it seems to work, so I am happy with
that.

Acked-by: Andre Przywara <andre.przywara@arm.com>

Cheers,
Andre


> ---
> 
>  drivers/clk/sunxi/clk_sunxi.c |  7 +++++-
>  drivers/reset/reset-sunxi.c   | 43 +++--------------------------------
>  include/clk/sunxi.h           |  8 -------
>  3 files changed, 9 insertions(+), 49 deletions(-)
> 
> diff --git a/drivers/clk/sunxi/clk_sunxi.c b/drivers/clk/sunxi/clk_sunxi.c
> index cadfca767b..10c5d2f4b6 100644
> --- a/drivers/clk/sunxi/clk_sunxi.c
> +++ b/drivers/clk/sunxi/clk_sunxi.c
> @@ -12,9 +12,12 @@
>  #include <reset.h>
>  #include <asm/io.h>
>  #include <clk/sunxi.h>
> +#include <dm/device-internal.h>
>  #include <linux/bitops.h>
>  #include <linux/log2.h>
>  
> +extern U_BOOT_DRIVER(sunxi_reset);
> +
>  static const struct ccu_clk_gate *plat_to_gate(struct ccu_plat *plat,
>  					       unsigned long id)
>  {
> @@ -66,7 +69,9 @@ struct clk_ops sunxi_clk_ops = {
>  
>  static int sunxi_clk_bind(struct udevice *dev)
>  {
> -	return sunxi_reset_bind(dev);
> +	/* Reuse the platform data for the reset driver. */
> +	return device_bind(dev, DM_DRIVER_REF(sunxi_reset), "reset",
> +			   dev_get_plat(dev), dev_ofnode(dev), NULL);
>  }
>  
>  static int sunxi_clk_probe(struct udevice *dev)
> diff --git a/drivers/reset/reset-sunxi.c b/drivers/reset/reset-sunxi.c
> index b060d7f5ed..5d4b8dc92f 100644
> --- a/drivers/reset/reset-sunxi.c
> +++ b/drivers/reset/reset-sunxi.c
> @@ -12,17 +12,10 @@
>  #include <reset-uclass.h>
>  #include <asm/io.h>
>  #include <clk/sunxi.h>
> -#include <dm/device-internal.h>
> -#include <dm/lists.h>
>  #include <linux/bitops.h>
>  #include <linux/log2.h>
>  
> -struct sunxi_reset_plat {
> -	void *base;
> -	const struct ccu_desc *desc;
> -};
> -
> -static const struct ccu_reset *plat_to_reset(struct sunxi_reset_plat *plat,
> +static const struct ccu_reset *plat_to_reset(struct ccu_plat *plat,
>  					     unsigned long id)
>  {
>  	return	&plat->desc->resets[id];
> @@ -30,7 +23,7 @@ static const struct ccu_reset *plat_to_reset(struct sunxi_reset_plat *plat,
>  
>  static int sunxi_reset_request(struct reset_ctl *reset_ctl)
>  {
> -	struct sunxi_reset_plat *plat = dev_get_plat(reset_ctl->dev);
> +	struct ccu_plat *plat = dev_get_plat(reset_ctl->dev);
>  
>  	debug("%s: (RST#%ld)\n", __func__, reset_ctl->id);
>  
> @@ -49,7 +42,7 @@ static int sunxi_reset_free(struct reset_ctl *reset_ctl)
>  
>  static int sunxi_set_reset(struct reset_ctl *reset_ctl, bool on)
>  {
> -	struct sunxi_reset_plat *plat = dev_get_plat(reset_ctl->dev);
> +	struct ccu_plat *plat = dev_get_plat(reset_ctl->dev);
>  	const struct ccu_reset *reset = plat_to_reset(plat, reset_ctl->id);
>  	u32 reg;
>  
> @@ -89,38 +82,8 @@ struct reset_ops sunxi_reset_ops = {
>  	.rst_deassert = sunxi_reset_deassert,
>  };
>  
> -static int sunxi_reset_of_to_plat(struct udevice *dev)
> -{
> -	struct sunxi_reset_plat *plat = dev_get_plat(dev);
> -
> -	plat->base = dev_read_addr_ptr(dev);
> -
> -	return 0;
> -}
> -
> -int sunxi_reset_bind(struct udevice *dev)
> -{
> -	struct udevice *rst_dev;
> -	struct sunxi_reset_plat *plat;
> -	int ret;
> -
> -	ret = device_bind_driver_to_node(dev, "sunxi_reset", "reset",
> -					 dev_ofnode(dev), &rst_dev);
> -	if (ret) {
> -		debug("failed to bind sunxi_reset driver (ret=%d)\n", ret);
> -		return ret;
> -	}
> -	plat = malloc(sizeof(struct sunxi_reset_plat));
> -	plat->desc = (const struct ccu_desc *)dev_get_driver_data(dev);
> -	dev_set_plat(rst_dev, plat);
> -
> -	return 0;
> -}
> -
>  U_BOOT_DRIVER(sunxi_reset) = {
>  	.name		= "sunxi_reset",
>  	.id		= UCLASS_RESET,
>  	.ops		= &sunxi_reset_ops,
> -	.of_to_plat	= sunxi_reset_of_to_plat,
> -	.plat_auto	= sizeof(struct sunxi_reset_plat),
>  };
> diff --git a/include/clk/sunxi.h b/include/clk/sunxi.h
> index e90e078972..b9587050d9 100644
> --- a/include/clk/sunxi.h
> +++ b/include/clk/sunxi.h
> @@ -82,12 +82,4 @@ struct ccu_plat {
>  
>  extern struct clk_ops sunxi_clk_ops;
>  
> -/**
> - * sunxi_reset_bind() - reset binding
> - *
> - * @dev:       reset device
> - * Return: 0 success, or error value
> - */
> -int sunxi_reset_bind(struct udevice *dev);
> -
>  #endif /* _CLK_SUNXI_H */


  reply	other threads:[~2022-06-28  0:45 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-09  5:29 [PATCH 0/7] clk: sunxi: Out-of-bounds access fix and driver cleanup Samuel Holland
2022-05-09  5:29 ` [PATCH 1/7] clk: sunxi: Store the array sizes in the CCU descriptor Samuel Holland
2022-06-25 17:10   ` Andre Przywara
2022-05-09  5:29 ` [PATCH 2/7] clk: sunxi: Prevent out-of-bounds gate array access Samuel Holland
2022-06-26 10:43   ` Andre Przywara
2022-05-09  5:29 ` [PATCH 3/7] reset: sunxi: Get the reset count from the CCU descriptor Samuel Holland
2022-06-26 10:51   ` Andre Przywara
2022-05-09  5:29 ` [PATCH 4/7] clk: sunxi: Use a single driver for all variants Samuel Holland
2022-06-27  0:43   ` Andre Przywara
2022-05-09  5:29 ` [PATCH 5/7] clk: sunxi: Convert driver private data to platform data Samuel Holland
2022-06-27 19:34   ` Andre Przywara
2022-05-09  5:29 ` [PATCH 6/7] reset: " Samuel Holland
2022-06-27 19:41   ` Andre Przywara
2022-05-09  5:29 ` [PATCH 7/7] reset: sunxi: Reuse the platform data from the clock driver Samuel Holland
2022-06-27 23:45   ` Andre Przywara [this message]
2022-05-10 23:24 ` [PATCH 0/7] clk: sunxi: Out-of-bounds access fix and driver cleanup Andre Przywara
2022-05-11 15:48 ` Sean Anderson
2022-06-28  0:40 ` Andre Przywara
2022-06-28  2:45   ` Samuel Holland

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=20220628004529.376678ee@slackpad.lan \
    --to=andre.przywara@arm.com \
    --cc=bmeng.cn@gmail.com \
    --cc=jagan@amarulasolutions.com \
    --cc=lukma@denx.de \
    --cc=mripard@kernel.org \
    --cc=samuel@sholland.org \
    --cc=seanga2@gmail.com \
    --cc=u-boot@lists.denx.de \
    --cc=xypron.glpk@gmx.de \
    /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.