|
@@ -31,6 +31,10 @@
|
|
|
#define HW_USBPHY_CTRL_SET 0x34
|
|
|
#define HW_USBPHY_CTRL_CLR 0x38
|
|
|
|
|
|
+#define HW_USBPHY_IP 0x90
|
|
|
+#define HW_USBPHY_IP_SET 0x94
|
|
|
+#define HW_USBPHY_IP_CLR 0x98
|
|
|
+
|
|
|
#define BM_USBPHY_CTRL_SFTRST BIT(31)
|
|
|
#define BM_USBPHY_CTRL_CLKGATE BIT(30)
|
|
|
#define BM_USBPHY_CTRL_ENAUTOSET_USBCLKS BIT(26)
|
|
@@ -42,6 +46,8 @@
|
|
|
#define BM_USBPHY_CTRL_ENUTMILEVEL2 BIT(14)
|
|
|
#define BM_USBPHY_CTRL_ENHOSTDISCONDETECT BIT(1)
|
|
|
|
|
|
+#define BM_USBPHY_IP_FIX (BIT(17) | BIT(18))
|
|
|
+
|
|
|
#define to_mxs_phy(p) container_of((p), struct mxs_phy, phy)
|
|
|
|
|
|
/* Do disconnection between PHY and controller without vbus */
|
|
@@ -60,6 +66,14 @@
|
|
|
*/
|
|
|
#define MXS_PHY_SENDING_SOF_TOO_FAST BIT(2)
|
|
|
|
|
|
+/*
|
|
|
+ * IC has bug fixes logic, they include
|
|
|
+ * MXS_PHY_ABNORMAL_IN_SUSPEND and MXS_PHY_SENDING_SOF_TOO_FAST
|
|
|
+ * which are described at above flags, the RTL will handle it
|
|
|
+ * according to different versions.
|
|
|
+ */
|
|
|
+#define MXS_PHY_NEED_IP_FIX BIT(3)
|
|
|
+
|
|
|
struct mxs_phy_data {
|
|
|
unsigned int flags;
|
|
|
};
|
|
@@ -70,11 +84,13 @@ static const struct mxs_phy_data imx23_phy_data = {
|
|
|
|
|
|
static const struct mxs_phy_data imx6q_phy_data = {
|
|
|
.flags = MXS_PHY_SENDING_SOF_TOO_FAST |
|
|
|
- MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS,
|
|
|
+ MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS |
|
|
|
+ MXS_PHY_NEED_IP_FIX,
|
|
|
};
|
|
|
|
|
|
static const struct mxs_phy_data imx6sl_phy_data = {
|
|
|
- .flags = MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS,
|
|
|
+ .flags = MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS |
|
|
|
+ MXS_PHY_NEED_IP_FIX,
|
|
|
};
|
|
|
|
|
|
static const struct of_device_id mxs_phy_dt_ids[] = {
|
|
@@ -118,6 +134,9 @@ static int mxs_phy_hw_init(struct mxs_phy *mxs_phy)
|
|
|
BM_USBPHY_CTRL_ENUTMILEVEL3,
|
|
|
base + HW_USBPHY_CTRL_SET);
|
|
|
|
|
|
+ if (mxs_phy->data->flags & MXS_PHY_NEED_IP_FIX)
|
|
|
+ writel(BM_USBPHY_IP_FIX, base + HW_USBPHY_IP_SET);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|