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 DAEECC433EF for ; Tue, 28 Jun 2022 00:45:29 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 5682F8447A; Tue, 28 Jun 2022 02:45:25 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by phobos.denx.de (Postfix, from userid 109) id C44B484420; Tue, 28 Jun 2022 02:45:21 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by phobos.denx.de (Postfix) with ESMTP id 35C17843D0 for ; Tue, 28 Jun 2022 02:45:19 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=andre.przywara@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id DE41B1691; Mon, 27 Jun 2022 17:45:18 -0700 (PDT) Received: from slackpad.lan (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 1F3783F66F; Mon, 27 Jun 2022 17:45:16 -0700 (PDT) Date: Tue, 28 Jun 2022 00:45:29 +0100 From: Andre Przywara To: Samuel Holland Cc: u-boot@lists.denx.de, Jagan Teki , Lukasz Majewski , Sean Anderson , Bin Meng , Heinrich Schuchardt , Maxime Ripard Subject: Re: [PATCH 7/7] reset: sunxi: Reuse the platform data from the clock driver Message-ID: <20220628004529.376678ee@slackpad.lan> In-Reply-To: <20220509052937.42283-8-samuel@sholland.org> References: <20220509052937.42283-1-samuel@sholland.org> <20220509052937.42283-8-samuel@sholland.org> Organization: Arm Ltd. X-Mailer: Claws Mail 4.1.0 (GTK 3.24.31; x86_64-slackware-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit 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.6 at phobos.denx.de X-Virus-Status: Clean On Mon, 9 May 2022 00:29:37 -0500 Samuel Holland 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 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 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 > #include > #include > +#include > #include > #include > > +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 > #include > #include > -#include > -#include > #include > #include > > -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 */