mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +00:00 
			
		
		
		
	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
					
				
					 14 changed files with 59 additions and 28 deletions
				
			
		|  | @ -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,8 +330,12 @@ 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 */ | 	/*
 | ||||||
| 	USB_CTRL_SET(ctrl, P0_U2PHY_CFG1, COMMONONN); | 	 * 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_wake_enable_7216(params, false); | 	usb_wake_enable_7216(params, false); | ||||||
| 	usb_init_common(params); | 	usb_init_common(params); | ||||||
|  |  | ||||||
|  | @ -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…
	
	Add table
		
		Reference in a new issue
	
	 Linus Torvalds
						Linus Torvalds