From d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 11 Dec 2023 02:45:28 +0000
Subject: [PATCH] add boot partition  size

---
 kernel/drivers/phy/rockchip/phy-rockchip-naneng-usb2.c |   79 +++++++--------------------------------
 1 files changed, 15 insertions(+), 64 deletions(-)

diff --git a/kernel/drivers/phy/rockchip/phy-rockchip-naneng-usb2.c b/kernel/drivers/phy/rockchip/phy-rockchip-naneng-usb2.c
index 3ace4ab..e051b1a 100644
--- a/kernel/drivers/phy/rockchip/phy-rockchip-naneng-usb2.c
+++ b/kernel/drivers/phy/rockchip/phy-rockchip-naneng-usb2.c
@@ -109,7 +109,6 @@
  * @ls_det_en: linestate detection enable register.
  * @ls_det_st: linestate detection state register.
  * @ls_det_clr: linestate detection clear register.
- * @phy_chg_mode: set phy in charge detection mode.
  * @phy_sus: phy suspend register.
  * @utmi_bvalid: utmi vbus bvalid status register.
  * @utmi_iddig: otg port id pin status register.
@@ -141,7 +140,6 @@
 	struct usb2phy_reg	ls_det_en;
 	struct usb2phy_reg	ls_det_st;
 	struct usb2phy_reg	ls_det_clr;
-	struct usb2phy_reg	phy_chg_mode;
 	struct usb2phy_reg	phy_sus;
 	struct usb2phy_reg	utmi_bvalid;
 	struct usb2phy_reg	utmi_iddig;
@@ -221,7 +219,6 @@
  * @dev: pointer to our struct device.
  * @grf: General Register Files regmap.
  * @base: the base address of APB interface.
- * @apb_reset: apb reset signal for phy.
  * @reset: power reset signal for phy.
  * @clks: array of input clocks.
  * @num_clks: number of input clocks.
@@ -240,7 +237,6 @@
 	struct device		*dev;
 	struct regmap		*grf;
 	void __iomem		*base;
-	struct reset_control	*apb_reset;
 	struct reset_control	*reset;
 	struct clk_bulk_data	*clks;
 	int			num_clks;
@@ -358,7 +354,7 @@
 	/* optional override of the clockname */
 	of_property_read_string(node, "clock-output-names", &init.name);
 
-	if (refclk) {
+	if (!IS_ERR(refclk)) {
 		clk_name = __clk_get_name(refclk);
 		init.parent_names = &clk_name;
 		init.num_parents = 1;
@@ -663,7 +659,8 @@
 	return ret;
 }
 
-static int rockchip_usb2phy_set_mode(struct phy *phy, enum phy_mode mode)
+static int rockchip_usb2phy_set_mode(struct phy *phy,
+				     enum phy_mode mode, int submode)
 {
 	struct rockchip_usb2phy_port *rport = phy_get_drvdata(phy);
 	struct rockchip_usb2phy *rphy = dev_get_drvdata(phy->dev.parent);
@@ -800,45 +797,12 @@
 				struct rockchip_usb2phy_port *rport)
 {
 	bool chg_valid, phy_connect;
-	const struct usb2phy_reg *phy_sus_reg;
-	unsigned int phy_sus_cfg, mask;
-	int result, cnt, ret;
+	int result;
+	int cnt;
 
 	mutex_lock(&rport->mutex);
 
-	/*
-	 * We are violating what the phy specification says about
-	 * the charge detection process. Ideally we need to hold
-	 * the phy in the reset state during the charge detection
-	 * process, but that's causing trouble synchronizing between
-	 * the phy and usb controller because CLK60_30 is disabled
-	 * while phy in reset.
-	 *
-	 * We have discussed this with the phy IP Provider, and
-	 * it was suggested to keep the CLK60_30 while do charging
-	 * detection.
-	 *
-	 * Set the phy in charge mode (keep the CLK60_30):
-	 * Enable the DP/DM pulldown resistor;
-	 * Set the opmode to non-driving mode;
-	 * Set the phy controlled by GRF utmi interface, and set
-	 * the utmi in normal mode to keep the CLK60_30.
-	 */
-	phy_sus_reg = &rport->port_cfg->phy_sus;
-	ret = regmap_read(rphy->grf, phy_sus_reg->offset, &phy_sus_cfg);
-	if (ret) {
-		dev_err(&rport->phy->dev,
-			"Fail to read phy_sus reg offset 0x%x, ret %d\n",
-			phy_sus_reg->offset, ret);
-		goto unlock;
-	}
-
-	ret = property_enable(rphy->grf, &rport->port_cfg->phy_chg_mode, true);
-	if (ret) {
-		dev_err(&rport->phy->dev,
-			"Fail to set phy_chg_mode reg, ret %d\n", ret);
-		goto unlock;
-	}
+	reset_control_assert(rphy->reset);
 
 	/* CHG_RST is set to 1'b0 to start charge detection */
 	property_enable(rphy->grf, &rphy->phy_cfg->chg_det.chg_en, true);
@@ -878,21 +842,15 @@
 	dev_info(&rport->phy->dev, "charger = %s\n",
 		 chg_to_string(rphy->chg_type));
 
+	usleep_range(1000, 1100);
+	reset_control_deassert(rphy->reset);
+	/* waiting for the utmi_clk to become stable */
+	usleep_range(2500, 3000);
+
 	/* disable the chg detection module */
 	property_enable(rphy->grf, &rphy->phy_cfg->chg_det.chg_rst, true);
 	property_enable(rphy->grf, &rphy->phy_cfg->chg_det.chg_en, false);
 
-	mask = GENMASK(phy_sus_reg->bitend, phy_sus_reg->bitstart);
-	/* Restore the phy suspend configuration */
-	ret = regmap_write(rphy->grf, phy_sus_reg->offset,
-			   ((phy_sus_cfg << phy_sus_reg->bitstart) |
-			    (mask << BIT_WRITEABLE_SHIFT)));
-	if (ret)
-		dev_err(&rport->phy->dev,
-			"Fail to set phy_sus reg offset 0x%x, ret %d\n",
-			phy_sus_reg->offset, ret);
-
-unlock:
 	mutex_unlock(&rport->mutex);
 }
 
@@ -1120,7 +1078,7 @@
 		extcon_set_state(rphy->edev, EXTCON_USB_HOST, true);
 		extcon_sync(rphy->edev, EXTCON_USB);
 		extcon_sync(rphy->edev, EXTCON_USB_HOST);
-		rockchip_usb2phy_set_mode(rport->phy, PHY_MODE_USB_HOST);
+		rockchip_usb2phy_set_mode(rport->phy, PHY_MODE_USB_HOST, 0);
 		property_enable(rphy->grf, &rport->port_cfg->idpullup,
 				false);
 		property_enable(rphy->grf, &rport->port_cfg->iddig_output,
@@ -1129,7 +1087,7 @@
 				true);
 		break;
 	case USB_DR_MODE_PERIPHERAL:
-		rockchip_usb2phy_set_mode(rport->phy, PHY_MODE_USB_DEVICE);
+		rockchip_usb2phy_set_mode(rport->phy, PHY_MODE_USB_DEVICE, 0);
 		property_enable(rphy->grf, &rport->port_cfg->idpullup,
 				true);
 		property_enable(rphy->grf, &rport->port_cfg->iddig_output,
@@ -1138,7 +1096,7 @@
 				true);
 		break;
 	case USB_DR_MODE_OTG:
-		rockchip_usb2phy_set_mode(rport->phy, PHY_MODE_USB_OTG);
+		rockchip_usb2phy_set_mode(rport->phy, PHY_MODE_USB_OTG, 0);
 		property_enable(rphy->grf, &rport->port_cfg->iddig_output,
 				false);
 		property_enable(rphy->grf, &rport->port_cfg->iddig_en,
@@ -1309,7 +1267,7 @@
 			extcon_set_state(rphy->edev, EXTCON_USB, false);
 			extcon_set_state(rphy->edev, EXTCON_USB_HOST, true);
 		}
-		rockchip_usb2phy_set_mode(rport->phy, PHY_MODE_USB_HOST);
+		rockchip_usb2phy_set_mode(rport->phy, PHY_MODE_USB_HOST, 0);
 		/*
 		 * Here set iddig to 0 by disable idpullup, the otg_suspendm
 		 * will be set to 1 to enable the disconnect detection module,
@@ -1509,10 +1467,6 @@
 	if (IS_ERR(rphy->reset))
 		return PTR_ERR(rphy->reset);
 
-	rphy->apb_reset = devm_reset_control_get(dev, "u2phy-apb");
-	if (IS_ERR(rphy->apb_reset))
-		return PTR_ERR(rphy->apb_reset);
-
 	rphy->vup_gpio = devm_gpiod_get_optional(dev, "vup", GPIOD_OUT_LOW);
 	if (IS_ERR(rphy->vup_gpio)) {
 		ret = PTR_ERR(rphy->vup_gpio);
@@ -1520,11 +1474,9 @@
 		return ret;
 	}
 
-	reset_control_assert(rphy->apb_reset);
 	reset_control_assert(rphy->reset);
 	udelay(1);
 	reset_control_deassert(rphy->reset);
-	reset_control_deassert(rphy->apb_reset);
 
 	match = of_match_device(dev->driver->of_match_table, dev);
 	if (!match || !match->data) {
@@ -1914,7 +1866,6 @@
 				.ls_det_en = { 0x10300, 0, 0, 0, 1 },
 				.ls_det_st = { 0x10304, 0, 0, 0, 1 },
 				.ls_det_clr = { 0x10308, 0, 0, 0, 1 },
-				.phy_chg_mode = { 0x10230, 8, 0, 0x052, 0x1d7 },
 				.phy_sus = { 0x10230, 8, 0, 0x052, 0x1d5 },
 				.utmi_bvalid = { 0x10248, 9, 9, 0, 1 },
 				.utmi_iddig = { 0x10248, 6, 6, 0, 1 },

--
Gitblit v1.6.2