public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Jagan Teki <jagan@amarulasolutions.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v4 15/17] musb-new: sunxi: Use CLK and RESET support
Date: Sun, 26 Aug 2018 18:08:24 +0530	[thread overview]
Message-ID: <20180826123826.19243-16-jagan@amarulasolutions.com> (raw)
In-Reply-To: <20180826123826.19243-1-jagan@amarulasolutions.com>

Now clock and reset drivers are available for respective
SoC's so use clk and reset ops on musb driver.

Tested-by: Jagan Teki <jagan@amarulasolutions.com>
Acked-by: Maxime Ripard <maxime.ripard@bootlin.com>
Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
---
 drivers/usb/musb-new/sunxi.c | 87 +++++++++++++++++++++---------------
 1 file changed, 51 insertions(+), 36 deletions(-)

diff --git a/drivers/usb/musb-new/sunxi.c b/drivers/usb/musb-new/sunxi.c
index 6cf9826cda..7126152a21 100644
--- a/drivers/usb/musb-new/sunxi.c
+++ b/drivers/usb/musb-new/sunxi.c
@@ -16,9 +16,11 @@
  * This file is part of the Inventra Controller Driver for Linux.
  */
 #include <common.h>
+#include <clk.h>
 #include <dm.h>
 #include <generic-phy.h>
 #include <phy-sun4i-usb.h>
+#include <reset.h>
 #include <asm/arch/cpu.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/gpio.h>
@@ -76,23 +78,18 @@
  * From usbc/usbc.c
  ******************************************************************************/
 
-#define OFF_SUN6I_AHB_RESET0	0x2c0
-
 struct sunxi_musb_config {
 	struct musb_hdrc_config *config;
 	bool has_reset;
-	u8 rst_bit;
-	u8 clkgate_bit;
-	u32 off_reset0;
 };
 
 struct sunxi_glue {
 	struct musb_host_data mdata;
-	struct sunxi_ccm_reg *ccm;
-	u32 *reg_reset0;
 	struct sunxi_musb_config *cfg;
 	struct device dev;
 	struct phy phy;
+	struct clk clk;
+	struct reset_ctl rst;
 };
 #define to_sunxi_glue(d)	container_of(d, struct sunxi_glue, dev)
 
@@ -296,24 +293,27 @@ static int sunxi_musb_init(struct musb *musb)
 
 	pr_debug("%s():\n", __func__);
 
-	ret = generic_phy_init(&glue->phy);
+	ret = clk_enable(&glue->clk);
 	if (ret) {
-		pr_err("failed to init USB PHY\n");
+		dev_err(dev, "failed to enable clock\n");
 		return ret;
 	}
 
-	musb->isr = sunxi_musb_interrupt;
-
-	setbits_le32(&glue->ccm->ahb_gate0, BIT(AHB_GATE_OFFSET_USB0));
-	if (glue->cfg->clkgate_bit)
-		setbits_le32(&glue->ccm->ahb_gate0,
-			     BIT(glue->cfg->clkgate_bit));
+	if (glue->cfg->has_reset) {
+		ret = reset_deassert(&glue->rst);
+		if (ret) {
+			dev_err(dev, "failed to deassert reset\n");
+			goto err_clk;
+		}
+	}
 
-	if (glue->cfg->has_reset)
-		setbits_le32(glue->reg_reset0, BIT(AHB_GATE_OFFSET_USB0));
+	ret = generic_phy_init(&glue->phy);
+	if (ret) {
+		pr_err("failed to init USB PHY\n");
+		goto err_rst;
+	}
 
-	if (glue->cfg->rst_bit)
-		setbits_le32(glue->reg_reset0, BIT(glue->cfg->rst_bit));
+	musb->isr = sunxi_musb_interrupt;
 
 	USBC_ConfigFIFO_Base();
 	USBC_EnableDpDmPullUp(musb->mregs);
@@ -329,6 +329,13 @@ static int sunxi_musb_init(struct musb *musb)
 	USBC_ForceVbusValidToHigh(musb->mregs);
 
 	return 0;
+
+err_rst:
+	if (glue->cfg->has_reset)
+		reset_assert(&glue->rst);
+err_clk:
+	clk_disable(&glue->clk);
+	return ret;
 }
 
 static int sunxi_musb_exit(struct musb *musb)
@@ -344,16 +351,19 @@ static int sunxi_musb_exit(struct musb *musb)
 		}
 	}
 
-	if (glue->cfg->has_reset)
-		clrbits_le32(glue->reg_reset0, BIT(AHB_GATE_OFFSET_USB0));
-
-	if (glue->cfg->rst_bit)
-		clrbits_le32(glue->reg_reset0, BIT(glue->cfg->rst_bit));
+	if (glue->cfg->has_reset) {
+		ret = reset_assert(&glue->rst);
+		if (ret) {
+			dev_err(dev, "failed to deassert reset\n");
+			return ret;
+		}
+	}
 
-	clrbits_le32(&glue->ccm->ahb_gate0, BIT(AHB_GATE_OFFSET_USB0));
-	if (glue->cfg->clkgate_bit)
-		clrbits_le32(&glue->ccm->ahb_gate0,
-			     BIT(glue->cfg->clkgate_bit));
+	ret = clk_disable(&glue->clk);
+	if (ret) {
+		dev_err(dev, "failed to enable clock\n");
+		return ret;
+	}
 
 	return 0;
 }
@@ -447,11 +457,19 @@ static int musb_usb_probe(struct udevice *dev)
 	if (!glue->cfg)
 		return -EINVAL;
 
-	glue->ccm = (struct sunxi_ccm_reg *)SUNXI_CCM_BASE;
-	if (IS_ERR(glue->ccm))
-		return PTR_ERR(glue->ccm);
+	ret = clk_get_by_index(dev, 0, &glue->clk);
+	if (ret) {
+		dev_err(dev, "failed to get clock\n");
+		return ret;
+	}
 
-	glue->reg_reset0 = (void *)glue->ccm + glue->cfg->off_reset0;
+	if (glue->cfg->has_reset) {
+		ret = reset_get_by_index(dev, 0, &glue->rst);
+		if (ret) {
+			dev_err(dev, "failed to get reset\n");
+			return ret;
+		}
+	}
 
 	ret = generic_phy_get_by_name(dev, "usb", &glue->phy);
 	if (ret) {
@@ -493,6 +511,7 @@ static int musb_usb_remove(struct udevice *dev)
 	struct musb_host_data *host = &glue->mdata;
 
 	musb_stop(host->host);
+
 	free(host->host);
 	host->host = NULL;
 
@@ -507,15 +526,11 @@ static const struct sunxi_musb_config sun4i_a10_cfg = {
 static const struct sunxi_musb_config sun6i_a31_cfg = {
 	.config = &musb_config,
 	.has_reset = true,
-	.off_reset0 = OFF_SUN6I_AHB_RESET0,
 };
 
 static const struct sunxi_musb_config sun8i_h3_cfg = {
 	.config = &musb_config_h3,
 	.has_reset = true,
-	.rst_bit = 23,
-	.clkgate_bit = 23,
-	.off_reset0 = OFF_SUN6I_AHB_RESET0,
 };
 
 static const struct udevice_id sunxi_musb_ids[] = {
-- 
2.18.0.321.gffc6fa0e3

  parent reply	other threads:[~2018-08-26 12:38 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-26 12:38 [U-Boot] [PATCH v4 00/17] clk: Add Allwinner CLK, RESET support Jagan Teki
2018-08-26 12:38 ` [U-Boot] [PATCH v4 01/17] clk: Add Allwinner A64 CLK driver Jagan Teki
2018-08-27 14:27   ` Maxime Ripard
2018-08-26 12:38 ` [U-Boot] [PATCH v4 02/17] reset: Return 0 if no request ops Jagan Teki
2018-08-30  0:28   ` Simon Glass
2018-08-26 12:38 ` [U-Boot] [PATCH v4 03/17] reset: Add Allwinner RESET driver Jagan Teki
2018-08-27 14:33   ` Maxime Ripard
2018-08-26 12:38 ` [U-Boot] [PATCH v4 04/17] clk: sunxi: Add Allwinner H3/H5 CLK driver Jagan Teki
2018-08-27 14:36   ` Maxime Ripard
2018-08-26 12:38 ` [U-Boot] [PATCH v4 05/17] clk: sunxi: Add Allwinner A10/A20 " Jagan Teki
2018-08-27 14:37   ` Maxime Ripard
2018-08-26 12:38 ` [U-Boot] [PATCH v4 06/17] clk: sunxi: Add Allwinner A10s/A13 " Jagan Teki
2018-08-27 14:38   ` Maxime Ripard
2018-08-26 12:38 ` [U-Boot] [PATCH v4 07/17] clk: sunxi: Add Allwinner A31 " Jagan Teki
2018-08-27 14:39   ` Maxime Ripard
2018-08-26 12:38 ` [U-Boot] [PATCH v4 08/17] clk: sunxi: Add Allwinner A23 " Jagan Teki
2018-08-27 14:39   ` Maxime Ripard
2018-08-26 12:38 ` [U-Boot] [PATCH v4 09/17] clk: sunxi: a23: Add CLK support for A33 Jagan Teki
2018-08-27 14:40   ` Maxime Ripard
2018-08-26 12:38 ` [U-Boot] [PATCH v4 10/17] clk: sunxi: Add Allwinner A83T CLK driver Jagan Teki
2018-08-27 14:41   ` Maxime Ripard
2018-08-26 12:38 ` [U-Boot] [PATCH v4 11/17] clk: sunxi: Add Allwinner R40 " Jagan Teki
2018-08-27 15:02   ` Maxime Ripard
2018-08-26 12:38 ` [U-Boot] [PATCH v4 12/17] clk: sunxi: Add Allwinner V3S " Jagan Teki
2018-08-27 15:02   ` Maxime Ripard
2018-08-26 12:38 ` [U-Boot] [PATCH v4 13/17] sunxi: Enable CLK Jagan Teki
2018-08-26 12:38 ` [U-Boot] [PATCH v4 14/17] phy: sun4i-usb: Use CLK and RESET support Jagan Teki
2018-08-27 15:03   ` Maxime Ripard
2018-08-26 12:38 ` Jagan Teki [this message]
2018-08-26 12:38 ` [U-Boot] [PATCH v4 16/17] sunxi: usb: Switch to Generic host controllers Jagan Teki
2018-08-27 15:04   ` Maxime Ripard
2018-08-26 12:38 ` [U-Boot] [PATCH v4 17/17] usb: host: Drop [e-o]hci-sunxi drivers Jagan Teki
2018-08-27 15:03   ` 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=20180826123826.19243-16-jagan@amarulasolutions.com \
    --to=jagan@amarulasolutions.com \
    --cc=u-boot@lists.denx.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox