blob: 36362f580008ae37b05599b354d3d74e20852b57 [file] [log] [blame]
From 3295585b4e77f4a365bd1a4e17d8be6ee504584a Mon Sep 17 00:00:00 2001
From: Zhanyong Wang <zhanyong.wang@mediatek.com>
Date: Sat, 15 Oct 2022 17:38:54 +0800
Subject: [PATCH 5/8] tphy: one setting of TTSSC-Freq-Dev for all IC cases
try to use one setting of TTSSC-Freq-Dev to covery all IC cases
Signed-off-by: Zhanyong Wang <zhanyong.wang@mediatek.com>
---
drivers/phy/mediatek/phy-mtk-tphy.c | 37 +++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/drivers/phy/mediatek/phy-mtk-tphy.c b/drivers/phy/mediatek/phy-mtk-tphy.c
index a5b17a1aed5c..49a2625c1fc1 100644
--- a/drivers/phy/mediatek/phy-mtk-tphy.c
+++ b/drivers/phy/mediatek/phy-mtk-tphy.c
@@ -219,6 +219,14 @@
#define P3D_RG_RXDET_STB2_SET_P3 GENMASK(8, 0)
#define P3D_RG_RXDET_STB2_SET_P3_VAL(x) (0x1ff & (x))
+#define U3P_U3_PHYD_REG19 0x338
+#define P3D_RG_PLL_SSC_DELTA1 GENMASK(15, 0)
+#define P3D_RG_PLL_SSC_DELTA1_VAL(x) (0xffff & (x))
+
+#define U3P_U3_PHYD_REG21 0x340
+#define P3D_RG_PLL_SSC_DELTA GENMASK(31, 16)
+#define P3D_RG_PLL_SSC_DELTA_VAL(x) ((0xffff & (x)) << 16)
+
#define U3P_SPLLC_XTALCTL3 0x018
#define XC3_RG_U3_XTAL_RX_PWD BIT(9)
#define XC3_RG_U3_FRC_XTAL_RX_PWD BIT(8)
@@ -373,6 +381,8 @@ struct mtk_phy_instance {
int eye_vrt;
int eye_term;
bool bc12_en;
+ bool u3_pll_ssc_delta;
+ bool u3_pll_ssc_delta1;
};
struct mtk_tphy {
@@ -514,6 +524,20 @@ static void u3_phy_instance_init(struct mtk_tphy *tphy,
tmp |= P3D_RG_RXDET_STB2_SET_P3_VAL(0x10);
writel(tmp, u3_banks->phyd + U3P_U3_PHYD_RXDET2);
+ if (instance->u3_pll_ssc_delta1) {
+ tmp = readl(u3_banks->phyd + U3P_U3_PHYD_REG19);
+ tmp &= ~P3D_RG_PLL_SSC_DELTA1;
+ tmp |= P3D_RG_PLL_SSC_DELTA1_VAL(0x1c3);
+ writel(tmp, u3_banks->phyd + U3P_U3_PHYD_REG19);
+ }
+
+ if (instance->u3_pll_ssc_delta) {
+ tmp = readl(u3_banks->phyd + U3P_U3_PHYD_REG21);
+ tmp &= ~P3D_RG_PLL_SSC_DELTA;
+ tmp |= P3D_RG_PLL_SSC_DELTA_VAL(0x1c3);
+ writel(tmp, u3_banks->phyd + U3P_U3_PHYD_REG21);
+ }
+
dev_dbg(tphy->dev, "%s(%d)\n", __func__, instance->index);
}
@@ -942,6 +966,19 @@ static void phy_parse_property(struct mtk_tphy *tphy,
{
struct device *dev = &instance->phy->dev;
+ if (instance->type == PHY_TYPE_USB3) {
+ instance->u3_pll_ssc_delta =
+ device_property_read_bool(dev,
+ "mediatek,usb3-pll-ssc-delta");
+ instance->u3_pll_ssc_delta1 =
+ device_property_read_bool(dev,
+ "mediatek,usb3-pll-ssc-delta1");
+
+ dev_dbg(dev, "u3_pll_ssc_delta:%i, u3_pll_ssc_delta1:%i\n",
+ instance->u3_pll_ssc_delta,
+ instance->u3_pll_ssc_delta1);
+ }
+
if (instance->type != PHY_TYPE_USB2)
return;
--
2.18.0