phy fixes for 6.12
- Bunch of Qualcomm QMP driver fixes for null deref on suspend, bogus supplies fix and reset entries fix - BCM usb driver init array fix - cadence array offset fix - starfive link configuration fix - config dependency fix for rockchip driver - freescale reset signal fix before pll lock - tegra driver fix for error pointer check -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE+vs47OPLdNbVcHzyfBQHDyUjg0cFAmcnpK0ACgkQfBQHDyUj g0faIhAAqhiRfZlrS8ffPY838Q83GthYMujk9BKM2LDCFfBPn0Mm6MXx7ZqBwgAR JUFDJPrEKx+HYun7ziq1e6FPRKoTQmJrPWJYjbGiLoV9Lc/+eg35mRRX+vdDnQ5s r8moW3lkYkN6uXVVPyrhSOTfS82ypxGOb9Sc0m365AI6RO5umRwrr8MgDtjH9Iqr cGKFSy1oL96rjoLQ7dYYD087XeEUbWt4Z/zR6PgONduZmrpzTFj71PlLL+16z3bE OBKN1XFHw3SxQRkId9+zRO/q9iwvNvpgGq0KlXV/WWPlISEPl0Zpafx/+akhJrmA 2COXTBVuR4LCZ0PAlDf60bMtOz5rpP1/YSr4KAK1uzmef1/rb1jX2j/+ca5oGS4C rUptUA7e+FvtE26g0SxgUI4zLyZLzE5GemMVPXc8fUqYahtfY48vRvWujJnh2/wK stggoCK13Ol0EvwDs5BRvnWnQhkIi079oGq9nBHaQDE5BZT2bwt2uO5EjKjYIm5x 8Jvz+5IoUceGCJYSEQ/ucOjaY7TWwNwpmCJIZDHaCpTkdVpP1VsEyPIjBPLoBK2c +ZIDSP6RpnszL3KgI/XvAZFIMi2Y6yprC1boJ/Ia2dCvgks2i7cTz4NdD+i8VVUE 1GBCoNB8wYYpw4nHBvYoy72/wpI6creUujJ3mRjKupB/WE4OoCY= =jQHX -----END PGP SIGNATURE----- Merge tag 'phy-fixes-6.12' of git://git.kernel.org/pub/scm/linux/kernel/git/phy/linux-phy Pull phy fixes from Vinod Koul: - Qualcomm QMP driver fixes for null deref on suspend, bogus supplies fix and reset entries fix - BCM usb driver init array fix - cadence array offset fix - starfive link configuration fix - config dependency fix for rockchip driver - freescale reset signal fix before pll lock - tegra driver fix for error pointer check * tag 'phy-fixes-6.12' of git://git.kernel.org/pub/scm/linux/kernel/git/phy/linux-phy: phy: tegra: xusb: Add error pointer check in xusb.c dt-bindings: phy: qcom,sc8280xp-qmp-pcie-phy: Fix X1E80100 resets entries phy: freescale: imx8m-pcie: Do CMN_RST just before PHY PLL lock check phy: phy-rockchip-samsung-hdptx: Depend on CONFIG_COMMON_CLK phy: ti: phy-j721e-wiz: fix usxgmii configuration phy: starfive: jh7110-usb: Fix link configuration to controller phy: qcom: qmp-pcie: drop bogus x1e80100 qref supplies phy: qcom: qmp-combo: move driver data initialisation earlier phy: qcom: qmp-usbc: fix NULL-deref on runtime suspend phy: qcom: qmp-usb-legacy: fix NULL-deref on runtime suspend phy: qcom: qmp-usb: fix NULL-deref on runtime suspend dt-bindings: phy: qcom,sc8280xp-qmp-pcie-phy: add missing x1e80100 pipediv2 clocks phy: usb: disable COMMONONN for dual mode phy: cadence: Sierra: Fix offset of DEQ open eye algorithm control register phy: usb: Fix missing elements in BCM4908 USB init array
This commit is contained in:
commit
d5aaa0bc6d
Documentation/devicetree/bindings/phy
drivers/phy
@ -154,8 +154,6 @@ allOf:
|
|||||||
- qcom,sm8550-qmp-gen4x2-pcie-phy
|
- qcom,sm8550-qmp-gen4x2-pcie-phy
|
||||||
- qcom,sm8650-qmp-gen3x2-pcie-phy
|
- qcom,sm8650-qmp-gen3x2-pcie-phy
|
||||||
- qcom,sm8650-qmp-gen4x2-pcie-phy
|
- qcom,sm8650-qmp-gen4x2-pcie-phy
|
||||||
- qcom,x1e80100-qmp-gen3x2-pcie-phy
|
|
||||||
- qcom,x1e80100-qmp-gen4x2-pcie-phy
|
|
||||||
then:
|
then:
|
||||||
properties:
|
properties:
|
||||||
clocks:
|
clocks:
|
||||||
@ -171,6 +169,8 @@ allOf:
|
|||||||
- qcom,sc8280xp-qmp-gen3x1-pcie-phy
|
- qcom,sc8280xp-qmp-gen3x1-pcie-phy
|
||||||
- qcom,sc8280xp-qmp-gen3x2-pcie-phy
|
- qcom,sc8280xp-qmp-gen3x2-pcie-phy
|
||||||
- qcom,sc8280xp-qmp-gen3x4-pcie-phy
|
- qcom,sc8280xp-qmp-gen3x4-pcie-phy
|
||||||
|
- qcom,x1e80100-qmp-gen3x2-pcie-phy
|
||||||
|
- qcom,x1e80100-qmp-gen4x2-pcie-phy
|
||||||
- qcom,x1e80100-qmp-gen4x4-pcie-phy
|
- qcom,x1e80100-qmp-gen4x4-pcie-phy
|
||||||
then:
|
then:
|
||||||
properties:
|
properties:
|
||||||
@ -201,6 +201,7 @@ allOf:
|
|||||||
- qcom,sm8550-qmp-gen4x2-pcie-phy
|
- qcom,sm8550-qmp-gen4x2-pcie-phy
|
||||||
- qcom,sm8650-qmp-gen4x2-pcie-phy
|
- qcom,sm8650-qmp-gen4x2-pcie-phy
|
||||||
- qcom,x1e80100-qmp-gen4x2-pcie-phy
|
- qcom,x1e80100-qmp-gen4x2-pcie-phy
|
||||||
|
- qcom,x1e80100-qmp-gen4x4-pcie-phy
|
||||||
then:
|
then:
|
||||||
properties:
|
properties:
|
||||||
resets:
|
resets:
|
||||||
|
@ -153,7 +153,9 @@ static void xhci_soft_reset(struct brcm_usb_init_params *params,
|
|||||||
} else {
|
} else {
|
||||||
USB_CTRL_SET(ctrl, USB_PM, XHC_SOFT_RESETB);
|
USB_CTRL_SET(ctrl, USB_PM, XHC_SOFT_RESETB);
|
||||||
/* Required for COMMONONN to be set */
|
/* Required for COMMONONN to be set */
|
||||||
USB_XHCI_GBL_UNSET(xhci_gbl, GUSB2PHYCFG, U2_FREECLK_EXISTS);
|
if (params->supported_port_modes != USB_CTLR_MODE_DRD)
|
||||||
|
USB_XHCI_GBL_UNSET(xhci_gbl, GUSB2PHYCFG,
|
||||||
|
U2_FREECLK_EXISTS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -328,7 +330,11 @@ static void usb_init_common_7216(struct brcm_usb_init_params *params)
|
|||||||
/* 1 millisecond - for USB clocks to settle down */
|
/* 1 millisecond - for USB clocks to settle down */
|
||||||
usleep_range(1000, 2000);
|
usleep_range(1000, 2000);
|
||||||
|
|
||||||
/* Disable PHY when port is suspended */
|
/*
|
||||||
|
* Disable PHY when port is suspended
|
||||||
|
* Does not work in DRD mode
|
||||||
|
*/
|
||||||
|
if (params->supported_port_modes != USB_CTLR_MODE_DRD)
|
||||||
USB_CTRL_SET(ctrl, P0_U2PHY_CFG1, COMMONONN);
|
USB_CTRL_SET(ctrl, P0_U2PHY_CFG1, COMMONONN);
|
||||||
|
|
||||||
usb_wake_enable_7216(params, false);
|
usb_wake_enable_7216(params, false);
|
||||||
|
@ -220,6 +220,8 @@ usb_reg_bits_map_table[BRCM_FAMILY_COUNT][USB_CTRL_SELECTOR_COUNT] = {
|
|||||||
0, /* USB_CTRL_SETUP_SCB2_EN_MASK */
|
0, /* USB_CTRL_SETUP_SCB2_EN_MASK */
|
||||||
0, /* USB_CTRL_SETUP_SS_EHCI64BIT_EN_MASK */
|
0, /* USB_CTRL_SETUP_SS_EHCI64BIT_EN_MASK */
|
||||||
0, /* USB_CTRL_SETUP_STRAP_IPP_SEL_MASK */
|
0, /* USB_CTRL_SETUP_STRAP_IPP_SEL_MASK */
|
||||||
|
0, /* USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK */
|
||||||
|
0, /* USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK */
|
||||||
0, /* USB_CTRL_SETUP_OC3_DISABLE_MASK */
|
0, /* USB_CTRL_SETUP_OC3_DISABLE_MASK */
|
||||||
0, /* USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK */
|
0, /* USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK */
|
||||||
0, /* USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK */
|
0, /* USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK */
|
||||||
|
@ -174,8 +174,9 @@
|
|||||||
#define SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG 0x150
|
#define SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG 0x150
|
||||||
#define SIERRA_DEQ_TAU_CTRL2_PREG 0x151
|
#define SIERRA_DEQ_TAU_CTRL2_PREG 0x151
|
||||||
#define SIERRA_DEQ_TAU_CTRL3_PREG 0x152
|
#define SIERRA_DEQ_TAU_CTRL3_PREG 0x152
|
||||||
#define SIERRA_DEQ_OPENEYE_CTRL_PREG 0x158
|
#define SIERRA_DEQ_TAU_EPIOFFSET_MODE_PREG 0x158
|
||||||
#define SIERRA_DEQ_CONCUR_EPIOFFSET_MODE_PREG 0x159
|
#define SIERRA_DEQ_CONCUR_EPIOFFSET_MODE_PREG 0x159
|
||||||
|
#define SIERRA_DEQ_OPENEYE_CTRL_PREG 0x15C
|
||||||
#define SIERRA_DEQ_PICTRL_PREG 0x161
|
#define SIERRA_DEQ_PICTRL_PREG 0x161
|
||||||
#define SIERRA_CPICAL_TMRVAL_MODE1_PREG 0x170
|
#define SIERRA_CPICAL_TMRVAL_MODE1_PREG 0x170
|
||||||
#define SIERRA_CPICAL_TMRVAL_MODE0_PREG 0x171
|
#define SIERRA_CPICAL_TMRVAL_MODE0_PREG 0x171
|
||||||
@ -1733,7 +1734,7 @@ static const struct cdns_reg_pairs ml_pcie_100_no_ssc_ln_regs[] = {
|
|||||||
{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
|
{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
|
||||||
{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
|
{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
|
||||||
{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
|
{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
|
||||||
{0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
|
{0x5E82, SIERRA_DEQ_TAU_EPIOFFSET_MODE_PREG},
|
||||||
{0x002B, SIERRA_CPI_TRIM_PREG},
|
{0x002B, SIERRA_CPI_TRIM_PREG},
|
||||||
{0x0003, SIERRA_EPI_CTRL_PREG},
|
{0x0003, SIERRA_EPI_CTRL_PREG},
|
||||||
{0x803F, SIERRA_SDFILT_H2L_A_PREG},
|
{0x803F, SIERRA_SDFILT_H2L_A_PREG},
|
||||||
@ -1797,7 +1798,7 @@ static const struct cdns_reg_pairs ti_ml_pcie_100_no_ssc_ln_regs[] = {
|
|||||||
{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
|
{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
|
||||||
{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
|
{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
|
||||||
{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
|
{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
|
||||||
{0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
|
{0x5E82, SIERRA_DEQ_TAU_EPIOFFSET_MODE_PREG},
|
||||||
{0x002B, SIERRA_CPI_TRIM_PREG},
|
{0x002B, SIERRA_CPI_TRIM_PREG},
|
||||||
{0x0003, SIERRA_EPI_CTRL_PREG},
|
{0x0003, SIERRA_EPI_CTRL_PREG},
|
||||||
{0x803F, SIERRA_SDFILT_H2L_A_PREG},
|
{0x803F, SIERRA_SDFILT_H2L_A_PREG},
|
||||||
@ -1874,7 +1875,7 @@ static const struct cdns_reg_pairs ml_pcie_100_int_ssc_ln_regs[] = {
|
|||||||
{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
|
{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
|
||||||
{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
|
{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
|
||||||
{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
|
{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
|
||||||
{0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
|
{0x5E82, SIERRA_DEQ_TAU_EPIOFFSET_MODE_PREG},
|
||||||
{0x002B, SIERRA_CPI_TRIM_PREG},
|
{0x002B, SIERRA_CPI_TRIM_PREG},
|
||||||
{0x0003, SIERRA_EPI_CTRL_PREG},
|
{0x0003, SIERRA_EPI_CTRL_PREG},
|
||||||
{0x803F, SIERRA_SDFILT_H2L_A_PREG},
|
{0x803F, SIERRA_SDFILT_H2L_A_PREG},
|
||||||
@ -1941,7 +1942,7 @@ static const struct cdns_reg_pairs ti_ml_pcie_100_int_ssc_ln_regs[] = {
|
|||||||
{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
|
{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
|
||||||
{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
|
{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
|
||||||
{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
|
{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
|
||||||
{0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
|
{0x5E82, SIERRA_DEQ_TAU_EPIOFFSET_MODE_PREG},
|
||||||
{0x002B, SIERRA_CPI_TRIM_PREG},
|
{0x002B, SIERRA_CPI_TRIM_PREG},
|
||||||
{0x0003, SIERRA_EPI_CTRL_PREG},
|
{0x0003, SIERRA_EPI_CTRL_PREG},
|
||||||
{0x803F, SIERRA_SDFILT_H2L_A_PREG},
|
{0x803F, SIERRA_SDFILT_H2L_A_PREG},
|
||||||
@ -2012,7 +2013,7 @@ static const struct cdns_reg_pairs ml_pcie_100_ext_ssc_ln_regs[] = {
|
|||||||
{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
|
{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
|
||||||
{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
|
{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
|
||||||
{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
|
{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
|
||||||
{0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
|
{0x5E82, SIERRA_DEQ_TAU_EPIOFFSET_MODE_PREG},
|
||||||
{0x002B, SIERRA_CPI_TRIM_PREG},
|
{0x002B, SIERRA_CPI_TRIM_PREG},
|
||||||
{0x0003, SIERRA_EPI_CTRL_PREG},
|
{0x0003, SIERRA_EPI_CTRL_PREG},
|
||||||
{0x803F, SIERRA_SDFILT_H2L_A_PREG},
|
{0x803F, SIERRA_SDFILT_H2L_A_PREG},
|
||||||
@ -2079,7 +2080,7 @@ static const struct cdns_reg_pairs ti_ml_pcie_100_ext_ssc_ln_regs[] = {
|
|||||||
{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
|
{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
|
||||||
{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
|
{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
|
||||||
{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
|
{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
|
||||||
{0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
|
{0x5E82, SIERRA_DEQ_TAU_EPIOFFSET_MODE_PREG},
|
||||||
{0x002B, SIERRA_CPI_TRIM_PREG},
|
{0x002B, SIERRA_CPI_TRIM_PREG},
|
||||||
{0x0003, SIERRA_EPI_CTRL_PREG},
|
{0x0003, SIERRA_EPI_CTRL_PREG},
|
||||||
{0x803F, SIERRA_SDFILT_H2L_A_PREG},
|
{0x803F, SIERRA_SDFILT_H2L_A_PREG},
|
||||||
@ -2140,7 +2141,7 @@ static const struct cdns_reg_pairs cdns_pcie_ln_regs_no_ssc[] = {
|
|||||||
{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
|
{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
|
||||||
{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
|
{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
|
||||||
{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
|
{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
|
||||||
{0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
|
{0x5E82, SIERRA_DEQ_TAU_EPIOFFSET_MODE_PREG},
|
||||||
{0x002B, SIERRA_CPI_TRIM_PREG},
|
{0x002B, SIERRA_CPI_TRIM_PREG},
|
||||||
{0x0003, SIERRA_EPI_CTRL_PREG},
|
{0x0003, SIERRA_EPI_CTRL_PREG},
|
||||||
{0x803F, SIERRA_SDFILT_H2L_A_PREG},
|
{0x803F, SIERRA_SDFILT_H2L_A_PREG},
|
||||||
@ -2215,7 +2216,7 @@ static const struct cdns_reg_pairs cdns_pcie_ln_regs_int_ssc[] = {
|
|||||||
{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
|
{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
|
||||||
{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
|
{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
|
||||||
{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
|
{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
|
||||||
{0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
|
{0x5E82, SIERRA_DEQ_TAU_EPIOFFSET_MODE_PREG},
|
||||||
{0x002B, SIERRA_CPI_TRIM_PREG},
|
{0x002B, SIERRA_CPI_TRIM_PREG},
|
||||||
{0x0003, SIERRA_EPI_CTRL_PREG},
|
{0x0003, SIERRA_EPI_CTRL_PREG},
|
||||||
{0x803F, SIERRA_SDFILT_H2L_A_PREG},
|
{0x803F, SIERRA_SDFILT_H2L_A_PREG},
|
||||||
@ -2284,7 +2285,7 @@ static const struct cdns_reg_pairs cdns_pcie_ln_regs_ext_ssc[] = {
|
|||||||
{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
|
{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
|
||||||
{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
|
{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
|
||||||
{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
|
{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
|
||||||
{0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
|
{0x5E82, SIERRA_DEQ_TAU_EPIOFFSET_MODE_PREG},
|
||||||
{0x002B, SIERRA_CPI_TRIM_PREG},
|
{0x002B, SIERRA_CPI_TRIM_PREG},
|
||||||
{0x0003, SIERRA_EPI_CTRL_PREG},
|
{0x0003, SIERRA_EPI_CTRL_PREG},
|
||||||
{0x803F, SIERRA_SDFILT_H2L_A_PREG},
|
{0x803F, SIERRA_SDFILT_H2L_A_PREG},
|
||||||
|
@ -141,11 +141,6 @@ static int imx8_pcie_phy_power_on(struct phy *phy)
|
|||||||
IMX8MM_GPR_PCIE_REF_CLK_PLL);
|
IMX8MM_GPR_PCIE_REF_CLK_PLL);
|
||||||
usleep_range(100, 200);
|
usleep_range(100, 200);
|
||||||
|
|
||||||
/* Do the PHY common block reset */
|
|
||||||
regmap_update_bits(imx8_phy->iomuxc_gpr, IOMUXC_GPR14,
|
|
||||||
IMX8MM_GPR_PCIE_CMN_RST,
|
|
||||||
IMX8MM_GPR_PCIE_CMN_RST);
|
|
||||||
|
|
||||||
switch (imx8_phy->drvdata->variant) {
|
switch (imx8_phy->drvdata->variant) {
|
||||||
case IMX8MP:
|
case IMX8MP:
|
||||||
reset_control_deassert(imx8_phy->perst);
|
reset_control_deassert(imx8_phy->perst);
|
||||||
@ -156,6 +151,11 @@ static int imx8_pcie_phy_power_on(struct phy *phy)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Do the PHY common block reset */
|
||||||
|
regmap_update_bits(imx8_phy->iomuxc_gpr, IOMUXC_GPR14,
|
||||||
|
IMX8MM_GPR_PCIE_CMN_RST,
|
||||||
|
IMX8MM_GPR_PCIE_CMN_RST);
|
||||||
|
|
||||||
/* Polling to check the phy is ready or not. */
|
/* Polling to check the phy is ready or not. */
|
||||||
ret = readl_poll_timeout(imx8_phy->base + IMX8MM_PCIE_PHY_CMN_REG075,
|
ret = readl_poll_timeout(imx8_phy->base + IMX8MM_PCIE_PHY_CMN_REG075,
|
||||||
val, val == ANA_PLL_DONE, 10, 20000);
|
val, val == ANA_PLL_DONE, 10, 20000);
|
||||||
|
@ -3673,6 +3673,7 @@ static int qmp_combo_probe(struct platform_device *pdev)
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
qmp->dev = dev;
|
qmp->dev = dev;
|
||||||
|
dev_set_drvdata(dev, qmp);
|
||||||
|
|
||||||
qmp->orientation = TYPEC_ORIENTATION_NORMAL;
|
qmp->orientation = TYPEC_ORIENTATION_NORMAL;
|
||||||
|
|
||||||
@ -3749,8 +3750,6 @@ static int qmp_combo_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
phy_set_drvdata(qmp->dp_phy, qmp);
|
phy_set_drvdata(qmp->dp_phy, qmp);
|
||||||
|
|
||||||
dev_set_drvdata(dev, qmp);
|
|
||||||
|
|
||||||
if (usb_np == dev->of_node)
|
if (usb_np == dev->of_node)
|
||||||
phy_provider = devm_of_phy_provider_register(dev, qmp_combo_phy_xlate);
|
phy_provider = devm_of_phy_provider_register(dev, qmp_combo_phy_xlate);
|
||||||
else
|
else
|
||||||
|
@ -3661,8 +3661,8 @@ static const struct qmp_phy_cfg x1e80100_qmp_gen4x2_pciephy_cfg = {
|
|||||||
|
|
||||||
.reset_list = sdm845_pciephy_reset_l,
|
.reset_list = sdm845_pciephy_reset_l,
|
||||||
.num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l),
|
.num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l),
|
||||||
.vreg_list = sm8550_qmp_phy_vreg_l,
|
.vreg_list = qmp_phy_vreg_l,
|
||||||
.num_vregs = ARRAY_SIZE(sm8550_qmp_phy_vreg_l),
|
.num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
|
||||||
.regs = pciephy_v6_regs_layout,
|
.regs = pciephy_v6_regs_layout,
|
||||||
|
|
||||||
.pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL,
|
.pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL,
|
||||||
@ -3695,8 +3695,8 @@ static const struct qmp_phy_cfg x1e80100_qmp_gen4x4_pciephy_cfg = {
|
|||||||
|
|
||||||
.reset_list = sdm845_pciephy_reset_l,
|
.reset_list = sdm845_pciephy_reset_l,
|
||||||
.num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l),
|
.num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l),
|
||||||
.vreg_list = sm8550_qmp_phy_vreg_l,
|
.vreg_list = qmp_phy_vreg_l,
|
||||||
.num_vregs = ARRAY_SIZE(sm8550_qmp_phy_vreg_l),
|
.num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
|
||||||
.regs = pciephy_v6_regs_layout,
|
.regs = pciephy_v6_regs_layout,
|
||||||
|
|
||||||
.pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL,
|
.pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL,
|
||||||
|
@ -1248,6 +1248,7 @@ static int qmp_usb_legacy_probe(struct platform_device *pdev)
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
qmp->dev = dev;
|
qmp->dev = dev;
|
||||||
|
dev_set_drvdata(dev, qmp);
|
||||||
|
|
||||||
qmp->cfg = of_device_get_match_data(dev);
|
qmp->cfg = of_device_get_match_data(dev);
|
||||||
if (!qmp->cfg)
|
if (!qmp->cfg)
|
||||||
|
@ -2179,6 +2179,7 @@ static int qmp_usb_probe(struct platform_device *pdev)
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
qmp->dev = dev;
|
qmp->dev = dev;
|
||||||
|
dev_set_drvdata(dev, qmp);
|
||||||
|
|
||||||
qmp->cfg = of_device_get_match_data(dev);
|
qmp->cfg = of_device_get_match_data(dev);
|
||||||
if (!qmp->cfg)
|
if (!qmp->cfg)
|
||||||
|
@ -1050,6 +1050,7 @@ static int qmp_usbc_probe(struct platform_device *pdev)
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
qmp->dev = dev;
|
qmp->dev = dev;
|
||||||
|
dev_set_drvdata(dev, qmp);
|
||||||
|
|
||||||
qmp->orientation = TYPEC_ORIENTATION_NORMAL;
|
qmp->orientation = TYPEC_ORIENTATION_NORMAL;
|
||||||
|
|
||||||
|
@ -86,6 +86,7 @@ config PHY_ROCKCHIP_PCIE
|
|||||||
config PHY_ROCKCHIP_SAMSUNG_HDPTX
|
config PHY_ROCKCHIP_SAMSUNG_HDPTX
|
||||||
tristate "Rockchip Samsung HDMI/eDP Combo PHY driver"
|
tristate "Rockchip Samsung HDMI/eDP Combo PHY driver"
|
||||||
depends on (ARCH_ROCKCHIP || COMPILE_TEST) && OF
|
depends on (ARCH_ROCKCHIP || COMPILE_TEST) && OF
|
||||||
|
depends on COMMON_CLK
|
||||||
depends on HAS_IOMEM
|
depends on HAS_IOMEM
|
||||||
select GENERIC_PHY
|
select GENERIC_PHY
|
||||||
select MFD_SYSCON
|
select MFD_SYSCON
|
||||||
|
@ -10,18 +10,24 @@
|
|||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
#include <linux/mfd/syscon.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/phy/phy.h>
|
#include <linux/phy/phy.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/regmap.h>
|
||||||
#include <linux/usb/of.h>
|
#include <linux/usb/of.h>
|
||||||
|
|
||||||
#define USB_125M_CLK_RATE 125000000
|
#define USB_125M_CLK_RATE 125000000
|
||||||
#define USB_LS_KEEPALIVE_OFF 0x4
|
#define USB_LS_KEEPALIVE_OFF 0x4
|
||||||
#define USB_LS_KEEPALIVE_ENABLE BIT(4)
|
#define USB_LS_KEEPALIVE_ENABLE BIT(4)
|
||||||
|
|
||||||
|
#define USB_PDRSTN_SPLIT BIT(17)
|
||||||
|
#define SYSCON_USB_SPLIT_OFFSET 0x18
|
||||||
|
|
||||||
struct jh7110_usb2_phy {
|
struct jh7110_usb2_phy {
|
||||||
struct phy *phy;
|
struct phy *phy;
|
||||||
void __iomem *regs;
|
void __iomem *regs;
|
||||||
|
struct regmap *sys_syscon;
|
||||||
struct clk *usb_125m_clk;
|
struct clk *usb_125m_clk;
|
||||||
struct clk *app_125m;
|
struct clk *app_125m;
|
||||||
enum phy_mode mode;
|
enum phy_mode mode;
|
||||||
@ -61,6 +67,10 @@ static int usb2_phy_set_mode(struct phy *_phy,
|
|||||||
usb2_set_ls_keepalive(phy, (mode != PHY_MODE_USB_DEVICE));
|
usb2_set_ls_keepalive(phy, (mode != PHY_MODE_USB_DEVICE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Connect usb 2.0 phy mode */
|
||||||
|
regmap_update_bits(phy->sys_syscon, SYSCON_USB_SPLIT_OFFSET,
|
||||||
|
USB_PDRSTN_SPLIT, USB_PDRSTN_SPLIT);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,6 +139,12 @@ static int jh7110_usb_phy_probe(struct platform_device *pdev)
|
|||||||
phy_set_drvdata(phy->phy, phy);
|
phy_set_drvdata(phy->phy, phy);
|
||||||
phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);
|
phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);
|
||||||
|
|
||||||
|
phy->sys_syscon =
|
||||||
|
syscon_regmap_lookup_by_compatible("starfive,jh7110-sys-syscon");
|
||||||
|
if (IS_ERR(phy->sys_syscon))
|
||||||
|
return dev_err_probe(dev, PTR_ERR(phy->sys_syscon),
|
||||||
|
"Failed to get sys-syscon\n");
|
||||||
|
|
||||||
return PTR_ERR_OR_ZERO(phy_provider);
|
return PTR_ERR_OR_ZERO(phy_provider);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -699,6 +699,8 @@ static int tegra_xusb_setup_usb_role_switch(struct tegra_xusb_port *port)
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
lane = tegra_xusb_find_lane(port->padctl, "usb2", port->index);
|
lane = tegra_xusb_find_lane(port->padctl, "usb2", port->index);
|
||||||
|
if (IS_ERR(lane))
|
||||||
|
return PTR_ERR(lane);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Assign phy dev to usb-phy dev. Host/device drivers can use phy
|
* Assign phy dev to usb-phy dev. Host/device drivers can use phy
|
||||||
|
@ -450,8 +450,8 @@ static int wiz_mode_select(struct wiz *wiz)
|
|||||||
} else if (wiz->lane_phy_type[i] == PHY_TYPE_USXGMII) {
|
} else if (wiz->lane_phy_type[i] == PHY_TYPE_USXGMII) {
|
||||||
ret = regmap_field_write(wiz->p0_mac_src_sel[i], 0x3);
|
ret = regmap_field_write(wiz->p0_mac_src_sel[i], 0x3);
|
||||||
ret = regmap_field_write(wiz->p0_rxfclk_sel[i], 0x3);
|
ret = regmap_field_write(wiz->p0_rxfclk_sel[i], 0x3);
|
||||||
ret = regmap_field_write(wiz->p0_refclk_sel[i], 0x3);
|
ret = regmap_field_write(wiz->p0_refclk_sel[i], 0x2);
|
||||||
mode = LANE_MODE_GEN1;
|
mode = LANE_MODE_GEN2;
|
||||||
} else {
|
} else {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user