Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'phy-for-6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/phy/linux-phy

Pull phy updates from Vinod Koul:
"New hardware support:

- ST STM32MP25 combophy support

- Sparx5 support for lan969x serdes and updates to driver to support
this

- NXP PTN3222 eUSB2 to USB2 redriver

- Qualcomm SAR2130P eusb2 support, QCS8300 USB DW3 and QMP USB2
support, X1E80100 QMP PCIe PHY Gen4 support, QCS615 and QCS8300 QMP
UFS PHY support and SA8775P eDP PHY support

- Rockchip rk3576 usbdp and rk3576 usb2 phy support

- Binding for Microchip ATA6561 can phy

Updates:

- Freescale driver updates from hdmi support

- Conversion of rockchip rk3228 hdmi phy binding to yaml

- Broadcom usb2-phy deprecated support dropped and USB init array
update for BCM4908

- TI USXGMII mode support in J7200

- Switch back to platform_driver::remove() subsystem update"

* tag 'phy-for-6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/phy/linux-phy: (59 commits)
phy: qcom: qmp: Fix lecacy-legacy typo
phy: lan969x-serdes: add support for lan969x serdes driver
dt-bindings: phy: sparx5: document lan969x
phy: sparx5-serdes: add support for branching on chip type
phy: sparx5-serdes: add indirection layer to register macros
phy: sparx5-serdes: add function for getting the CMU index
phy: sparx5-serdes: add ops to match data
phy: sparx5-serdes: add constant for the number of CMU's
phy: sparx5-serdes: add constants to match data
phy: sparx5-serdes: add support for private match data
phy: bcm-ns-usb2: drop support for old binding variant
dt-bindings: phy: bcm-ns-usb2-phy: drop deprecated variant
dt-bindings: phy: Add QMP UFS PHY compatible for QCS8300
dt-bindings: phy: qcom: snps-eusb2: Add SAR2130P compatible
dt-bindings: phy: ti,tcan104x-can: Document Microchip ATA6561
phy: airoha: Fix REG_CSR_2L_RX{0,1}_REV0 definitions
phy: airoha: Fix REG_CSR_2L_JCPLL_SDM_HREN config in airoha_pcie_phy_init_ssc_jcpll()
phy: airoha: Fix REG_PCIE_PMA_TX_RESET config in airoha_pcie_phy_init_csr_2l()
phy: airoha: Fix REG_CSR_2L_PLL_CMN_RESERVE0 config in airoha_pcie_phy_init_clk_out()
phy: phy-rockchip-samsung-hdptx: Don't request RST_PHY/RST_ROPLL/RST_LCPLL
...

+3056 -1069
+3 -16
Documentation/devicetree/bindings/phy/bcm-ns-usb2-phy.yaml
··· 18 18 const: brcm,ns-usb2-phy 19 19 20 20 reg: 21 - anyOf: 22 - - maxItems: 1 23 - description: PHY control register 24 - - maxItems: 1 25 - description: iomem address range of DMU (Device Management Unit) 26 - deprecated: true 27 - 28 - reg-names: 29 - items: 30 - - const: dmu 21 + maxItems: 1 22 + description: PHY control register 31 23 32 24 brcm,syscon-clkset: 33 25 description: phandle to syscon for clkset register ··· 42 50 - clocks 43 51 - clock-names 44 52 - "#phy-cells" 45 - 46 - oneOf: 47 - - required: 48 - - brcm,syscon-clkset 49 - - required: 50 - - reg-names 53 + - brcm,syscon-clkset 51 54 52 55 additionalProperties: false 53 56
+1
Documentation/devicetree/bindings/phy/fsl,mxs-usbphy.yaml
··· 32 32 - enum: 33 33 - fsl,imx8dxl-usbphy 34 34 - fsl,imx8qm-usbphy 35 + - fsl,imx8qxp-usbphy 35 36 - fsl,imx8ulp-usbphy 36 37 - const: fsl,imx7ulp-usbphy 37 38
+10
Documentation/devicetree/bindings/phy/mediatek,tphy.yaml
··· 125 125 $ref: /schemas/types.yaml#/definitions/uint32 126 126 default: 28 127 127 128 + power-domains: 129 + description: 130 + The TPHY of MediaTek should exist within a power domain. The 131 + developer should be aware that the hardware design of MediaTek TPHY 132 + does not require the addition of MTCMOS. If the power to the TPHY 133 + is turned off, it will impact other functions. From the current 134 + perspective of USB hardware design, even if MTCMOS is added to the 135 + TPHY, it should remain always on. 136 + maxItems: 1 137 + 128 138 # Required child node: 129 139 patternProperties: 130 140 "^(usb|pcie|sata)-phy@[0-9a-f]+$":
+16 -1
Documentation/devicetree/bindings/phy/microchip,sparx5-serdes.yaml
··· 8 8 9 9 maintainers: 10 10 - Steen Hegelund <steen.hegelund@microchip.com> 11 + - Daniel Machon <daniel.machon@microchip.com> 11 12 12 13 description: | 13 14 The Sparx5 SERDES interfaces share the same basic functionality, but ··· 63 62 * 10.3125 Gbps (10GBASE-R/10GBASE-KR/USXGMII) 64 63 * 25.78125 Gbps (25GBASE-KR/25GBASE-CR/25GBASE-SR/25GBASE-LR/25GBASE-ER) 65 64 65 + lan969x has ten SERDES10G interfaces that share the same features, operating 66 + modes and data rates as the equivalent Sparx5 SERDES10G interfaces. 67 + 66 68 properties: 67 69 $nodename: 68 70 pattern: "^serdes@[0-9a-f]+$" 69 71 70 72 compatible: 71 - const: microchip,sparx5-serdes 73 + oneOf: 74 + - enum: 75 + - microchip,sparx5-serdes 76 + - microchip,lan9691-serdes 77 + - items: 78 + - enum: 79 + - microchip,lan9698-serdes 80 + - microchip,lan9696-serdes 81 + - microchip,lan9694-serdes 82 + - microchip,lan9693-serdes 83 + - microchip,lan9692-serdes 84 + - const: microchip,lan9691-serdes 72 85 73 86 reg: 74 87 minItems: 1
+55
Documentation/devicetree/bindings/phy/nxp,ptn3222.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/phy/nxp,ptn3222.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: NXP PTN3222 1-port eUSB2 to USB2 redriver 8 + 9 + maintainers: 10 + - Dmitry Baryshkov <dmitry.baryshkov@linaro.org> 11 + 12 + properties: 13 + compatible: 14 + enum: 15 + - nxp,ptn3222 16 + 17 + reg: 18 + maxItems: 1 19 + 20 + "#phy-cells": 21 + const: 0 22 + 23 + vdd1v8-supply: 24 + description: power supply (1.8V) 25 + 26 + vdd3v3-supply: 27 + description: power supply (3.3V) 28 + 29 + reset-gpios: true 30 + 31 + required: 32 + - compatible 33 + - reg 34 + - '#phy-cells' 35 + 36 + additionalProperties: false 37 + 38 + examples: 39 + - | 40 + #include <dt-bindings/gpio/gpio.h> 41 + 42 + i2c { 43 + #address-cells = <1>; 44 + #size-cells = <0>; 45 + 46 + redriver@4f { 47 + compatible = "nxp,ptn3222"; 48 + reg = <0x4f>; 49 + #phy-cells = <0>; 50 + vdd3v3-supply = <&vreg_3p3>; 51 + vdd1v8-supply = <&vreg_1p8>; 52 + reset-gpios = <&gpio_reset GPIO_ACTIVE_LOW>; 53 + }; 54 + }; 55 + ...
+1 -1
Documentation/devicetree/bindings/phy/phy-cadence-sierra.yaml
··· 96 96 Specifies the type of PHY for which the group of PHY lanes is used. 97 97 Refer include/dt-bindings/phy/phy.h. Constants from the header should be used. 98 98 $ref: /schemas/types.yaml#/definitions/uint32 99 - enum: [2, 4] 99 + enum: [2, 4, 8, 9] 100 100 101 101 cdns,num-lanes: 102 102 description:
-43
Documentation/devicetree/bindings/phy/phy-rockchip-inno-hdmi.txt
··· 1 - ROCKCHIP HDMI PHY WITH INNO IP BLOCK 2 - 3 - Required properties: 4 - - compatible : should be one of the listed compatibles: 5 - * "rockchip,rk3228-hdmi-phy", 6 - * "rockchip,rk3328-hdmi-phy"; 7 - - reg : Address and length of the hdmi phy control register set 8 - - clocks : phandle + clock specifier for the phy clocks 9 - - clock-names : string, clock name, must contain "sysclk" for system 10 - control and register configuration, "refoclk" for crystal- 11 - oscillator reference PLL clock input and "refpclk" for pclk- 12 - based refeference PLL clock input. 13 - - #clock-cells: should be 0. 14 - - clock-output-names : shall be the name for the output clock. 15 - - interrupts : phandle + interrupt specified for the hdmiphy interrupt 16 - - #phy-cells : must be 0. See ./phy-bindings.txt for details. 17 - 18 - Optional properties for rk3328-hdmi-phy: 19 - - nvmem-cells = phandle + nvmem specifier for the cpu-version efuse 20 - - nvmem-cell-names : "cpu-version" to read the chip version, required 21 - for adjustment to some frequency settings 22 - 23 - Example: 24 - hdmi_phy: hdmi-phy@12030000 { 25 - compatible = "rockchip,rk3228-hdmi-phy"; 26 - reg = <0x12030000 0x10000>; 27 - #phy-cells = <0>; 28 - clocks = <&cru PCLK_HDMI_PHY>, <&xin24m>, <&cru DCLK_HDMIPHY>; 29 - clock-names = "sysclk", "refoclk", "refpclk"; 30 - #clock-cells = <0>; 31 - clock-output-names = "hdmi_phy"; 32 - status = "disabled"; 33 - }; 34 - 35 - Then the PHY can be used in other nodes such as: 36 - 37 - hdmi: hdmi@200a0000 { 38 - compatible = "rockchip,rk3228-dw-hdmi"; 39 - ... 40 - phys = <&hdmi_phy>; 41 - phy-names = "hdmi"; 42 - ... 43 - };
+1
Documentation/devicetree/bindings/phy/phy-rockchip-usbdp.yaml
··· 13 13 properties: 14 14 compatible: 15 15 enum: 16 + - rockchip,rk3576-usbdp-phy 16 17 - rockchip,rk3588-usbdp-phy 17 18 18 19 reg:
+1
Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml
··· 17 17 properties: 18 18 compatible: 19 19 enum: 20 + - qcom,sa8775p-edp-phy 20 21 - qcom,sc7280-edp-phy 21 22 - qcom,sc8180x-edp-phy 22 23 - qcom,sc8280xp-dp-phy
+6 -1
Documentation/devicetree/bindings/phy/qcom,sa8775p-dwmac-sgmii-phy.yaml
··· 15 15 16 16 properties: 17 17 compatible: 18 - const: qcom,sa8775p-dwmac-sgmii-phy 18 + oneOf: 19 + - items: 20 + - enum: 21 + - qcom,qcs8300-dwmac-sgmii-phy 22 + - const: qcom,sa8775p-dwmac-sgmii-phy 23 + - const: qcom,sa8775p-dwmac-sgmii-phy 19 24 20 25 reg: 21 26 items:
+3
Documentation/devicetree/bindings/phy/qcom,sc8280xp-qmp-pcie-phy.yaml
··· 41 41 - qcom,x1e80100-qmp-gen3x2-pcie-phy 42 42 - qcom,x1e80100-qmp-gen4x2-pcie-phy 43 43 - qcom,x1e80100-qmp-gen4x4-pcie-phy 44 + - qcom,x1e80100-qmp-gen4x8-pcie-phy 44 45 45 46 reg: 46 47 minItems: 1 ··· 173 172 - qcom,x1e80100-qmp-gen3x2-pcie-phy 174 173 - qcom,x1e80100-qmp-gen4x2-pcie-phy 175 174 - qcom,x1e80100-qmp-gen4x4-pcie-phy 175 + - qcom,x1e80100-qmp-gen4x8-pcie-phy 176 176 then: 177 177 properties: 178 178 clocks: ··· 204 202 - qcom,sm8650-qmp-gen4x2-pcie-phy 205 203 - qcom,x1e80100-qmp-gen4x2-pcie-phy 206 204 - qcom,x1e80100-qmp-gen4x4-pcie-phy 205 + - qcom,x1e80100-qmp-gen4x8-pcie-phy 207 206 then: 208 207 properties: 209 208 resets:
+29 -20
Documentation/devicetree/bindings/phy/qcom,sc8280xp-qmp-ufs-phy.yaml
··· 15 15 16 16 properties: 17 17 compatible: 18 - enum: 19 - - qcom,msm8996-qmp-ufs-phy 20 - - qcom,msm8998-qmp-ufs-phy 21 - - qcom,sa8775p-qmp-ufs-phy 22 - - qcom,sc7180-qmp-ufs-phy 23 - - qcom,sc7280-qmp-ufs-phy 24 - - qcom,sc8180x-qmp-ufs-phy 25 - - qcom,sc8280xp-qmp-ufs-phy 26 - - qcom,sdm845-qmp-ufs-phy 27 - - qcom,sm6115-qmp-ufs-phy 28 - - qcom,sm6125-qmp-ufs-phy 29 - - qcom,sm6350-qmp-ufs-phy 30 - - qcom,sm7150-qmp-ufs-phy 31 - - qcom,sm8150-qmp-ufs-phy 32 - - qcom,sm8250-qmp-ufs-phy 33 - - qcom,sm8350-qmp-ufs-phy 34 - - qcom,sm8450-qmp-ufs-phy 35 - - qcom,sm8475-qmp-ufs-phy 36 - - qcom,sm8550-qmp-ufs-phy 37 - - qcom,sm8650-qmp-ufs-phy 18 + oneOf: 19 + - items: 20 + - enum: 21 + - qcom,qcs615-qmp-ufs-phy 22 + - const: qcom,sm6115-qmp-ufs-phy 23 + - items: 24 + - enum: 25 + - qcom,qcs8300-qmp-ufs-phy 26 + - const: qcom,sa8775p-qmp-ufs-phy 27 + - enum: 28 + - qcom,msm8996-qmp-ufs-phy 29 + - qcom,msm8998-qmp-ufs-phy 30 + - qcom,sa8775p-qmp-ufs-phy 31 + - qcom,sc7180-qmp-ufs-phy 32 + - qcom,sc7280-qmp-ufs-phy 33 + - qcom,sc8180x-qmp-ufs-phy 34 + - qcom,sc8280xp-qmp-ufs-phy 35 + - qcom,sdm845-qmp-ufs-phy 36 + - qcom,sm6115-qmp-ufs-phy 37 + - qcom,sm6125-qmp-ufs-phy 38 + - qcom,sm6350-qmp-ufs-phy 39 + - qcom,sm7150-qmp-ufs-phy 40 + - qcom,sm8150-qmp-ufs-phy 41 + - qcom,sm8250-qmp-ufs-phy 42 + - qcom,sm8350-qmp-ufs-phy 43 + - qcom,sm8450-qmp-ufs-phy 44 + - qcom,sm8475-qmp-ufs-phy 45 + - qcom,sm8550-qmp-ufs-phy 46 + - qcom,sm8650-qmp-ufs-phy 38 47 39 48 reg: 40 49 maxItems: 1
+2
Documentation/devicetree/bindings/phy/qcom,sc8280xp-qmp-usb3-uni-phy.yaml
··· 20 20 - qcom,ipq8074-qmp-usb3-phy 21 21 - qcom,ipq9574-qmp-usb3-phy 22 22 - qcom,msm8996-qmp-usb3-phy 23 + - qcom,qcs8300-qmp-usb3-uni-phy 23 24 - qcom,qdu1000-qmp-usb3-uni-phy 24 25 - qcom,sa8775p-qmp-usb3-uni-phy 25 26 - qcom,sc8180x-qmp-usb3-uni-phy ··· 112 111 compatible: 113 112 contains: 114 113 enum: 114 + - qcom,qcs8300-qmp-usb3-uni-phy 115 115 - qcom,qdu1000-qmp-usb3-uni-phy 116 116 - qcom,sa8775p-qmp-usb3-uni-phy 117 117 - qcom,sc8180x-qmp-usb3-uni-phy
+1
Documentation/devicetree/bindings/phy/qcom,snps-eusb2-phy.yaml
··· 17 17 oneOf: 18 18 - items: 19 19 - enum: 20 + - qcom,sar2130p-snps-eusb2-phy 20 21 - qcom,sdx75-snps-eusb2-phy 21 22 - qcom,sm8650-snps-eusb2-phy 22 23 - qcom,x1e80100-snps-eusb2-phy
+1
Documentation/devicetree/bindings/phy/qcom,usb-snps-femto-v2.yaml
··· 22 22 - const: qcom,usb-snps-hs-5nm-phy 23 23 - items: 24 24 - enum: 25 + - qcom,qcs8300-usb-hs-phy 25 26 - qcom,qdu1000-usb-hs-phy 26 27 - qcom,sc7280-usb-hs-phy 27 28 - qcom,sc8180x-usb-hs-phy
+43 -2
Documentation/devicetree/bindings/phy/rockchip,inno-usb2phy.yaml
··· 20 20 - rockchip,rk3366-usb2phy 21 21 - rockchip,rk3399-usb2phy 22 22 - rockchip,rk3568-usb2phy 23 + - rockchip,rk3576-usb2phy 23 24 - rockchip,rk3588-usb2phy 24 25 - rockchip,rv1108-usb2phy 25 26 ··· 35 34 const: 0 36 35 37 36 clocks: 38 - maxItems: 1 37 + minItems: 1 38 + maxItems: 3 39 39 40 40 clock-names: 41 - const: phyclk 41 + minItems: 1 42 + items: 43 + - const: phyclk 44 + - const: aclk 45 + - const: aclk_slv 42 46 43 47 assigned-clocks: 44 48 description: ··· 177 171 required: 178 172 - interrupts 179 173 - interrupt-names 174 + 175 + - if: 176 + properties: 177 + compatible: 178 + contains: 179 + enum: 180 + - rockchip,px30-usb2phy 181 + - rockchip,rk3128-usb2phy 182 + - rockchip,rk3228-usb2phy 183 + - rockchip,rk3308-usb2phy 184 + - rockchip,rk3328-usb2phy 185 + - rockchip,rk3366-usb2phy 186 + - rockchip,rk3399-usb2phy 187 + - rockchip,rk3568-usb2phy 188 + - rockchip,rk3588-usb2phy 189 + - rockchip,rv1108-usb2phy 190 + then: 191 + properties: 192 + clocks: 193 + maxItems: 1 194 + clock-names: 195 + maxItems: 1 196 + 197 + - if: 198 + properties: 199 + compatible: 200 + contains: 201 + enum: 202 + - rockchip,rk3576-usb2phy 203 + then: 204 + properties: 205 + clocks: 206 + minItems: 3 207 + clock-names: 208 + minItems: 3 180 209 181 210 additionalProperties: false 182 211
+97
Documentation/devicetree/bindings/phy/rockchip,rk3228-hdmi-phy.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/phy/rockchip,rk3228-hdmi-phy.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Rockchip HDMI PHY with Innosilicon IP block 8 + 9 + maintainers: 10 + - Heiko Stuebner <heiko@sntech.de> 11 + 12 + properties: 13 + compatible: 14 + enum: 15 + - rockchip,rk3228-hdmi-phy 16 + - rockchip,rk3328-hdmi-phy 17 + 18 + reg: 19 + maxItems: 1 20 + 21 + clocks: 22 + maxItems: 3 23 + 24 + clock-names: 25 + items: 26 + - const: sysclk 27 + - const: refoclk 28 + - const: refpclk 29 + 30 + clock-output-names: 31 + description: 32 + The hdmiphy output clock name, that gets fed back to the CRU. 33 + 34 + "#clock-cells": 35 + const: 0 36 + 37 + interrupts: 38 + maxItems: 1 39 + 40 + nvmem-cells: 41 + maxItems: 1 42 + description: A phandle + nvmem specifier for the cpu-version efuse 43 + for adjustment to some frequency settings, depending on cpu-version 44 + 45 + nvmem-cell-names: 46 + items: 47 + - const: cpu-version 48 + 49 + '#phy-cells': 50 + const: 0 51 + 52 + required: 53 + - compatible 54 + - reg 55 + - clocks 56 + - clock-names 57 + - clock-output-names 58 + - '#clock-cells' 59 + - '#phy-cells' 60 + 61 + allOf: 62 + - if: 63 + properties: 64 + compatible: 65 + contains: 66 + const: rockchip,rk3228-hdmi-phy 67 + 68 + then: 69 + properties: 70 + interrupts: false 71 + 72 + - if: 73 + properties: 74 + compatible: 75 + contains: 76 + const: rockchip,rk3328-hdmi-phy 77 + 78 + then: 79 + required: 80 + - interrupts 81 + 82 + additionalProperties: false 83 + 84 + examples: 85 + - | 86 + 87 + #include <dt-bindings/clock/rk3228-cru.h> 88 + hdmi_phy: phy@12030000 { 89 + compatible = "rockchip,rk3228-hdmi-phy"; 90 + reg = <0x12030000 0x10000>; 91 + #phy-cells = <0>; 92 + clocks = <&cru PCLK_HDMI_PHY>, <&xin24m>, <&cru DCLK_HDMI_PHY>; 93 + clock-names = "sysclk", "refoclk", "refpclk"; 94 + #clock-cells = <0>; 95 + 96 + clock-output-names = "hdmi_phy"; 97 + };
+119
Documentation/devicetree/bindings/phy/st,stm32mp25-combophy.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/phy/st,stm32mp25-combophy.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: STMicroelectronics STM32MP25 USB3/PCIe COMBOPHY 8 + 9 + maintainers: 10 + - Christian Bruel <christian.bruel@foss.st.com> 11 + 12 + description: 13 + Single lane PHY shared (exclusive) between the USB3 and PCIe controllers. 14 + Supports 5Gbit/s for USB3 and PCIe gen2 or 2.5Gbit/s for PCIe gen1. 15 + 16 + properties: 17 + compatible: 18 + const: st,stm32mp25-combophy 19 + 20 + reg: 21 + maxItems: 1 22 + 23 + "#phy-cells": 24 + const: 1 25 + 26 + clocks: 27 + minItems: 2 28 + items: 29 + - description: apb Bus clock mandatory to access registers. 30 + - description: ker Internal RCC reference clock for USB3 or PCIe 31 + - description: pad Optional on board clock input for PCIe only. Typically an 32 + external 100Mhz oscillator wired on dedicated CLKIN pad. Used as reference 33 + clock input instead of the ker 34 + 35 + clock-names: 36 + minItems: 2 37 + items: 38 + - const: apb 39 + - const: ker 40 + - const: pad 41 + 42 + resets: 43 + maxItems: 1 44 + 45 + reset-names: 46 + const: phy 47 + 48 + power-domains: 49 + maxItems: 1 50 + 51 + wakeup-source: true 52 + 53 + interrupts: 54 + maxItems: 1 55 + description: interrupt used for wakeup 56 + 57 + access-controllers: 58 + maxItems: 1 59 + description: Phandle to the rifsc device to check access right. 60 + 61 + st,ssc-on: 62 + $ref: /schemas/types.yaml#/definitions/flag 63 + description: 64 + A property whose presence indicates that the Spread Spectrum Clocking is active. 65 + 66 + st,rx-equalizer: 67 + $ref: /schemas/types.yaml#/definitions/uint32 68 + minimum: 0 69 + maximum: 7 70 + default: 2 71 + description: 72 + A 3 bit value to tune the RX fixed equalizer setting for optimal eye compliance 73 + 74 + st,output-micro-ohms: 75 + minimum: 3999000 76 + maximum: 6090000 77 + default: 4968000 78 + description: 79 + A value property to tune the Single Ended Output Impedance, simulations results 80 + at 25C for a VDDP=0.8V. The hardware accepts discrete values in this range. 81 + 82 + st,output-vswing-microvolt: 83 + minimum: 442000 84 + maximum: 803000 85 + default: 803000 86 + description: 87 + A value property in microvolt to tune the Single Ended Output Voltage Swing to change the 88 + Vlo, Vhi for a VDDP = 0.8V. The hardware accepts discrete values in this range. 89 + 90 + required: 91 + - compatible 92 + - reg 93 + - "#phy-cells" 94 + - clocks 95 + - clock-names 96 + - resets 97 + - reset-names 98 + 99 + additionalProperties: false 100 + 101 + examples: 102 + - | 103 + #include <dt-bindings/clock/st,stm32mp25-rcc.h> 104 + #include <dt-bindings/interrupt-controller/arm-gic.h> 105 + #include <dt-bindings/reset/st,stm32mp25-rcc.h> 106 + 107 + phy@480c0000 { 108 + compatible = "st,stm32mp25-combophy"; 109 + reg = <0x480c0000 0x1000>; 110 + #phy-cells = <1>; 111 + clocks = <&rcc CK_BUS_USB3PCIEPHY>, <&rcc CK_KER_USB3PCIEPHY>; 112 + clock-names = "apb", "ker"; 113 + resets = <&rcc USB3PCIEPHY_R>; 114 + reset-names = "phy"; 115 + access-controllers = <&rifsc 67>; 116 + power-domains = <&CLUSTER_PD>; 117 + wakeup-source; 118 + interrupts-extended = <&exti1 45 IRQ_TYPE_EDGE_FALLING>; 119 + };
+9 -4
Documentation/devicetree/bindings/phy/ti,tcan104x-can.yaml
··· 14 14 pattern: "^can-phy" 15 15 16 16 compatible: 17 - enum: 18 - - nxp,tjr1443 19 - - ti,tcan1042 20 - - ti,tcan1043 17 + oneOf: 18 + - items: 19 + - enum: 20 + - microchip,ata6561 21 + - const: ti,tcan1042 22 + - enum: 23 + - ti,tcan1042 24 + - ti,tcan1043 25 + - nxp,tjr1443 21 26 22 27 '#phy-cells': 23 28 const: 0
+4
Documentation/devicetree/bindings/usb/qcom,dwc3.yaml
··· 26 26 - qcom,msm8998-dwc3 27 27 - qcom,qcm2290-dwc3 28 28 - qcom,qcs404-dwc3 29 + - qcom,qcs8300-dwc3 29 30 - qcom,qdu1000-dwc3 30 31 - qcom,sa8775p-dwc3 31 32 - qcom,sc7180-dwc3 ··· 202 201 - qcom,msm8953-dwc3 203 202 - qcom,msm8996-dwc3 204 203 - qcom,msm8998-dwc3 204 + - qcom,qcs8300-dwc3 205 205 - qcom,sa8775p-dwc3 206 206 - qcom,sc7180-dwc3 207 207 - qcom,sc7280-dwc3 ··· 467 465 - qcom,ipq4019-dwc3 468 466 - qcom,ipq8064-dwc3 469 467 - qcom,msm8994-dwc3 468 + - qcom,qcs8300-dwc3 470 469 - qcom,qdu1000-dwc3 471 470 - qcom,sa8775p-dwc3 472 471 - qcom,sc7180-dwc3 ··· 493 490 minItems: 4 494 491 maxItems: 5 495 492 interrupt-names: 493 + minItems: 4 496 494 items: 497 495 - const: pwr_event 498 496 - const: hs_phy_irq
+6
MAINTAINERS
··· 22428 22428 F: drivers/pwm/pwm-stm32* 22429 22429 F: include/linux/*/stm32-*tim* 22430 22430 22431 + STM32MP25 USB3/PCIE COMBOPHY DRIVER 22432 + M: Christian Bruel <christian.bruel@foss.st.com> 22433 + S: Maintained 22434 + F: Documentation/devicetree/bindings/phy/st,stm32mp25-combophy.yaml 22435 + F: drivers/phy/st/phy-stm32-combophy.c 22436 + 22431 22437 STMMAC ETHERNET DRIVER 22432 22438 M: Alexandre Torgue <alexandre.torgue@foss.st.com> 22433 22439 M: Jose Abreu <joabreu@synopsys.com>
+11
drivers/phy/Kconfig
··· 82 82 This driver create the basic PHY instance and provides initialize 83 83 callback for PCIe GEN3 port. 84 84 85 + config PHY_NXP_PTN3222 86 + tristate "NXP PTN3222 1-port eUSB2 to USB2 redriver" 87 + depends on I2C 88 + depends on OF 89 + select GENERIC_PHY 90 + help 91 + Enable this to support NXP PTN3222 1-port eUSB2 to USB2 Redriver. 92 + This redriver performs translation between eUSB2 and USB2 signalling 93 + schemes. It supports all three USB 2.0 data rates: Low Speed, Full 94 + Speed and High Speed. 95 + 85 96 source "drivers/phy/allwinner/Kconfig" 86 97 source "drivers/phy/amlogic/Kconfig" 87 98 source "drivers/phy/broadcom/Kconfig"
+1
drivers/phy/Makefile
··· 11 11 obj-$(CONFIG_PHY_PISTACHIO_USB) += phy-pistachio-usb.o 12 12 obj-$(CONFIG_USB_LGM_PHY) += phy-lgm-usb.o 13 13 obj-$(CONFIG_PHY_AIROHA_PCIE) += phy-airoha-pcie.o 14 + obj-$(CONFIG_PHY_NXP_PTN3222) += phy-nxp-ptn3222.o 14 15 obj-y += allwinner/ \ 15 16 amlogic/ \ 16 17 broadcom/ \
+4 -4
drivers/phy/allwinner/phy-sun4i-usb.c
··· 1049 1049 MODULE_DEVICE_TABLE(of, sun4i_usb_phy_of_match); 1050 1050 1051 1051 static struct platform_driver sun4i_usb_phy_driver = { 1052 - .probe = sun4i_usb_phy_probe, 1053 - .remove_new = sun4i_usb_phy_remove, 1052 + .probe = sun4i_usb_phy_probe, 1053 + .remove = sun4i_usb_phy_remove, 1054 1054 .driver = { 1055 - .of_match_table = sun4i_usb_phy_of_match, 1056 - .name = "sun4i-usb-phy", 1055 + .of_match_table= sun4i_usb_phy_of_match, 1056 + .name = "sun4i-usb-phy", 1057 1057 } 1058 1058 }; 1059 1059 module_platform_driver(sun4i_usb_phy_driver);
+15 -39
drivers/phy/broadcom/phy-bcm-ns-usb2.c
··· 24 24 struct phy *phy; 25 25 struct regmap *clkset; 26 26 void __iomem *base; 27 - 28 - /* Deprecated binding */ 29 - void __iomem *dmu; 30 27 }; 31 28 32 29 static int bcm_ns_usb2_phy_init(struct phy *phy) ··· 46 49 goto err_clk_off; 47 50 } 48 51 49 - if (usb2->base) 50 - usb2ctl = readl(usb2->base); 51 - else 52 - usb2ctl = readl(usb2->dmu + BCMA_DMU_CRU_USB2_CONTROL); 52 + usb2ctl = readl(usb2->base); 53 53 54 54 if (usb2ctl & BCMA_DMU_CRU_USB2_CONTROL_USB_PLL_PDIV_MASK) { 55 55 usb_pll_pdiv = usb2ctl; ··· 60 66 usb_pll_ndiv = (1920000000 * usb_pll_pdiv) / ref_clk_rate; 61 67 62 68 /* Unlock DMU PLL settings with some magic value */ 63 - if (usb2->clkset) 64 - regmap_write(usb2->clkset, 0, 0x0000ea68); 65 - else 66 - writel(0x0000ea68, usb2->dmu + BCMA_DMU_CRU_CLKSET_KEY); 69 + regmap_write(usb2->clkset, 0, 0x0000ea68); 67 70 68 71 /* Write USB 2.0 PLL control setting */ 69 72 usb2ctl &= ~BCMA_DMU_CRU_USB2_CONTROL_USB_PLL_NDIV_MASK; 70 73 usb2ctl |= usb_pll_ndiv << BCMA_DMU_CRU_USB2_CONTROL_USB_PLL_NDIV_SHIFT; 71 - if (usb2->base) 72 - writel(usb2ctl, usb2->base); 73 - else 74 - writel(usb2ctl, usb2->dmu + BCMA_DMU_CRU_USB2_CONTROL); 74 + 75 + writel(usb2ctl, usb2->base); 75 76 76 77 /* Lock DMU PLL settings */ 77 - if (usb2->clkset) 78 - regmap_write(usb2->clkset, 0, 0x00000000); 79 - else 80 - writel(0x00000000, usb2->dmu + BCMA_DMU_CRU_CLKSET_KEY); 78 + regmap_write(usb2->clkset, 0, 0x00000000); 81 79 82 80 err_clk_off: 83 81 clk_disable_unprepare(usb2->ref_clk); ··· 93 107 return -ENOMEM; 94 108 usb2->dev = dev; 95 109 96 - if (of_property_present(dev->of_node, "brcm,syscon-clkset")) { 97 - usb2->base = devm_platform_ioremap_resource(pdev, 0); 98 - if (IS_ERR(usb2->base)) { 99 - dev_err(dev, "Failed to map control reg\n"); 100 - return PTR_ERR(usb2->base); 101 - } 110 + usb2->base = devm_platform_ioremap_resource(pdev, 0); 111 + if (IS_ERR(usb2->base)) { 112 + dev_err(dev, "Failed to map control reg\n"); 113 + return PTR_ERR(usb2->base); 114 + } 102 115 103 - usb2->clkset = syscon_regmap_lookup_by_phandle(dev->of_node, 104 - "brcm,syscon-clkset"); 105 - if (IS_ERR(usb2->clkset)) { 106 - dev_err(dev, "Failed to lookup clkset regmap\n"); 107 - return PTR_ERR(usb2->clkset); 108 - } 109 - } else { 110 - usb2->dmu = devm_platform_ioremap_resource_byname(pdev, "dmu"); 111 - if (IS_ERR(usb2->dmu)) { 112 - dev_err(dev, "Failed to map DMU regs\n"); 113 - return PTR_ERR(usb2->dmu); 114 - } 115 - 116 - dev_warn(dev, "using deprecated DT binding\n"); 116 + usb2->clkset = syscon_regmap_lookup_by_phandle(dev->of_node, 117 + "brcm,syscon-clkset"); 118 + if (IS_ERR(usb2->clkset)) { 119 + dev_err(dev, "Failed to lookup clkset regmap\n"); 120 + return PTR_ERR(usb2->clkset); 117 121 } 118 122 119 123 usb2->ref_clk = devm_clk_get(dev, "phy-ref-clk");
+215 -220
drivers/phy/broadcom/phy-brcm-usb-init.c
··· 193 193 usb_reg_bits_map_table[BRCM_FAMILY_COUNT][USB_CTRL_SELECTOR_COUNT] = { 194 194 /* 3390B0 */ 195 195 [BRCM_FAMILY_3390A0] = { 196 - USB_CTRL_SETUP_SCB1_EN_MASK, 197 - USB_CTRL_SETUP_SCB2_EN_MASK, 198 - USB_CTRL_SETUP_SS_EHCI64BIT_EN_MASK, 199 - USB_CTRL_SETUP_STRAP_IPP_SEL_MASK, 200 - USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK, 201 - USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK, 202 - USB_CTRL_SETUP_OC3_DISABLE_MASK, 203 - 0, /* USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK */ 204 - 0, /* USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK */ 205 - USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK, 206 - USB_CTRL_USB_PM_USB_PWRDN_MASK, 207 - 0, /* USB_CTRL_USB30_CTL1_XHC_SOFT_RESETB_MASK */ 208 - 0, /* USB_CTRL_USB30_CTL1_USB3_IOC_MASK */ 209 - 0, /* USB_CTRL_USB30_CTL1_USB3_IPP_MASK */ 210 - USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_MASK, 211 - 0, /* USB_CTRL_USB_PM_SOFT_RESET_MASK */ 212 - 0, /* USB_CTRL_SETUP_CC_DRD_MODE_ENABLE_MASK */ 213 - 0, /* USB_CTRL_SETUP_STRAP_CC_DRD_MODE_ENABLE_SEL_MASK */ 214 - USB_CTRL_USB_PM_USB20_HC_RESETB_VAR_MASK, 215 - ENDIAN_SETTINGS, /* USB_CTRL_SETUP ENDIAN bits */ 196 + [USB_CTRL_SETUP_SCB1_EN_SELECTOR] = 197 + USB_CTRL_SETUP_SCB1_EN_MASK, 198 + [USB_CTRL_SETUP_SCB2_EN_SELECTOR] = 199 + USB_CTRL_SETUP_SCB2_EN_MASK, 200 + [USB_CTRL_SETUP_SS_EHCI64BIT_EN_SELECTOR] = 201 + USB_CTRL_SETUP_SS_EHCI64BIT_EN_MASK, 202 + [USB_CTRL_SETUP_STRAP_IPP_SEL_SELECTOR] = 203 + USB_CTRL_SETUP_STRAP_IPP_SEL_MASK, 204 + [USB_CTRL_SETUP_OC3_DISABLE_PORT0_SELECTOR] = 205 + USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK, 206 + [USB_CTRL_SETUP_OC3_DISABLE_PORT1_SELECTOR] = 207 + USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK, 208 + [USB_CTRL_SETUP_OC3_DISABLE_SELECTOR] = 209 + USB_CTRL_SETUP_OC3_DISABLE_MASK, 210 + [USB_CTRL_USB_PM_XHC_SOFT_RESETB_SELECTOR] = 211 + USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK, 212 + [USB_CTRL_USB_PM_USB_PWRDN_SELECTOR] = 213 + USB_CTRL_USB_PM_USB_PWRDN_MASK, 214 + [USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_SELECTOR] = 215 + USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_MASK, 216 + [USB_CTRL_USB_PM_USB20_HC_RESETB_SELECTOR] = 217 + USB_CTRL_USB_PM_USB20_HC_RESETB_VAR_MASK, 218 + [USB_CTRL_SETUP_ENDIAN_SELECTOR] = ENDIAN_SETTINGS, 216 219 }, 217 220 /* 4908 */ 218 221 [BRCM_FAMILY_4908] = { 219 - 0, /* USB_CTRL_SETUP_SCB1_EN_MASK */ 220 - 0, /* USB_CTRL_SETUP_SCB2_EN_MASK */ 221 - 0, /* USB_CTRL_SETUP_SS_EHCI64BIT_EN_MASK */ 222 - 0, /* USB_CTRL_SETUP_STRAP_IPP_SEL_MASK */ 223 - 0, /* USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK */ 224 - 0, /* USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK */ 225 - 0, /* USB_CTRL_SETUP_OC3_DISABLE_MASK */ 226 - 0, /* USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK */ 227 - 0, /* USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK */ 228 - USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK, 229 - USB_CTRL_USB_PM_USB_PWRDN_MASK, 230 - 0, /* USB_CTRL_USB30_CTL1_XHC_SOFT_RESETB_MASK */ 231 - 0, /* USB_CTRL_USB30_CTL1_USB3_IOC_MASK */ 232 - 0, /* USB_CTRL_USB30_CTL1_USB3_IPP_MASK */ 233 - 0, /* USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_MASK */ 234 - 0, /* USB_CTRL_USB_PM_SOFT_RESET_MASK */ 235 - 0, /* USB_CTRL_SETUP_CC_DRD_MODE_ENABLE_MASK */ 236 - 0, /* USB_CTRL_SETUP_STRAP_CC_DRD_MODE_ENABLE_SEL_MASK */ 237 - 0, /* USB_CTRL_USB_PM_USB20_HC_RESETB_VAR_MASK */ 238 - 0, /* USB_CTRL_SETUP ENDIAN bits */ 222 + [USB_CTRL_USB_PM_XHC_SOFT_RESETB_SELECTOR] = 223 + USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK, 224 + [USB_CTRL_USB_PM_USB_PWRDN_SELECTOR] = 225 + USB_CTRL_USB_PM_USB_PWRDN_MASK, 239 226 }, 240 227 /* 7250b0 */ 241 228 [BRCM_FAMILY_7250B0] = { 242 - USB_CTRL_SETUP_SCB1_EN_MASK, 243 - USB_CTRL_SETUP_SCB2_EN_MASK, 244 - USB_CTRL_SETUP_SS_EHCI64BIT_EN_MASK, 245 - 0, /* USB_CTRL_SETUP_STRAP_IPP_SEL_MASK */ 246 - USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK, 247 - USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK, 248 - USB_CTRL_SETUP_OC3_DISABLE_MASK, 249 - USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK, 250 - 0, /* USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK */ 251 - USB_CTRL_USB_PM_XHC_SOFT_RESETB_VAR_MASK, 252 - 0, /* USB_CTRL_USB_PM_USB_PWRDN_MASK */ 253 - 0, /* USB_CTRL_USB30_CTL1_XHC_SOFT_RESETB_MASK */ 254 - 0, /* USB_CTRL_USB30_CTL1_USB3_IOC_MASK */ 255 - 0, /* USB_CTRL_USB30_CTL1_USB3_IPP_MASK */ 256 - 0, /* USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_MASK */ 257 - 0, /* USB_CTRL_USB_PM_SOFT_RESET_MASK */ 258 - 0, /* USB_CTRL_SETUP_CC_DRD_MODE_ENABLE_MASK */ 259 - 0, /* USB_CTRL_SETUP_STRAP_CC_DRD_MODE_ENABLE_SEL_MASK */ 260 - USB_CTRL_USB_PM_USB20_HC_RESETB_MASK, 261 - ENDIAN_SETTINGS, /* USB_CTRL_SETUP ENDIAN bits */ 229 + [USB_CTRL_SETUP_SCB1_EN_SELECTOR] = 230 + USB_CTRL_SETUP_SCB1_EN_MASK, 231 + [USB_CTRL_SETUP_SCB2_EN_SELECTOR] = 232 + USB_CTRL_SETUP_SCB2_EN_MASK, 233 + [USB_CTRL_SETUP_SS_EHCI64BIT_EN_SELECTOR] = 234 + USB_CTRL_SETUP_SS_EHCI64BIT_EN_MASK, 235 + [USB_CTRL_SETUP_OC3_DISABLE_PORT0_SELECTOR] = 236 + USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK, 237 + [USB_CTRL_SETUP_OC3_DISABLE_PORT1_SELECTOR] = 238 + USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK, 239 + [USB_CTRL_SETUP_OC3_DISABLE_SELECTOR] = 240 + USB_CTRL_SETUP_OC3_DISABLE_MASK, 241 + [USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_SELECTOR] = 242 + USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK, 243 + [USB_CTRL_USB_PM_XHC_SOFT_RESETB_SELECTOR] = 244 + USB_CTRL_USB_PM_XHC_SOFT_RESETB_VAR_MASK, 245 + [USB_CTRL_USB_PM_USB20_HC_RESETB_SELECTOR] = 246 + USB_CTRL_USB_PM_USB20_HC_RESETB_MASK, 247 + [USB_CTRL_SETUP_ENDIAN_SELECTOR] = ENDIAN_SETTINGS, 262 248 }, 263 249 /* 7271a0 */ 264 250 [BRCM_FAMILY_7271A0] = { 265 - 0, /* USB_CTRL_SETUP_SCB1_EN_MASK */ 266 - 0, /* USB_CTRL_SETUP_SCB2_EN_MASK */ 267 - USB_CTRL_SETUP_SS_EHCI64BIT_EN_MASK, 268 - USB_CTRL_SETUP_STRAP_IPP_SEL_MASK, 269 - USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK, 270 - USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK, 271 - USB_CTRL_SETUP_OC3_DISABLE_MASK, 272 - 0, /* USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK */ 273 - USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK, 274 - USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK, 275 - USB_CTRL_USB_PM_USB_PWRDN_MASK, 276 - 0, /* USB_CTRL_USB30_CTL1_XHC_SOFT_RESETB_MASK */ 277 - 0, /* USB_CTRL_USB30_CTL1_USB3_IOC_MASK */ 278 - 0, /* USB_CTRL_USB30_CTL1_USB3_IPP_MASK */ 279 - USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_MASK, 280 - USB_CTRL_USB_PM_SOFT_RESET_MASK, 281 - USB_CTRL_SETUP_CC_DRD_MODE_ENABLE_MASK, 282 - USB_CTRL_SETUP_STRAP_CC_DRD_MODE_ENABLE_SEL_MASK, 283 - USB_CTRL_USB_PM_USB20_HC_RESETB_VAR_MASK, 284 - ENDIAN_SETTINGS, /* USB_CTRL_SETUP ENDIAN bits */ 251 + [USB_CTRL_SETUP_SS_EHCI64BIT_EN_SELECTOR] = 252 + USB_CTRL_SETUP_SS_EHCI64BIT_EN_MASK, 253 + [USB_CTRL_SETUP_STRAP_IPP_SEL_SELECTOR] = 254 + USB_CTRL_SETUP_STRAP_IPP_SEL_MASK, 255 + [USB_CTRL_SETUP_OC3_DISABLE_PORT0_SELECTOR] = 256 + USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK, 257 + [USB_CTRL_SETUP_OC3_DISABLE_PORT1_SELECTOR] = 258 + USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK, 259 + [USB_CTRL_SETUP_OC3_DISABLE_SELECTOR] = 260 + USB_CTRL_SETUP_OC3_DISABLE_MASK, 261 + [USB_CTRL_USB_PM_BDC_SOFT_RESETB_SELECTOR] = 262 + USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK, 263 + [USB_CTRL_USB_PM_XHC_SOFT_RESETB_SELECTOR] = 264 + USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK, 265 + [USB_CTRL_USB_PM_USB_PWRDN_SELECTOR] = 266 + USB_CTRL_USB_PM_USB_PWRDN_MASK, 267 + [USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_SELECTOR] = 268 + USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_MASK, 269 + [USB_CTRL_USB_PM_SOFT_RESET_SELECTOR] = 270 + USB_CTRL_USB_PM_SOFT_RESET_MASK, 271 + [USB_CTRL_SETUP_CC_DRD_MODE_ENABLE_SELECTOR] = 272 + USB_CTRL_SETUP_CC_DRD_MODE_ENABLE_MASK, 273 + [USB_CTRL_SETUP_STRAP_CC_DRD_MODE_ENABLE_SEL_SELECTOR] = 274 + USB_CTRL_SETUP_STRAP_CC_DRD_MODE_ENABLE_SEL_MASK, 275 + [USB_CTRL_USB_PM_USB20_HC_RESETB_SELECTOR] = 276 + USB_CTRL_USB_PM_USB20_HC_RESETB_VAR_MASK, 277 + [USB_CTRL_SETUP_ENDIAN_SELECTOR] = ENDIAN_SETTINGS, 285 278 }, 286 279 /* 7364a0 */ 287 280 [BRCM_FAMILY_7364A0] = { 288 - USB_CTRL_SETUP_SCB1_EN_MASK, 289 - USB_CTRL_SETUP_SCB2_EN_MASK, 290 - USB_CTRL_SETUP_SS_EHCI64BIT_EN_MASK, 291 - 0, /* USB_CTRL_SETUP_STRAP_IPP_SEL_MASK */ 292 - USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK, 293 - USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK, 294 - USB_CTRL_SETUP_OC3_DISABLE_MASK, 295 - USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK, 296 - 0, /* USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK */ 297 - USB_CTRL_USB_PM_XHC_SOFT_RESETB_VAR_MASK, 298 - 0, /* USB_CTRL_USB_PM_USB_PWRDN_MASK */ 299 - 0, /* USB_CTRL_USB30_CTL1_XHC_SOFT_RESETB_MASK */ 300 - 0, /* USB_CTRL_USB30_CTL1_USB3_IOC_MASK */ 301 - 0, /* USB_CTRL_USB30_CTL1_USB3_IPP_MASK */ 302 - 0, /* USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_MASK */ 303 - 0, /* USB_CTRL_USB_PM_SOFT_RESET_MASK */ 304 - 0, /* USB_CTRL_SETUP_CC_DRD_MODE_ENABLE_MASK */ 305 - 0, /* USB_CTRL_SETUP_STRAP_CC_DRD_MODE_ENABLE_SEL_MASK */ 306 - USB_CTRL_USB_PM_USB20_HC_RESETB_MASK, 307 - ENDIAN_SETTINGS, /* USB_CTRL_SETUP ENDIAN bits */ 281 + [USB_CTRL_SETUP_SCB1_EN_SELECTOR] = 282 + USB_CTRL_SETUP_SCB1_EN_MASK, 283 + [USB_CTRL_SETUP_SCB2_EN_SELECTOR] = 284 + USB_CTRL_SETUP_SCB2_EN_MASK, 285 + [USB_CTRL_SETUP_SS_EHCI64BIT_EN_SELECTOR] = 286 + USB_CTRL_SETUP_SS_EHCI64BIT_EN_MASK, 287 + [USB_CTRL_SETUP_OC3_DISABLE_PORT0_SELECTOR] = 288 + USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK, 289 + [USB_CTRL_SETUP_OC3_DISABLE_PORT1_SELECTOR] = 290 + USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK, 291 + [USB_CTRL_SETUP_OC3_DISABLE_SELECTOR] = 292 + USB_CTRL_SETUP_OC3_DISABLE_MASK, 293 + [USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_SELECTOR] = 294 + USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK, 295 + [USB_CTRL_USB_PM_XHC_SOFT_RESETB_SELECTOR] = 296 + USB_CTRL_USB_PM_XHC_SOFT_RESETB_VAR_MASK, 297 + [USB_CTRL_USB_PM_USB20_HC_RESETB_SELECTOR] = 298 + USB_CTRL_USB_PM_USB20_HC_RESETB_MASK, 299 + [USB_CTRL_SETUP_ENDIAN_SELECTOR] = ENDIAN_SETTINGS, 308 300 }, 309 301 /* 7366c0 */ 310 302 [BRCM_FAMILY_7366C0] = { 311 - USB_CTRL_SETUP_SCB1_EN_MASK, 312 - USB_CTRL_SETUP_SCB2_EN_MASK, 313 - USB_CTRL_SETUP_SS_EHCI64BIT_EN_MASK, 314 - 0, /* USB_CTRL_SETUP_STRAP_IPP_SEL_MASK */ 315 - USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK, 316 - USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK, 317 - USB_CTRL_SETUP_OC3_DISABLE_MASK, 318 - 0, /* USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK */ 319 - 0, /* USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK */ 320 - USB_CTRL_USB_PM_XHC_SOFT_RESETB_VAR_MASK, 321 - USB_CTRL_USB_PM_USB_PWRDN_MASK, 322 - 0, /* USB_CTRL_USB30_CTL1_XHC_SOFT_RESETB_MASK */ 323 - 0, /* USB_CTRL_USB30_CTL1_USB3_IOC_MASK */ 324 - 0, /* USB_CTRL_USB30_CTL1_USB3_IPP_MASK */ 325 - 0, /* USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_MASK */ 326 - 0, /* USB_CTRL_USB_PM_SOFT_RESET_MASK */ 327 - 0, /* USB_CTRL_SETUP_CC_DRD_MODE_ENABLE_MASK */ 328 - 0, /* USB_CTRL_SETUP_STRAP_CC_DRD_MODE_ENABLE_SEL_MASK */ 329 - USB_CTRL_USB_PM_USB20_HC_RESETB_MASK, 330 - ENDIAN_SETTINGS, /* USB_CTRL_SETUP ENDIAN bits */ 303 + [USB_CTRL_SETUP_SCB1_EN_SELECTOR] = 304 + USB_CTRL_SETUP_SCB1_EN_MASK, 305 + [USB_CTRL_SETUP_SCB2_EN_SELECTOR] = 306 + USB_CTRL_SETUP_SCB2_EN_MASK, 307 + [USB_CTRL_SETUP_SS_EHCI64BIT_EN_SELECTOR] = 308 + USB_CTRL_SETUP_SS_EHCI64BIT_EN_MASK, 309 + [USB_CTRL_SETUP_OC3_DISABLE_PORT0_SELECTOR] = 310 + USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK, 311 + [USB_CTRL_SETUP_OC3_DISABLE_PORT1_SELECTOR] = 312 + USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK, 313 + [USB_CTRL_SETUP_OC3_DISABLE_SELECTOR] = 314 + USB_CTRL_SETUP_OC3_DISABLE_MASK, 315 + [USB_CTRL_USB_PM_XHC_SOFT_RESETB_SELECTOR] = 316 + USB_CTRL_USB_PM_XHC_SOFT_RESETB_VAR_MASK, 317 + [USB_CTRL_USB_PM_USB_PWRDN_SELECTOR] = 318 + USB_CTRL_USB_PM_USB_PWRDN_MASK, 319 + [USB_CTRL_USB_PM_USB20_HC_RESETB_SELECTOR] = 320 + USB_CTRL_USB_PM_USB20_HC_RESETB_MASK, 321 + [USB_CTRL_SETUP_ENDIAN_SELECTOR] = ENDIAN_SETTINGS, 331 322 }, 332 323 /* 74371A0 */ 333 324 [BRCM_FAMILY_74371A0] = { 334 - USB_CTRL_SETUP_SCB1_EN_MASK, 335 - USB_CTRL_SETUP_SCB2_EN_MASK, 336 - USB_CTRL_SETUP_SS_EHCI64BIT_EN_VAR_MASK, 337 - 0, /* USB_CTRL_SETUP_STRAP_IPP_SEL_MASK */ 338 - 0, /* USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK */ 339 - 0, /* USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK */ 340 - 0, /* USB_CTRL_SETUP_OC3_DISABLE_MASK */ 341 - USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK, 342 - 0, /* USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK */ 343 - 0, /* USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK */ 344 - 0, /* USB_CTRL_USB_PM_USB_PWRDN_MASK */ 345 - USB_CTRL_USB30_CTL1_XHC_SOFT_RESETB_MASK, 346 - USB_CTRL_USB30_CTL1_USB3_IOC_MASK, 347 - USB_CTRL_USB30_CTL1_USB3_IPP_MASK, 348 - 0, /* USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_MASK */ 349 - 0, /* USB_CTRL_USB_PM_SOFT_RESET_MASK */ 350 - 0, /* USB_CTRL_SETUP_CC_DRD_MODE_ENABLE_MASK */ 351 - 0, /* USB_CTRL_SETUP_STRAP_CC_DRD_MODE_ENABLE_SEL_MASK */ 352 - 0, /* USB_CTRL_USB_PM_USB20_HC_RESETB_MASK */ 353 - ENDIAN_SETTINGS, /* USB_CTRL_SETUP ENDIAN bits */ 325 + [USB_CTRL_SETUP_SCB1_EN_SELECTOR] = 326 + USB_CTRL_SETUP_SCB1_EN_MASK, 327 + [USB_CTRL_SETUP_SCB2_EN_SELECTOR] = 328 + USB_CTRL_SETUP_SCB2_EN_MASK, 329 + [USB_CTRL_SETUP_SS_EHCI64BIT_EN_SELECTOR] = 330 + USB_CTRL_SETUP_SS_EHCI64BIT_EN_VAR_MASK, 331 + [USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_SELECTOR] = 332 + USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK, 333 + [USB_CTRL_USB30_CTL1_XHC_SOFT_RESETB_SELECTOR] = 334 + USB_CTRL_USB30_CTL1_XHC_SOFT_RESETB_MASK, 335 + [USB_CTRL_USB30_CTL1_USB3_IOC_SELECTOR] = 336 + USB_CTRL_USB30_CTL1_USB3_IOC_MASK, 337 + [USB_CTRL_USB30_CTL1_USB3_IPP_SELECTOR] = 338 + USB_CTRL_USB30_CTL1_USB3_IPP_MASK, 339 + [USB_CTRL_SETUP_ENDIAN_SELECTOR] = ENDIAN_SETTINGS, 354 340 }, 355 341 /* 7439B0 */ 356 342 [BRCM_FAMILY_7439B0] = { 357 - USB_CTRL_SETUP_SCB1_EN_MASK, 358 - USB_CTRL_SETUP_SCB2_EN_MASK, 359 - USB_CTRL_SETUP_SS_EHCI64BIT_EN_MASK, 360 - USB_CTRL_SETUP_STRAP_IPP_SEL_MASK, 361 - USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK, 362 - USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK, 363 - USB_CTRL_SETUP_OC3_DISABLE_MASK, 364 - 0, /* USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK */ 365 - USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK, 366 - USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK, 367 - USB_CTRL_USB_PM_USB_PWRDN_MASK, 368 - 0, /* USB_CTRL_USB30_CTL1_XHC_SOFT_RESETB_MASK */ 369 - 0, /* USB_CTRL_USB30_CTL1_USB3_IOC_MASK */ 370 - 0, /* USB_CTRL_USB30_CTL1_USB3_IPP_MASK */ 371 - USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_MASK, 372 - 0, /* USB_CTRL_USB_PM_SOFT_RESET_MASK */ 373 - 0, /* USB_CTRL_SETUP_CC_DRD_MODE_ENABLE_MASK */ 374 - 0, /* USB_CTRL_SETUP_STRAP_CC_DRD_MODE_ENABLE_SEL_MASK */ 375 - USB_CTRL_USB_PM_USB20_HC_RESETB_VAR_MASK, 376 - ENDIAN_SETTINGS, /* USB_CTRL_SETUP ENDIAN bits */ 343 + [USB_CTRL_SETUP_SCB1_EN_SELECTOR] = 344 + USB_CTRL_SETUP_SCB1_EN_MASK, 345 + [USB_CTRL_SETUP_SCB2_EN_SELECTOR] = 346 + USB_CTRL_SETUP_SCB2_EN_MASK, 347 + [USB_CTRL_SETUP_SS_EHCI64BIT_EN_SELECTOR] = 348 + USB_CTRL_SETUP_SS_EHCI64BIT_EN_MASK, 349 + [USB_CTRL_SETUP_STRAP_IPP_SEL_SELECTOR] = 350 + USB_CTRL_SETUP_STRAP_IPP_SEL_MASK, 351 + [USB_CTRL_SETUP_OC3_DISABLE_PORT0_SELECTOR] = 352 + USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK, 353 + [USB_CTRL_SETUP_OC3_DISABLE_PORT1_SELECTOR] = 354 + USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK, 355 + [USB_CTRL_SETUP_OC3_DISABLE_SELECTOR] = 356 + USB_CTRL_SETUP_OC3_DISABLE_MASK, 357 + [USB_CTRL_USB_PM_BDC_SOFT_RESETB_SELECTOR] = 358 + USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK, 359 + [USB_CTRL_USB_PM_XHC_SOFT_RESETB_SELECTOR] = 360 + USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK, 361 + [USB_CTRL_USB_PM_USB_PWRDN_SELECTOR] = 362 + USB_CTRL_USB_PM_USB_PWRDN_MASK, 363 + [USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_SELECTOR] = 364 + USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_MASK, 365 + [USB_CTRL_USB_PM_USB20_HC_RESETB_SELECTOR] = 366 + USB_CTRL_USB_PM_USB20_HC_RESETB_VAR_MASK, 367 + [USB_CTRL_SETUP_ENDIAN_SELECTOR] = ENDIAN_SETTINGS, 377 368 }, 378 369 /* 7445d0 */ 379 370 [BRCM_FAMILY_7445D0] = { 380 - USB_CTRL_SETUP_SCB1_EN_MASK, 381 - USB_CTRL_SETUP_SCB2_EN_MASK, 382 - USB_CTRL_SETUP_SS_EHCI64BIT_EN_VAR_MASK, 383 - 0, /* USB_CTRL_SETUP_STRAP_IPP_SEL_MASK */ 384 - USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK, 385 - USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK, 386 - USB_CTRL_SETUP_OC3_DISABLE_MASK, 387 - USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK, 388 - 0, /* USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK */ 389 - 0, /* USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK */ 390 - 0, /* USB_CTRL_USB_PM_USB_PWRDN_MASK */ 391 - USB_CTRL_USB30_CTL1_XHC_SOFT_RESETB_MASK, 392 - 0, /* USB_CTRL_USB30_CTL1_USB3_IOC_MASK */ 393 - 0, /* USB_CTRL_USB30_CTL1_USB3_IPP_MASK */ 394 - 0, /* USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_MASK */ 395 - 0, /* USB_CTRL_USB_PM_SOFT_RESET_MASK */ 396 - 0, /* USB_CTRL_SETUP_CC_DRD_MODE_ENABLE_MASK */ 397 - 0, /* USB_CTRL_SETUP_STRAP_CC_DRD_MODE_ENABLE_SEL_MASK */ 398 - USB_CTRL_USB_PM_USB20_HC_RESETB_VAR_MASK, 399 - ENDIAN_SETTINGS, /* USB_CTRL_SETUP ENDIAN bits */ 371 + [USB_CTRL_SETUP_SCB1_EN_SELECTOR] = 372 + USB_CTRL_SETUP_SCB1_EN_MASK, 373 + [USB_CTRL_SETUP_SCB2_EN_SELECTOR] = 374 + USB_CTRL_SETUP_SCB2_EN_MASK, 375 + [USB_CTRL_SETUP_SS_EHCI64BIT_EN_SELECTOR] = 376 + USB_CTRL_SETUP_SS_EHCI64BIT_EN_VAR_MASK, 377 + [USB_CTRL_SETUP_OC3_DISABLE_PORT0_SELECTOR] = 378 + USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK, 379 + [USB_CTRL_SETUP_OC3_DISABLE_PORT1_SELECTOR] = 380 + USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK, 381 + [USB_CTRL_SETUP_OC3_DISABLE_SELECTOR] = 382 + USB_CTRL_SETUP_OC3_DISABLE_MASK, 383 + [USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_SELECTOR] = 384 + USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK, 385 + [USB_CTRL_USB30_CTL1_XHC_SOFT_RESETB_SELECTOR] = 386 + USB_CTRL_USB30_CTL1_XHC_SOFT_RESETB_MASK, 387 + [USB_CTRL_USB_PM_USB20_HC_RESETB_SELECTOR] = 388 + USB_CTRL_USB_PM_USB20_HC_RESETB_VAR_MASK, 389 + [USB_CTRL_SETUP_ENDIAN_SELECTOR] = ENDIAN_SETTINGS, 400 390 }, 401 391 /* 7260a0 */ 402 392 [BRCM_FAMILY_7260A0] = { 403 - 0, /* USB_CTRL_SETUP_SCB1_EN_MASK */ 404 - 0, /* USB_CTRL_SETUP_SCB2_EN_MASK */ 405 - USB_CTRL_SETUP_SS_EHCI64BIT_EN_MASK, 406 - USB_CTRL_SETUP_STRAP_IPP_SEL_MASK, 407 - USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK, 408 - USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK, 409 - USB_CTRL_SETUP_OC3_DISABLE_MASK, 410 - 0, /* USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK */ 411 - USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK, 412 - USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK, 413 - USB_CTRL_USB_PM_USB_PWRDN_MASK, 414 - 0, /* USB_CTRL_USB30_CTL1_XHC_SOFT_RESETB_MASK */ 415 - 0, /* USB_CTRL_USB30_CTL1_USB3_IOC_MASK */ 416 - 0, /* USB_CTRL_USB30_CTL1_USB3_IPP_MASK */ 417 - USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_MASK, 418 - USB_CTRL_USB_PM_SOFT_RESET_MASK, 419 - USB_CTRL_SETUP_CC_DRD_MODE_ENABLE_MASK, 420 - USB_CTRL_SETUP_STRAP_CC_DRD_MODE_ENABLE_SEL_MASK, 421 - USB_CTRL_USB_PM_USB20_HC_RESETB_VAR_MASK, 422 - ENDIAN_SETTINGS, /* USB_CTRL_SETUP ENDIAN bits */ 393 + [USB_CTRL_SETUP_SS_EHCI64BIT_EN_SELECTOR] = 394 + USB_CTRL_SETUP_SS_EHCI64BIT_EN_MASK, 395 + [USB_CTRL_SETUP_STRAP_IPP_SEL_SELECTOR] = 396 + USB_CTRL_SETUP_STRAP_IPP_SEL_MASK, 397 + [USB_CTRL_SETUP_OC3_DISABLE_PORT0_SELECTOR] = 398 + USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK, 399 + [USB_CTRL_SETUP_OC3_DISABLE_PORT1_SELECTOR] = 400 + USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK, 401 + [USB_CTRL_SETUP_OC3_DISABLE_SELECTOR] = 402 + USB_CTRL_SETUP_OC3_DISABLE_MASK, 403 + [USB_CTRL_USB_PM_BDC_SOFT_RESETB_SELECTOR] = 404 + USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK, 405 + [USB_CTRL_USB_PM_XHC_SOFT_RESETB_SELECTOR] = 406 + USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK, 407 + [USB_CTRL_USB_PM_USB_PWRDN_SELECTOR] = 408 + USB_CTRL_USB_PM_USB_PWRDN_MASK, 409 + [USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_SELECTOR] = 410 + USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_MASK, 411 + [USB_CTRL_USB_PM_SOFT_RESET_SELECTOR] = 412 + USB_CTRL_USB_PM_SOFT_RESET_MASK, 413 + [USB_CTRL_SETUP_CC_DRD_MODE_ENABLE_SELECTOR] = 414 + USB_CTRL_SETUP_CC_DRD_MODE_ENABLE_MASK, 415 + [USB_CTRL_SETUP_STRAP_CC_DRD_MODE_ENABLE_SEL_SELECTOR] = 416 + USB_CTRL_SETUP_STRAP_CC_DRD_MODE_ENABLE_SEL_MASK, 417 + [USB_CTRL_USB_PM_USB20_HC_RESETB_SELECTOR] = 418 + USB_CTRL_USB_PM_USB20_HC_RESETB_VAR_MASK, 419 + [USB_CTRL_SETUP_ENDIAN_SELECTOR] = ENDIAN_SETTINGS, 423 420 }, 424 421 /* 7278a0 */ 425 422 [BRCM_FAMILY_7278A0] = { 426 - 0, /* USB_CTRL_SETUP_SCB1_EN_MASK */ 427 - 0, /* USB_CTRL_SETUP_SCB2_EN_MASK */ 428 - 0, /*USB_CTRL_SETUP_SS_EHCI64BIT_EN_MASK */ 429 - USB_CTRL_SETUP_STRAP_IPP_SEL_MASK, 430 - USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK, 431 - USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK, 432 - USB_CTRL_SETUP_OC3_DISABLE_MASK, 433 - 0, /* USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK */ 434 - USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK, 435 - USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK, 436 - USB_CTRL_USB_PM_USB_PWRDN_MASK, 437 - 0, /* USB_CTRL_USB30_CTL1_XHC_SOFT_RESETB_MASK */ 438 - 0, /* USB_CTRL_USB30_CTL1_USB3_IOC_MASK */ 439 - 0, /* USB_CTRL_USB30_CTL1_USB3_IPP_MASK */ 440 - USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_MASK, 441 - USB_CTRL_USB_PM_SOFT_RESET_MASK, 442 - 0, /* USB_CTRL_SETUP_CC_DRD_MODE_ENABLE_MASK */ 443 - 0, /* USB_CTRL_SETUP_STRAP_CC_DRD_MODE_ENABLE_SEL_MASK */ 444 - 0, /* USB_CTRL_USB_PM_USB20_HC_RESETB_MASK */ 445 - 0, /* USB_CTRL_SETUP ENDIAN bits */ 423 + [USB_CTRL_SETUP_STRAP_IPP_SEL_SELECTOR] = 424 + USB_CTRL_SETUP_STRAP_IPP_SEL_MASK, 425 + [USB_CTRL_SETUP_OC3_DISABLE_PORT0_SELECTOR] = 426 + USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK, 427 + [USB_CTRL_SETUP_OC3_DISABLE_PORT1_SELECTOR] = 428 + USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK, 429 + [USB_CTRL_SETUP_OC3_DISABLE_SELECTOR] = 430 + USB_CTRL_SETUP_OC3_DISABLE_MASK, 431 + [USB_CTRL_USB_PM_BDC_SOFT_RESETB_SELECTOR] = 432 + USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK, 433 + [USB_CTRL_USB_PM_XHC_SOFT_RESETB_SELECTOR] = 434 + USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK, 435 + [USB_CTRL_USB_PM_USB_PWRDN_SELECTOR] = 436 + USB_CTRL_USB_PM_USB_PWRDN_MASK, 437 + [USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_SELECTOR] = 438 + USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_MASK, 439 + [USB_CTRL_USB_PM_SOFT_RESET_SELECTOR] = 440 + USB_CTRL_USB_PM_SOFT_RESET_MASK, 446 441 }, 447 442 }; 448 443
+1 -1
drivers/phy/broadcom/phy-brcm-usb.c
··· 667 667 668 668 static struct platform_driver brcm_usb_driver = { 669 669 .probe = brcm_usb_phy_probe, 670 - .remove_new = brcm_usb_phy_remove, 670 + .remove = brcm_usb_phy_remove, 671 671 .driver = { 672 672 .name = "brcmstb-usb-phy", 673 673 .pm = &brcm_usb_phy_pm_ops,
+1 -1
drivers/phy/cadence/cdns-dphy.c
··· 472 472 473 473 static struct platform_driver cdns_dphy_platform_driver = { 474 474 .probe = cdns_dphy_probe, 475 - .remove_new = cdns_dphy_remove, 475 + .remove = cdns_dphy_remove, 476 476 .driver = { 477 477 .name = "cdns-mipi-dphy", 478 478 .of_match_table = cdns_dphy_of_match,
+1 -1
drivers/phy/cadence/phy-cadence-sierra.c
··· 2731 2731 2732 2732 static struct platform_driver cdns_sierra_driver = { 2733 2733 .probe = cdns_sierra_phy_probe, 2734 - .remove_new = cdns_sierra_phy_remove, 2734 + .remove = cdns_sierra_phy_remove, 2735 2735 .driver = { 2736 2736 .name = "cdns-sierra-phy", 2737 2737 .of_match_table = cdns_sierra_id_table,
+2 -2
drivers/phy/cadence/phy-cadence-torrent.c
··· 5440 5440 5441 5441 static struct platform_driver cdns_torrent_phy_driver = { 5442 5442 .probe = cdns_torrent_phy_probe, 5443 - .remove_new = cdns_torrent_phy_remove, 5444 - .driver = { 5443 + .remove = cdns_torrent_phy_remove, 5444 + .driver = { 5445 5445 .name = "cdns-torrent-phy", 5446 5446 .of_match_table = cdns_torrent_phy_of_match, 5447 5447 .pm = pm_sleep_ptr(&cdns_torrent_phy_pm_ops),
+3 -3
drivers/phy/freescale/phy-fsl-imx8qm-lvds-phy.c
··· 433 433 MODULE_DEVICE_TABLE(of, mixel_lvds_phy_of_match); 434 434 435 435 static struct platform_driver mixel_lvds_phy_driver = { 436 - .probe = mixel_lvds_phy_probe, 437 - .remove_new = mixel_lvds_phy_remove, 436 + .probe = mixel_lvds_phy_probe, 437 + .remove = mixel_lvds_phy_remove, 438 438 .driver = { 439 439 .pm = &mixel_lvds_phy_pm_ops, 440 440 .name = "mixel-lvds-phy", 441 - .of_match_table = mixel_lvds_phy_of_match, 441 + .of_match_table = mixel_lvds_phy_of_match, 442 442 } 443 443 }; 444 444 module_platform_driver(mixel_lvds_phy_driver);
+3 -3
drivers/phy/freescale/phy-fsl-lynx-28g.c
··· 631 631 MODULE_DEVICE_TABLE(of, lynx_28g_of_match_table); 632 632 633 633 static struct platform_driver lynx_28g_driver = { 634 - .probe = lynx_28g_probe, 635 - .remove_new = lynx_28g_remove, 636 - .driver = { 634 + .probe = lynx_28g_probe, 635 + .remove = lynx_28g_remove, 636 + .driver = { 637 637 .name = "lynx-28g", 638 638 .of_match_table = lynx_28g_of_match_table, 639 639 },
+322 -276
drivers/phy/freescale/phy-fsl-samsung-hdmi.c
··· 14 14 #include <linux/platform_device.h> 15 15 #include <linux/pm_runtime.h> 16 16 17 - #define PHY_REG_00 0x00 18 - #define PHY_REG_01 0x04 19 - #define PHY_REG_02 0x08 20 - #define PHY_REG_08 0x20 21 - #define PHY_REG_09 0x24 22 - #define PHY_REG_10 0x28 23 - #define PHY_REG_11 0x2c 17 + #define PHY_REG(reg) (reg * 4) 24 18 25 - #define PHY_REG_12 0x30 26 - #define REG12_CK_DIV_MASK GENMASK(5, 4) 19 + #define REG01_PMS_P_MASK GENMASK(3, 0) 20 + #define REG03_PMS_S_MASK GENMASK(7, 4) 21 + #define REG12_CK_DIV_MASK GENMASK(5, 4) 27 22 28 - #define PHY_REG_13 0x34 29 - #define REG13_TG_CODE_LOW_MASK GENMASK(7, 0) 23 + #define REG13_TG_CODE_LOW_MASK GENMASK(7, 0) 30 24 31 - #define PHY_REG_14 0x38 32 - #define REG14_TOL_MASK GENMASK(7, 4) 33 - #define REG14_RP_CODE_MASK GENMASK(3, 1) 34 - #define REG14_TG_CODE_HIGH_MASK GENMASK(0, 0) 25 + #define REG14_TOL_MASK GENMASK(7, 4) 26 + #define REG14_RP_CODE_MASK GENMASK(3, 1) 27 + #define REG14_TG_CODE_HIGH_MASK GENMASK(0, 0) 35 28 36 - #define PHY_REG_15 0x3c 37 - #define PHY_REG_16 0x40 38 - #define PHY_REG_17 0x44 39 - #define PHY_REG_18 0x48 40 - #define PHY_REG_19 0x4c 41 - #define PHY_REG_20 0x50 42 - 43 - #define PHY_REG_21 0x54 44 - #define REG21_SEL_TX_CK_INV BIT(7) 45 - #define REG21_PMS_S_MASK GENMASK(3, 0) 46 - 47 - #define PHY_REG_22 0x58 48 - #define PHY_REG_23 0x5c 49 - #define PHY_REG_24 0x60 50 - #define PHY_REG_25 0x64 51 - #define PHY_REG_26 0x68 52 - #define PHY_REG_27 0x6c 53 - #define PHY_REG_28 0x70 54 - #define PHY_REG_29 0x74 55 - #define PHY_REG_30 0x78 56 - #define PHY_REG_31 0x7c 57 - #define PHY_REG_32 0x80 58 - 29 + #define REG21_SEL_TX_CK_INV BIT(7) 30 + #define REG21_PMS_S_MASK GENMASK(3, 0) 59 31 /* 60 32 * REG33 does not match the ref manual. According to Sandor Yu from NXP, 61 33 * "There is a doc issue on the i.MX8MP latest RM" 62 34 * REG33 is being used per guidance from Sandor 63 35 */ 36 + #define REG33_MODE_SET_DONE BIT(7) 37 + #define REG33_FIX_DA BIT(1) 64 38 65 - #define PHY_REG_33 0x84 66 - #define REG33_MODE_SET_DONE BIT(7) 67 - #define REG33_FIX_DA BIT(1) 39 + #define REG34_PHY_READY BIT(7) 40 + #define REG34_PLL_LOCK BIT(6) 41 + #define REG34_PHY_CLK_READY BIT(5) 68 42 69 - #define PHY_REG_34 0x88 70 - #define REG34_PHY_READY BIT(7) 71 - #define REG34_PLL_LOCK BIT(6) 72 - #define REG34_PHY_CLK_READY BIT(5) 43 + #ifndef MHZ 44 + #define MHZ (1000UL * 1000UL) 45 + #endif 73 46 74 - #define PHY_REG_35 0x8c 75 - #define PHY_REG_36 0x90 76 - #define PHY_REG_37 0x94 77 - #define PHY_REG_38 0x98 78 - #define PHY_REG_39 0x9c 79 - #define PHY_REG_40 0xa0 80 - #define PHY_REG_41 0xa4 81 - #define PHY_REG_42 0xa8 82 - #define PHY_REG_43 0xac 83 - #define PHY_REG_44 0xb0 84 - #define PHY_REG_45 0xb4 85 - #define PHY_REG_46 0xb8 86 - #define PHY_REG_47 0xbc 87 - 88 - #define PHY_PLL_DIV_REGS_NUM 6 47 + #define PHY_PLL_DIV_REGS_NUM 7 89 48 90 49 struct phy_config { 91 50 u32 pixclk; 92 51 u8 pll_div_regs[PHY_PLL_DIV_REGS_NUM]; 93 52 }; 94 53 54 + /* 55 + * The calculated_phy_pll_cfg only handles integer divider for PMS, 56 + * meaning the last four entries will be fixed, but the first three will 57 + * be calculated by the PMS calculator. 58 + */ 59 + static struct phy_config calculated_phy_pll_cfg = { 60 + .pixclk = 0, 61 + .pll_div_regs = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00 }, 62 + }; 63 + 64 + /* The lookup table contains values for which the fractional divder is used */ 95 65 static const struct phy_config phy_pll_cfg[] = { 96 66 { 97 67 .pixclk = 22250000, 98 - .pll_div_regs = { 0x4b, 0xf1, 0x89, 0x88, 0x80, 0x40 }, 68 + .pll_div_regs = { 0xd1, 0x4b, 0xf1, 0x89, 0x88, 0x80, 0x40 }, 99 69 }, { 100 70 .pixclk = 23750000, 101 - .pll_div_regs = { 0x50, 0xf1, 0x86, 0x85, 0x80, 0x40 }, 102 - }, { 103 - .pixclk = 24000000, 104 - .pll_div_regs = { 0x50, 0xf0, 0x00, 0x00, 0x80, 0x00 }, 71 + .pll_div_regs = { 0xd1, 0x50, 0xf1, 0x86, 0x85, 0x80, 0x40 }, 105 72 }, { 106 73 .pixclk = 24024000, 107 - .pll_div_regs = { 0x50, 0xf1, 0x99, 0x02, 0x80, 0x40 }, 74 + .pll_div_regs = { 0xd1, 0x50, 0xf1, 0x99, 0x02, 0x80, 0x40 }, 108 75 }, { 109 76 .pixclk = 25175000, 110 - .pll_div_regs = { 0x54, 0xfc, 0xcc, 0x91, 0x80, 0x40 }, 111 - }, { 112 - .pixclk = 25200000, 113 - .pll_div_regs = { 0x54, 0xf0, 0x00, 0x00, 0x80, 0x00 }, 114 - }, { 77 + .pll_div_regs = { 0xd1, 0x54, 0xfc, 0xcc, 0x91, 0x80, 0x40 }, 78 + }, { 115 79 .pixclk = 26750000, 116 - .pll_div_regs = { 0x5a, 0xf2, 0x89, 0x88, 0x80, 0x40 }, 117 - }, { 118 - .pixclk = 27000000, 119 - .pll_div_regs = { 0x5a, 0xf0, 0x00, 0x00, 0x80, 0x00 }, 120 - }, { 80 + .pll_div_regs = { 0xd1, 0x5a, 0xf2, 0x89, 0x88, 0x80, 0x40 }, 81 + }, { 121 82 .pixclk = 27027000, 122 - .pll_div_regs = { 0x5a, 0xf2, 0xfd, 0x0c, 0x80, 0x40 }, 83 + .pll_div_regs = { 0xd1, 0x5a, 0xf2, 0xfd, 0x0c, 0x80, 0x40 }, 123 84 }, { 124 85 .pixclk = 29500000, 125 - .pll_div_regs = { 0x62, 0xf4, 0x95, 0x08, 0x80, 0x40 }, 86 + .pll_div_regs = { 0xd1, 0x62, 0xf4, 0x95, 0x08, 0x80, 0x40 }, 126 87 }, { 127 88 .pixclk = 30750000, 128 - .pll_div_regs = { 0x66, 0xf4, 0x82, 0x01, 0x88, 0x45 }, 89 + .pll_div_regs = { 0xd1, 0x66, 0xf4, 0x82, 0x01, 0x88, 0x45 }, 129 90 }, { 130 91 .pixclk = 30888000, 131 - .pll_div_regs = { 0x66, 0xf4, 0x99, 0x18, 0x88, 0x45 }, 92 + .pll_div_regs = { 0xd1, 0x66, 0xf4, 0x99, 0x18, 0x88, 0x45 }, 132 93 }, { 133 94 .pixclk = 33750000, 134 - .pll_div_regs = { 0x70, 0xf4, 0x82, 0x01, 0x80, 0x40 }, 95 + .pll_div_regs = { 0xd1, 0x70, 0xf4, 0x82, 0x01, 0x80, 0x40 }, 135 96 }, { 136 97 .pixclk = 35000000, 137 - .pll_div_regs = { 0x58, 0xb8, 0x8b, 0x88, 0x80, 0x40 }, 138 - }, { 139 - .pixclk = 36000000, 140 - .pll_div_regs = { 0x5a, 0xb0, 0x00, 0x00, 0x80, 0x00 }, 141 - }, { 98 + .pll_div_regs = { 0xd1, 0x58, 0xb8, 0x8b, 0x88, 0x80, 0x40 }, 99 + }, { 142 100 .pixclk = 36036000, 143 - .pll_div_regs = { 0x5a, 0xb2, 0xfd, 0x0c, 0x80, 0x40 }, 144 - }, { 145 - .pixclk = 40000000, 146 - .pll_div_regs = { 0x64, 0xb0, 0x00, 0x00, 0x80, 0x00 }, 147 - }, { 148 - .pixclk = 43200000, 149 - .pll_div_regs = { 0x5a, 0x90, 0x00, 0x00, 0x80, 0x00 }, 101 + .pll_div_regs = { 0xd1, 0x5a, 0xb2, 0xfd, 0x0c, 0x80, 0x40 }, 150 102 }, { 151 103 .pixclk = 43243200, 152 - .pll_div_regs = { 0x5a, 0x92, 0xfd, 0x0c, 0x80, 0x40 }, 104 + .pll_div_regs = { 0xd1, 0x5a, 0x92, 0xfd, 0x0c, 0x80, 0x40 }, 153 105 }, { 154 106 .pixclk = 44500000, 155 - .pll_div_regs = { 0x5c, 0x92, 0x98, 0x11, 0x84, 0x41 }, 107 + .pll_div_regs = { 0xd1, 0x5c, 0x92, 0x98, 0x11, 0x84, 0x41 }, 156 108 }, { 157 109 .pixclk = 47000000, 158 - .pll_div_regs = { 0x62, 0x94, 0x95, 0x82, 0x80, 0x40 }, 110 + .pll_div_regs = { 0xd1, 0x62, 0x94, 0x95, 0x82, 0x80, 0x40 }, 159 111 }, { 160 112 .pixclk = 47500000, 161 - .pll_div_regs = { 0x63, 0x96, 0xa1, 0x82, 0x80, 0x40 }, 113 + .pll_div_regs = { 0xd1, 0x63, 0x96, 0xa1, 0x82, 0x80, 0x40 }, 162 114 }, { 163 115 .pixclk = 50349650, 164 - .pll_div_regs = { 0x54, 0x7c, 0xc3, 0x8f, 0x80, 0x40 }, 165 - }, { 166 - .pixclk = 50400000, 167 - .pll_div_regs = { 0x54, 0x70, 0x00, 0x00, 0x80, 0x00 }, 116 + .pll_div_regs = { 0xd1, 0x54, 0x7c, 0xc3, 0x8f, 0x80, 0x40 }, 168 117 }, { 169 118 .pixclk = 53250000, 170 - .pll_div_regs = { 0x58, 0x72, 0x84, 0x03, 0x82, 0x41 }, 119 + .pll_div_regs = { 0xd1, 0x58, 0x72, 0x84, 0x03, 0x82, 0x41 }, 171 120 }, { 172 121 .pixclk = 53500000, 173 - .pll_div_regs = { 0x5a, 0x72, 0x89, 0x88, 0x80, 0x40 }, 174 - }, { 175 - .pixclk = 54000000, 176 - .pll_div_regs = { 0x5a, 0x70, 0x00, 0x00, 0x80, 0x00 }, 177 - }, { 122 + .pll_div_regs = { 0xd1, 0x5a, 0x72, 0x89, 0x88, 0x80, 0x40 }, 123 + }, { 178 124 .pixclk = 54054000, 179 - .pll_div_regs = { 0x5a, 0x72, 0xfd, 0x0c, 0x80, 0x40 }, 125 + .pll_div_regs = { 0xd1, 0x5a, 0x72, 0xfd, 0x0c, 0x80, 0x40 }, 180 126 }, { 181 127 .pixclk = 59000000, 182 - .pll_div_regs = { 0x62, 0x74, 0x95, 0x08, 0x80, 0x40 }, 128 + .pll_div_regs = { 0xd1, 0x62, 0x74, 0x95, 0x08, 0x80, 0x40 }, 183 129 }, { 184 130 .pixclk = 59340659, 185 - .pll_div_regs = { 0x62, 0x74, 0xdb, 0x52, 0x88, 0x47 }, 186 - }, { 187 - .pixclk = 59400000, 188 - .pll_div_regs = { 0x63, 0x70, 0x00, 0x00, 0x80, 0x00 }, 189 - }, { 131 + .pll_div_regs = { 0xd1, 0x62, 0x74, 0xdb, 0x52, 0x88, 0x47 }, 132 + }, { 190 133 .pixclk = 61500000, 191 - .pll_div_regs = { 0x66, 0x74, 0x82, 0x01, 0x88, 0x45 }, 134 + .pll_div_regs = { 0xd1, 0x66, 0x74, 0x82, 0x01, 0x88, 0x45 }, 192 135 }, { 193 136 .pixclk = 63500000, 194 - .pll_div_regs = { 0x69, 0x74, 0x89, 0x08, 0x80, 0x40 }, 137 + .pll_div_regs = { 0xd1, 0x69, 0x74, 0x89, 0x08, 0x80, 0x40 }, 195 138 }, { 196 139 .pixclk = 67500000, 197 - .pll_div_regs = { 0x54, 0x52, 0x87, 0x03, 0x80, 0x40 }, 140 + .pll_div_regs = { 0xd1, 0x54, 0x52, 0x87, 0x03, 0x80, 0x40 }, 198 141 }, { 199 142 .pixclk = 70000000, 200 - .pll_div_regs = { 0x58, 0x58, 0x8b, 0x88, 0x80, 0x40 }, 201 - }, { 202 - .pixclk = 72000000, 203 - .pll_div_regs = { 0x5a, 0x50, 0x00, 0x00, 0x80, 0x00 }, 204 - }, { 143 + .pll_div_regs = { 0xd1, 0x58, 0x58, 0x8b, 0x88, 0x80, 0x40 }, 144 + }, { 205 145 .pixclk = 72072000, 206 - .pll_div_regs = { 0x5a, 0x52, 0xfd, 0x0c, 0x80, 0x40 }, 146 + .pll_div_regs = { 0xd1, 0x5a, 0x52, 0xfd, 0x0c, 0x80, 0x40 }, 207 147 }, { 208 148 .pixclk = 74176000, 209 - .pll_div_regs = { 0x5d, 0x58, 0xdb, 0xA2, 0x88, 0x41 }, 149 + .pll_div_regs = { 0xd1, 0x5d, 0x58, 0xdb, 0xA2, 0x88, 0x41 }, 210 150 }, { 211 151 .pixclk = 74250000, 212 - .pll_div_regs = { 0x5c, 0x52, 0x90, 0x0d, 0x84, 0x41 }, 152 + .pll_div_regs = { 0xd1, 0x5c, 0x52, 0x90, 0x0d, 0x84, 0x41 }, 213 153 }, { 214 154 .pixclk = 78500000, 215 - .pll_div_regs = { 0x62, 0x54, 0x87, 0x01, 0x80, 0x40 }, 216 - }, { 217 - .pixclk = 80000000, 218 - .pll_div_regs = { 0x64, 0x50, 0x00, 0x00, 0x80, 0x00 }, 219 - }, { 155 + .pll_div_regs = { 0xd1, 0x62, 0x54, 0x87, 0x01, 0x80, 0x40 }, 156 + }, { 220 157 .pixclk = 82000000, 221 - .pll_div_regs = { 0x66, 0x54, 0x82, 0x01, 0x88, 0x45 }, 158 + .pll_div_regs = { 0xd1, 0x66, 0x54, 0x82, 0x01, 0x88, 0x45 }, 222 159 }, { 223 160 .pixclk = 82500000, 224 - .pll_div_regs = { 0x67, 0x54, 0x88, 0x01, 0x90, 0x49 }, 161 + .pll_div_regs = { 0xd1, 0x67, 0x54, 0x88, 0x01, 0x90, 0x49 }, 225 162 }, { 226 163 .pixclk = 89000000, 227 - .pll_div_regs = { 0x70, 0x54, 0x84, 0x83, 0x80, 0x40 }, 164 + .pll_div_regs = { 0xd1, 0x70, 0x54, 0x84, 0x83, 0x80, 0x40 }, 228 165 }, { 229 166 .pixclk = 90000000, 230 - .pll_div_regs = { 0x70, 0x54, 0x82, 0x01, 0x80, 0x40 }, 167 + .pll_div_regs = { 0xd1, 0x70, 0x54, 0x82, 0x01, 0x80, 0x40 }, 231 168 }, { 232 169 .pixclk = 94000000, 233 - .pll_div_regs = { 0x4e, 0x32, 0xa7, 0x10, 0x80, 0x40 }, 170 + .pll_div_regs = { 0xd1, 0x4e, 0x32, 0xa7, 0x10, 0x80, 0x40 }, 234 171 }, { 235 172 .pixclk = 95000000, 236 - .pll_div_regs = { 0x50, 0x31, 0x86, 0x85, 0x80, 0x40 }, 173 + .pll_div_regs = { 0xd1, 0x50, 0x31, 0x86, 0x85, 0x80, 0x40 }, 237 174 }, { 238 175 .pixclk = 98901099, 239 - .pll_div_regs = { 0x52, 0x3a, 0xdb, 0x4c, 0x88, 0x47 }, 176 + .pll_div_regs = { 0xd1, 0x52, 0x3a, 0xdb, 0x4c, 0x88, 0x47 }, 240 177 }, { 241 178 .pixclk = 99000000, 242 - .pll_div_regs = { 0x52, 0x32, 0x82, 0x01, 0x88, 0x47 }, 179 + .pll_div_regs = { 0xd1, 0x52, 0x32, 0x82, 0x01, 0x88, 0x47 }, 243 180 }, { 244 181 .pixclk = 100699300, 245 - .pll_div_regs = { 0x54, 0x3c, 0xc3, 0x8f, 0x80, 0x40 }, 246 - }, { 247 - .pixclk = 100800000, 248 - .pll_div_regs = { 0x54, 0x30, 0x00, 0x00, 0x80, 0x00 }, 249 - }, { 182 + .pll_div_regs = { 0xd1, 0x54, 0x3c, 0xc3, 0x8f, 0x80, 0x40 }, 183 + }, { 250 184 .pixclk = 102500000, 251 - .pll_div_regs = { 0x55, 0x32, 0x8c, 0x05, 0x90, 0x4b }, 185 + .pll_div_regs = { 0xd1, 0x55, 0x32, 0x8c, 0x05, 0x90, 0x4b }, 252 186 }, { 253 187 .pixclk = 104750000, 254 - .pll_div_regs = { 0x57, 0x32, 0x98, 0x07, 0x90, 0x49 }, 188 + .pll_div_regs = { 0xd1, 0x57, 0x32, 0x98, 0x07, 0x90, 0x49 }, 255 189 }, { 256 190 .pixclk = 106500000, 257 - .pll_div_regs = { 0x58, 0x32, 0x84, 0x03, 0x82, 0x41 }, 191 + .pll_div_regs = { 0xd1, 0x58, 0x32, 0x84, 0x03, 0x82, 0x41 }, 258 192 }, { 259 193 .pixclk = 107000000, 260 - .pll_div_regs = { 0x5a, 0x32, 0x89, 0x88, 0x80, 0x40 }, 261 - }, { 262 - .pixclk = 108000000, 263 - .pll_div_regs = { 0x5a, 0x30, 0x00, 0x00, 0x80, 0x00 }, 264 - }, { 194 + .pll_div_regs = { 0xd1, 0x5a, 0x32, 0x89, 0x88, 0x80, 0x40 }, 195 + }, { 265 196 .pixclk = 108108000, 266 - .pll_div_regs = { 0x5a, 0x32, 0xfd, 0x0c, 0x80, 0x40 }, 197 + .pll_div_regs = { 0xd1, 0x5a, 0x32, 0xfd, 0x0c, 0x80, 0x40 }, 267 198 }, { 268 199 .pixclk = 118000000, 269 - .pll_div_regs = { 0x62, 0x34, 0x95, 0x08, 0x80, 0x40 }, 270 - }, { 271 - .pixclk = 118800000, 272 - .pll_div_regs = { 0x63, 0x30, 0x00, 0x00, 0x80, 0x00 }, 273 - }, { 200 + .pll_div_regs = { 0xd1, 0x62, 0x34, 0x95, 0x08, 0x80, 0x40 }, 201 + }, { 274 202 .pixclk = 123000000, 275 - .pll_div_regs = { 0x66, 0x34, 0x82, 0x01, 0x88, 0x45 }, 203 + .pll_div_regs = { 0xd1, 0x66, 0x34, 0x82, 0x01, 0x88, 0x45 }, 276 204 }, { 277 205 .pixclk = 127000000, 278 - .pll_div_regs = { 0x69, 0x34, 0x89, 0x08, 0x80, 0x40 }, 206 + .pll_div_regs = { 0xd1, 0x69, 0x34, 0x89, 0x08, 0x80, 0x40 }, 279 207 }, { 280 208 .pixclk = 135000000, 281 - .pll_div_regs = { 0x70, 0x34, 0x82, 0x01, 0x80, 0x40 }, 209 + .pll_div_regs = { 0xd1, 0x70, 0x34, 0x82, 0x01, 0x80, 0x40 }, 282 210 }, { 283 211 .pixclk = 135580000, 284 - .pll_div_regs = { 0x71, 0x39, 0xe9, 0x82, 0x9c, 0x5b }, 212 + .pll_div_regs = { 0xd1, 0x71, 0x39, 0xe9, 0x82, 0x9c, 0x5b }, 285 213 }, { 286 214 .pixclk = 137520000, 287 - .pll_div_regs = { 0x72, 0x38, 0x99, 0x10, 0x85, 0x41 }, 215 + .pll_div_regs = { 0xd1, 0x72, 0x38, 0x99, 0x10, 0x85, 0x41 }, 288 216 }, { 289 217 .pixclk = 138750000, 290 - .pll_div_regs = { 0x73, 0x35, 0x88, 0x05, 0x90, 0x4d }, 218 + .pll_div_regs = { 0xd1, 0x73, 0x35, 0x88, 0x05, 0x90, 0x4d }, 291 219 }, { 292 220 .pixclk = 140000000, 293 - .pll_div_regs = { 0x75, 0x36, 0xa7, 0x90, 0x80, 0x40 }, 294 - }, { 295 - .pixclk = 144000000, 296 - .pll_div_regs = { 0x78, 0x30, 0x00, 0x00, 0x80, 0x00 }, 297 - }, { 221 + .pll_div_regs = { 0xd1, 0x75, 0x36, 0xa7, 0x90, 0x80, 0x40 }, 222 + }, { 298 223 .pixclk = 148352000, 299 - .pll_div_regs = { 0x7b, 0x35, 0xdb, 0x39, 0x90, 0x45 }, 224 + .pll_div_regs = { 0xd1, 0x7b, 0x35, 0xdb, 0x39, 0x90, 0x45 }, 300 225 }, { 301 226 .pixclk = 148500000, 302 - .pll_div_regs = { 0x7b, 0x35, 0x84, 0x03, 0x90, 0x45 }, 227 + .pll_div_regs = { 0xd1, 0x7b, 0x35, 0x84, 0x03, 0x90, 0x45 }, 303 228 }, { 304 229 .pixclk = 154000000, 305 - .pll_div_regs = { 0x40, 0x18, 0x83, 0x01, 0x00, 0x40 }, 230 + .pll_div_regs = { 0xd1, 0x40, 0x18, 0x83, 0x01, 0x00, 0x40 }, 306 231 }, { 307 232 .pixclk = 157000000, 308 - .pll_div_regs = { 0x41, 0x11, 0xa7, 0x14, 0x80, 0x40 }, 233 + .pll_div_regs = { 0xd1, 0x41, 0x11, 0xa7, 0x14, 0x80, 0x40 }, 309 234 }, { 310 235 .pixclk = 160000000, 311 - .pll_div_regs = { 0x42, 0x12, 0xa1, 0x20, 0x80, 0x40 }, 236 + .pll_div_regs = { 0xd1, 0x42, 0x12, 0xa1, 0x20, 0x80, 0x40 }, 312 237 }, { 313 238 .pixclk = 162000000, 314 - .pll_div_regs = { 0x43, 0x18, 0x8b, 0x08, 0x96, 0x55 }, 239 + .pll_div_regs = { 0xd1, 0x43, 0x18, 0x8b, 0x08, 0x96, 0x55 }, 315 240 }, { 316 241 .pixclk = 164000000, 317 - .pll_div_regs = { 0x45, 0x11, 0x83, 0x82, 0x90, 0x4b }, 242 + .pll_div_regs = { 0xd1, 0x45, 0x11, 0x83, 0x82, 0x90, 0x4b }, 318 243 }, { 319 244 .pixclk = 165000000, 320 - .pll_div_regs = { 0x45, 0x11, 0x84, 0x81, 0x90, 0x4b }, 321 - }, { 322 - .pixclk = 180000000, 323 - .pll_div_regs = { 0x4b, 0x10, 0x00, 0x00, 0x80, 0x00 }, 245 + .pll_div_regs = { 0xd1, 0x45, 0x11, 0x84, 0x81, 0x90, 0x4b }, 324 246 }, { 325 247 .pixclk = 185625000, 326 - .pll_div_regs = { 0x4e, 0x12, 0x9a, 0x95, 0x80, 0x40 }, 248 + .pll_div_regs = { 0xd1, 0x4e, 0x12, 0x9a, 0x95, 0x80, 0x40 }, 327 249 }, { 328 250 .pixclk = 188000000, 329 - .pll_div_regs = { 0x4e, 0x12, 0xa7, 0x10, 0x80, 0x40 }, 251 + .pll_div_regs = { 0xd1, 0x4e, 0x12, 0xa7, 0x10, 0x80, 0x40 }, 330 252 }, { 331 253 .pixclk = 198000000, 332 - .pll_div_regs = { 0x52, 0x12, 0x82, 0x01, 0x88, 0x47 }, 254 + .pll_div_regs = { 0xd1, 0x52, 0x12, 0x82, 0x01, 0x88, 0x47 }, 333 255 }, { 334 256 .pixclk = 205000000, 335 - .pll_div_regs = { 0x55, 0x12, 0x8c, 0x05, 0x90, 0x4b }, 257 + .pll_div_regs = { 0xd1, 0x55, 0x12, 0x8c, 0x05, 0x90, 0x4b }, 336 258 }, { 337 259 .pixclk = 209500000, 338 - .pll_div_regs = { 0x57, 0x12, 0x98, 0x07, 0x90, 0x49 }, 260 + .pll_div_regs = { 0xd1, 0x57, 0x12, 0x98, 0x07, 0x90, 0x49 }, 339 261 }, { 340 262 .pixclk = 213000000, 341 - .pll_div_regs = { 0x58, 0x12, 0x84, 0x03, 0x82, 0x41 }, 342 - }, { 343 - .pixclk = 216000000, 344 - .pll_div_regs = { 0x5a, 0x10, 0x00, 0x00, 0x80, 0x00 }, 263 + .pll_div_regs = { 0xd1, 0x58, 0x12, 0x84, 0x03, 0x82, 0x41 }, 345 264 }, { 346 265 .pixclk = 216216000, 347 - .pll_div_regs = { 0x5a, 0x12, 0xfd, 0x0c, 0x80, 0x40 }, 348 - }, { 349 - .pixclk = 237600000, 350 - .pll_div_regs = { 0x63, 0x10, 0x00, 0x00, 0x80, 0x00 }, 351 - }, { 266 + .pll_div_regs = { 0xd1, 0x5a, 0x12, 0xfd, 0x0c, 0x80, 0x40 }, 267 + }, { 352 268 .pixclk = 254000000, 353 - .pll_div_regs = { 0x69, 0x14, 0x89, 0x08, 0x80, 0x40 }, 269 + .pll_div_regs = { 0xd1, 0x69, 0x14, 0x89, 0x08, 0x80, 0x40 }, 354 270 }, { 355 271 .pixclk = 277500000, 356 - .pll_div_regs = { 0x73, 0x15, 0x88, 0x05, 0x90, 0x4d }, 357 - }, { 358 - .pixclk = 288000000, 359 - .pll_div_regs = { 0x78, 0x10, 0x00, 0x00, 0x80, 0x00 }, 360 - }, { 272 + .pll_div_regs = { 0xd1, 0x73, 0x15, 0x88, 0x05, 0x90, 0x4d }, 273 + }, { 361 274 .pixclk = 297000000, 362 - .pll_div_regs = { 0x7b, 0x15, 0x84, 0x03, 0x90, 0x45 }, 275 + .pll_div_regs = { 0xd1, 0x7b, 0x15, 0x84, 0x03, 0x90, 0x45 }, 363 276 }, 364 277 }; 365 278 ··· 282 369 }; 283 370 284 371 static const struct reg_settings common_phy_cfg[] = { 285 - { PHY_REG_00, 0x00 }, { PHY_REG_01, 0xd1 }, 286 - { PHY_REG_08, 0x4f }, { PHY_REG_09, 0x30 }, 287 - { PHY_REG_10, 0x33 }, { PHY_REG_11, 0x65 }, 372 + { PHY_REG(0), 0x00 }, 373 + /* PHY_REG(1-7) pix clk specific */ 374 + { PHY_REG(8), 0x4f }, { PHY_REG(9), 0x30 }, 375 + { PHY_REG(10), 0x33 }, { PHY_REG(11), 0x65 }, 288 376 /* REG12 pixclk specific */ 289 377 /* REG13 pixclk specific */ 290 378 /* REG14 pixclk specific */ 291 - { PHY_REG_15, 0x80 }, { PHY_REG_16, 0x6c }, 292 - { PHY_REG_17, 0xf2 }, { PHY_REG_18, 0x67 }, 293 - { PHY_REG_19, 0x00 }, { PHY_REG_20, 0x10 }, 379 + { PHY_REG(15), 0x80 }, { PHY_REG(16), 0x6c }, 380 + { PHY_REG(17), 0xf2 }, { PHY_REG(18), 0x67 }, 381 + { PHY_REG(19), 0x00 }, { PHY_REG(20), 0x10 }, 294 382 /* REG21 pixclk specific */ 295 - { PHY_REG_22, 0x30 }, { PHY_REG_23, 0x32 }, 296 - { PHY_REG_24, 0x60 }, { PHY_REG_25, 0x8f }, 297 - { PHY_REG_26, 0x00 }, { PHY_REG_27, 0x00 }, 298 - { PHY_REG_28, 0x08 }, { PHY_REG_29, 0x00 }, 299 - { PHY_REG_30, 0x00 }, { PHY_REG_31, 0x00 }, 300 - { PHY_REG_32, 0x00 }, { PHY_REG_33, 0x80 }, 301 - { PHY_REG_34, 0x00 }, { PHY_REG_35, 0x00 }, 302 - { PHY_REG_36, 0x00 }, { PHY_REG_37, 0x00 }, 303 - { PHY_REG_38, 0x00 }, { PHY_REG_39, 0x00 }, 304 - { PHY_REG_40, 0x00 }, { PHY_REG_41, 0xe0 }, 305 - { PHY_REG_42, 0x83 }, { PHY_REG_43, 0x0f }, 306 - { PHY_REG_44, 0x3E }, { PHY_REG_45, 0xf8 }, 307 - { PHY_REG_46, 0x00 }, { PHY_REG_47, 0x00 } 383 + { PHY_REG(22), 0x30 }, { PHY_REG(23), 0x32 }, 384 + { PHY_REG(24), 0x60 }, { PHY_REG(25), 0x8f }, 385 + { PHY_REG(26), 0x00 }, { PHY_REG(27), 0x00 }, 386 + { PHY_REG(28), 0x08 }, { PHY_REG(29), 0x00 }, 387 + { PHY_REG(30), 0x00 }, { PHY_REG(31), 0x00 }, 388 + { PHY_REG(32), 0x00 }, { PHY_REG(33), 0x80 }, 389 + { PHY_REG(34), 0x00 }, { PHY_REG(35), 0x00 }, 390 + { PHY_REG(36), 0x00 }, { PHY_REG(37), 0x00 }, 391 + { PHY_REG(38), 0x00 }, { PHY_REG(39), 0x00 }, 392 + { PHY_REG(40), 0x00 }, { PHY_REG(41), 0xe0 }, 393 + { PHY_REG(42), 0x83 }, { PHY_REG(43), 0x0f }, 394 + { PHY_REG(44), 0x3E }, { PHY_REG(45), 0xf8 }, 395 + { PHY_REG(46), 0x00 }, { PHY_REG(47), 0x00 } 308 396 }; 309 397 310 398 struct fsl_samsung_hdmi_phy { ··· 323 409 to_fsl_samsung_hdmi_phy(struct clk_hw *hw) 324 410 { 325 411 return container_of(hw, struct fsl_samsung_hdmi_phy, hw); 326 - } 327 - 328 - static void 329 - fsl_samsung_hdmi_phy_configure_pixclk(struct fsl_samsung_hdmi_phy *phy, 330 - const struct phy_config *cfg) 331 - { 332 - u8 div = 0x1; 333 - 334 - switch (cfg->pixclk) { 335 - case 22250000 ... 33750000: 336 - div = 0xf; 337 - break; 338 - case 35000000 ... 40000000: 339 - div = 0xb; 340 - break; 341 - case 43200000 ... 47500000: 342 - div = 0x9; 343 - break; 344 - case 50349650 ... 63500000: 345 - div = 0x7; 346 - break; 347 - case 67500000 ... 90000000: 348 - div = 0x5; 349 - break; 350 - case 94000000 ... 148500000: 351 - div = 0x3; 352 - break; 353 - case 154000000 ... 297000000: 354 - div = 0x1; 355 - break; 356 - } 357 - 358 - writeb(REG21_SEL_TX_CK_INV | FIELD_PREP(REG21_PMS_S_MASK, div), 359 - phy->regs + PHY_REG_21); 360 412 } 361 413 362 414 static void ··· 349 469 break; 350 470 } 351 471 352 - writeb(FIELD_PREP(REG12_CK_DIV_MASK, ilog2(div)), phy->regs + PHY_REG_12); 472 + writeb(FIELD_PREP(REG12_CK_DIV_MASK, ilog2(div)), phy->regs + PHY_REG(12)); 353 473 354 474 /* 355 475 * Calculation for the frequency lock detector target code (fld_tg_code) ··· 369 489 370 490 /* FLD_TOL and FLD_RP_CODE taken from downstream driver */ 371 491 writeb(FIELD_PREP(REG13_TG_CODE_LOW_MASK, fld_tg_code), 372 - phy->regs + PHY_REG_13); 492 + phy->regs + PHY_REG(13)); 373 493 writeb(FIELD_PREP(REG14_TOL_MASK, 2) | 374 494 FIELD_PREP(REG14_RP_CODE_MASK, 2) | 375 495 FIELD_PREP(REG14_TG_CODE_HIGH_MASK, fld_tg_code >> 8), 376 - phy->regs + PHY_REG_14); 496 + phy->regs + PHY_REG(14)); 497 + } 498 + 499 + static unsigned long fsl_samsung_hdmi_phy_find_pms(unsigned long fout, u8 *p, u16 *m, u8 *s) 500 + { 501 + unsigned long best_freq = 0; 502 + u32 min_delta = 0xffffffff; 503 + u8 _p, best_p; 504 + u16 _m, best_m; 505 + u8 _s, best_s; 506 + 507 + /* 508 + * Figure 13-78 of the reference manual states the PLL should be TMDS x 5 509 + * while the TMDS_CLKO should be the PLL / 5. So to calculate the PLL, 510 + * take the pix clock x 5, then return the value of the PLL / 5. 511 + */ 512 + fout *= 5; 513 + 514 + /* The ref manual states the values of 'P' range from 1 to 11 */ 515 + for (_p = 1; _p <= 11; ++_p) { 516 + for (_s = 1; _s <= 16; ++_s) { 517 + u64 tmp; 518 + u32 delta; 519 + 520 + /* s must be one or even */ 521 + if (_s > 1 && (_s & 0x01) == 1) 522 + _s++; 523 + 524 + /* _s cannot be 14 per the TRM */ 525 + if (_s == 14) 526 + continue; 527 + 528 + /* 529 + * TODO: Ref Manual doesn't state the range of _m 530 + * so this should be further refined if possible. 531 + * This range was set based on the original values 532 + * in the lookup table 533 + */ 534 + tmp = (u64)fout * (_p * _s); 535 + do_div(tmp, 24 * MHZ); 536 + _m = tmp; 537 + if (_m < 0x30 || _m > 0x7b) 538 + continue; 539 + 540 + /* 541 + * Rev 2 of the Ref Manual states the 542 + * VCO can range between 750MHz and 543 + * 3GHz. The VCO is assumed to be 544 + * Fvco = (M * f_ref) / P, 545 + * where f_ref is 24MHz. 546 + */ 547 + tmp = (u64)_m * 24 * MHZ; 548 + do_div(tmp, _p); 549 + if (tmp < 750 * MHZ || 550 + tmp > 3000 * MHZ) 551 + continue; 552 + 553 + /* Final frequency after post-divider */ 554 + do_div(tmp, _s); 555 + 556 + delta = abs(fout - tmp); 557 + if (delta < min_delta) { 558 + best_p = _p; 559 + best_s = _s; 560 + best_m = _m; 561 + min_delta = delta; 562 + best_freq = tmp; 563 + } 564 + } 565 + } 566 + 567 + if (best_freq) { 568 + *p = best_p; 569 + *m = best_m; 570 + *s = best_s; 571 + } 572 + 573 + return best_freq / 5; 377 574 } 378 575 379 576 static int fsl_samsung_hdmi_phy_configure(struct fsl_samsung_hdmi_phy *phy, ··· 460 503 u8 val; 461 504 462 505 /* HDMI PHY init */ 463 - writeb(REG33_FIX_DA, phy->regs + PHY_REG_33); 506 + writeb(REG33_FIX_DA, phy->regs + PHY_REG(33)); 464 507 465 508 /* common PHY registers */ 466 509 for (i = 0; i < ARRAY_SIZE(common_phy_cfg); i++) 467 510 writeb(common_phy_cfg[i].val, phy->regs + common_phy_cfg[i].reg); 468 511 469 - /* set individual PLL registers PHY_REG2 ... PHY_REG7 */ 512 + /* set individual PLL registers PHY_REG1 ... PHY_REG7 */ 470 513 for (i = 0; i < PHY_PLL_DIV_REGS_NUM; i++) 471 - writeb(cfg->pll_div_regs[i], phy->regs + PHY_REG_02 + i * 4); 514 + writeb(cfg->pll_div_regs[i], phy->regs + PHY_REG(1) + i * 4); 472 515 473 - fsl_samsung_hdmi_phy_configure_pixclk(phy, cfg); 516 + /* High nibble of PHY_REG3 and low nibble of PHY_REG21 both contain 'S' */ 517 + writeb(REG21_SEL_TX_CK_INV | FIELD_PREP(REG21_PMS_S_MASK, 518 + cfg->pll_div_regs[2] >> 4), phy->regs + PHY_REG(21)); 519 + 474 520 fsl_samsung_hdmi_phy_configure_pll_lock_det(phy, cfg); 475 521 476 - writeb(REG33_FIX_DA | REG33_MODE_SET_DONE, phy->regs + PHY_REG_33); 522 + writeb(REG33_FIX_DA | REG33_MODE_SET_DONE, phy->regs + PHY_REG(33)); 477 523 478 - ret = readb_poll_timeout(phy->regs + PHY_REG_34, val, 524 + ret = readb_poll_timeout(phy->regs + PHY_REG(34), val, 479 525 val & REG34_PLL_LOCK, 50, 20000); 480 526 if (ret) 481 527 dev_err(phy->dev, "PLL failed to lock\n"); ··· 497 537 return phy->cur_cfg->pixclk; 498 538 } 499 539 500 - static long phy_clk_round_rate(struct clk_hw *hw, 501 - unsigned long rate, unsigned long *parent_rate) 540 + /* Helper function to lookup the available fractional-divider rate */ 541 + static const struct phy_config *fsl_samsung_hdmi_phy_lookup_rate(unsigned long rate) 502 542 { 503 543 int i; 504 544 545 + /* Search the lookup table */ 505 546 for (i = ARRAY_SIZE(phy_pll_cfg) - 1; i >= 0; i--) 506 547 if (phy_pll_cfg[i].pixclk <= rate) 507 - return phy_pll_cfg[i].pixclk; 548 + break; 508 549 509 - return -EINVAL; 550 + return &phy_pll_cfg[i]; 551 + } 552 + 553 + static void fsl_samsung_hdmi_calculate_phy(struct phy_config *cal_phy, unsigned long rate, 554 + u8 p, u16 m, u8 s) 555 + { 556 + cal_phy->pixclk = rate; 557 + cal_phy->pll_div_regs[0] = FIELD_PREP(REG01_PMS_P_MASK, p); 558 + cal_phy->pll_div_regs[1] = m; 559 + cal_phy->pll_div_regs[2] = FIELD_PREP(REG03_PMS_S_MASK, s-1); 560 + /* pll_div_regs 3-6 are fixed and pre-defined already */ 561 + } 562 + 563 + static u32 fsl_samsung_hdmi_phy_get_closest_rate(unsigned long rate, 564 + u32 int_div_clk, u32 frac_div_clk) 565 + { 566 + /* Calculate the absolute value of the differences and return whichever is closest */ 567 + if (abs((long)rate - (long)int_div_clk) < abs((long)(rate - (long)frac_div_clk))) 568 + return int_div_clk; 569 + 570 + return frac_div_clk; 571 + } 572 + 573 + static long phy_clk_round_rate(struct clk_hw *hw, 574 + unsigned long rate, unsigned long *parent_rate) 575 + { 576 + const struct phy_config *fract_div_phy; 577 + u32 int_div_clk; 578 + u16 m; 579 + u8 p, s; 580 + 581 + /* If the clock is out of range return error instead of searching */ 582 + if (rate > 297000000 || rate < 22250000) 583 + return -EINVAL; 584 + 585 + /* Search the fractional divider lookup table */ 586 + fract_div_phy = fsl_samsung_hdmi_phy_lookup_rate(rate); 587 + 588 + /* If the rate is an exact match, return that value */ 589 + if (rate == fract_div_phy->pixclk) 590 + return fract_div_phy->pixclk; 591 + 592 + /* If the exact match isn't found, calculate the integer divider */ 593 + int_div_clk = fsl_samsung_hdmi_phy_find_pms(rate, &p, &m, &s); 594 + 595 + /* If the int_div_clk rate is an exact match, return that value */ 596 + if (int_div_clk == rate) 597 + return int_div_clk; 598 + 599 + /* If neither rate is an exact match, use the value from the LUT */ 600 + return fract_div_phy->pixclk; 601 + } 602 + 603 + static int phy_use_fract_div(struct fsl_samsung_hdmi_phy *phy, const struct phy_config *fract_div_phy) 604 + { 605 + phy->cur_cfg = fract_div_phy; 606 + dev_dbg(phy->dev, "fsl_samsung_hdmi_phy: using fractional divider rate = %u\n", 607 + phy->cur_cfg->pixclk); 608 + return fsl_samsung_hdmi_phy_configure(phy, phy->cur_cfg); 609 + } 610 + 611 + static int phy_use_integer_div(struct fsl_samsung_hdmi_phy *phy, 612 + const struct phy_config *int_div_clk) 613 + { 614 + phy->cur_cfg = &calculated_phy_pll_cfg; 615 + dev_dbg(phy->dev, "fsl_samsung_hdmi_phy: integer divider rate = %u\n", 616 + phy->cur_cfg->pixclk); 617 + return fsl_samsung_hdmi_phy_configure(phy, phy->cur_cfg); 510 618 } 511 619 512 620 static int phy_clk_set_rate(struct clk_hw *hw, 513 621 unsigned long rate, unsigned long parent_rate) 514 622 { 515 623 struct fsl_samsung_hdmi_phy *phy = to_fsl_samsung_hdmi_phy(hw); 516 - int i; 624 + const struct phy_config *fract_div_phy; 625 + u32 int_div_clk; 626 + u16 m; 627 + u8 p, s; 517 628 518 - for (i = ARRAY_SIZE(phy_pll_cfg) - 1; i >= 0; i--) 519 - if (phy_pll_cfg[i].pixclk <= rate) 520 - break; 629 + /* Search the fractional divider lookup table */ 630 + fract_div_phy = fsl_samsung_hdmi_phy_lookup_rate(rate); 521 631 522 - if (i < 0) 523 - return -EINVAL; 632 + /* If the rate is an exact match, use that value */ 633 + if (fract_div_phy->pixclk == rate) 634 + return phy_use_fract_div(phy, fract_div_phy); 524 635 525 - phy->cur_cfg = &phy_pll_cfg[i]; 636 + /* 637 + * If the rate from the fractional divider is not exact, check the integer divider, 638 + * and use it if that value is an exact match. 639 + */ 640 + int_div_clk = fsl_samsung_hdmi_phy_find_pms(rate, &p, &m, &s); 641 + fsl_samsung_hdmi_calculate_phy(&calculated_phy_pll_cfg, int_div_clk, p, m, s); 642 + if (int_div_clk == rate) 643 + return phy_use_integer_div(phy, &calculated_phy_pll_cfg); 526 644 527 - return fsl_samsung_hdmi_phy_configure(phy, phy->cur_cfg); 645 + /* 646 + * Compare the difference between the integer clock and the fractional clock against 647 + * the desired clock and which whichever is closest. 648 + */ 649 + if (fsl_samsung_hdmi_phy_get_closest_rate(rate, int_div_clk, 650 + fract_div_phy->pixclk) == fract_div_phy->pixclk) 651 + return phy_use_fract_div(phy, fract_div_phy); 652 + else 653 + return phy_use_integer_div(phy, &calculated_phy_pll_cfg); 528 654 } 529 655 530 656 static const struct clk_ops phy_clk_ops = { ··· 749 703 MODULE_DEVICE_TABLE(of, fsl_samsung_hdmi_phy_of_match); 750 704 751 705 static struct platform_driver fsl_samsung_hdmi_phy_driver = { 752 - .probe = fsl_samsung_hdmi_phy_probe, 753 - .remove_new = fsl_samsung_hdmi_phy_remove, 706 + .probe = fsl_samsung_hdmi_phy_probe, 707 + .remove = fsl_samsung_hdmi_phy_remove, 754 708 .driver = { 755 709 .name = "fsl-samsung-hdmi-phy", 756 710 .of_match_table = fsl_samsung_hdmi_phy_of_match,
+1 -1
drivers/phy/intel/phy-intel-lgm-combo.c
··· 605 605 606 606 static struct platform_driver intel_cbphy_driver = { 607 607 .probe = intel_cbphy_probe, 608 - .remove_new = intel_cbphy_remove, 608 + .remove = intel_cbphy_remove, 609 609 .driver = { 610 610 .name = "intel-combo-phy", 611 611 .of_match_table = of_intel_cbphy_match,
+16
drivers/phy/marvell/phy-mvebu-cp110-utmi.c
··· 62 62 #define SQ_AMP_CAL_MASK GENMASK(2, 0) 63 63 #define SQ_AMP_CAL_VAL 1 64 64 #define SQ_AMP_CAL_EN BIT(3) 65 + #define UTMI_DIG_CTRL1_REG 0x20 66 + #define SWAP_DPDM BIT(15) 65 67 #define UTMI_CTRL_STATUS0_REG 0x24 66 68 #define SUSPENDM BIT(22) 67 69 #define TEST_SEL BIT(25) ··· 101 99 * @priv: PHY driver data 102 100 * @id: PHY port ID 103 101 * @dr_mode: PHY connection: USB_DR_MODE_HOST or USB_DR_MODE_PERIPHERAL 102 + * @swap_dx: whether to swap d+/d- signals 104 103 */ 105 104 struct mvebu_cp110_utmi_port { 106 105 struct mvebu_cp110_utmi *priv; 107 106 u32 id; 108 107 enum usb_dr_mode dr_mode; 108 + bool swap_dx; 109 109 }; 110 110 111 111 static void mvebu_cp110_utmi_port_setup(struct mvebu_cp110_utmi_port *port) ··· 163 159 reg &= ~(VDAT_MASK | VSRC_MASK); 164 160 reg |= (VDAT_VAL << VDAT_OFFSET) | (VSRC_VAL << VSRC_OFFSET); 165 161 writel(reg, PORT_REGS(port) + UTMI_CHGDTC_CTRL_REG); 162 + 163 + /* Swap D+/D- */ 164 + reg = readl(PORT_REGS(port) + UTMI_DIG_CTRL1_REG); 165 + reg &= ~(SWAP_DPDM); 166 + if (port->swap_dx) 167 + reg |= SWAP_DPDM; 168 + writel(reg, PORT_REGS(port) + UTMI_DIG_CTRL1_REG); 166 169 } 167 170 168 171 static int mvebu_cp110_utmi_phy_power_off(struct phy *phy) ··· 297 286 struct phy_provider *provider; 298 287 struct device_node *child; 299 288 u32 usb_devices = 0; 289 + u32 swap_dx = 0; 300 290 301 291 utmi = devm_kzalloc(dev, sizeof(*utmi), GFP_KERNEL); 302 292 if (!utmi) ··· 356 344 port->dr_mode = USB_DR_MODE_HOST; 357 345 } 358 346 } 347 + 348 + of_property_for_each_u32(dev->of_node, "swap-dx-lanes", swap_dx) 349 + if (swap_dx == port_id) 350 + port->swap_dx = 1; 359 351 360 352 /* Retrieve PHY capabilities */ 361 353 utmi->ops = &mvebu_cp110_utmi_phy_ops;
+159 -36
drivers/phy/microchip/sparx5_serdes.c
··· 21 21 22 22 #include "sparx5_serdes.h" 23 23 24 - #define SPX5_CMU_MAX 14 25 - 26 24 #define SPX5_SERDES_10G_START 13 27 25 #define SPX5_SERDES_25G_START 25 28 26 #define SPX5_SERDES_6G10G_CNT SPX5_SERDES_25G_START 29 27 28 + #define LAN969X_SERDES_10G_CNT 10 29 + 30 30 /* Optimal power settings from GUC */ 31 31 #define SPX5_SERDES_QUIET_MODE_VAL 0x01ef4e0c 32 32 33 - enum sparx5_10g28cmu_mode { 34 - SPX5_SD10G28_CMU_MAIN = 0, 35 - SPX5_SD10G28_CMU_AUX1 = 1, 36 - SPX5_SD10G28_CMU_AUX2 = 3, 37 - SPX5_SD10G28_CMU_NONE = 4, 38 - SPX5_SD10G28_CMU_MAX, 33 + /* Register target sizes */ 34 + const unsigned int sparx5_serdes_tsize[TSIZE_LAST] = { 35 + [TC_SD10G_LANE] = 12, 36 + [TC_SD_CMU] = 14, 37 + [TC_SD_CMU_CFG] = 14, 38 + [TC_SD_LANE] = 25, 39 39 }; 40 + 41 + const unsigned int lan969x_serdes_tsize[TSIZE_LAST] = { 42 + [TC_SD10G_LANE] = 10, 43 + [TC_SD_CMU] = 6, 44 + [TC_SD_CMU_CFG] = 6, 45 + [TC_SD_LANE] = 10, 46 + }; 47 + 48 + /* Pointer to the register target size table */ 49 + const unsigned int *tsize; 40 50 41 51 enum sparx5_sd25g28_mode_preset_type { 42 52 SPX5_SD25G28_MODE_PRESET_25000, ··· 1105 1095 return sparx5_serdes_cmu_map[mode][sd_index]; 1106 1096 } 1107 1097 1098 + /* Map of 6G/10G serdes mode and index to CMU index. */ 1099 + static const int 1100 + lan969x_serdes_cmu_map[SPX5_SD10G28_CMU_MAX][LAN969X_SERDES_10G_CNT] = { 1101 + [SPX5_SD10G28_CMU_MAIN] = { 2, 2, 2, 2, 2, 1102 + 2, 2, 2, 5, 5 }, 1103 + [SPX5_SD10G28_CMU_AUX1] = { 0, 0, 3, 3, 3, 1104 + 3, 3, 3, 3, 3 }, 1105 + [SPX5_SD10G28_CMU_AUX2] = { 1, 1, 1, 1, 4, 1106 + 4, 4, 4, 4, 4 }, 1107 + [SPX5_SD10G28_CMU_NONE] = { 1, 1, 1, 1, 4, 1108 + 4, 4, 4, 4, 4 }, 1109 + }; 1110 + 1111 + static int lan969x_serdes_cmu_get(enum sparx5_10g28cmu_mode mode, int sd_index) 1112 + { 1113 + return lan969x_serdes_cmu_map[mode][sd_index]; 1114 + } 1115 + 1108 1116 static void sparx5_serdes_cmu_power_off(struct sparx5_serdes_private *priv) 1109 1117 { 1110 1118 void __iomem *cmu_inst, *cmu_cfg_inst; 1111 1119 int i; 1112 1120 1113 1121 /* Power down each CMU */ 1114 - for (i = 0; i < SPX5_CMU_MAX; i++) { 1122 + for (i = 0; i < priv->data->consts.cmu_max; i++) { 1115 1123 cmu_inst = sdx5_inst_get(priv, TARGET_SD_CMU, i); 1116 1124 cmu_cfg_inst = sdx5_inst_get(priv, TARGET_SD_CMU_CFG, i); 1117 1125 ··· 1678 1650 if (params->skip_cmu_cfg) 1679 1651 return 0; 1680 1652 1681 - cmu_idx = sparx5_serdes_cmu_get(params->cmu_sel, lane_index); 1653 + cmu_idx = priv->data->ops.serdes_cmu_get(params->cmu_sel, macro->sidx); 1682 1654 err = sparx5_cmu_cfg(priv, cmu_idx); 1683 1655 if (err) 1684 1656 return err; ··· 2211 2183 { 2212 2184 struct sparx5_serdes_private *priv = macro->priv; 2213 2185 2186 + /* Clock is auto-detected in 100Base-FX mode on lan969x */ 2187 + if (priv->data->type == SPX5_TARGET_LAN969X) 2188 + return 0; 2189 + 2214 2190 if (macro->serdesmode == SPX5_SD_MODE_100FX) { 2215 2191 u32 freq = priv->coreclock == 250000000 ? 2 : 2216 2192 priv->coreclock == 500000000 ? 1 : 0; ··· 2329 2297 { 2330 2298 struct sparx5_serdes_macro *macro = phy_get_drvdata(phy); 2331 2299 2332 - if (macro->sidx < SPX5_SERDES_10G_START && speed > SPEED_5000) 2333 - return -EINVAL; 2334 - if (macro->sidx < SPX5_SERDES_25G_START && speed > SPEED_10000) 2335 - return -EINVAL; 2300 + if (macro->priv->data->type == SPX5_TARGET_SPARX5) { 2301 + if (macro->sidx < SPX5_SERDES_10G_START && speed > SPEED_5000) 2302 + return -EINVAL; 2303 + if (macro->sidx < SPX5_SERDES_25G_START && speed > SPEED_10000) 2304 + return -EINVAL; 2305 + } 2336 2306 if (speed != macro->speed) { 2337 2307 macro->speed = speed; 2338 2308 if (macro->serdesmode != SPX5_SD_MODE_NONE) ··· 2371 2337 if (macro->speed == 0) 2372 2338 return -EINVAL; 2373 2339 2374 - if (macro->sidx < SPX5_SERDES_10G_START && macro->speed > SPEED_5000) 2375 - return -EINVAL; 2376 - if (macro->sidx < SPX5_SERDES_25G_START && macro->speed > SPEED_10000) 2377 - return -EINVAL; 2378 - 2340 + if (macro->priv->data->type == SPX5_TARGET_SPARX5) { 2341 + if (macro->sidx < SPX5_SERDES_10G_START && 2342 + macro->speed > SPEED_5000) 2343 + return -EINVAL; 2344 + if (macro->sidx < SPX5_SERDES_25G_START && 2345 + macro->speed > SPEED_10000) 2346 + return -EINVAL; 2347 + } 2379 2348 switch (submode) { 2380 2349 case PHY_INTERFACE_MODE_1000BASEX: 2381 2350 if (macro->speed != SPEED_100 && /* This is for 100BASE-FX */ ··· 2412 2375 .owner = THIS_MODULE, 2413 2376 }; 2414 2377 2378 + static void sparx5_serdes_type_set(struct sparx5_serdes_macro *macro, int sidx) 2379 + { 2380 + if (sidx < SPX5_SERDES_10G_START) { 2381 + macro->serdestype = SPX5_SDT_6G; 2382 + macro->stpidx = macro->sidx; 2383 + } else if (sidx < SPX5_SERDES_25G_START) { 2384 + macro->serdestype = SPX5_SDT_10G; 2385 + macro->stpidx = macro->sidx - SPX5_SERDES_10G_START; 2386 + } else { 2387 + macro->serdestype = SPX5_SDT_25G; 2388 + macro->stpidx = macro->sidx - SPX5_SERDES_25G_START; 2389 + } 2390 + } 2391 + 2392 + static void lan969x_serdes_type_set(struct sparx5_serdes_macro *macro, int sidx) 2393 + { 2394 + macro->serdestype = SPX5_SDT_10G; 2395 + macro->stpidx = macro->sidx; 2396 + } 2397 + 2415 2398 static int sparx5_phy_create(struct sparx5_serdes_private *priv, 2416 2399 int idx, struct phy **phy) 2417 2400 { ··· 2448 2391 macro->sidx = idx; 2449 2392 macro->priv = priv; 2450 2393 macro->speed = SPEED_UNKNOWN; 2451 - if (idx < SPX5_SERDES_10G_START) { 2452 - macro->serdestype = SPX5_SDT_6G; 2453 - macro->stpidx = macro->sidx; 2454 - } else if (idx < SPX5_SERDES_25G_START) { 2455 - macro->serdestype = SPX5_SDT_10G; 2456 - macro->stpidx = macro->sidx - SPX5_SERDES_10G_START; 2457 - } else { 2458 - macro->serdestype = SPX5_SDT_25G; 2459 - macro->stpidx = macro->sidx - SPX5_SERDES_25G_START; 2460 - } 2394 + 2395 + priv->data->ops.serdes_type_set(macro, idx); 2461 2396 2462 2397 phy_set_drvdata(*phy, macro); 2463 2398 ··· 2556 2507 { TARGET_SD_LANE_25G + 7, 0x5c8000 }, /* 0x610dd0000: sd_lane_25g_32 */ 2557 2508 }; 2558 2509 2510 + static const struct sparx5_serdes_io_resource lan969x_serdes_iomap[] = { 2511 + { TARGET_SD_CMU, 0x0 }, /* 0xe3410000 */ 2512 + { TARGET_SD_CMU + 1, 0x8000 }, /* 0xe3418000 */ 2513 + { TARGET_SD_CMU + 2, 0x10000 }, /* 0xe3420000 */ 2514 + { TARGET_SD_CMU + 3, 0x18000 }, /* 0xe3428000 */ 2515 + { TARGET_SD_CMU + 4, 0x20000 }, /* 0xe3430000 */ 2516 + { TARGET_SD_CMU + 5, 0x28000 }, /* 0xe3438000 */ 2517 + { TARGET_SD_CMU_CFG, 0x30000 }, /* 0xe3440000 */ 2518 + { TARGET_SD_CMU_CFG + 1, 0x38000 }, /* 0xe3448000 */ 2519 + { TARGET_SD_CMU_CFG + 2, 0x40000 }, /* 0xe3450000 */ 2520 + { TARGET_SD_CMU_CFG + 3, 0x48000 }, /* 0xe3458000 */ 2521 + { TARGET_SD_CMU_CFG + 4, 0x50000 }, /* 0xe3460000 */ 2522 + { TARGET_SD_CMU_CFG + 5, 0x58000 }, /* 0xe3468000 */ 2523 + { TARGET_SD10G_LANE, 0x60000 }, /* 0xe3470000 */ 2524 + { TARGET_SD10G_LANE + 1, 0x68000 }, /* 0xe3478000 */ 2525 + { TARGET_SD10G_LANE + 2, 0x70000 }, /* 0xe3480000 */ 2526 + { TARGET_SD10G_LANE + 3, 0x78000 }, /* 0xe3488000 */ 2527 + { TARGET_SD10G_LANE + 4, 0x80000 }, /* 0xe3490000 */ 2528 + { TARGET_SD10G_LANE + 5, 0x88000 }, /* 0xe3498000 */ 2529 + { TARGET_SD10G_LANE + 6, 0x90000 }, /* 0xe34a0000 */ 2530 + { TARGET_SD10G_LANE + 7, 0x98000 }, /* 0xe34a8000 */ 2531 + { TARGET_SD10G_LANE + 8, 0xa0000 }, /* 0xe34b0000 */ 2532 + { TARGET_SD10G_LANE + 9, 0xa8000 }, /* 0xe34b8000 */ 2533 + { TARGET_SD_LANE, 0x100000 }, /* 0xe3510000 */ 2534 + { TARGET_SD_LANE + 1, 0x108000 }, /* 0xe3518000 */ 2535 + { TARGET_SD_LANE + 2, 0x110000 }, /* 0xe3520000 */ 2536 + { TARGET_SD_LANE + 3, 0x118000 }, /* 0xe3528000 */ 2537 + { TARGET_SD_LANE + 4, 0x120000 }, /* 0xe3530000 */ 2538 + { TARGET_SD_LANE + 5, 0x128000 }, /* 0xe3538000 */ 2539 + { TARGET_SD_LANE + 6, 0x130000 }, /* 0xe3540000 */ 2540 + { TARGET_SD_LANE + 7, 0x138000 }, /* 0xe3548000 */ 2541 + { TARGET_SD_LANE + 8, 0x140000 }, /* 0xe3550000 */ 2542 + { TARGET_SD_LANE + 9, 0x148000 }, /* 0xe3558000 */ 2543 + }; 2544 + 2545 + static const struct sparx5_serdes_match_data sparx5_desc = { 2546 + .type = SPX5_TARGET_SPARX5, 2547 + .iomap = sparx5_serdes_iomap, 2548 + .iomap_size = ARRAY_SIZE(sparx5_serdes_iomap), 2549 + .tsize = sparx5_serdes_tsize, 2550 + .consts = { 2551 + .sd_max = 33, 2552 + .cmu_max = 14, 2553 + }, 2554 + .ops = { 2555 + .serdes_type_set = &sparx5_serdes_type_set, 2556 + .serdes_cmu_get = &sparx5_serdes_cmu_get, 2557 + }, 2558 + }; 2559 + 2560 + static const struct sparx5_serdes_match_data lan969x_desc = { 2561 + .type = SPX5_TARGET_LAN969X, 2562 + .iomap = lan969x_serdes_iomap, 2563 + .iomap_size = ARRAY_SIZE(lan969x_serdes_iomap), 2564 + .tsize = lan969x_serdes_tsize, 2565 + .consts = { 2566 + .sd_max = 10, 2567 + .cmu_max = 6, 2568 + }, 2569 + .ops = { 2570 + .serdes_type_set = &lan969x_serdes_type_set, 2571 + .serdes_cmu_get = &lan969x_serdes_cmu_get, 2572 + } 2573 + }; 2574 + 2559 2575 /* Client lookup function, uses serdes index */ 2560 2576 static struct phy *sparx5_serdes_xlate(struct device *dev, 2561 2577 const struct of_phandle_args *args) ··· 2635 2521 sidx = args->args[0]; 2636 2522 2637 2523 /* Check validity: ERR_PTR(-ENODEV) if not valid */ 2638 - for (idx = 0; idx < SPX5_SERDES_MAX; idx++) { 2524 + for (idx = 0; idx < priv->data->consts.sd_max; idx++) { 2639 2525 struct sparx5_serdes_macro *macro = 2640 2526 phy_get_drvdata(priv->phys[idx]); 2641 2527 ··· 2669 2555 platform_set_drvdata(pdev, priv); 2670 2556 priv->dev = &pdev->dev; 2671 2557 2558 + priv->data = device_get_match_data(priv->dev); 2559 + if (!priv->data) 2560 + return -EINVAL; 2561 + 2562 + tsize = priv->data->tsize; 2563 + 2672 2564 /* Get coreclock */ 2673 2565 clk = devm_clk_get(priv->dev, NULL); 2674 2566 if (IS_ERR(clk)) { ··· 2699 2579 iores->name); 2700 2580 return -ENOMEM; 2701 2581 } 2702 - for (idx = 0; idx < ARRAY_SIZE(sparx5_serdes_iomap); idx++) { 2703 - struct sparx5_serdes_io_resource *iomap = &sparx5_serdes_iomap[idx]; 2582 + for (idx = 0; idx < priv->data->iomap_size; idx++) { 2583 + const struct sparx5_serdes_io_resource *iomap = 2584 + &priv->data->iomap[idx]; 2704 2585 2705 2586 priv->regs[iomap->id] = iomem + iomap->offset; 2706 2587 } 2707 - for (idx = 0; idx < SPX5_SERDES_MAX; idx++) { 2588 + for (idx = 0; idx < priv->data->consts.sd_max; idx++) { 2708 2589 err = sparx5_phy_create(priv, idx, &priv->phys[idx]); 2709 2590 if (err) 2710 2591 return err; 2711 2592 } 2712 2593 2713 - /* Power down all CMUs by default */ 2714 - sparx5_serdes_cmu_power_off(priv); 2594 + /* Power down all CMU's by default */ 2595 + if (priv->data->type == SPX5_TARGET_SPARX5) 2596 + sparx5_serdes_cmu_power_off(priv); 2715 2597 2716 2598 provider = devm_of_phy_provider_register(priv->dev, sparx5_serdes_xlate); 2717 2599 ··· 2721 2599 } 2722 2600 2723 2601 static const struct of_device_id sparx5_serdes_match[] = { 2724 - { .compatible = "microchip,sparx5-serdes" }, 2602 + { .compatible = "microchip,sparx5-serdes", .data = &sparx5_desc }, 2603 + { .compatible = "microchip,lan9691-serdes", .data = &lan969x_desc }, 2725 2604 { } 2726 2605 }; 2727 2606 MODULE_DEVICE_TABLE(of, sparx5_serdes_match);
+39 -5
drivers/phy/microchip/sparx5_serdes.h
··· 26 26 SPX5_SD_MODE_SFI, 27 27 }; 28 28 29 - struct sparx5_serdes_private { 30 - struct device *dev; 31 - void __iomem *regs[NUM_TARGETS]; 32 - struct phy *phys[SPX5_SERDES_MAX]; 33 - unsigned long coreclock; 29 + enum sparx5_10g28cmu_mode { 30 + SPX5_SD10G28_CMU_MAIN = 0, 31 + SPX5_SD10G28_CMU_AUX1 = 1, 32 + SPX5_SD10G28_CMU_AUX2 = 3, 33 + SPX5_SD10G28_CMU_NONE = 4, 34 + SPX5_SD10G28_CMU_MAX, 35 + }; 36 + 37 + enum sparx5_target { 38 + SPX5_TARGET_SPARX5, 39 + SPX5_TARGET_LAN969X, 40 + 34 41 }; 35 42 36 43 struct sparx5_serdes_macro { ··· 49 42 phy_interface_t portmode; 50 43 int speed; 51 44 enum phy_media media; 45 + }; 46 + 47 + struct sparx5_serdes_consts { 48 + int sd_max; 49 + int cmu_max; 50 + }; 51 + 52 + struct sparx5_serdes_ops { 53 + void (*serdes_type_set)(struct sparx5_serdes_macro *macro, int sidx); 54 + int (*serdes_cmu_get)(enum sparx5_10g28cmu_mode mode, int sd_index); 55 + }; 56 + 57 + struct sparx5_serdes_match_data { 58 + enum sparx5_target type; 59 + const struct sparx5_serdes_consts consts; 60 + const struct sparx5_serdes_ops ops; 61 + const struct sparx5_serdes_io_resource *iomap; 62 + int iomap_size; 63 + const unsigned int *tsize; 64 + }; 65 + 66 + struct sparx5_serdes_private { 67 + struct device *dev; 68 + void __iomem *regs[NUM_TARGETS]; 69 + struct phy *phys[SPX5_SERDES_MAX]; 70 + unsigned long coreclock; 71 + const struct sparx5_serdes_match_data *data; 52 72 }; 53 73 54 74 /* Read, Write and modify registers content.
+492 -254
drivers/phy/microchip/sparx5_serdes_regs.h
··· 1 1 /* SPDX-License-Identifier: GPL-2.0+ 2 2 * Microchip Sparx5 SerDes driver 3 3 * 4 - * Copyright (c) 2020 Microchip Technology Inc. 4 + * Copyright (c) 2024 Microchip Technology Inc. 5 5 */ 6 6 7 - /* This file is autogenerated by cml-utils 2020-11-16 13:11:27 +0100. 8 - * Commit ID: 13bdf073131d8bf40c54901df6988ae4e9c8f29f 7 + /* This file is autogenerated by cml-utils 2023-04-13 15:02:00 +0200. 8 + * Commit ID: 5ac560288d46048f872ecdb8add53717f1efc0e1 9 9 */ 10 10 11 11 #ifndef _SPARX5_SERDES_REGS_H_ ··· 26 26 NUM_TARGETS = 332 27 27 }; 28 28 29 + enum sparx5_serdes_tsize_enum { 30 + TC_SD10G_LANE, 31 + TC_SD_CMU, 32 + TC_SD_CMU_CFG, 33 + TC_SD_LANE, 34 + TSIZE_LAST, 35 + }; 36 + 37 + /* sparx5_serdes.c */ 38 + extern const unsigned int *tsize; 39 + 40 + #define TSIZE(o) tsize[o] 41 + 29 42 #define __REG(...) __VA_ARGS__ 30 43 31 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_01 */ 32 - #define SD10G_LANE_LANE_01(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 4, 0, 1, 4) 44 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_01 */ 45 + #define SD10G_LANE_LANE_01(t) \ 46 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 4, 0, \ 47 + 1, 4) 33 48 34 49 #define SD10G_LANE_LANE_01_CFG_PMA_TX_CK_BITWIDTH_2_0 GENMASK(2, 0) 35 50 #define SD10G_LANE_LANE_01_CFG_PMA_TX_CK_BITWIDTH_2_0_SET(x)\ ··· 64 49 #define SD10G_LANE_LANE_01_CFG_RXDET_STR_GET(x)\ 65 50 FIELD_GET(SD10G_LANE_LANE_01_CFG_RXDET_STR, x) 66 51 67 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_02 */ 68 - #define SD10G_LANE_LANE_02(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 8, 0, 1, 4) 52 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_02 */ 53 + #define SD10G_LANE_LANE_02(t) \ 54 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 8, 0, \ 55 + 1, 4) 69 56 70 57 #define SD10G_LANE_LANE_02_CFG_EN_ADV BIT(0) 71 58 #define SD10G_LANE_LANE_02_CFG_EN_ADV_SET(x)\ ··· 99 82 #define SD10G_LANE_LANE_02_CFG_TAP_ADV_3_0_GET(x)\ 100 83 FIELD_GET(SD10G_LANE_LANE_02_CFG_TAP_ADV_3_0, x) 101 84 102 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_03 */ 103 - #define SD10G_LANE_LANE_03(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 12, 0, 1, 4) 85 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_03 */ 86 + #define SD10G_LANE_LANE_03(t) \ 87 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 12, 0, \ 88 + 1, 4) 104 89 105 90 #define SD10G_LANE_LANE_03_CFG_TAP_MAIN BIT(0) 106 91 #define SD10G_LANE_LANE_03_CFG_TAP_MAIN_SET(x)\ ··· 110 91 #define SD10G_LANE_LANE_03_CFG_TAP_MAIN_GET(x)\ 111 92 FIELD_GET(SD10G_LANE_LANE_03_CFG_TAP_MAIN, x) 112 93 113 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_04 */ 114 - #define SD10G_LANE_LANE_04(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 16, 0, 1, 4) 94 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_04 */ 95 + #define SD10G_LANE_LANE_04(t) \ 96 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 16, 0, \ 97 + 1, 4) 115 98 116 99 #define SD10G_LANE_LANE_04_CFG_TAP_DLY_4_0 GENMASK(4, 0) 117 100 #define SD10G_LANE_LANE_04_CFG_TAP_DLY_4_0_SET(x)\ ··· 121 100 #define SD10G_LANE_LANE_04_CFG_TAP_DLY_4_0_GET(x)\ 122 101 FIELD_GET(SD10G_LANE_LANE_04_CFG_TAP_DLY_4_0, x) 123 102 124 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_06 */ 125 - #define SD10G_LANE_LANE_06(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 24, 0, 1, 4) 103 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_06 */ 104 + #define SD10G_LANE_LANE_06(t) \ 105 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 24, 0, \ 106 + 1, 4) 126 107 127 108 #define SD10G_LANE_LANE_06_CFG_PD_DRIVER BIT(0) 128 109 #define SD10G_LANE_LANE_06_CFG_PD_DRIVER_SET(x)\ ··· 162 139 #define SD10G_LANE_LANE_06_CFG_EN_PREEMPH_GET(x)\ 163 140 FIELD_GET(SD10G_LANE_LANE_06_CFG_EN_PREEMPH, x) 164 141 165 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_0B */ 166 - #define SD10G_LANE_LANE_0B(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 44, 0, 1, 4) 142 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_0B */ 143 + #define SD10G_LANE_LANE_0B(t) \ 144 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 44, 0, \ 145 + 1, 4) 167 146 168 147 #define SD10G_LANE_LANE_0B_CFG_EQ_RES_3_0 GENMASK(3, 0) 169 148 #define SD10G_LANE_LANE_0B_CFG_EQ_RES_3_0_SET(x)\ ··· 197 172 #define SD10G_LANE_LANE_0B_CFG_RESETB_OSCAL_SQ_GET(x)\ 198 173 FIELD_GET(SD10G_LANE_LANE_0B_CFG_RESETB_OSCAL_SQ, x) 199 174 200 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_0C */ 201 - #define SD10G_LANE_LANE_0C(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 48, 0, 1, 4) 175 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_0C */ 176 + #define SD10G_LANE_LANE_0C(t) \ 177 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 48, 0, \ 178 + 1, 4) 202 179 203 180 #define SD10G_LANE_LANE_0C_CFG_OSCAL_AFE BIT(0) 204 181 #define SD10G_LANE_LANE_0C_CFG_OSCAL_AFE_SET(x)\ ··· 250 223 #define SD10G_LANE_LANE_0C_CFG_RX_PCIE_GEN12_GET(x)\ 251 224 FIELD_GET(SD10G_LANE_LANE_0C_CFG_RX_PCIE_GEN12, x) 252 225 253 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_0D */ 254 - #define SD10G_LANE_LANE_0D(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 52, 0, 1, 4) 226 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_0D */ 227 + #define SD10G_LANE_LANE_0D(t) \ 228 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 52, 0, \ 229 + 1, 4) 255 230 256 231 #define SD10G_LANE_LANE_0D_CFG_CTLE_M_THR_1_0 GENMASK(1, 0) 257 232 #define SD10G_LANE_LANE_0D_CFG_CTLE_M_THR_1_0_SET(x)\ ··· 267 238 #define SD10G_LANE_LANE_0D_CFG_EQR_BYP_GET(x)\ 268 239 FIELD_GET(SD10G_LANE_LANE_0D_CFG_EQR_BYP, x) 269 240 270 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_0E */ 271 - #define SD10G_LANE_LANE_0E(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 56, 0, 1, 4) 241 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_0E */ 242 + #define SD10G_LANE_LANE_0E(t) \ 243 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 56, 0, \ 244 + 1, 4) 272 245 273 246 #define SD10G_LANE_LANE_0E_CFG_EQC_FORCE_3_0 GENMASK(3, 0) 274 247 #define SD10G_LANE_LANE_0E_CFG_EQC_FORCE_3_0_SET(x)\ ··· 296 265 #define SD10G_LANE_LANE_0E_CFG_SUM_SETCM_EN_GET(x)\ 297 266 FIELD_GET(SD10G_LANE_LANE_0E_CFG_SUM_SETCM_EN, x) 298 267 299 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_0F */ 300 - #define SD10G_LANE_LANE_0F(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 60, 0, 1, 4) 268 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_0F */ 269 + #define SD10G_LANE_LANE_0F(t) \ 270 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 60, 0, \ 271 + 1, 4) 301 272 302 273 #define SD10G_LANE_LANE_0F_R_CDR_M_GEN1_7_0 GENMASK(7, 0) 303 274 #define SD10G_LANE_LANE_0F_R_CDR_M_GEN1_7_0_SET(x)\ ··· 307 274 #define SD10G_LANE_LANE_0F_R_CDR_M_GEN1_7_0_GET(x)\ 308 275 FIELD_GET(SD10G_LANE_LANE_0F_R_CDR_M_GEN1_7_0, x) 309 276 310 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_13 */ 311 - #define SD10G_LANE_LANE_13(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 76, 0, 1, 4) 277 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_13 */ 278 + #define SD10G_LANE_LANE_13(t) \ 279 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 76, 0, \ 280 + 1, 4) 312 281 313 282 #define SD10G_LANE_LANE_13_CFG_DCDR_PD BIT(0) 314 283 #define SD10G_LANE_LANE_13_CFG_DCDR_PD_SET(x)\ ··· 330 295 #define SD10G_LANE_LANE_13_CFG_CDRCK_EN_GET(x)\ 331 296 FIELD_GET(SD10G_LANE_LANE_13_CFG_CDRCK_EN, x) 332 297 333 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_14 */ 334 - #define SD10G_LANE_LANE_14(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 80, 0, 1, 4) 298 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_14 */ 299 + #define SD10G_LANE_LANE_14(t) \ 300 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 80, 0, \ 301 + 1, 4) 335 302 336 303 #define SD10G_LANE_LANE_14_CFG_PI_EXT_DAC_7_0 GENMASK(7, 0) 337 304 #define SD10G_LANE_LANE_14_CFG_PI_EXT_DAC_7_0_SET(x)\ ··· 341 304 #define SD10G_LANE_LANE_14_CFG_PI_EXT_DAC_7_0_GET(x)\ 342 305 FIELD_GET(SD10G_LANE_LANE_14_CFG_PI_EXT_DAC_7_0, x) 343 306 344 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_15 */ 345 - #define SD10G_LANE_LANE_15(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 84, 0, 1, 4) 307 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_15 */ 308 + #define SD10G_LANE_LANE_15(t) \ 309 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 84, 0, \ 310 + 1, 4) 346 311 347 312 #define SD10G_LANE_LANE_15_CFG_PI_EXT_DAC_15_8 GENMASK(7, 0) 348 313 #define SD10G_LANE_LANE_15_CFG_PI_EXT_DAC_15_8_SET(x)\ ··· 352 313 #define SD10G_LANE_LANE_15_CFG_PI_EXT_DAC_15_8_GET(x)\ 353 314 FIELD_GET(SD10G_LANE_LANE_15_CFG_PI_EXT_DAC_15_8, x) 354 315 355 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_16 */ 356 - #define SD10G_LANE_LANE_16(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 88, 0, 1, 4) 316 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_16 */ 317 + #define SD10G_LANE_LANE_16(t) \ 318 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 88, 0, \ 319 + 1, 4) 357 320 358 321 #define SD10G_LANE_LANE_16_CFG_PI_EXT_DAC_23_16 GENMASK(7, 0) 359 322 #define SD10G_LANE_LANE_16_CFG_PI_EXT_DAC_23_16_SET(x)\ ··· 363 322 #define SD10G_LANE_LANE_16_CFG_PI_EXT_DAC_23_16_GET(x)\ 364 323 FIELD_GET(SD10G_LANE_LANE_16_CFG_PI_EXT_DAC_23_16, x) 365 324 366 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_1A */ 367 - #define SD10G_LANE_LANE_1A(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 104, 0, 1, 4) 325 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_1A */ 326 + #define SD10G_LANE_LANE_1A(t) \ 327 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 104, 0,\ 328 + 1, 4) 368 329 369 330 #define SD10G_LANE_LANE_1A_CFG_PI_R_SCAN_EN BIT(0) 370 331 #define SD10G_LANE_LANE_1A_CFG_PI_R_SCAN_EN_SET(x)\ ··· 398 355 #define SD10G_LANE_LANE_1A_CFG_PI_FLOOP_STEPS_1_0_GET(x)\ 399 356 FIELD_GET(SD10G_LANE_LANE_1A_CFG_PI_FLOOP_STEPS_1_0, x) 400 357 401 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_22 */ 402 - #define SD10G_LANE_LANE_22(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 136, 0, 1, 4) 358 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_22 */ 359 + #define SD10G_LANE_LANE_22(t) \ 360 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 136, 0,\ 361 + 1, 4) 403 362 404 363 #define SD10G_LANE_LANE_22_CFG_DFETAP_EN_5_1 GENMASK(4, 0) 405 364 #define SD10G_LANE_LANE_22_CFG_DFETAP_EN_5_1_SET(x)\ ··· 409 364 #define SD10G_LANE_LANE_22_CFG_DFETAP_EN_5_1_GET(x)\ 410 365 FIELD_GET(SD10G_LANE_LANE_22_CFG_DFETAP_EN_5_1, x) 411 366 412 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_23 */ 413 - #define SD10G_LANE_LANE_23(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 140, 0, 1, 4) 367 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_23 */ 368 + #define SD10G_LANE_LANE_23(t) \ 369 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 140, 0,\ 370 + 1, 4) 414 371 415 372 #define SD10G_LANE_LANE_23_CFG_DFE_PD BIT(0) 416 373 #define SD10G_LANE_LANE_23_CFG_DFE_PD_SET(x)\ ··· 444 397 #define SD10G_LANE_LANE_23_CFG_DFEDIG_M_2_0_GET(x)\ 445 398 FIELD_GET(SD10G_LANE_LANE_23_CFG_DFEDIG_M_2_0, x) 446 399 447 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_24 */ 448 - #define SD10G_LANE_LANE_24(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 144, 0, 1, 4) 400 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_24 */ 401 + #define SD10G_LANE_LANE_24(t) \ 402 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 144, 0,\ 403 + 1, 4) 449 404 450 405 #define SD10G_LANE_LANE_24_CFG_PI_BW_GEN1_3_0 GENMASK(3, 0) 451 406 #define SD10G_LANE_LANE_24_CFG_PI_BW_GEN1_3_0_SET(x)\ ··· 461 412 #define SD10G_LANE_LANE_24_CFG_PI_BW_GEN2_3_0_GET(x)\ 462 413 FIELD_GET(SD10G_LANE_LANE_24_CFG_PI_BW_GEN2_3_0, x) 463 414 464 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_26 */ 465 - #define SD10G_LANE_LANE_26(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 152, 0, 1, 4) 415 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_26 */ 416 + #define SD10G_LANE_LANE_26(t) \ 417 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 152, 0,\ 418 + 1, 4) 466 419 467 420 #define SD10G_LANE_LANE_26_CFG_ISCAN_EXT_DAC_7_0 GENMASK(7, 0) 468 421 #define SD10G_LANE_LANE_26_CFG_ISCAN_EXT_DAC_7_0_SET(x)\ ··· 472 421 #define SD10G_LANE_LANE_26_CFG_ISCAN_EXT_DAC_7_0_GET(x)\ 473 422 FIELD_GET(SD10G_LANE_LANE_26_CFG_ISCAN_EXT_DAC_7_0, x) 474 423 475 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_2F */ 476 - #define SD10G_LANE_LANE_2F(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 188, 0, 1, 4) 424 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_2F */ 425 + #define SD10G_LANE_LANE_2F(t) \ 426 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 188, 0,\ 427 + 1, 4) 477 428 478 429 #define SD10G_LANE_LANE_2F_CFG_VGA_CP_2_0 GENMASK(2, 0) 479 430 #define SD10G_LANE_LANE_2F_CFG_VGA_CP_2_0_SET(x)\ ··· 489 436 #define SD10G_LANE_LANE_2F_CFG_VGA_CTRL_3_0_GET(x)\ 490 437 FIELD_GET(SD10G_LANE_LANE_2F_CFG_VGA_CTRL_3_0, x) 491 438 492 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_30 */ 493 - #define SD10G_LANE_LANE_30(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 192, 0, 1, 4) 439 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_30 */ 440 + #define SD10G_LANE_LANE_30(t) \ 441 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 192, 0,\ 442 + 1, 4) 494 443 495 444 #define SD10G_LANE_LANE_30_CFG_SUMMER_EN BIT(0) 496 445 #define SD10G_LANE_LANE_30_CFG_SUMMER_EN_SET(x)\ ··· 506 451 #define SD10G_LANE_LANE_30_CFG_RXDIV_SEL_2_0_GET(x)\ 507 452 FIELD_GET(SD10G_LANE_LANE_30_CFG_RXDIV_SEL_2_0, x) 508 453 509 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_31 */ 510 - #define SD10G_LANE_LANE_31(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 196, 0, 1, 4) 454 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_31 */ 455 + #define SD10G_LANE_LANE_31(t) \ 456 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 196, 0,\ 457 + 1, 4) 511 458 512 459 #define SD10G_LANE_LANE_31_CFG_PI_RSTN BIT(0) 513 460 #define SD10G_LANE_LANE_31_CFG_PI_RSTN_SET(x)\ ··· 547 490 #define SD10G_LANE_LANE_31_CFG_R50_EN_GET(x)\ 548 491 FIELD_GET(SD10G_LANE_LANE_31_CFG_R50_EN, x) 549 492 550 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_32 */ 551 - #define SD10G_LANE_LANE_32(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 200, 0, 1, 4) 493 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_32 */ 494 + #define SD10G_LANE_LANE_32(t) \ 495 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 200, 0,\ 496 + 1, 4) 552 497 553 498 #define SD10G_LANE_LANE_32_CFG_ITX_IPCLK_BASE_1_0 GENMASK(1, 0) 554 499 #define SD10G_LANE_LANE_32_CFG_ITX_IPCLK_BASE_1_0_SET(x)\ ··· 564 505 #define SD10G_LANE_LANE_32_CFG_ITX_IPCML_BASE_1_0_GET(x)\ 565 506 FIELD_GET(SD10G_LANE_LANE_32_CFG_ITX_IPCML_BASE_1_0, x) 566 507 567 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_33 */ 568 - #define SD10G_LANE_LANE_33(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 204, 0, 1, 4) 508 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_33 */ 509 + #define SD10G_LANE_LANE_33(t) \ 510 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 204, 0,\ 511 + 1, 4) 569 512 570 513 #define SD10G_LANE_LANE_33_CFG_ITX_IPDRIVER_BASE_2_0 GENMASK(2, 0) 571 514 #define SD10G_LANE_LANE_33_CFG_ITX_IPDRIVER_BASE_2_0_SET(x)\ ··· 581 520 #define SD10G_LANE_LANE_33_CFG_ITX_IPPREEMP_BASE_1_0_GET(x)\ 582 521 FIELD_GET(SD10G_LANE_LANE_33_CFG_ITX_IPPREEMP_BASE_1_0, x) 583 522 584 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_35 */ 585 - #define SD10G_LANE_LANE_35(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 212, 0, 1, 4) 523 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_35 */ 524 + #define SD10G_LANE_LANE_35(t) \ 525 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 212, 0,\ 526 + 1, 4) 586 527 587 528 #define SD10G_LANE_LANE_35_CFG_TXRATE_1_0 GENMASK(1, 0) 588 529 #define SD10G_LANE_LANE_35_CFG_TXRATE_1_0_SET(x)\ ··· 598 535 #define SD10G_LANE_LANE_35_CFG_RXRATE_1_0_GET(x)\ 599 536 FIELD_GET(SD10G_LANE_LANE_35_CFG_RXRATE_1_0, x) 600 537 601 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_36 */ 602 - #define SD10G_LANE_LANE_36(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 216, 0, 1, 4) 538 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_36 */ 539 + #define SD10G_LANE_LANE_36(t) \ 540 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 216, 0,\ 541 + 1, 4) 603 542 604 543 #define SD10G_LANE_LANE_36_CFG_PREDRV_SLEWRATE_1_0 GENMASK(1, 0) 605 544 #define SD10G_LANE_LANE_36_CFG_PREDRV_SLEWRATE_1_0_SET(x)\ ··· 633 568 #define SD10G_LANE_LANE_36_CFG_PRBS_SETB_GET(x)\ 634 569 FIELD_GET(SD10G_LANE_LANE_36_CFG_PRBS_SETB, x) 635 570 636 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_37 */ 637 - #define SD10G_LANE_LANE_37(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 220, 0, 1, 4) 571 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_37 */ 572 + #define SD10G_LANE_LANE_37(t) \ 573 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 220, 0,\ 574 + 1, 4) 638 575 639 576 #define SD10G_LANE_LANE_37_CFG_RXDET_COMP_PD BIT(0) 640 577 #define SD10G_LANE_LANE_37_CFG_RXDET_COMP_PD_SET(x)\ ··· 662 595 #define SD10G_LANE_LANE_37_CFG_IP_PRE_BASE_1_0_GET(x)\ 663 596 FIELD_GET(SD10G_LANE_LANE_37_CFG_IP_PRE_BASE_1_0, x) 664 597 665 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_39 */ 666 - #define SD10G_LANE_LANE_39(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 228, 0, 1, 4) 598 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_39 */ 599 + #define SD10G_LANE_LANE_39(t) \ 600 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 228, 0,\ 601 + 1, 4) 667 602 668 603 #define SD10G_LANE_LANE_39_CFG_RXFILT_Y_2_0 GENMASK(2, 0) 669 604 #define SD10G_LANE_LANE_39_CFG_RXFILT_Y_2_0_SET(x)\ ··· 679 610 #define SD10G_LANE_LANE_39_CFG_RX_SSC_LH_GET(x)\ 680 611 FIELD_GET(SD10G_LANE_LANE_39_CFG_RX_SSC_LH, x) 681 612 682 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_3A */ 683 - #define SD10G_LANE_LANE_3A(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 232, 0, 1, 4) 613 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_3A */ 614 + #define SD10G_LANE_LANE_3A(t) \ 615 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 232, 0,\ 616 + 1, 4) 684 617 685 618 #define SD10G_LANE_LANE_3A_CFG_MP_MIN_3_0 GENMASK(3, 0) 686 619 #define SD10G_LANE_LANE_3A_CFG_MP_MIN_3_0_SET(x)\ ··· 696 625 #define SD10G_LANE_LANE_3A_CFG_MP_MAX_3_0_GET(x)\ 697 626 FIELD_GET(SD10G_LANE_LANE_3A_CFG_MP_MAX_3_0, x) 698 627 699 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_3C */ 700 - #define SD10G_LANE_LANE_3C(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 240, 0, 1, 4) 628 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_3C */ 629 + #define SD10G_LANE_LANE_3C(t) \ 630 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 240, 0,\ 631 + 1, 4) 701 632 702 633 #define SD10G_LANE_LANE_3C_CFG_DIS_ACC BIT(0) 703 634 #define SD10G_LANE_LANE_3C_CFG_DIS_ACC_SET(x)\ ··· 713 640 #define SD10G_LANE_LANE_3C_CFG_DIS_2NDORDER_GET(x)\ 714 641 FIELD_GET(SD10G_LANE_LANE_3C_CFG_DIS_2NDORDER, x) 715 642 716 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_40 */ 717 - #define SD10G_LANE_LANE_40(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 256, 0, 1, 4) 643 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_40 */ 644 + #define SD10G_LANE_LANE_40(t) \ 645 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 256, 0,\ 646 + 1, 4) 718 647 719 648 #define SD10G_LANE_LANE_40_CFG_LANE_RESERVE_7_0 GENMASK(7, 0) 720 649 #define SD10G_LANE_LANE_40_CFG_LANE_RESERVE_7_0_SET(x)\ ··· 724 649 #define SD10G_LANE_LANE_40_CFG_LANE_RESERVE_7_0_GET(x)\ 725 650 FIELD_GET(SD10G_LANE_LANE_40_CFG_LANE_RESERVE_7_0, x) 726 651 727 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_41 */ 728 - #define SD10G_LANE_LANE_41(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 260, 0, 1, 4) 652 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_41 */ 653 + #define SD10G_LANE_LANE_41(t) \ 654 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 260, 0,\ 655 + 1, 4) 729 656 730 657 #define SD10G_LANE_LANE_41_CFG_LANE_RESERVE_15_8 GENMASK(7, 0) 731 658 #define SD10G_LANE_LANE_41_CFG_LANE_RESERVE_15_8_SET(x)\ ··· 735 658 #define SD10G_LANE_LANE_41_CFG_LANE_RESERVE_15_8_GET(x)\ 736 659 FIELD_GET(SD10G_LANE_LANE_41_CFG_LANE_RESERVE_15_8, x) 737 660 738 - /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_42 */ 739 - #define SD10G_LANE_LANE_42(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 264, 0, 1, 4) 661 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_42 */ 662 + #define SD10G_LANE_LANE_42(t) \ 663 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 0, 0, 1, 288, 264, 0,\ 664 + 1, 4) 740 665 741 666 #define SD10G_LANE_LANE_42_CFG_CDR_KF_GEN1_2_0 GENMASK(2, 0) 742 667 #define SD10G_LANE_LANE_42_CFG_CDR_KF_GEN1_2_0_SET(x)\ ··· 752 673 #define SD10G_LANE_LANE_42_CFG_CDR_KF_GEN2_2_0_GET(x)\ 753 674 FIELD_GET(SD10G_LANE_LANE_42_CFG_CDR_KF_GEN2_2_0, x) 754 675 755 - /* SD10G_LANE_TARGET:LANE_GRP_1:LANE_48 */ 756 - #define SD10G_LANE_LANE_48(t) __REG(TARGET_SD10G_LANE, t, 12, 288, 0, 1, 40, 0, 0, 1, 4) 676 + /* SD10G_LANE_TARGET:LANE_GRP_1:LANE_48 */ 677 + #define SD10G_LANE_LANE_48(t) \ 678 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 288, 0, 1, 40, 0, 0, \ 679 + 1, 4) 757 680 758 681 #define SD10G_LANE_LANE_48_CFG_ALOS_THR_3_0 GENMASK(3, 0) 759 682 #define SD10G_LANE_LANE_48_CFG_ALOS_THR_3_0_SET(x)\ ··· 775 694 #define SD10G_LANE_LANE_48_CFG_CLK_ENQ_GET(x)\ 776 695 FIELD_GET(SD10G_LANE_LANE_48_CFG_CLK_ENQ, x) 777 696 778 - /* SD10G_LANE_TARGET:LANE_GRP_1:LANE_50 */ 779 - #define SD10G_LANE_LANE_50(t) __REG(TARGET_SD10G_LANE, t, 12, 288, 0, 1, 40, 32, 0, 1, 4) 697 + /* SD10G_LANE_TARGET:LANE_GRP_1:LANE_50 */ 698 + #define SD10G_LANE_LANE_50(t) \ 699 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 288, 0, 1, 40, 32, 0,\ 700 + 1, 4) 780 701 781 702 #define SD10G_LANE_LANE_50_CFG_SSC_PI_STEP_1_0 GENMASK(1, 0) 782 703 #define SD10G_LANE_LANE_50_CFG_SSC_PI_STEP_1_0_SET(x)\ ··· 810 727 #define SD10G_LANE_LANE_50_CFG_JT_EN_GET(x)\ 811 728 FIELD_GET(SD10G_LANE_LANE_50_CFG_JT_EN, x) 812 729 813 - /* SD10G_LANE_TARGET:LANE_GRP_2:LANE_52 */ 814 - #define SD10G_LANE_LANE_52(t) __REG(TARGET_SD10G_LANE, t, 12, 328, 0, 1, 24, 0, 0, 1, 4) 730 + /* SD10G_LANE_TARGET:LANE_GRP_2:LANE_52 */ 731 + #define SD10G_LANE_LANE_52(t) \ 732 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 328, 0, 1, 24, 0, 0, \ 733 + 1, 4) 815 734 816 735 #define SD10G_LANE_LANE_52_CFG_IBIAS_TUNE_RESERVE_5_0 GENMASK(5, 0) 817 736 #define SD10G_LANE_LANE_52_CFG_IBIAS_TUNE_RESERVE_5_0_SET(x)\ ··· 821 736 #define SD10G_LANE_LANE_52_CFG_IBIAS_TUNE_RESERVE_5_0_GET(x)\ 822 737 FIELD_GET(SD10G_LANE_LANE_52_CFG_IBIAS_TUNE_RESERVE_5_0, x) 823 738 824 - /* SD10G_LANE_TARGET:LANE_GRP_4:LANE_83 */ 825 - #define SD10G_LANE_LANE_83(t) __REG(TARGET_SD10G_LANE, t, 12, 464, 0, 1, 112, 60, 0, 1, 4) 739 + /* SD10G_LANE_TARGET:LANE_GRP_4:LANE_83 */ 740 + #define SD10G_LANE_LANE_83(t) \ 741 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 464, 0, 1, 112, 60, \ 742 + 0, 1, 4) 826 743 827 744 #define SD10G_LANE_LANE_83_R_TX_BIT_REVERSE BIT(0) 828 745 #define SD10G_LANE_LANE_83_R_TX_BIT_REVERSE_SET(x)\ ··· 868 781 #define SD10G_LANE_LANE_83_R_CTLE_RSTN_GET(x)\ 869 782 FIELD_GET(SD10G_LANE_LANE_83_R_CTLE_RSTN, x) 870 783 871 - /* SD10G_LANE_TARGET:LANE_GRP_5:LANE_93 */ 872 - #define SD10G_LANE_LANE_93(t) __REG(TARGET_SD10G_LANE, t, 12, 576, 0, 1, 64, 12, 0, 1, 4) 784 + /* SD10G_LANE_TARGET:LANE_GRP_5:LANE_93 */ 785 + #define SD10G_LANE_LANE_93(t) \ 786 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 576, 0, 1, 64, 12, 0,\ 787 + 1, 4) 873 788 874 789 #define SD10G_LANE_LANE_93_R_RXEI_FIFO_RST_EN BIT(0) 875 790 #define SD10G_LANE_LANE_93_R_RXEI_FIFO_RST_EN_SET(x)\ ··· 921 832 #define SD10G_LANE_LANE_93_R_RX_PCIE_GEN12_FROM_HWT_GET(x)\ 922 833 FIELD_GET(SD10G_LANE_LANE_93_R_RX_PCIE_GEN12_FROM_HWT, x) 923 834 924 - /* SD10G_LANE_TARGET:LANE_GRP_5:LANE_94 */ 925 - #define SD10G_LANE_LANE_94(t) __REG(TARGET_SD10G_LANE, t, 12, 576, 0, 1, 64, 16, 0, 1, 4) 835 + /* SD10G_LANE_TARGET:LANE_GRP_5:LANE_94 */ 836 + #define SD10G_LANE_LANE_94(t) \ 837 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 576, 0, 1, 64, 16, 0,\ 838 + 1, 4) 926 839 927 840 #define SD10G_LANE_LANE_94_R_DWIDTHCTRL_2_0 GENMASK(2, 0) 928 841 #define SD10G_LANE_LANE_94_R_DWIDTHCTRL_2_0_SET(x)\ ··· 956 865 #define SD10G_LANE_LANE_94_R_SWING_REG_GET(x)\ 957 866 FIELD_GET(SD10G_LANE_LANE_94_R_SWING_REG, x) 958 867 959 - /* SD10G_LANE_TARGET:LANE_GRP_5:LANE_9E */ 960 - #define SD10G_LANE_LANE_9E(t) __REG(TARGET_SD10G_LANE, t, 12, 576, 0, 1, 64, 56, 0, 1, 4) 868 + /* SD10G_LANE_TARGET:LANE_GRP_5:LANE_9E */ 869 + #define SD10G_LANE_LANE_9E(t) \ 870 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 576, 0, 1, 64, 56, 0,\ 871 + 1, 4) 961 872 962 873 #define SD10G_LANE_LANE_9E_R_RXEQ_REG BIT(0) 963 874 #define SD10G_LANE_LANE_9E_R_RXEQ_REG_SET(x)\ ··· 979 886 #define SD10G_LANE_LANE_9E_R_EN_AUTO_CDR_RSTN_GET(x)\ 980 887 FIELD_GET(SD10G_LANE_LANE_9E_R_EN_AUTO_CDR_RSTN, x) 981 888 982 - /* SD10G_LANE_TARGET:LANE_GRP_6:LANE_A1 */ 983 - #define SD10G_LANE_LANE_A1(t) __REG(TARGET_SD10G_LANE, t, 12, 640, 0, 1, 128, 4, 0, 1, 4) 889 + /* SD10G_LANE_TARGET:LANE_GRP_6:LANE_A1 */ 890 + #define SD10G_LANE_LANE_A1(t) \ 891 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 640, 0, 1, 128, 4, 0,\ 892 + 1, 4) 984 893 985 894 #define SD10G_LANE_LANE_A1_R_PMA_TXCK_DIV_SEL_1_0 GENMASK(1, 0) 986 895 #define SD10G_LANE_LANE_A1_R_PMA_TXCK_DIV_SEL_1_0_SET(x)\ ··· 1014 919 #define SD10G_LANE_LANE_A1_R_PCLK_GATING_GET(x)\ 1015 920 FIELD_GET(SD10G_LANE_LANE_A1_R_PCLK_GATING, x) 1016 921 1017 - /* SD10G_LANE_TARGET:LANE_GRP_6:LANE_A2 */ 1018 - #define SD10G_LANE_LANE_A2(t) __REG(TARGET_SD10G_LANE, t, 12, 640, 0, 1, 128, 8, 0, 1, 4) 922 + /* SD10G_LANE_TARGET:LANE_GRP_6:LANE_A2 */ 923 + #define SD10G_LANE_LANE_A2(t) \ 924 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 640, 0, 1, 128, 8, 0,\ 925 + 1, 4) 1019 926 1020 927 #define SD10G_LANE_LANE_A2_R_PCS2PMA_PHYMODE_4_0 GENMASK(4, 0) 1021 928 #define SD10G_LANE_LANE_A2_R_PCS2PMA_PHYMODE_4_0_SET(x)\ ··· 1025 928 #define SD10G_LANE_LANE_A2_R_PCS2PMA_PHYMODE_4_0_GET(x)\ 1026 929 FIELD_GET(SD10G_LANE_LANE_A2_R_PCS2PMA_PHYMODE_4_0, x) 1027 930 1028 - /* SD10G_LANE_TARGET:LANE_GRP_8:LANE_DF */ 1029 - #define SD10G_LANE_LANE_DF(t) __REG(TARGET_SD10G_LANE, t, 12, 832, 0, 1, 84, 60, 0, 1, 4) 931 + /* SD10G_LANE_TARGET:LANE_GRP_8:LANE_DF */ 932 + #define SD10G_LANE_LANE_DF(t) \ 933 + __REG(TARGET_SD10G_LANE, t, TSIZE(TC_SD10G_LANE), 832, 0, 1, 84, 60, 0,\ 934 + 1, 4) 1030 935 1031 936 #define SD10G_LANE_LANE_DF_LOL_UDL BIT(0) 1032 937 #define SD10G_LANE_LANE_DF_LOL_UDL_SET(x)\ ··· 1054 955 #define SD10G_LANE_LANE_DF_SQUELCH_GET(x)\ 1055 956 FIELD_GET(SD10G_LANE_LANE_DF_SQUELCH, x) 1056 957 1057 - /* SD25G_TARGET:CMU_GRP_0:CMU_09 */ 1058 - #define SD25G_LANE_CMU_09(t) __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 36, 0, 1, 4) 958 + /* SPARX5 ONLY */ 959 + /* SD25G_TARGET:CMU_GRP_0:CMU_09 */ 960 + #define SD25G_LANE_CMU_09(t) \ 961 + __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 36, 0, 1, 4) 1059 962 1060 963 #define SD25G_LANE_CMU_09_CFG_REFCK_TERM_EN BIT(0) 1061 964 #define SD25G_LANE_CMU_09_CFG_REFCK_TERM_EN_SET(x)\ ··· 1089 988 #define SD25G_LANE_CMU_09_CFG_PLL_TP_SEL_1_0_GET(x)\ 1090 989 FIELD_GET(SD25G_LANE_CMU_09_CFG_PLL_TP_SEL_1_0, x) 1091 990 1092 - /* SD25G_TARGET:CMU_GRP_0:CMU_0B */ 1093 - #define SD25G_LANE_CMU_0B(t) __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 44, 0, 1, 4) 991 + /* SPARX5 ONLY */ 992 + /* SD25G_TARGET:CMU_GRP_0:CMU_0B */ 993 + #define SD25G_LANE_CMU_0B(t) \ 994 + __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 44, 0, 1, 4) 1094 995 1095 996 #define SD25G_LANE_CMU_0B_CFG_FORCE_RX_FILT BIT(0) 1096 997 #define SD25G_LANE_CMU_0B_CFG_FORCE_RX_FILT_SET(x)\ ··· 1142 1039 #define SD25G_LANE_CMU_0B_CFG_RST_TREE_PD_MAN_GET(x)\ 1143 1040 FIELD_GET(SD25G_LANE_CMU_0B_CFG_RST_TREE_PD_MAN, x) 1144 1041 1145 - /* SD25G_TARGET:CMU_GRP_0:CMU_0C */ 1146 - #define SD25G_LANE_CMU_0C(t) __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 48, 0, 1, 4) 1042 + /* SPARX5 ONLY */ 1043 + /* SD25G_TARGET:CMU_GRP_0:CMU_0C */ 1044 + #define SD25G_LANE_CMU_0C(t) \ 1045 + __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 48, 0, 1, 4) 1147 1046 1148 1047 #define SD25G_LANE_CMU_0C_CFG_PLL_LOL_SET BIT(0) 1149 1048 #define SD25G_LANE_CMU_0C_CFG_PLL_LOL_SET_SET(x)\ ··· 1177 1072 #define SD25G_LANE_CMU_0C_CFG_VCO_DIV_MODE_1_0_GET(x)\ 1178 1073 FIELD_GET(SD25G_LANE_CMU_0C_CFG_VCO_DIV_MODE_1_0, x) 1179 1074 1180 - /* SD25G_TARGET:CMU_GRP_0:CMU_0D */ 1181 - #define SD25G_LANE_CMU_0D(t) __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 52, 0, 1, 4) 1075 + /* SPARX5 ONLY */ 1076 + /* SD25G_TARGET:CMU_GRP_0:CMU_0D */ 1077 + #define SD25G_LANE_CMU_0D(t) \ 1078 + __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 52, 0, 1, 4) 1182 1079 1183 1080 #define SD25G_LANE_CMU_0D_CFG_CK_TREE_PD BIT(0) 1184 1081 #define SD25G_LANE_CMU_0D_CFG_CK_TREE_PD_SET(x)\ ··· 1212 1105 #define SD25G_LANE_CMU_0D_CFG_PRE_DIVSEL_1_0_GET(x)\ 1213 1106 FIELD_GET(SD25G_LANE_CMU_0D_CFG_PRE_DIVSEL_1_0, x) 1214 1107 1215 - /* SD25G_TARGET:CMU_GRP_0:CMU_0E */ 1216 - #define SD25G_LANE_CMU_0E(t) __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 56, 0, 1, 4) 1108 + /* SPARX5 ONLY */ 1109 + /* SD25G_TARGET:CMU_GRP_0:CMU_0E */ 1110 + #define SD25G_LANE_CMU_0E(t) \ 1111 + __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 56, 0, 1, 4) 1217 1112 1218 1113 #define SD25G_LANE_CMU_0E_CFG_SEL_DIV_3_0 GENMASK(3, 0) 1219 1114 #define SD25G_LANE_CMU_0E_CFG_SEL_DIV_3_0_SET(x)\ ··· 1229 1120 #define SD25G_LANE_CMU_0E_CFG_PMAA_CENTR_CK_PD_GET(x)\ 1230 1121 FIELD_GET(SD25G_LANE_CMU_0E_CFG_PMAA_CENTR_CK_PD, x) 1231 1122 1232 - /* SD25G_TARGET:CMU_GRP_0:CMU_13 */ 1233 - #define SD25G_LANE_CMU_13(t) __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 76, 0, 1, 4) 1123 + /* SPARX5 ONLY */ 1124 + /* SD25G_TARGET:CMU_GRP_0:CMU_13 */ 1125 + #define SD25G_LANE_CMU_13(t) \ 1126 + __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 76, 0, 1, 4) 1234 1127 1235 1128 #define SD25G_LANE_CMU_13_CFG_PLL_RESERVE_3_0 GENMASK(3, 0) 1236 1129 #define SD25G_LANE_CMU_13_CFG_PLL_RESERVE_3_0_SET(x)\ ··· 1246 1135 #define SD25G_LANE_CMU_13_CFG_JT_EN_GET(x)\ 1247 1136 FIELD_GET(SD25G_LANE_CMU_13_CFG_JT_EN, x) 1248 1137 1249 - /* SD25G_TARGET:CMU_GRP_0:CMU_18 */ 1250 - #define SD25G_LANE_CMU_18(t) __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 96, 0, 1, 4) 1138 + /* SPARX5 ONLY */ 1139 + /* SD25G_TARGET:CMU_GRP_0:CMU_18 */ 1140 + #define SD25G_LANE_CMU_18(t) \ 1141 + __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 96, 0, 1, 4) 1251 1142 1252 1143 #define SD25G_LANE_CMU_18_R_PLL_RSTN BIT(0) 1253 1144 #define SD25G_LANE_CMU_18_R_PLL_RSTN_SET(x)\ ··· 1275 1162 #define SD25G_LANE_CMU_18_R_PLL_TP_SEL_1_0_GET(x)\ 1276 1163 FIELD_GET(SD25G_LANE_CMU_18_R_PLL_TP_SEL_1_0, x) 1277 1164 1278 - /* SD25G_TARGET:CMU_GRP_0:CMU_19 */ 1279 - #define SD25G_LANE_CMU_19(t) __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 100, 0, 1, 4) 1165 + /* SPARX5 ONLY */ 1166 + /* SD25G_TARGET:CMU_GRP_0:CMU_19 */ 1167 + #define SD25G_LANE_CMU_19(t) \ 1168 + __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 100, 0, 1, 4) 1280 1169 1281 1170 #define SD25G_LANE_CMU_19_R_CK_RESETB BIT(0) 1282 1171 #define SD25G_LANE_CMU_19_R_CK_RESETB_SET(x)\ ··· 1292 1177 #define SD25G_LANE_CMU_19_R_PLL_DLOL_EN_GET(x)\ 1293 1178 FIELD_GET(SD25G_LANE_CMU_19_R_PLL_DLOL_EN, x) 1294 1179 1295 - /* SD25G_TARGET:CMU_GRP_0:CMU_1A */ 1296 - #define SD25G_LANE_CMU_1A(t) __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 104, 0, 1, 4) 1180 + /* SPARX5 ONLY */ 1181 + /* SD25G_TARGET:CMU_GRP_0:CMU_1A */ 1182 + #define SD25G_LANE_CMU_1A(t) \ 1183 + __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 104, 0, 1, 4) 1297 1184 1298 1185 #define SD25G_LANE_CMU_1A_R_DWIDTHCTRL_2_0 GENMASK(2, 0) 1299 1186 #define SD25G_LANE_CMU_1A_R_DWIDTHCTRL_2_0_SET(x)\ ··· 1321 1204 #define SD25G_LANE_CMU_1A_R_REG_MANUAL_GET(x)\ 1322 1205 FIELD_GET(SD25G_LANE_CMU_1A_R_REG_MANUAL, x) 1323 1206 1324 - /* SD25G_TARGET:CMU_GRP_1:CMU_2A */ 1325 - #define SD25G_LANE_CMU_2A(t) __REG(TARGET_SD25G_LANE, t, 8, 132, 0, 1, 124, 36, 0, 1, 4) 1207 + /* SPARX5 ONLY */ 1208 + /* SD25G_TARGET:CMU_GRP_1:CMU_2A */ 1209 + #define SD25G_LANE_CMU_2A(t) \ 1210 + __REG(TARGET_SD25G_LANE, t, 8, 132, 0, 1, 124, 36, 0, 1, 4) 1326 1211 1327 1212 #define SD25G_LANE_CMU_2A_R_DBG_SEL_1_0 GENMASK(1, 0) 1328 1213 #define SD25G_LANE_CMU_2A_R_DBG_SEL_1_0_SET(x)\ ··· 1344 1225 #define SD25G_LANE_CMU_2A_R_DBG_LOL_STATUS_GET(x)\ 1345 1226 FIELD_GET(SD25G_LANE_CMU_2A_R_DBG_LOL_STATUS, x) 1346 1227 1347 - /* SD25G_TARGET:CMU_GRP_1:CMU_30 */ 1348 - #define SD25G_LANE_CMU_30(t) __REG(TARGET_SD25G_LANE, t, 8, 132, 0, 1, 124, 60, 0, 1, 4) 1228 + /* SPARX5 ONLY */ 1229 + /* SD25G_TARGET:CMU_GRP_1:CMU_30 */ 1230 + #define SD25G_LANE_CMU_30(t) \ 1231 + __REG(TARGET_SD25G_LANE, t, 8, 132, 0, 1, 124, 60, 0, 1, 4) 1349 1232 1350 1233 #define SD25G_LANE_CMU_30_R_TXFIFO_CK_DIV_PMAD_2_0 GENMASK(2, 0) 1351 1234 #define SD25G_LANE_CMU_30_R_TXFIFO_CK_DIV_PMAD_2_0_SET(x)\ ··· 1361 1240 #define SD25G_LANE_CMU_30_R_RXFIFO_CK_DIV_PMAD_2_0_GET(x)\ 1362 1241 FIELD_GET(SD25G_LANE_CMU_30_R_RXFIFO_CK_DIV_PMAD_2_0, x) 1363 1242 1364 - /* SD25G_TARGET:CMU_GRP_1:CMU_31 */ 1365 - #define SD25G_LANE_CMU_31(t) __REG(TARGET_SD25G_LANE, t, 8, 132, 0, 1, 124, 64, 0, 1, 4) 1243 + /* SPARX5 ONLY */ 1244 + /* SD25G_TARGET:CMU_GRP_1:CMU_31 */ 1245 + #define SD25G_LANE_CMU_31(t) \ 1246 + __REG(TARGET_SD25G_LANE, t, 8, 132, 0, 1, 124, 64, 0, 1, 4) 1366 1247 1367 1248 #define SD25G_LANE_CMU_31_CFG_COMMON_RESERVE_7_0 GENMASK(7, 0) 1368 1249 #define SD25G_LANE_CMU_31_CFG_COMMON_RESERVE_7_0_SET(x)\ ··· 1372 1249 #define SD25G_LANE_CMU_31_CFG_COMMON_RESERVE_7_0_GET(x)\ 1373 1250 FIELD_GET(SD25G_LANE_CMU_31_CFG_COMMON_RESERVE_7_0, x) 1374 1251 1375 - /* SD25G_TARGET:CMU_GRP_2:CMU_40 */ 1376 - #define SD25G_LANE_CMU_40(t) __REG(TARGET_SD25G_LANE, t, 8, 256, 0, 1, 512, 0, 0, 1, 4) 1252 + /* SPARX5 ONLY */ 1253 + /* SD25G_TARGET:CMU_GRP_2:CMU_40 */ 1254 + #define SD25G_LANE_CMU_40(t) \ 1255 + __REG(TARGET_SD25G_LANE, t, 8, 256, 0, 1, 512, 0, 0, 1, 4) 1377 1256 1378 1257 #define SD25G_LANE_CMU_40_L0_CFG_CKSKEW_CTRL BIT(0) 1379 1258 #define SD25G_LANE_CMU_40_L0_CFG_CKSKEW_CTRL_SET(x)\ ··· 1413 1288 #define SD25G_LANE_CMU_40_L0_CFG_TXCAL_RST_GET(x)\ 1414 1289 FIELD_GET(SD25G_LANE_CMU_40_L0_CFG_TXCAL_RST, x) 1415 1290 1416 - /* SD25G_TARGET:CMU_GRP_2:CMU_45 */ 1417 - #define SD25G_LANE_CMU_45(t) __REG(TARGET_SD25G_LANE, t, 8, 256, 0, 1, 512, 20, 0, 1, 4) 1291 + /* SPARX5 ONLY */ 1292 + /* SD25G_TARGET:CMU_GRP_2:CMU_45 */ 1293 + #define SD25G_LANE_CMU_45(t) \ 1294 + __REG(TARGET_SD25G_LANE, t, 8, 256, 0, 1, 512, 20, 0, 1, 4) 1418 1295 1419 1296 #define SD25G_LANE_CMU_45_L0_CFG_TX_RESERVE_7_0 GENMASK(7, 0) 1420 1297 #define SD25G_LANE_CMU_45_L0_CFG_TX_RESERVE_7_0_SET(x)\ ··· 1424 1297 #define SD25G_LANE_CMU_45_L0_CFG_TX_RESERVE_7_0_GET(x)\ 1425 1298 FIELD_GET(SD25G_LANE_CMU_45_L0_CFG_TX_RESERVE_7_0, x) 1426 1299 1427 - /* SD25G_TARGET:CMU_GRP_2:CMU_46 */ 1428 - #define SD25G_LANE_CMU_46(t) __REG(TARGET_SD25G_LANE, t, 8, 256, 0, 1, 512, 24, 0, 1, 4) 1300 + /* SPARX5 ONLY */ 1301 + /* SD25G_TARGET:CMU_GRP_2:CMU_46 */ 1302 + #define SD25G_LANE_CMU_46(t) \ 1303 + __REG(TARGET_SD25G_LANE, t, 8, 256, 0, 1, 512, 24, 0, 1, 4) 1429 1304 1430 1305 #define SD25G_LANE_CMU_46_L0_CFG_TX_RESERVE_15_8 GENMASK(7, 0) 1431 1306 #define SD25G_LANE_CMU_46_L0_CFG_TX_RESERVE_15_8_SET(x)\ ··· 1435 1306 #define SD25G_LANE_CMU_46_L0_CFG_TX_RESERVE_15_8_GET(x)\ 1436 1307 FIELD_GET(SD25G_LANE_CMU_46_L0_CFG_TX_RESERVE_15_8, x) 1437 1308 1438 - /* SD25G_TARGET:CMU_GRP_3:CMU_C0 */ 1439 - #define SD25G_LANE_CMU_C0(t) __REG(TARGET_SD25G_LANE, t, 8, 768, 0, 1, 252, 0, 0, 1, 4) 1309 + /* SPARX5 ONLY */ 1310 + /* SD25G_TARGET:CMU_GRP_3:CMU_C0 */ 1311 + #define SD25G_LANE_CMU_C0(t) \ 1312 + __REG(TARGET_SD25G_LANE, t, 8, 768, 0, 1, 252, 0, 0, 1, 4) 1440 1313 1441 1314 #define SD25G_LANE_CMU_C0_READ_VCO_CTUNE_3_0 GENMASK(3, 0) 1442 1315 #define SD25G_LANE_CMU_C0_READ_VCO_CTUNE_3_0_SET(x)\ ··· 1452 1321 #define SD25G_LANE_CMU_C0_PLL_LOL_UDL_GET(x)\ 1453 1322 FIELD_GET(SD25G_LANE_CMU_C0_PLL_LOL_UDL, x) 1454 1323 1455 - /* SD25G_TARGET:CMU_GRP_4:CMU_FF */ 1456 - #define SD25G_LANE_CMU_FF(t) __REG(TARGET_SD25G_LANE, t, 8, 1020, 0, 1, 4, 0, 0, 1, 4) 1324 + /* SPARX5 ONLY */ 1325 + /* SD25G_TARGET:CMU_GRP_4:CMU_FF */ 1326 + #define SD25G_LANE_CMU_FF(t) \ 1327 + __REG(TARGET_SD25G_LANE, t, 8, 1020, 0, 1, 4, 0, 0, 1, 4) 1457 1328 1458 1329 #define SD25G_LANE_CMU_FF_REGISTER_TABLE_INDEX GENMASK(7, 0) 1459 1330 #define SD25G_LANE_CMU_FF_REGISTER_TABLE_INDEX_SET(x)\ ··· 1463 1330 #define SD25G_LANE_CMU_FF_REGISTER_TABLE_INDEX_GET(x)\ 1464 1331 FIELD_GET(SD25G_LANE_CMU_FF_REGISTER_TABLE_INDEX, x) 1465 1332 1466 - /* SD25G_TARGET:LANE_GRP_0:LANE_00 */ 1467 - #define SD25G_LANE_LANE_00(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 0, 0, 1, 4) 1333 + /* SPARX5 ONLY */ 1334 + /* SD25G_TARGET:LANE_GRP_0:LANE_00 */ 1335 + #define SD25G_LANE_LANE_00(t) \ 1336 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 0, 0, 1, 4) 1468 1337 1469 1338 #define SD25G_LANE_LANE_00_LN_CFG_ITX_VC_DRIVER_3_0 GENMASK(3, 0) 1470 1339 #define SD25G_LANE_LANE_00_LN_CFG_ITX_VC_DRIVER_3_0_SET(x)\ ··· 1480 1345 #define SD25G_LANE_LANE_00_LN_CFG_ITX_IPCML_BASE_1_0_GET(x)\ 1481 1346 FIELD_GET(SD25G_LANE_LANE_00_LN_CFG_ITX_IPCML_BASE_1_0, x) 1482 1347 1483 - /* SD25G_TARGET:LANE_GRP_0:LANE_01 */ 1484 - #define SD25G_LANE_LANE_01(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 4, 0, 1, 4) 1348 + /* SPARX5 ONLY */ 1349 + /* SD25G_TARGET:LANE_GRP_0:LANE_01 */ 1350 + #define SD25G_LANE_LANE_01(t) \ 1351 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 4, 0, 1, 4) 1485 1352 1486 1353 #define SD25G_LANE_LANE_01_LN_CFG_ITX_IPDRIVER_BASE_2_0 GENMASK(2, 0) 1487 1354 #define SD25G_LANE_LANE_01_LN_CFG_ITX_IPDRIVER_BASE_2_0_SET(x)\ ··· 1497 1360 #define SD25G_LANE_LANE_01_LN_CFG_TX_PREDIV_1_0_GET(x)\ 1498 1361 FIELD_GET(SD25G_LANE_LANE_01_LN_CFG_TX_PREDIV_1_0, x) 1499 1362 1500 - /* SD25G_TARGET:LANE_GRP_0:LANE_03 */ 1501 - #define SD25G_LANE_LANE_03(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 12, 0, 1, 4) 1363 + /* SPARX5 ONLY */ 1364 + /* SD25G_TARGET:LANE_GRP_0:LANE_03 */ 1365 + #define SD25G_LANE_LANE_03(t) \ 1366 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 12, 0, 1, 4) 1502 1367 1503 1368 #define SD25G_LANE_LANE_03_LN_CFG_TAP_DLY_4_0 GENMASK(4, 0) 1504 1369 #define SD25G_LANE_LANE_03_LN_CFG_TAP_DLY_4_0_SET(x)\ ··· 1508 1369 #define SD25G_LANE_LANE_03_LN_CFG_TAP_DLY_4_0_GET(x)\ 1509 1370 FIELD_GET(SD25G_LANE_LANE_03_LN_CFG_TAP_DLY_4_0, x) 1510 1371 1511 - /* SD25G_TARGET:LANE_GRP_0:LANE_04 */ 1512 - #define SD25G_LANE_LANE_04(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 16, 0, 1, 4) 1372 + /* SPARX5 ONLY */ 1373 + /* SD25G_TARGET:LANE_GRP_0:LANE_04 */ 1374 + #define SD25G_LANE_LANE_04(t) \ 1375 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 16, 0, 1, 4) 1513 1376 1514 1377 #define SD25G_LANE_LANE_04_LN_CFG_TX2RX_LP_EN BIT(0) 1515 1378 #define SD25G_LANE_LANE_04_LN_CFG_TX2RX_LP_EN_SET(x)\ ··· 1549 1408 #define SD25G_LANE_LANE_04_LN_CFG_TAP_MAIN_GET(x)\ 1550 1409 FIELD_GET(SD25G_LANE_LANE_04_LN_CFG_TAP_MAIN, x) 1551 1410 1552 - /* SD25G_TARGET:LANE_GRP_0:LANE_05 */ 1553 - #define SD25G_LANE_LANE_05(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 20, 0, 1, 4) 1411 + /* SPARX5 ONLY */ 1412 + /* SD25G_TARGET:LANE_GRP_0:LANE_05 */ 1413 + #define SD25G_LANE_LANE_05(t) \ 1414 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 20, 0, 1, 4) 1554 1415 1555 1416 #define SD25G_LANE_LANE_05_LN_CFG_TAP_DLY2_3_0 GENMASK(3, 0) 1556 1417 #define SD25G_LANE_LANE_05_LN_CFG_TAP_DLY2_3_0_SET(x)\ ··· 1566 1423 #define SD25G_LANE_LANE_05_LN_CFG_BW_1_0_GET(x)\ 1567 1424 FIELD_GET(SD25G_LANE_LANE_05_LN_CFG_BW_1_0, x) 1568 1425 1569 - /* SD25G_TARGET:LANE_GRP_0:LANE_06 */ 1570 - #define SD25G_LANE_LANE_06(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 24, 0, 1, 4) 1426 + /* SPARX5 ONLY */ 1427 + /* SD25G_TARGET:LANE_GRP_0:LANE_06 */ 1428 + #define SD25G_LANE_LANE_06(t) \ 1429 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 24, 0, 1, 4) 1571 1430 1572 1431 #define SD25G_LANE_LANE_06_LN_CFG_EN_MAIN BIT(0) 1573 1432 #define SD25G_LANE_LANE_06_LN_CFG_EN_MAIN_SET(x)\ ··· 1583 1438 #define SD25G_LANE_LANE_06_LN_CFG_TAP_ADV_3_0_GET(x)\ 1584 1439 FIELD_GET(SD25G_LANE_LANE_06_LN_CFG_TAP_ADV_3_0, x) 1585 1440 1586 - /* SD25G_TARGET:LANE_GRP_0:LANE_07 */ 1587 - #define SD25G_LANE_LANE_07(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 28, 0, 1, 4) 1441 + /* SPARX5 ONLY */ 1442 + /* SD25G_TARGET:LANE_GRP_0:LANE_07 */ 1443 + #define SD25G_LANE_LANE_07(t) \ 1444 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 28, 0, 1, 4) 1588 1445 1589 1446 #define SD25G_LANE_LANE_07_LN_CFG_EN_ADV BIT(0) 1590 1447 #define SD25G_LANE_LANE_07_LN_CFG_EN_ADV_SET(x)\ ··· 1606 1459 #define SD25G_LANE_LANE_07_LN_CFG_EN_DLY_GET(x)\ 1607 1460 FIELD_GET(SD25G_LANE_LANE_07_LN_CFG_EN_DLY, x) 1608 1461 1609 - /* SD25G_TARGET:LANE_GRP_0:LANE_09 */ 1610 - #define SD25G_LANE_LANE_09(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 36, 0, 1, 4) 1462 + /* SPARX5 ONLY */ 1463 + /* SD25G_TARGET:LANE_GRP_0:LANE_09 */ 1464 + #define SD25G_LANE_LANE_09(t) \ 1465 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 36, 0, 1, 4) 1611 1466 1612 1467 #define SD25G_LANE_LANE_09_LN_CFG_TXCAL_VALID_SEL_3_0 GENMASK(3, 0) 1613 1468 #define SD25G_LANE_LANE_09_LN_CFG_TXCAL_VALID_SEL_3_0_SET(x)\ ··· 1617 1468 #define SD25G_LANE_LANE_09_LN_CFG_TXCAL_VALID_SEL_3_0_GET(x)\ 1618 1469 FIELD_GET(SD25G_LANE_LANE_09_LN_CFG_TXCAL_VALID_SEL_3_0, x) 1619 1470 1620 - /* SD25G_TARGET:LANE_GRP_0:LANE_0A */ 1621 - #define SD25G_LANE_LANE_0A(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 40, 0, 1, 4) 1471 + /* SPARX5 ONLY */ 1472 + /* SD25G_TARGET:LANE_GRP_0:LANE_0A */ 1473 + #define SD25G_LANE_LANE_0A(t) \ 1474 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 40, 0, 1, 4) 1622 1475 1623 1476 #define SD25G_LANE_LANE_0A_LN_CFG_TXCAL_SHIFT_CODE_5_0 GENMASK(5, 0) 1624 1477 #define SD25G_LANE_LANE_0A_LN_CFG_TXCAL_SHIFT_CODE_5_0_SET(x)\ ··· 1628 1477 #define SD25G_LANE_LANE_0A_LN_CFG_TXCAL_SHIFT_CODE_5_0_GET(x)\ 1629 1478 FIELD_GET(SD25G_LANE_LANE_0A_LN_CFG_TXCAL_SHIFT_CODE_5_0, x) 1630 1479 1631 - /* SD25G_TARGET:LANE_GRP_0:LANE_0B */ 1632 - #define SD25G_LANE_LANE_0B(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 44, 0, 1, 4) 1480 + /* SPARX5 ONLY */ 1481 + /* SD25G_TARGET:LANE_GRP_0:LANE_0B */ 1482 + #define SD25G_LANE_LANE_0B(t) \ 1483 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 44, 0, 1, 4) 1633 1484 1634 1485 #define SD25G_LANE_LANE_0B_LN_CFG_TXCAL_MAN_EN BIT(0) 1635 1486 #define SD25G_LANE_LANE_0B_LN_CFG_TXCAL_MAN_EN_SET(x)\ ··· 1651 1498 #define SD25G_LANE_LANE_0B_LN_CFG_QUAD_MAN_1_0_GET(x)\ 1652 1499 FIELD_GET(SD25G_LANE_LANE_0B_LN_CFG_QUAD_MAN_1_0, x) 1653 1500 1654 - /* SD25G_TARGET:LANE_GRP_0:LANE_0C */ 1655 - #define SD25G_LANE_LANE_0C(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 48, 0, 1, 4) 1501 + /* SPARX5 ONLY */ 1502 + /* SD25G_TARGET:LANE_GRP_0:LANE_0C */ 1503 + #define SD25G_LANE_LANE_0C(t) \ 1504 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 48, 0, 1, 4) 1656 1505 1657 1506 #define SD25G_LANE_LANE_0C_LN_CFG_PMA_TX_CK_BITWIDTH_2_0 GENMASK(2, 0) 1658 1507 #define SD25G_LANE_LANE_0C_LN_CFG_PMA_TX_CK_BITWIDTH_2_0_SET(x)\ ··· 1674 1519 #define SD25G_LANE_LANE_0C_LN_CFG_RXTERM_PD_GET(x)\ 1675 1520 FIELD_GET(SD25G_LANE_LANE_0C_LN_CFG_RXTERM_PD, x) 1676 1521 1677 - /* SD25G_TARGET:LANE_GRP_0:LANE_0D */ 1678 - #define SD25G_LANE_LANE_0D(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 52, 0, 1, 4) 1522 + /* SPARX5 ONLY */ 1523 + /* SD25G_TARGET:LANE_GRP_0:LANE_0D */ 1524 + #define SD25G_LANE_LANE_0D(t) \ 1525 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 52, 0, 1, 4) 1679 1526 1680 1527 #define SD25G_LANE_LANE_0D_LN_CFG_RXTERM_2_0 GENMASK(2, 0) 1681 1528 #define SD25G_LANE_LANE_0D_LN_CFG_RXTERM_2_0_SET(x)\ ··· 1709 1552 #define SD25G_LANE_LANE_0D_LN_CFG_DFECK_EN_GET(x)\ 1710 1553 FIELD_GET(SD25G_LANE_LANE_0D_LN_CFG_DFECK_EN, x) 1711 1554 1712 - /* SD25G_TARGET:LANE_GRP_0:LANE_0E */ 1713 - #define SD25G_LANE_LANE_0E(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 56, 0, 1, 4) 1555 + /* SPARX5 ONLY */ 1556 + /* SD25G_TARGET:LANE_GRP_0:LANE_0E */ 1557 + #define SD25G_LANE_LANE_0E(t) \ 1558 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 56, 0, 1, 4) 1714 1559 1715 1560 #define SD25G_LANE_LANE_0E_LN_CFG_ISCAN_EN BIT(0) 1716 1561 #define SD25G_LANE_LANE_0E_LN_CFG_ISCAN_EN_SET(x)\ ··· 1738 1579 #define SD25G_LANE_LANE_0E_LN_CFG_DFEDIG_M_2_0_GET(x)\ 1739 1580 FIELD_GET(SD25G_LANE_LANE_0E_LN_CFG_DFEDIG_M_2_0, x) 1740 1581 1741 - /* SD25G_TARGET:LANE_GRP_0:LANE_0F */ 1742 - #define SD25G_LANE_LANE_0F(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 60, 0, 1, 4) 1582 + /* SPARX5 ONLY */ 1583 + /* SD25G_TARGET:LANE_GRP_0:LANE_0F */ 1584 + #define SD25G_LANE_LANE_0F(t) \ 1585 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 60, 0, 1, 4) 1743 1586 1744 1587 #define SD25G_LANE_LANE_0F_LN_CFG_DFETAP_EN_5_1 GENMASK(4, 0) 1745 1588 #define SD25G_LANE_LANE_0F_LN_CFG_DFETAP_EN_5_1_SET(x)\ ··· 1749 1588 #define SD25G_LANE_LANE_0F_LN_CFG_DFETAP_EN_5_1_GET(x)\ 1750 1589 FIELD_GET(SD25G_LANE_LANE_0F_LN_CFG_DFETAP_EN_5_1, x) 1751 1590 1752 - /* SD25G_TARGET:LANE_GRP_0:LANE_18 */ 1753 - #define SD25G_LANE_LANE_18(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 96, 0, 1, 4) 1591 + /* SPARX5 ONLY */ 1592 + /* SD25G_TARGET:LANE_GRP_0:LANE_18 */ 1593 + #define SD25G_LANE_LANE_18(t) \ 1594 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 96, 0, 1, 4) 1754 1595 1755 1596 #define SD25G_LANE_LANE_18_LN_CFG_CDRCK_EN BIT(0) 1756 1597 #define SD25G_LANE_LANE_18_LN_CFG_CDRCK_EN_SET(x)\ ··· 1784 1621 #define SD25G_LANE_LANE_18_LN_CFG_RXDIV_SEL_2_0_GET(x)\ 1785 1622 FIELD_GET(SD25G_LANE_LANE_18_LN_CFG_RXDIV_SEL_2_0, x) 1786 1623 1787 - /* SD25G_TARGET:LANE_GRP_0:LANE_19 */ 1788 - #define SD25G_LANE_LANE_19(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 100, 0, 1, 4) 1624 + /* SPARX5 ONLY */ 1625 + /* SD25G_TARGET:LANE_GRP_0:LANE_19 */ 1626 + #define SD25G_LANE_LANE_19(t) \ 1627 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 100, 0, 1, 4) 1789 1628 1790 1629 #define SD25G_LANE_LANE_19_LN_CFG_DCDR_PD BIT(0) 1791 1630 #define SD25G_LANE_LANE_19_LN_CFG_DCDR_PD_SET(x)\ ··· 1837 1672 #define SD25G_LANE_LANE_19_LN_CFG_PD_CTLE_GET(x)\ 1838 1673 FIELD_GET(SD25G_LANE_LANE_19_LN_CFG_PD_CTLE, x) 1839 1674 1840 - /* SD25G_TARGET:LANE_GRP_0:LANE_1A */ 1841 - #define SD25G_LANE_LANE_1A(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 104, 0, 1, 4) 1675 + /* SPARX5 ONLY */ 1676 + /* SD25G_TARGET:LANE_GRP_0:LANE_1A */ 1677 + #define SD25G_LANE_LANE_1A(t) \ 1678 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 104, 0, 1, 4) 1842 1679 1843 1680 #define SD25G_LANE_LANE_1A_LN_CFG_CTLE_TP_EN BIT(0) 1844 1681 #define SD25G_LANE_LANE_1A_LN_CFG_CTLE_TP_EN_SET(x)\ ··· 1854 1687 #define SD25G_LANE_LANE_1A_LN_CFG_CDR_KF_2_0_GET(x)\ 1855 1688 FIELD_GET(SD25G_LANE_LANE_1A_LN_CFG_CDR_KF_2_0, x) 1856 1689 1857 - /* SD25G_TARGET:LANE_GRP_0:LANE_1B */ 1858 - #define SD25G_LANE_LANE_1B(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 108, 0, 1, 4) 1690 + /* SPARX5 ONLY */ 1691 + /* SD25G_TARGET:LANE_GRP_0:LANE_1B */ 1692 + #define SD25G_LANE_LANE_1B(t) \ 1693 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 108, 0, 1, 4) 1859 1694 1860 1695 #define SD25G_LANE_LANE_1B_LN_CFG_CDR_M_7_0 GENMASK(7, 0) 1861 1696 #define SD25G_LANE_LANE_1B_LN_CFG_CDR_M_7_0_SET(x)\ ··· 1865 1696 #define SD25G_LANE_LANE_1B_LN_CFG_CDR_M_7_0_GET(x)\ 1866 1697 FIELD_GET(SD25G_LANE_LANE_1B_LN_CFG_CDR_M_7_0, x) 1867 1698 1868 - /* SD25G_TARGET:LANE_GRP_0:LANE_1C */ 1869 - #define SD25G_LANE_LANE_1C(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 112, 0, 1, 4) 1699 + /* SPARX5 ONLY */ 1700 + /* SD25G_TARGET:LANE_GRP_0:LANE_1C */ 1701 + #define SD25G_LANE_LANE_1C(t) \ 1702 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 112, 0, 1, 4) 1870 1703 1871 1704 #define SD25G_LANE_LANE_1C_LN_CFG_CDR_RSTN BIT(0) 1872 1705 #define SD25G_LANE_LANE_1C_LN_CFG_CDR_RSTN_SET(x)\ ··· 1894 1723 #define SD25G_LANE_LANE_1C_LN_CFG_EQC_FORCE_3_0_GET(x)\ 1895 1724 FIELD_GET(SD25G_LANE_LANE_1C_LN_CFG_EQC_FORCE_3_0, x) 1896 1725 1897 - /* SD25G_TARGET:LANE_GRP_0:LANE_1D */ 1898 - #define SD25G_LANE_LANE_1D(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 116, 0, 1, 4) 1726 + /* SPARX5 ONLY */ 1727 + /* SD25G_TARGET:LANE_GRP_0:LANE_1D */ 1728 + #define SD25G_LANE_LANE_1D(t) \ 1729 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 116, 0, 1, 4) 1899 1730 1900 1731 #define SD25G_LANE_LANE_1D_LN_CFG_ISCAN_EXT_OVR BIT(0) 1901 1732 #define SD25G_LANE_LANE_1D_LN_CFG_ISCAN_EXT_OVR_SET(x)\ ··· 1947 1774 #define SD25G_LANE_LANE_1D_LN_CFG_PI_HOLD_GET(x)\ 1948 1775 FIELD_GET(SD25G_LANE_LANE_1D_LN_CFG_PI_HOLD, x) 1949 1776 1950 - /* SD25G_TARGET:LANE_GRP_0:LANE_1E */ 1951 - #define SD25G_LANE_LANE_1E(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 120, 0, 1, 4) 1777 + /* SPARX5 ONLY */ 1778 + /* SD25G_TARGET:LANE_GRP_0:LANE_1E */ 1779 + #define SD25G_LANE_LANE_1E(t) \ 1780 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 120, 0, 1, 4) 1952 1781 1953 1782 #define SD25G_LANE_LANE_1E_LN_CFG_PI_STEPS_1_0 GENMASK(1, 0) 1954 1783 #define SD25G_LANE_LANE_1E_LN_CFG_PI_STEPS_1_0_SET(x)\ ··· 1982 1807 #define SD25G_LANE_LANE_1E_LN_CFG_PMAD_CK_PD_GET(x)\ 1983 1808 FIELD_GET(SD25G_LANE_LANE_1E_LN_CFG_PMAD_CK_PD, x) 1984 1809 1985 - /* SD25G_TARGET:LANE_GRP_0:LANE_21 */ 1986 - #define SD25G_LANE_LANE_21(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 132, 0, 1, 4) 1810 + /* SPARX5 ONLY */ 1811 + /* SD25G_TARGET:LANE_GRP_0:LANE_21 */ 1812 + #define SD25G_LANE_LANE_21(t) \ 1813 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 132, 0, 1, 4) 1987 1814 1988 1815 #define SD25G_LANE_LANE_21_LN_CFG_VGA_CTRL_BYP_4_0 GENMASK(4, 0) 1989 1816 #define SD25G_LANE_LANE_21_LN_CFG_VGA_CTRL_BYP_4_0_SET(x)\ ··· 1993 1816 #define SD25G_LANE_LANE_21_LN_CFG_VGA_CTRL_BYP_4_0_GET(x)\ 1994 1817 FIELD_GET(SD25G_LANE_LANE_21_LN_CFG_VGA_CTRL_BYP_4_0, x) 1995 1818 1996 - /* SD25G_TARGET:LANE_GRP_0:LANE_22 */ 1997 - #define SD25G_LANE_LANE_22(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 136, 0, 1, 4) 1819 + /* SPARX5 ONLY */ 1820 + /* SD25G_TARGET:LANE_GRP_0:LANE_22 */ 1821 + #define SD25G_LANE_LANE_22(t) \ 1822 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 136, 0, 1, 4) 1998 1823 1999 1824 #define SD25G_LANE_LANE_22_LN_CFG_EQR_FORCE_3_0 GENMASK(3, 0) 2000 1825 #define SD25G_LANE_LANE_22_LN_CFG_EQR_FORCE_3_0_SET(x)\ ··· 2004 1825 #define SD25G_LANE_LANE_22_LN_CFG_EQR_FORCE_3_0_GET(x)\ 2005 1826 FIELD_GET(SD25G_LANE_LANE_22_LN_CFG_EQR_FORCE_3_0, x) 2006 1827 2007 - /* SD25G_TARGET:LANE_GRP_0:LANE_25 */ 2008 - #define SD25G_LANE_LANE_25(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 148, 0, 1, 4) 1828 + /* SPARX5 ONLY */ 1829 + /* SD25G_TARGET:LANE_GRP_0:LANE_25 */ 1830 + #define SD25G_LANE_LANE_25(t) \ 1831 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 148, 0, 1, 4) 2009 1832 2010 1833 #define SD25G_LANE_LANE_25_LN_CFG_INIT_POS_ISCAN_6_0 GENMASK(6, 0) 2011 1834 #define SD25G_LANE_LANE_25_LN_CFG_INIT_POS_ISCAN_6_0_SET(x)\ ··· 2015 1834 #define SD25G_LANE_LANE_25_LN_CFG_INIT_POS_ISCAN_6_0_GET(x)\ 2016 1835 FIELD_GET(SD25G_LANE_LANE_25_LN_CFG_INIT_POS_ISCAN_6_0, x) 2017 1836 2018 - /* SD25G_TARGET:LANE_GRP_0:LANE_26 */ 2019 - #define SD25G_LANE_LANE_26(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 152, 0, 1, 4) 1837 + /* SPARX5 ONLY */ 1838 + /* SD25G_TARGET:LANE_GRP_0:LANE_26 */ 1839 + #define SD25G_LANE_LANE_26(t) \ 1840 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 152, 0, 1, 4) 2020 1841 2021 1842 #define SD25G_LANE_LANE_26_LN_CFG_INIT_POS_IPI_6_0 GENMASK(6, 0) 2022 1843 #define SD25G_LANE_LANE_26_LN_CFG_INIT_POS_IPI_6_0_SET(x)\ ··· 2026 1843 #define SD25G_LANE_LANE_26_LN_CFG_INIT_POS_IPI_6_0_GET(x)\ 2027 1844 FIELD_GET(SD25G_LANE_LANE_26_LN_CFG_INIT_POS_IPI_6_0, x) 2028 1845 2029 - /* SD25G_TARGET:LANE_GRP_0:LANE_28 */ 2030 - #define SD25G_LANE_LANE_28(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 160, 0, 1, 4) 1846 + /* SPARX5 ONLY */ 1847 + /* SD25G_TARGET:LANE_GRP_0:LANE_28 */ 1848 + #define SD25G_LANE_LANE_28(t) \ 1849 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 160, 0, 1, 4) 2031 1850 2032 1851 #define SD25G_LANE_LANE_28_LN_CFG_ISCAN_MODE_EN BIT(0) 2033 1852 #define SD25G_LANE_LANE_28_LN_CFG_ISCAN_MODE_EN_SET(x)\ ··· 2055 1870 #define SD25G_LANE_LANE_28_LN_CFG_RX_SUBRATE_2_0_GET(x)\ 2056 1871 FIELD_GET(SD25G_LANE_LANE_28_LN_CFG_RX_SUBRATE_2_0, x) 2057 1872 2058 - /* SD25G_TARGET:LANE_GRP_0:LANE_2B */ 2059 - #define SD25G_LANE_LANE_2B(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 172, 0, 1, 4) 1873 + /* SPARX5 ONLY */ 1874 + /* SD25G_TARGET:LANE_GRP_0:LANE_2B */ 1875 + #define SD25G_LANE_LANE_2B(t) \ 1876 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 172, 0, 1, 4) 2060 1877 2061 1878 #define SD25G_LANE_LANE_2B_LN_CFG_PI_BW_3_0 GENMASK(3, 0) 2062 1879 #define SD25G_LANE_LANE_2B_LN_CFG_PI_BW_3_0_SET(x)\ ··· 2078 1891 #define SD25G_LANE_LANE_2B_LN_CFG_RSTN_TXDUPU_GET(x)\ 2079 1892 FIELD_GET(SD25G_LANE_LANE_2B_LN_CFG_RSTN_TXDUPU, x) 2080 1893 2081 - /* SD25G_TARGET:LANE_GRP_0:LANE_2C */ 2082 - #define SD25G_LANE_LANE_2C(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 176, 0, 1, 4) 1894 + /* SPARX5 ONLY */ 1895 + /* SD25G_TARGET:LANE_GRP_0:LANE_2C */ 1896 + #define SD25G_LANE_LANE_2C(t) \ 1897 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 176, 0, 1, 4) 2083 1898 2084 1899 #define SD25G_LANE_LANE_2C_LN_CFG_TX_SUBRATE_2_0 GENMASK(2, 0) 2085 1900 #define SD25G_LANE_LANE_2C_LN_CFG_TX_SUBRATE_2_0_SET(x)\ ··· 2095 1906 #define SD25G_LANE_LANE_2C_LN_CFG_DIS_2NDORDER_GET(x)\ 2096 1907 FIELD_GET(SD25G_LANE_LANE_2C_LN_CFG_DIS_2NDORDER, x) 2097 1908 2098 - /* SD25G_TARGET:LANE_GRP_0:LANE_2D */ 2099 - #define SD25G_LANE_LANE_2D(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 180, 0, 1, 4) 1909 + /* SPARX5 ONLY */ 1910 + /* SD25G_TARGET:LANE_GRP_0:LANE_2D */ 1911 + #define SD25G_LANE_LANE_2D(t) \ 1912 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 180, 0, 1, 4) 2100 1913 2101 1914 #define SD25G_LANE_LANE_2D_LN_CFG_ALOS_THR_2_0 GENMASK(2, 0) 2102 1915 #define SD25G_LANE_LANE_2D_LN_CFG_ALOS_THR_2_0_SET(x)\ ··· 2112 1921 #define SD25G_LANE_LANE_2D_LN_CFG_SAT_CNTSEL_2_0_GET(x)\ 2113 1922 FIELD_GET(SD25G_LANE_LANE_2D_LN_CFG_SAT_CNTSEL_2_0, x) 2114 1923 2115 - /* SD25G_TARGET:LANE_GRP_0:LANE_2E */ 2116 - #define SD25G_LANE_LANE_2E(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 184, 0, 1, 4) 1924 + /* SPARX5 ONLY */ 1925 + /* SD25G_TARGET:LANE_GRP_0:LANE_2E */ 1926 + #define SD25G_LANE_LANE_2E(t) \ 1927 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 184, 0, 1, 4) 2117 1928 2118 1929 #define SD25G_LANE_LANE_2E_LN_CFG_EN_FAST_ISCAN BIT(0) 2119 1930 #define SD25G_LANE_LANE_2E_LN_CFG_EN_FAST_ISCAN_SET(x)\ ··· 2165 1972 #define SD25G_LANE_LANE_2E_LN_CFG_CTLE_RSTN_GET(x)\ 2166 1973 FIELD_GET(SD25G_LANE_LANE_2E_LN_CFG_CTLE_RSTN, x) 2167 1974 2168 - /* SD25G_TARGET:LANE_GRP_0:LANE_40 */ 2169 - #define SD25G_LANE_LANE_40(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 256, 0, 1, 4) 1975 + /* SPARX5 ONLY */ 1976 + /* SD25G_TARGET:LANE_GRP_0:LANE_40 */ 1977 + #define SD25G_LANE_LANE_40(t) \ 1978 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 256, 0, 1, 4) 2170 1979 2171 1980 #define SD25G_LANE_LANE_40_LN_R_TX_BIT_REVERSE BIT(0) 2172 1981 #define SD25G_LANE_LANE_40_LN_R_TX_BIT_REVERSE_SET(x)\ ··· 2212 2017 #define SD25G_LANE_LANE_40_LN_R_CTLE_RSTN_GET(x)\ 2213 2018 FIELD_GET(SD25G_LANE_LANE_40_LN_R_CTLE_RSTN, x) 2214 2019 2215 - /* SD25G_TARGET:LANE_GRP_0:LANE_42 */ 2216 - #define SD25G_LANE_LANE_42(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 264, 0, 1, 4) 2020 + /* SPARX5 ONLY */ 2021 + /* SD25G_TARGET:LANE_GRP_0:LANE_42 */ 2022 + #define SD25G_LANE_LANE_42(t) \ 2023 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 264, 0, 1, 4) 2217 2024 2218 2025 #define SD25G_LANE_LANE_42_LN_CFG_TX_RESERVE_7_0 GENMASK(7, 0) 2219 2026 #define SD25G_LANE_LANE_42_LN_CFG_TX_RESERVE_7_0_SET(x)\ ··· 2223 2026 #define SD25G_LANE_LANE_42_LN_CFG_TX_RESERVE_7_0_GET(x)\ 2224 2027 FIELD_GET(SD25G_LANE_LANE_42_LN_CFG_TX_RESERVE_7_0, x) 2225 2028 2226 - /* SD25G_TARGET:LANE_GRP_0:LANE_43 */ 2227 - #define SD25G_LANE_LANE_43(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 268, 0, 1, 4) 2029 + /* SPARX5 ONLY */ 2030 + /* SD25G_TARGET:LANE_GRP_0:LANE_43 */ 2031 + #define SD25G_LANE_LANE_43(t) \ 2032 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 268, 0, 1, 4) 2228 2033 2229 2034 #define SD25G_LANE_LANE_43_LN_CFG_TX_RESERVE_15_8 GENMASK(7, 0) 2230 2035 #define SD25G_LANE_LANE_43_LN_CFG_TX_RESERVE_15_8_SET(x)\ ··· 2234 2035 #define SD25G_LANE_LANE_43_LN_CFG_TX_RESERVE_15_8_GET(x)\ 2235 2036 FIELD_GET(SD25G_LANE_LANE_43_LN_CFG_TX_RESERVE_15_8, x) 2236 2037 2237 - /* SD25G_TARGET:LANE_GRP_0:LANE_44 */ 2238 - #define SD25G_LANE_LANE_44(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 272, 0, 1, 4) 2038 + /* SPARX5 ONLY */ 2039 + /* SD25G_TARGET:LANE_GRP_0:LANE_44 */ 2040 + #define SD25G_LANE_LANE_44(t) \ 2041 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 272, 0, 1, 4) 2239 2042 2240 2043 #define SD25G_LANE_LANE_44_LN_CFG_RX_RESERVE_7_0 GENMASK(7, 0) 2241 2044 #define SD25G_LANE_LANE_44_LN_CFG_RX_RESERVE_7_0_SET(x)\ ··· 2245 2044 #define SD25G_LANE_LANE_44_LN_CFG_RX_RESERVE_7_0_GET(x)\ 2246 2045 FIELD_GET(SD25G_LANE_LANE_44_LN_CFG_RX_RESERVE_7_0, x) 2247 2046 2248 - /* SD25G_TARGET:LANE_GRP_0:LANE_45 */ 2249 - #define SD25G_LANE_LANE_45(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 276, 0, 1, 4) 2047 + /* SPARX5 ONLY */ 2048 + /* SD25G_TARGET:LANE_GRP_0:LANE_45 */ 2049 + #define SD25G_LANE_LANE_45(t) \ 2050 + __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 276, 0, 1, 4) 2250 2051 2251 2052 #define SD25G_LANE_LANE_45_LN_CFG_RX_RESERVE_15_8 GENMASK(7, 0) 2252 2053 #define SD25G_LANE_LANE_45_LN_CFG_RX_RESERVE_15_8_SET(x)\ ··· 2256 2053 #define SD25G_LANE_LANE_45_LN_CFG_RX_RESERVE_15_8_GET(x)\ 2257 2054 FIELD_GET(SD25G_LANE_LANE_45_LN_CFG_RX_RESERVE_15_8, x) 2258 2055 2259 - /* SD25G_TARGET:LANE_GRP_1:LANE_DE */ 2260 - #define SD25G_LANE_LANE_DE(t) __REG(TARGET_SD25G_LANE, t, 8, 1792, 0, 1, 128, 120, 0, 1, 4) 2056 + /* SPARX5 ONLY */ 2057 + /* SD25G_TARGET:LANE_GRP_1:LANE_DE */ 2058 + #define SD25G_LANE_LANE_DE(t) \ 2059 + __REG(TARGET_SD25G_LANE, t, 8, 1792, 0, 1, 128, 120, 0, 1, 4) 2261 2060 2262 2061 #define SD25G_LANE_LANE_DE_LN_LOL_UDL BIT(0) 2263 2062 #define SD25G_LANE_LANE_DE_LN_LOL_UDL_SET(x)\ ··· 2285 2080 #define SD25G_LANE_LANE_DE_LN_PMA_RXEI_GET(x)\ 2286 2081 FIELD_GET(SD25G_LANE_LANE_DE_LN_PMA_RXEI, x) 2287 2082 2288 - /* SD10G_LANE_TARGET:LANE_GRP_8:LANE_DF */ 2289 - #define SD6G_LANE_LANE_DF(t) __REG(TARGET_SD6G_LANE, t, 13, 832, 0, 1, 84, 60, 0, 1, 4) 2083 + /* SPARX5 ONLY */ 2084 + /* SD10G_LANE_TARGET:LANE_GRP_8:LANE_DF */ 2085 + #define SD6G_LANE_LANE_DF(t) \ 2086 + __REG(TARGET_SD6G_LANE, t, 13, 832, 0, 1, 84, 60, 0, 1, 4) 2290 2087 2291 2088 #define SD6G_LANE_LANE_DF_LOL_UDL BIT(0) 2292 2089 #define SD6G_LANE_LANE_DF_LOL_UDL_SET(x)\ ··· 2314 2107 #define SD6G_LANE_LANE_DF_SQUELCH_GET(x)\ 2315 2108 FIELD_GET(SD6G_LANE_LANE_DF_SQUELCH, x) 2316 2109 2317 - /* SD10G_CMU_TARGET:CMU_GRP_0:CMU_00 */ 2318 - #define SD_CMU_CMU_00(t) __REG(TARGET_SD_CMU, t, 14, 0, 0, 1, 20, 0, 0, 1, 4) 2110 + /* SD10G_CMU_TARGET:CMU_GRP_0:CMU_00 */ 2111 + #define SD_CMU_CMU_00(t) \ 2112 + __REG(TARGET_SD_CMU, t, TSIZE(TC_SD_CMU), 0, 0, 1, 20, 0, 0, 1, 4) 2319 2113 2320 2114 #define SD_CMU_CMU_00_R_HWT_SIMULATION_MODE BIT(0) 2321 2115 #define SD_CMU_CMU_00_R_HWT_SIMULATION_MODE_SET(x)\ ··· 2342 2134 #define SD_CMU_CMU_00_CFG_PLL_TP_SEL_1_0_GET(x)\ 2343 2135 FIELD_GET(SD_CMU_CMU_00_CFG_PLL_TP_SEL_1_0, x) 2344 2136 2345 - /* SD10G_CMU_TARGET:CMU_GRP_1:CMU_05 */ 2346 - #define SD_CMU_CMU_05(t) __REG(TARGET_SD_CMU, t, 14, 20, 0, 1, 72, 0, 0, 1, 4) 2137 + /* SD10G_CMU_TARGET:CMU_GRP_1:CMU_05 */ 2138 + #define SD_CMU_CMU_05(t) \ 2139 + __REG(TARGET_SD_CMU, t, TSIZE(TC_SD_CMU), 20, 0, 1, 72, 0, 0, 1, 4) 2347 2140 2348 2141 #define SD_CMU_CMU_05_CFG_REFCK_TERM_EN BIT(0) 2349 2142 #define SD_CMU_CMU_05_CFG_REFCK_TERM_EN_SET(x)\ ··· 2358 2149 #define SD_CMU_CMU_05_CFG_BIAS_TP_SEL_1_0_GET(x)\ 2359 2150 FIELD_GET(SD_CMU_CMU_05_CFG_BIAS_TP_SEL_1_0, x) 2360 2151 2361 - /* SD10G_CMU_TARGET:CMU_GRP_1:CMU_06 */ 2362 - #define SD_CMU_CMU_06(t) \ 2363 - __REG(TARGET_SD_CMU, t, 14, 20, 0, 1, 72, 4, 0, 1, 4) 2152 + /* SD10G_CMU_TARGET:CMU_GRP_1:CMU_06 */ 2153 + #define SD_CMU_CMU_06(t) \ 2154 + __REG(TARGET_SD_CMU, t, TSIZE(TC_SD_CMU), 20, 0, 1, 72, 4, 0, 1, 4) 2364 2155 2365 2156 #define SD_CMU_CMU_06_CFG_DISLOS BIT(0) 2366 2157 #define SD_CMU_CMU_06_CFG_DISLOS_SET(x)\ ··· 2410 2201 #define SD_CMU_CMU_06_CFG_VCO_CAL_BYP_GET(x)\ 2411 2202 FIELD_GET(SD_CMU_CMU_06_CFG_VCO_CAL_BYP, x) 2412 2203 2413 - /* SD10G_CMU_TARGET:CMU_GRP_1:CMU_08 */ 2414 - #define SD_CMU_CMU_08(t) \ 2415 - __REG(TARGET_SD_CMU, t, 14, 20, 0, 1, 72, 12, 0, 1, 4) 2204 + /* SD10G_CMU_TARGET:CMU_GRP_1:CMU_08 */ 2205 + #define SD_CMU_CMU_08(t) \ 2206 + __REG(TARGET_SD_CMU, t, TSIZE(TC_SD_CMU), 20, 0, 1, 72, 12, 0, 1, 4) 2416 2207 2417 2208 #define SD_CMU_CMU_08_CFG_VFILT2PAD BIT(0) 2418 2209 #define SD_CMU_CMU_08_CFG_VFILT2PAD_SET(x)\ ··· 2444 2235 #define SD_CMU_CMU_08_CFG_RST_TREE_PD_MAN_EN_GET(x)\ 2445 2236 FIELD_GET(SD_CMU_CMU_08_CFG_RST_TREE_PD_MAN_EN, x) 2446 2237 2447 - /* SD10G_CMU_TARGET:CMU_GRP_1:CMU_09 */ 2448 - #define SD_CMU_CMU_09(t) __REG(TARGET_SD_CMU, t, 14, 20, 0, 1, 72, 16, 0, 1, 4) 2238 + /* SD10G_CMU_TARGET:CMU_GRP_1:CMU_09 */ 2239 + #define SD_CMU_CMU_09(t) \ 2240 + __REG(TARGET_SD_CMU, t, TSIZE(TC_SD_CMU), 20, 0, 1, 72, 16, 0, 1, 4) 2449 2241 2450 2242 #define SD_CMU_CMU_09_CFG_EN_TX_CK_UP BIT(0) 2451 2243 #define SD_CMU_CMU_09_CFG_EN_TX_CK_UP_SET(x)\ ··· 2472 2262 #define SD_CMU_CMU_09_CFG_SW_10G_GET(x)\ 2473 2263 FIELD_GET(SD_CMU_CMU_09_CFG_SW_10G, x) 2474 2264 2475 - /* SD10G_CMU_TARGET:CMU_GRP_1:CMU_0D */ 2476 - #define SD_CMU_CMU_0D(t) __REG(TARGET_SD_CMU, t, 14, 20, 0, 1, 72, 32, 0, 1, 4) 2265 + /* SD10G_CMU_TARGET:CMU_GRP_1:CMU_0D */ 2266 + #define SD_CMU_CMU_0D(t) \ 2267 + __REG(TARGET_SD_CMU, t, TSIZE(TC_SD_CMU), 20, 0, 1, 72, 32, 0, 1, 4) 2477 2268 2478 2269 #define SD_CMU_CMU_0D_CFG_PD_DIV64 BIT(0) 2479 2270 #define SD_CMU_CMU_0D_CFG_PD_DIV64_SET(x)\ ··· 2506 2295 #define SD_CMU_CMU_0D_CFG_REFCK_PD_GET(x)\ 2507 2296 FIELD_GET(SD_CMU_CMU_0D_CFG_REFCK_PD, x) 2508 2297 2509 - /* SD10G_CMU_TARGET:CMU_GRP_3:CMU_1B */ 2510 - #define SD_CMU_CMU_1B(t) __REG(TARGET_SD_CMU, t, 14, 104, 0, 1, 20, 4, 0, 1, 4) 2298 + /* SD10G_CMU_TARGET:CMU_GRP_3:CMU_1B */ 2299 + #define SD_CMU_CMU_1B(t) \ 2300 + __REG(TARGET_SD_CMU, t, TSIZE(TC_SD_CMU), 104, 0, 1, 20, 4, 0, 1, 4) 2511 2301 2512 2302 #define SD_CMU_CMU_1B_CFG_RESERVE_7_0 GENMASK(7, 0) 2513 2303 #define SD_CMU_CMU_1B_CFG_RESERVE_7_0_SET(x)\ ··· 2516 2304 #define SD_CMU_CMU_1B_CFG_RESERVE_7_0_GET(x)\ 2517 2305 FIELD_GET(SD_CMU_CMU_1B_CFG_RESERVE_7_0, x) 2518 2306 2519 - /* SD10G_CMU_TARGET:CMU_GRP_4:CMU_1F */ 2520 - #define SD_CMU_CMU_1F(t) __REG(TARGET_SD_CMU, t, 14, 124, 0, 1, 68, 0, 0, 1, 4) 2307 + /* SD10G_CMU_TARGET:CMU_GRP_4:CMU_1F */ 2308 + #define SD_CMU_CMU_1F(t) \ 2309 + __REG(TARGET_SD_CMU, t, TSIZE(TC_SD_CMU), 124, 0, 1, 68, 0, 0, 1, 4) 2521 2310 2522 2311 #define SD_CMU_CMU_1F_CFG_BIAS_DN_EN BIT(0) 2523 2312 #define SD_CMU_CMU_1F_CFG_BIAS_DN_EN_SET(x)\ ··· 2544 2331 #define SD_CMU_CMU_1F_CFG_VTUNE_SEL_GET(x)\ 2545 2332 FIELD_GET(SD_CMU_CMU_1F_CFG_VTUNE_SEL, x) 2546 2333 2547 - /* SD10G_CMU_TARGET:CMU_GRP_5:CMU_30 */ 2548 - #define SD_CMU_CMU_30(t) __REG(TARGET_SD_CMU, t, 14, 192, 0, 1, 72, 0, 0, 1, 4) 2334 + /* SD10G_CMU_TARGET:CMU_GRP_5:CMU_30 */ 2335 + #define SD_CMU_CMU_30(t) \ 2336 + __REG(TARGET_SD_CMU, t, TSIZE(TC_SD_CMU), 192, 0, 1, 72, 0, 0, 1, 4) 2549 2337 2550 2338 #define SD_CMU_CMU_30_R_PLL_DLOL_EN BIT(0) 2551 2339 #define SD_CMU_CMU_30_R_PLL_DLOL_EN_SET(x)\ ··· 2554 2340 #define SD_CMU_CMU_30_R_PLL_DLOL_EN_GET(x)\ 2555 2341 FIELD_GET(SD_CMU_CMU_30_R_PLL_DLOL_EN, x) 2556 2342 2557 - /* SD10G_CMU_TARGET:CMU_GRP_6:CMU_44 */ 2558 - #define SD_CMU_CMU_44(t) __REG(TARGET_SD_CMU, t, 14, 264, 0, 1, 632, 8, 0, 1, 4) 2343 + /* SD10G_CMU_TARGET:CMU_GRP_6:CMU_44 */ 2344 + #define SD_CMU_CMU_44(t) \ 2345 + __REG(TARGET_SD_CMU, t, TSIZE(TC_SD_CMU), 264, 0, 1, 632, 8, 0, 1, 4) 2559 2346 2560 2347 #define SD_CMU_CMU_44_R_PLL_RSTN BIT(0) 2561 2348 #define SD_CMU_CMU_44_R_PLL_RSTN_SET(x)\ ··· 2570 2355 #define SD_CMU_CMU_44_R_CK_RESETB_GET(x)\ 2571 2356 FIELD_GET(SD_CMU_CMU_44_R_CK_RESETB, x) 2572 2357 2573 - /* SD10G_CMU_TARGET:CMU_GRP_6:CMU_45 */ 2574 - #define SD_CMU_CMU_45(t) __REG(TARGET_SD_CMU, t, 14, 264, 0, 1, 632, 12, 0, 1, 4) 2358 + /* SD10G_CMU_TARGET:CMU_GRP_6:CMU_45 */ 2359 + #define SD_CMU_CMU_45(t) \ 2360 + __REG(TARGET_SD_CMU, t, TSIZE(TC_SD_CMU), 264, 0, 1, 632, 12, 0, 1, 4) 2575 2361 2576 2362 #define SD_CMU_CMU_45_R_EN_RATECHG_CTRL BIT(0) 2577 2363 #define SD_CMU_CMU_45_R_EN_RATECHG_CTRL_SET(x)\ ··· 2622 2406 #define SD_CMU_CMU_45_R_AUTO_RST_TREE_PD_MAN_GET(x)\ 2623 2407 FIELD_GET(SD_CMU_CMU_45_R_AUTO_RST_TREE_PD_MAN, x) 2624 2408 2625 - /* SD10G_CMU_TARGET:CMU_GRP_6:CMU_47 */ 2626 - #define SD_CMU_CMU_47(t) __REG(TARGET_SD_CMU, t, 14, 264, 0, 1, 632, 20, 0, 1, 4) 2409 + /* SD10G_CMU_TARGET:CMU_GRP_6:CMU_47 */ 2410 + #define SD_CMU_CMU_47(t) \ 2411 + __REG(TARGET_SD_CMU, t, TSIZE(TC_SD_CMU), 264, 0, 1, 632, 20, 0, 1, 4) 2627 2412 2628 2413 #define SD_CMU_CMU_47_R_PCS2PMA_PHYMODE_4_0 GENMASK(4, 0) 2629 2414 #define SD_CMU_CMU_47_R_PCS2PMA_PHYMODE_4_0_SET(x)\ ··· 2632 2415 #define SD_CMU_CMU_47_R_PCS2PMA_PHYMODE_4_0_GET(x)\ 2633 2416 FIELD_GET(SD_CMU_CMU_47_R_PCS2PMA_PHYMODE_4_0, x) 2634 2417 2635 - /* SD10G_CMU_TARGET:CMU_GRP_7:CMU_E0 */ 2636 - #define SD_CMU_CMU_E0(t) __REG(TARGET_SD_CMU, t, 14, 896, 0, 1, 8, 0, 0, 1, 4) 2418 + /* SD10G_CMU_TARGET:CMU_GRP_7:CMU_E0 */ 2419 + #define SD_CMU_CMU_E0(t) \ 2420 + __REG(TARGET_SD_CMU, t, TSIZE(TC_SD_CMU), 896, 0, 1, 8, 0, 0, 1, 4) 2637 2421 2638 2422 #define SD_CMU_CMU_E0_READ_VCO_CTUNE_3_0 GENMASK(3, 0) 2639 2423 #define SD_CMU_CMU_E0_READ_VCO_CTUNE_3_0_SET(x)\ ··· 2648 2430 #define SD_CMU_CMU_E0_PLL_LOL_UDL_GET(x)\ 2649 2431 FIELD_GET(SD_CMU_CMU_E0_PLL_LOL_UDL, x) 2650 2432 2651 - /* SD_CMU_TARGET:SD_CMU_CFG:SD_CMU_CFG */ 2652 - #define SD_CMU_CFG_SD_CMU_CFG(t) __REG(TARGET_SD_CMU_CFG, t, 14, 0, 0, 1, 8, 0, 0, 1, 4) 2433 + /* SD_CMU_TARGET:SD_CMU_CFG:SD_CMU_CFG */ 2434 + #define SD_CMU_CFG_SD_CMU_CFG(t) \ 2435 + __REG(TARGET_SD_CMU_CFG, t, TSIZE(TC_SD_CMU_CFG), 0, 0, 1, 8, 0, 0, 1, \ 2436 + 4) 2653 2437 2654 2438 #define SD_CMU_CFG_SD_CMU_CFG_CMU_RST BIT(0) 2655 2439 #define SD_CMU_CFG_SD_CMU_CFG_CMU_RST_SET(x)\ ··· 2665 2445 #define SD_CMU_CFG_SD_CMU_CFG_EXT_CFG_RST_GET(x)\ 2666 2446 FIELD_GET(SD_CMU_CFG_SD_CMU_CFG_EXT_CFG_RST, x) 2667 2447 2668 - /* SD_LANE_TARGET:SD_RESET:SD_SER_RST */ 2669 - #define SD_LANE_SD_SER_RST(t) __REG(TARGET_SD_LANE, t, 25, 0, 0, 1, 8, 0, 0, 1, 4) 2448 + /* SD_LANE_TARGET:SD_RESET:SD_SER_RST */ 2449 + #define SD_LANE_SD_SER_RST(t) \ 2450 + __REG(TARGET_SD_LANE, t, TSIZE(TC_SD_LANE), 0, 0, 1, 8, 0, 0, 1, 4) 2670 2451 2671 2452 #define SD_LANE_SD_SER_RST_SER_RST BIT(0) 2672 2453 #define SD_LANE_SD_SER_RST_SER_RST_SET(x)\ ··· 2675 2454 #define SD_LANE_SD_SER_RST_SER_RST_GET(x)\ 2676 2455 FIELD_GET(SD_LANE_SD_SER_RST_SER_RST, x) 2677 2456 2678 - /* SD_LANE_TARGET:SD_RESET:SD_DES_RST */ 2679 - #define SD_LANE_SD_DES_RST(t) __REG(TARGET_SD_LANE, t, 25, 0, 0, 1, 8, 4, 0, 1, 4) 2457 + /* SD_LANE_TARGET:SD_RESET:SD_DES_RST */ 2458 + #define SD_LANE_SD_DES_RST(t) \ 2459 + __REG(TARGET_SD_LANE, t, TSIZE(TC_SD_LANE), 0, 0, 1, 8, 4, 0, 1, 4) 2680 2460 2681 2461 #define SD_LANE_SD_DES_RST_DES_RST BIT(0) 2682 2462 #define SD_LANE_SD_DES_RST_DES_RST_SET(x)\ ··· 2685 2463 #define SD_LANE_SD_DES_RST_DES_RST_GET(x)\ 2686 2464 FIELD_GET(SD_LANE_SD_DES_RST_DES_RST, x) 2687 2465 2688 - /* SD_LANE_TARGET:SD_LANE_CFG_STAT:SD_LANE_CFG */ 2689 - #define SD_LANE_SD_LANE_CFG(t) __REG(TARGET_SD_LANE, t, 25, 8, 0, 1, 8, 0, 0, 1, 4) 2466 + /* SD_LANE_TARGET:SD_LANE_CFG_STAT:SD_LANE_CFG */ 2467 + #define SD_LANE_SD_LANE_CFG(t) \ 2468 + __REG(TARGET_SD_LANE, t, TSIZE(TC_SD_LANE), 8, 0, 1, 8, 0, 0, 1, 4) 2690 2469 2691 2470 #define SD_LANE_SD_LANE_CFG_MACRO_RST BIT(0) 2692 2471 #define SD_LANE_SD_LANE_CFG_MACRO_RST_SET(x)\ ··· 2731 2508 #define SD_LANE_SD_LANE_CFG_LANE_RX_RST_GET(x)\ 2732 2509 FIELD_GET(SD_LANE_SD_LANE_CFG_LANE_RX_RST, x) 2733 2510 2734 - /* SD_LANE_TARGET:SD_LANE_CFG_STAT:SD_LANE_STAT */ 2735 - #define SD_LANE_SD_LANE_STAT(t) __REG(TARGET_SD_LANE, t, 25, 8, 0, 1, 8, 4, 0, 1, 4) 2511 + /* SD_LANE_TARGET:SD_LANE_CFG_STAT:SD_LANE_STAT */ 2512 + #define SD_LANE_SD_LANE_STAT(t) \ 2513 + __REG(TARGET_SD_LANE, t, TSIZE(TC_SD_LANE), 8, 0, 1, 8, 4, 0, 1, 4) 2736 2514 2737 2515 #define SD_LANE_SD_LANE_STAT_PMA_RST_DONE BIT(0) 2738 2516 #define SD_LANE_SD_LANE_STAT_PMA_RST_DONE_SET(x)\ ··· 2753 2529 #define SD_LANE_SD_LANE_STAT_DBG_OBS_GET(x)\ 2754 2530 FIELD_GET(SD_LANE_SD_LANE_STAT_DBG_OBS, x) 2755 2531 2756 - /* SD_LANE_TARGET:SD_PWR_CFG:QUIET_MODE_6G */ 2757 - #define SD_LANE_QUIET_MODE_6G(t) \ 2758 - __REG(TARGET_SD_LANE, t, 25, 24, 0, 1, 8, 4, 0, 1, 4) 2532 + /* SD_LANE_TARGET:SD_PWR_CFG:QUIET_MODE_6G */ 2533 + #define SD_LANE_QUIET_MODE_6G(t) \ 2534 + __REG(TARGET_SD_LANE, t, TSIZE(TC_SD_LANE), 24, 0, 1, 8, 4, 0, 1, 4) 2759 2535 2760 2536 #define SD_LANE_QUIET_MODE_6G_QUIET_MODE GENMASK(24, 0) 2761 2537 #define SD_LANE_QUIET_MODE_6G_QUIET_MODE_SET(x)\ ··· 2763 2539 #define SD_LANE_QUIET_MODE_6G_QUIET_MODE_GET(x)\ 2764 2540 FIELD_GET(SD_LANE_QUIET_MODE_6G_QUIET_MODE, x) 2765 2541 2766 - /* SD_LANE_TARGET:CFG_STAT_FX100:MISC */ 2767 - #define SD_LANE_MISC(t) __REG(TARGET_SD_LANE, t, 25, 56, 0, 1, 56, 0, 0, 1, 4) 2542 + /* SD_LANE_TARGET:CFG_STAT_FX100:MISC */ 2543 + #define SD_LANE_MISC(t) \ 2544 + __REG(TARGET_SD_LANE, t, TSIZE(TC_SD_LANE), 56, 0, 1, 56, 0, 0, 1, 4) 2768 2545 2769 2546 #define SD_LANE_MISC_SD_125_RST_DIS BIT(0) 2770 2547 #define SD_LANE_MISC_SD_125_RST_DIS_SET(x)\ ··· 2785 2560 #define SD_LANE_MISC_MUX_ENA_GET(x)\ 2786 2561 FIELD_GET(SD_LANE_MISC_MUX_ENA, x) 2787 2562 2563 + /* SPARX5 ONLY */ 2788 2564 #define SD_LANE_MISC_CORE_CLK_FREQ GENMASK(5, 4) 2789 2565 #define SD_LANE_MISC_CORE_CLK_FREQ_SET(x)\ 2790 2566 FIELD_PREP(SD_LANE_MISC_CORE_CLK_FREQ, x) 2791 2567 #define SD_LANE_MISC_CORE_CLK_FREQ_GET(x)\ 2792 2568 FIELD_GET(SD_LANE_MISC_CORE_CLK_FREQ, x) 2793 2569 2794 - /* SD_LANE_TARGET:CFG_STAT_FX100:M_STAT_MISC */ 2795 - #define SD_LANE_M_STAT_MISC(t) __REG(TARGET_SD_LANE, t, 25, 56, 0, 1, 56, 36, 0, 1, 4) 2570 + /* SD_LANE_TARGET:CFG_STAT_FX100:M_STAT_MISC */ 2571 + #define SD_LANE_M_STAT_MISC(t) \ 2572 + __REG(TARGET_SD_LANE, t, TSIZE(TC_SD_LANE), 56, 0, 1, 56, 36, 0, 1, 4) 2796 2573 2797 2574 #define SD_LANE_M_STAT_MISC_M_RIS_EDGE_PTR_ADJ_SUM GENMASK(21, 0) 2798 2575 #define SD_LANE_M_STAT_MISC_M_RIS_EDGE_PTR_ADJ_SUM_SET(x)\ ··· 2808 2581 #define SD_LANE_M_STAT_MISC_M_LOCK_CNT_GET(x)\ 2809 2582 FIELD_GET(SD_LANE_M_STAT_MISC_M_LOCK_CNT, x) 2810 2583 2811 - /* SD25G_CFG_TARGET:SD_RESET:SD_SER_RST */ 2812 - #define SD_LANE_25G_SD_SER_RST(t) __REG(TARGET_SD_LANE_25G, t, 8, 0, 0, 1, 8, 0, 0, 1, 4) 2584 + /* SPARX5 ONLY */ 2585 + /* SD25G_CFG_TARGET:SD_RESET:SD_SER_RST */ 2586 + #define SD_LANE_25G_SD_SER_RST(t) \ 2587 + __REG(TARGET_SD_LANE_25G, t, 8, 0, 0, 1, 8, 0, 0, 1, 4) 2813 2588 2814 2589 #define SD_LANE_25G_SD_SER_RST_SER_RST BIT(0) 2815 2590 #define SD_LANE_25G_SD_SER_RST_SER_RST_SET(x)\ ··· 2819 2590 #define SD_LANE_25G_SD_SER_RST_SER_RST_GET(x)\ 2820 2591 FIELD_GET(SD_LANE_25G_SD_SER_RST_SER_RST, x) 2821 2592 2822 - /* SD25G_CFG_TARGET:SD_RESET:SD_DES_RST */ 2823 - #define SD_LANE_25G_SD_DES_RST(t) __REG(TARGET_SD_LANE_25G, t, 8, 0, 0, 1, 8, 4, 0, 1, 4) 2593 + /* SPARX5 ONLY */ 2594 + /* SD25G_CFG_TARGET:SD_RESET:SD_DES_RST */ 2595 + #define SD_LANE_25G_SD_DES_RST(t) \ 2596 + __REG(TARGET_SD_LANE_25G, t, 8, 0, 0, 1, 8, 4, 0, 1, 4) 2824 2597 2825 2598 #define SD_LANE_25G_SD_DES_RST_DES_RST BIT(0) 2826 2599 #define SD_LANE_25G_SD_DES_RST_DES_RST_SET(x)\ ··· 2830 2599 #define SD_LANE_25G_SD_DES_RST_DES_RST_GET(x)\ 2831 2600 FIELD_GET(SD_LANE_25G_SD_DES_RST_DES_RST, x) 2832 2601 2833 - /* SD25G_CFG_TARGET:SD_LANE_CFG_STAT:SD_LANE_CFG */ 2834 - #define SD_LANE_25G_SD_LANE_CFG(t) __REG(TARGET_SD_LANE_25G, t, 8, 8, 0, 1, 12, 0, 0, 1, 4) 2602 + /* SPARX5 ONLY */ 2603 + /* SD25G_CFG_TARGET:SD_LANE_CFG_STAT:SD_LANE_CFG */ 2604 + #define SD_LANE_25G_SD_LANE_CFG(t) \ 2605 + __REG(TARGET_SD_LANE_25G, t, 8, 8, 0, 1, 12, 0, 0, 1, 4) 2835 2606 2836 2607 #define SD_LANE_25G_SD_LANE_CFG_MACRO_RST BIT(0) 2837 2608 #define SD_LANE_25G_SD_LANE_CFG_MACRO_RST_SET(x)\ ··· 2931 2698 #define SD_LANE_25G_SD_LANE_CFG_PCS2PMA_TXMARGIN_GET(x)\ 2932 2699 FIELD_GET(SD_LANE_25G_SD_LANE_CFG_PCS2PMA_TXMARGIN, x) 2933 2700 2934 - /* SD25G_CFG_TARGET:SD_LANE_CFG_STAT:SD_LANE_CFG2 */ 2935 - #define SD_LANE_25G_SD_LANE_CFG2(t) __REG(TARGET_SD_LANE_25G, t, 8, 8, 0, 1, 12, 4, 0, 1, 4) 2701 + /* SPARX5 ONLY */ 2702 + /* SD25G_CFG_TARGET:SD_LANE_CFG_STAT:SD_LANE_CFG2 */ 2703 + #define SD_LANE_25G_SD_LANE_CFG2(t) \ 2704 + __REG(TARGET_SD_LANE_25G, t, 8, 8, 0, 1, 12, 4, 0, 1, 4) 2936 2705 2937 2706 #define SD_LANE_25G_SD_LANE_CFG2_DATA_WIDTH_SEL GENMASK(2, 0) 2938 2707 #define SD_LANE_25G_SD_LANE_CFG2_DATA_WIDTH_SEL_SET(x)\ ··· 3002 2767 #define SD_LANE_25G_SD_LANE_CFG2_RXRATE_SEL_GET(x)\ 3003 2768 FIELD_GET(SD_LANE_25G_SD_LANE_CFG2_RXRATE_SEL, x) 3004 2769 3005 - /* SD25G_CFG_TARGET:SD_LANE_CFG_STAT:SD_LANE_STAT */ 3006 - #define SD_LANE_25G_SD_LANE_STAT(t) __REG(TARGET_SD_LANE_25G, t, 8, 8, 0, 1, 12, 8, 0, 1, 4) 2770 + /* SPARX5 ONLY */ 2771 + /* SD25G_CFG_TARGET:SD_LANE_CFG_STAT:SD_LANE_STAT */ 2772 + #define SD_LANE_25G_SD_LANE_STAT(t) \ 2773 + __REG(TARGET_SD_LANE_25G, t, 8, 8, 0, 1, 12, 8, 0, 1, 4) 3007 2774 3008 2775 #define SD_LANE_25G_SD_LANE_STAT_PMA_RST_DONE BIT(0) 3009 2776 #define SD_LANE_25G_SD_LANE_STAT_PMA_RST_DONE_SET(x)\ ··· 3025 2788 #define SD_LANE_25G_SD_LANE_STAT_DBG_OBS_GET(x)\ 3026 2789 FIELD_GET(SD_LANE_25G_SD_LANE_STAT_DBG_OBS, x) 3027 2790 3028 - /* SD25G_CFG_TARGET:SD_PWR_CFG:QUIET_MODE_6G */ 3029 - #define SD_LANE_25G_QUIET_MODE_6G(t) \ 2791 + /* SPARX5 ONLY */ 2792 + /* SD25G_CFG_TARGET:SD_PWR_CFG:QUIET_MODE_6G */ 2793 + #define SD_LANE_25G_QUIET_MODE_6G(t) \ 3030 2794 __REG(TARGET_SD_LANE_25G, t, 8, 28, 0, 1, 8, 4, 0, 1, 4) 3031 2795 3032 2796 #define SD_LANE_25G_QUIET_MODE_6G_QUIET_MODE GENMASK(24, 0)
+1 -1
drivers/phy/motorola/phy-cpcap-usb.c
··· 704 704 705 705 static struct platform_driver cpcap_usb_phy_driver = { 706 706 .probe = cpcap_usb_phy_probe, 707 - .remove_new = cpcap_usb_phy_remove, 707 + .remove = cpcap_usb_phy_remove, 708 708 .driver = { 709 709 .name = "cpcap-usb-phy", 710 710 .of_match_table = of_match_ptr(cpcap_usb_phy_id_table),
+1 -1
drivers/phy/motorola/phy-mapphone-mdm6600.c
··· 655 655 656 656 static struct platform_driver phy_mdm6600_driver = { 657 657 .probe = phy_mdm6600_probe, 658 - .remove_new = phy_mdm6600_remove, 658 + .remove = phy_mdm6600_remove, 659 659 .driver = { 660 660 .name = "phy-mapphone-mdm6600", 661 661 .pm = &phy_mdm6600_pm_ops,
+3 -3
drivers/phy/phy-airoha-pcie-regs.h
··· 197 197 #define CSR_2L_PXP_TX1_MULTLANE_EN BIT(0) 198 198 199 199 #define REG_CSR_2L_RX0_REV0 0x00fc 200 - #define CSR_2L_PXP_VOS_PNINV GENMASK(3, 2) 201 - #define CSR_2L_PXP_FE_GAIN_NORMAL_MODE GENMASK(6, 4) 202 - #define CSR_2L_PXP_FE_GAIN_TRAIN_MODE GENMASK(10, 8) 200 + #define CSR_2L_PXP_VOS_PNINV GENMASK(19, 18) 201 + #define CSR_2L_PXP_FE_GAIN_NORMAL_MODE GENMASK(22, 20) 202 + #define CSR_2L_PXP_FE_GAIN_TRAIN_MODE GENMASK(26, 24) 203 203 204 204 #define REG_CSR_2L_RX0_PHYCK_DIV 0x0100 205 205 #define CSR_2L_PXP_RX0_PHYCK_SEL GENMASK(9, 8)
+4 -4
drivers/phy/phy-airoha-pcie.c
··· 459 459 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CLKTX1_OFFSET, 460 460 CSR_2L_PXP_CLKTX1_SR); 461 461 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_PLL_CMN_RESERVE0, 462 - CSR_2L_PXP_PLL_RESERVE_MASK, 0xdd); 462 + CSR_2L_PXP_PLL_RESERVE_MASK, 0xd0d); 463 463 } 464 464 465 465 static void airoha_pcie_phy_init_csr_2l(struct airoha_pcie_phy *pcie_phy) ··· 471 471 PCIE_SW_XFI_RXPCS_RST | PCIE_SW_REF_RST | 472 472 PCIE_SW_RX_RST); 473 473 airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_TX_RESET, 474 - PCIE_TX_TOP_RST | REG_PCIE_PMA_TX_RESET); 474 + PCIE_TX_TOP_RST | PCIE_TX_CAL_RST); 475 475 airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_TX_RESET, 476 - PCIE_TX_TOP_RST | REG_PCIE_PMA_TX_RESET); 476 + PCIE_TX_TOP_RST | PCIE_TX_CAL_RST); 477 477 } 478 478 479 479 static void airoha_pcie_phy_init_rx(struct airoha_pcie_phy *pcie_phy) ··· 802 802 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_SDM_IFM, 803 803 CSR_2L_PXP_JCPLL_SDM_IFM); 804 804 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_SDM_HREN, 805 - REG_CSR_2L_JCPLL_SDM_HREN); 805 + CSR_2L_PXP_JCPLL_SDM_HREN); 806 806 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_RST_DLY, 807 807 CSR_2L_PXP_JCPLL_SDM_DI_EN); 808 808 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_SSC,
+1 -1
drivers/phy/phy-lgm-usb.c
··· 271 271 .of_match_table = intel_usb_phy_dt_ids, 272 272 }, 273 273 .probe = phy_probe, 274 - .remove_new = phy_remove, 274 + .remove = phy_remove, 275 275 }; 276 276 277 277 module_platform_driver(lgm_phy_driver);
+123
drivers/phy/phy-nxp-ptn3222.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + /* 3 + * Copyright (c) 2024, Linaro Limited 4 + */ 5 + 6 + #include <linux/gpio/consumer.h> 7 + #include <linux/i2c.h> 8 + #include <linux/module.h> 9 + #include <linux/of.h> 10 + #include <linux/phy/phy.h> 11 + #include <linux/regmap.h> 12 + #include <linux/regulator/consumer.h> 13 + 14 + #define NUM_SUPPLIES 2 15 + 16 + struct ptn3222 { 17 + struct i2c_client *client; 18 + struct phy *phy; 19 + struct gpio_desc *reset_gpio; 20 + struct regulator_bulk_data *supplies; 21 + }; 22 + 23 + static int ptn3222_init(struct phy *phy) 24 + { 25 + struct ptn3222 *ptn3222 = phy_get_drvdata(phy); 26 + int ret; 27 + 28 + ret = regulator_bulk_enable(NUM_SUPPLIES, ptn3222->supplies); 29 + if (ret) 30 + return ret; 31 + 32 + gpiod_set_value_cansleep(ptn3222->reset_gpio, 0); 33 + 34 + return 0; 35 + } 36 + 37 + static int ptn3222_exit(struct phy *phy) 38 + { 39 + struct ptn3222 *ptn3222 = phy_get_drvdata(phy); 40 + 41 + gpiod_set_value_cansleep(ptn3222->reset_gpio, 1); 42 + 43 + return regulator_bulk_disable(NUM_SUPPLIES, ptn3222->supplies); 44 + } 45 + 46 + static const struct phy_ops ptn3222_ops = { 47 + .init = ptn3222_init, 48 + .exit = ptn3222_exit, 49 + .owner = THIS_MODULE, 50 + }; 51 + 52 + static const struct regulator_bulk_data ptn3222_supplies[NUM_SUPPLIES] = { 53 + { 54 + .supply = "vdd3v3", 55 + .init_load_uA = 11000, 56 + }, { 57 + .supply = "vdd1v8", 58 + .init_load_uA = 55000, 59 + } 60 + }; 61 + 62 + static int ptn3222_probe(struct i2c_client *client) 63 + { 64 + struct device *dev = &client->dev; 65 + struct phy_provider *phy_provider; 66 + struct ptn3222 *ptn3222; 67 + int ret; 68 + 69 + ptn3222 = devm_kzalloc(dev, sizeof(*ptn3222), GFP_KERNEL); 70 + if (!ptn3222) 71 + return -ENOMEM; 72 + 73 + ptn3222->client = client; 74 + 75 + ptn3222->reset_gpio = devm_gpiod_get_optional(dev, "reset", 76 + GPIOD_OUT_HIGH); 77 + if (IS_ERR(ptn3222->reset_gpio)) 78 + return dev_err_probe(dev, PTR_ERR(ptn3222->reset_gpio), 79 + "unable to acquire reset gpio\n"); 80 + 81 + ret = devm_regulator_bulk_get_const(dev, NUM_SUPPLIES, ptn3222_supplies, 82 + &ptn3222->supplies); 83 + if (ret) 84 + return ret; 85 + 86 + ptn3222->phy = devm_phy_create(dev, dev->of_node, &ptn3222_ops); 87 + if (IS_ERR(ptn3222->phy)) { 88 + dev_err(dev, "failed to create PHY: %d\n", ret); 89 + return PTR_ERR(ptn3222->phy); 90 + } 91 + 92 + phy_set_drvdata(ptn3222->phy, ptn3222); 93 + 94 + phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate); 95 + 96 + return PTR_ERR_OR_ZERO(phy_provider); 97 + } 98 + 99 + static const struct i2c_device_id ptn3222_table[] = { 100 + { "ptn3222" }, 101 + { } 102 + }; 103 + MODULE_DEVICE_TABLE(i2c, ptn3222_table); 104 + 105 + static const struct of_device_id ptn3222_of_table[] = { 106 + { .compatible = "nxp,ptn3222" }, 107 + { } 108 + }; 109 + MODULE_DEVICE_TABLE(of, ptn3222_of_table); 110 + 111 + static struct i2c_driver ptn3222_driver = { 112 + .driver = { 113 + .name = "ptn3222", 114 + .of_match_table = ptn3222_of_table, 115 + }, 116 + .probe = ptn3222_probe, 117 + .id_table = ptn3222_table, 118 + }; 119 + 120 + module_i2c_driver(ptn3222_driver); 121 + 122 + MODULE_DESCRIPTION("NXP PTN3222 eUSB2 Redriver driver"); 123 + MODULE_LICENSE("GPL");
+5 -5
drivers/phy/qualcomm/phy-qcom-apq8064-sata.c
··· 257 257 MODULE_DEVICE_TABLE(of, qcom_apq8064_sata_phy_of_match); 258 258 259 259 static struct platform_driver qcom_apq8064_sata_phy_driver = { 260 - .probe = qcom_apq8064_sata_phy_probe, 261 - .remove_new = qcom_apq8064_sata_phy_remove, 260 + .probe = qcom_apq8064_sata_phy_probe, 261 + .remove = qcom_apq8064_sata_phy_remove, 262 262 .driver = { 263 - .name = "qcom-apq8064-sata-phy", 264 - .of_match_table = qcom_apq8064_sata_phy_of_match, 265 - } 263 + .name = "qcom-apq8064-sata-phy", 264 + .of_match_table = qcom_apq8064_sata_phy_of_match, 265 + }, 266 266 }; 267 267 module_platform_driver(qcom_apq8064_sata_phy_driver); 268 268
+50 -24
drivers/phy/qualcomm/phy-qcom-edp.c
··· 32 32 #define DP_PHY_PD_CTL 0x001c 33 33 #define DP_PHY_MODE 0x0020 34 34 35 - #define DP_PHY_AUX_CFG0 0x0024 36 - #define DP_PHY_AUX_CFG1 0x0028 37 - #define DP_PHY_AUX_CFG2 0x002C 38 - #define DP_PHY_AUX_CFG3 0x0030 39 - #define DP_PHY_AUX_CFG4 0x0034 40 - #define DP_PHY_AUX_CFG5 0x0038 41 - #define DP_PHY_AUX_CFG6 0x003C 42 - #define DP_PHY_AUX_CFG7 0x0040 43 - #define DP_PHY_AUX_CFG8 0x0044 44 - #define DP_PHY_AUX_CFG9 0x0048 35 + #define DP_AUX_CFG_SIZE 10 36 + #define DP_PHY_AUX_CFG(n) (0x24 + (0x04 * (n))) 45 37 46 38 #define DP_PHY_AUX_INTERRUPT_MASK 0x0058 47 39 ··· 82 90 83 91 struct qcom_edp_phy_cfg { 84 92 bool is_edp; 93 + const u8 *aux_cfg; 85 94 const struct qcom_edp_swing_pre_emph_cfg *swing_pre_emph_cfg; 86 95 const struct phy_ver_ops *ver_ops; 87 96 }; ··· 179 186 .pre_emphasis_hbr3_hbr2 = &edp_pre_emp_hbr2_hbr3, 180 187 }; 181 188 189 + static const u8 edp_phy_aux_cfg_v4[10] = { 190 + 0x00, 0x13, 0x24, 0x00, 0x0a, 0x26, 0x0a, 0x03, 0x37, 0x03 191 + }; 192 + 193 + static const u8 edp_pre_emp_hbr_rbr_v5[4][4] = { 194 + { 0x05, 0x11, 0x17, 0x1d }, 195 + { 0x05, 0x11, 0x18, 0xff }, 196 + { 0x06, 0x11, 0xff, 0xff }, 197 + { 0x00, 0xff, 0xff, 0xff } 198 + }; 199 + 200 + static const u8 edp_pre_emp_hbr2_hbr3_v5[4][4] = { 201 + { 0x0c, 0x15, 0x19, 0x1e }, 202 + { 0x0b, 0x15, 0x19, 0xff }, 203 + { 0x0e, 0x14, 0xff, 0xff }, 204 + { 0x0d, 0xff, 0xff, 0xff } 205 + }; 206 + 207 + static const struct qcom_edp_swing_pre_emph_cfg edp_phy_swing_pre_emph_cfg_v5 = { 208 + .swing_hbr_rbr = &edp_swing_hbr_rbr, 209 + .swing_hbr3_hbr2 = &edp_swing_hbr2_hbr3, 210 + .pre_emphasis_hbr_rbr = &edp_pre_emp_hbr_rbr_v5, 211 + .pre_emphasis_hbr3_hbr2 = &edp_pre_emp_hbr2_hbr3_v5, 212 + }; 213 + 214 + static const u8 edp_phy_aux_cfg_v5[10] = { 215 + 0x00, 0x13, 0xa4, 0x00, 0x0a, 0x26, 0x0a, 0x03, 0x37, 0x03 216 + }; 217 + 182 218 static int qcom_edp_phy_init(struct phy *phy) 183 219 { 184 220 struct qcom_edp *edp = phy_get_drvdata(phy); 221 + u8 aux_cfg[DP_AUX_CFG_SIZE]; 185 222 int ret; 186 - u8 cfg8; 187 223 188 224 ret = regulator_bulk_enable(ARRAY_SIZE(edp->supplies), edp->supplies); 189 225 if (ret) ··· 221 199 ret = clk_bulk_prepare_enable(ARRAY_SIZE(edp->clks), edp->clks); 222 200 if (ret) 223 201 goto out_disable_supplies; 202 + 203 + memcpy(aux_cfg, edp->cfg->aux_cfg, sizeof(aux_cfg)); 224 204 225 205 writel(DP_PHY_PD_CTL_PWRDN | DP_PHY_PD_CTL_AUX_PWRDN | 226 206 DP_PHY_PD_CTL_PLL_PWRDN | DP_PHY_PD_CTL_DP_CLAMP_EN, ··· 246 222 * even needed. 247 223 */ 248 224 if (edp->cfg->swing_pre_emph_cfg && !edp->is_edp) 249 - cfg8 = 0xb7; 250 - else 251 - cfg8 = 0x37; 225 + aux_cfg[8] = 0xb7; 252 226 253 227 writel(0xfc, edp->edp + DP_PHY_MODE); 254 228 255 - writel(0x00, edp->edp + DP_PHY_AUX_CFG0); 256 - writel(0x13, edp->edp + DP_PHY_AUX_CFG1); 257 - writel(0x24, edp->edp + DP_PHY_AUX_CFG2); 258 - writel(0x00, edp->edp + DP_PHY_AUX_CFG3); 259 - writel(0x0a, edp->edp + DP_PHY_AUX_CFG4); 260 - writel(0x26, edp->edp + DP_PHY_AUX_CFG5); 261 - writel(0x0a, edp->edp + DP_PHY_AUX_CFG6); 262 - writel(0x03, edp->edp + DP_PHY_AUX_CFG7); 263 - writel(cfg8, edp->edp + DP_PHY_AUX_CFG8); 264 - writel(0x03, edp->edp + DP_PHY_AUX_CFG9); 229 + for (int i = 0; i < DP_AUX_CFG_SIZE; i++) 230 + writel(aux_cfg[i], edp->edp + DP_PHY_AUX_CFG(i)); 265 231 266 232 writel(PHY_AUX_STOP_ERR_MASK | PHY_AUX_DEC_ERR_MASK | 267 233 PHY_AUX_SYNC_ERR_MASK | PHY_AUX_ALIGN_ERR_MASK | ··· 532 518 .com_configure_ssc = qcom_edp_com_configure_ssc_v4, 533 519 }; 534 520 521 + static const struct qcom_edp_phy_cfg sa8775p_dp_phy_cfg = { 522 + .is_edp = false, 523 + .aux_cfg = edp_phy_aux_cfg_v5, 524 + .swing_pre_emph_cfg = &edp_phy_swing_pre_emph_cfg_v5, 525 + .ver_ops = &qcom_edp_phy_ops_v4, 526 + }; 527 + 535 528 static const struct qcom_edp_phy_cfg sc7280_dp_phy_cfg = { 529 + .aux_cfg = edp_phy_aux_cfg_v4, 536 530 .ver_ops = &qcom_edp_phy_ops_v4, 537 531 }; 538 532 539 533 static const struct qcom_edp_phy_cfg sc8280xp_dp_phy_cfg = { 534 + .aux_cfg = edp_phy_aux_cfg_v4, 540 535 .swing_pre_emph_cfg = &dp_phy_swing_pre_emph_cfg, 541 536 .ver_ops = &qcom_edp_phy_ops_v4, 542 537 }; 543 538 544 539 static const struct qcom_edp_phy_cfg sc8280xp_edp_phy_cfg = { 545 540 .is_edp = true, 541 + .aux_cfg = edp_phy_aux_cfg_v4, 546 542 .swing_pre_emph_cfg = &edp_phy_swing_pre_emph_cfg, 547 543 .ver_ops = &qcom_edp_phy_ops_v4, 548 544 }; ··· 731 707 }; 732 708 733 709 static struct qcom_edp_phy_cfg x1e80100_phy_cfg = { 710 + .aux_cfg = edp_phy_aux_cfg_v4, 734 711 .swing_pre_emph_cfg = &dp_phy_swing_pre_emph_cfg, 735 712 .ver_ops = &qcom_edp_phy_ops_v6, 736 713 }; ··· 1133 1108 } 1134 1109 1135 1110 static const struct of_device_id qcom_edp_phy_match_table[] = { 1111 + { .compatible = "qcom,sa8775p-edp-phy", .data = &sa8775p_dp_phy_cfg, }, 1136 1112 { .compatible = "qcom,sc7280-edp-phy", .data = &sc7280_dp_phy_cfg, }, 1137 1113 { .compatible = "qcom,sc8180x-edp-phy", .data = &sc7280_dp_phy_cfg, }, 1138 1114 { .compatible = "qcom,sc8280xp-dp-phy", .data = &sc8280xp_dp_phy_cfg, },
+1 -1
drivers/phy/qualcomm/phy-qcom-eusb2-repeater.c
··· 294 294 295 295 static struct platform_driver eusb2_repeater_driver = { 296 296 .probe = eusb2_repeater_probe, 297 - .remove_new = eusb2_repeater_remove, 297 + .remove = eusb2_repeater_remove, 298 298 .driver = { 299 299 .name = "qcom-eusb2-repeater", 300 300 .of_match_table = eusb2_repeater_of_match_table,
+4 -4
drivers/phy/qualcomm/phy-qcom-ipq806x-sata.c
··· 184 184 MODULE_DEVICE_TABLE(of, qcom_ipq806x_sata_phy_of_match); 185 185 186 186 static struct platform_driver qcom_ipq806x_sata_phy_driver = { 187 - .probe = qcom_ipq806x_sata_phy_probe, 188 - .remove_new = qcom_ipq806x_sata_phy_remove, 187 + .probe = qcom_ipq806x_sata_phy_probe, 188 + .remove = qcom_ipq806x_sata_phy_remove, 189 189 .driver = { 190 - .name = "qcom-ipq806x-sata-phy", 191 - .of_match_table = qcom_ipq806x_sata_phy_of_match, 190 + .name = "qcom-ipq806x-sata-phy", 191 + .of_match_table = qcom_ipq806x_sata_phy_of_match, 192 192 } 193 193 }; 194 194 module_platform_driver(qcom_ipq806x_sata_phy_driver);
+4 -4
drivers/phy/qualcomm/phy-qcom-qmp-combo.c
··· 3483 3483 } 3484 3484 #endif 3485 3485 3486 - static int qmp_combo_parse_dt_lecacy_dp(struct qmp_combo *qmp, struct device_node *np) 3486 + static int qmp_combo_parse_dt_legacy_dp(struct qmp_combo *qmp, struct device_node *np) 3487 3487 { 3488 3488 struct device *dev = qmp->dev; 3489 3489 ··· 3510 3510 return 0; 3511 3511 } 3512 3512 3513 - static int qmp_combo_parse_dt_lecacy_usb(struct qmp_combo *qmp, struct device_node *np) 3513 + static int qmp_combo_parse_dt_legacy_usb(struct qmp_combo *qmp, struct device_node *np) 3514 3514 { 3515 3515 const struct qmp_phy_cfg *cfg = qmp->cfg; 3516 3516 struct device *dev = qmp->dev; ··· 3576 3576 if (IS_ERR(qmp->dp_serdes)) 3577 3577 return PTR_ERR(qmp->dp_serdes); 3578 3578 3579 - ret = qmp_combo_parse_dt_lecacy_usb(qmp, usb_np); 3579 + ret = qmp_combo_parse_dt_legacy_usb(qmp, usb_np); 3580 3580 if (ret) 3581 3581 return ret; 3582 3582 3583 - ret = qmp_combo_parse_dt_lecacy_dp(qmp, dp_np); 3583 + ret = qmp_combo_parse_dt_legacy_dp(qmp, dp_np); 3584 3584 if (ret) 3585 3585 return ret; 3586 3586
+214
drivers/phy/qualcomm/phy-qcom-qmp-pcie.c
··· 34 34 #include "phy-qcom-qmp-pcs-pcie-v5_20.h" 35 35 #include "phy-qcom-qmp-pcs-pcie-v6.h" 36 36 #include "phy-qcom-qmp-pcs-pcie-v6_20.h" 37 + #include "phy-qcom-qmp-pcs-pcie-v6_30.h" 38 + #include "phy-qcom-qmp-pcs-v6_30.h" 37 39 #include "phy-qcom-qmp-pcie-qhp.h" 38 40 39 41 #define PHY_INIT_COMPLETE_TIMEOUT 10000 ··· 1346 1344 QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_G4_FOM_EQ_CONFIG5, 0x8a), 1347 1345 }; 1348 1346 1347 + static const struct qmp_phy_init_tbl x1e80100_qmp_gen4x8_pcie_serdes_tbl[] = { 1348 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_STEP_SIZE1_MODE1, 0x26), 1349 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_STEP_SIZE2_MODE1, 0x03), 1350 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_CP_CTRL_MODE1, 0x06), 1351 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_RCTRL_MODE1, 0x16), 1352 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CCTRL_MODE1, 0x36), 1353 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_CORECLK_DIV_MODE1, 0x08), 1354 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP1_MODE1, 0x04), 1355 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP2_MODE1, 0x0d), 1356 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_DEC_START_MODE1, 0x68), 1357 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START1_MODE1, 0xab), 1358 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START2_MODE1, 0xaa), 1359 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START3_MODE1, 0x02), 1360 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_HSCLK_SEL_1, 0x12), 1361 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_STEP_SIZE1_MODE0, 0xf8), 1362 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_STEP_SIZE2_MODE0, 0x01), 1363 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_CP_CTRL_MODE0, 0x06), 1364 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_RCTRL_MODE0, 0x16), 1365 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CCTRL_MODE0, 0x36), 1366 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CORE_CLK_DIV_MODE0, 0x0a), 1367 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP1_MODE0, 0x04), 1368 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP2_MODE0, 0x0d), 1369 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_DEC_START_MODE0, 0x41), 1370 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START1_MODE0, 0xab), 1371 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START2_MODE0, 0xaa), 1372 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START3_MODE0, 0x01), 1373 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_HSCLK_HS_SWITCH_SEL_1, 0x00), 1374 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_BG_TIMER, 0x0a), 1375 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_EN_CENTER, 0x01), 1376 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_PER1, 0x62), 1377 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_PER2, 0x02), 1378 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_POST_DIV_MUX, 0x40), 1379 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_BIAS_EN_CLK_BUFLR_EN, 0x1c), 1380 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_CLK_ENABLE1, 0x90), 1381 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_SYS_CLK_CTRL, 0x82), 1382 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_IVCO, 0x0f), 1383 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_SYSCLK_EN_SEL, 0x08), 1384 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP_EN, 0x46), 1385 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP_CFG, 0x04), 1386 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_VCO_TUNE_MAP, 0x14), 1387 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_CLK_SELECT, 0x34), 1388 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_CORE_CLK_EN, 0x20), 1389 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_CMN_CONFIG_1, 0x06), 1390 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_CMN_MISC_1, 0x88), 1391 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_CMN_MODE, 0x14), 1392 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_VCO_DC_LEVEL_CTRL, 0x0f), 1393 + }; 1394 + 1395 + static const struct qmp_phy_init_tbl x1e80100_qmp_gen4x8_pcie_ln_shrd_tbl[] = { 1396 + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RXCLK_DIV2_CTRL, 0x01), 1397 + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_SUMMER_CAL_SPD_MODE, 0x5b), 1398 + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_DFE_DAC_ENABLE1, 0x88), 1399 + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_TX_ADAPT_POST_THRESH1, 0x02), 1400 + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_TX_ADAPT_POST_THRESH2, 0x0d), 1401 + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B0, 0x12), 1402 + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B1, 0x12), 1403 + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B2, 0xdb), 1404 + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B3, 0x9a), 1405 + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B4, 0x38), 1406 + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B5, 0xb6), 1407 + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B6, 0x64), 1408 + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH1_RATE210, 0x1f), 1409 + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH1_RATE3, 0x1f), 1410 + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH2_RATE210, 0x1f), 1411 + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH2_RATE3, 0x1f), 1412 + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH3_RATE210, 0x1f), 1413 + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH3_RATE3, 0x1f), 1414 + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH4_RATE3, 0x1f), 1415 + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH5_RATE3, 0x1f), 1416 + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH6_RATE3, 0x1f), 1417 + }; 1418 + 1419 + static const struct qmp_phy_init_tbl x1e80100_qmp_gen4x8_pcie_txz_tbl[] = { 1420 + QMP_PHY_INIT_CFG(QSERDES_V6_20_TX_RES_CODE_LANE_OFFSET_TX, 0x1a), 1421 + QMP_PHY_INIT_CFG(QSERDES_V6_20_TX_RES_CODE_LANE_OFFSET_RX, 0x05), 1422 + QMP_PHY_INIT_CFG(QSERDES_V6_20_TX_LANE_MODE_1, 0x01), 1423 + QMP_PHY_INIT_CFG(QSERDES_V6_20_TX_LANE_MODE_2, 0x10), 1424 + QMP_PHY_INIT_CFG(QSERDES_V6_20_TX_LANE_MODE_3, 0x51), 1425 + QMP_PHY_INIT_CFG(QSERDES_V6_20_TX_TRAN_DRVR_EMP_EN, 0x34), 1426 + }; 1427 + 1428 + static const struct qmp_phy_init_tbl x1e80100_qmp_gen4x8_pcie_rxz_tbl[] = { 1429 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_UCDR_FO_GAIN_RATE_2, 0x0c), 1430 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_UCDR_SO_GAIN_RATE_2, 0x04), 1431 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_UCDR_FO_GAIN_RATE_3, 0x0a), 1432 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_UCDR_PI_CONTROLS, 0x16), 1433 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_UCDR_SO_ACC_DEFAULT_VAL_RATE3, 0x00), 1434 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_IVCM_CAL_CTRL2, 0x80), 1435 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_IVCM_POSTCAL_OFFSET, 0x00), 1436 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_BKUP_CTRL1, 0x15), 1437 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_DFE_3, 0x45), 1438 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_VGA_CAL_MAN_VAL, 0x0c), 1439 + QMP_PHY_INIT_CFG(QSERDES_V6_20_VGA_CAL_CNTRL1, 0x00), 1440 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_GM_CAL, 0x0d), 1441 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_EQU_ADAPTOR_CNTRL4, 0x0b), 1442 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_SIGDET_ENABLES, 0x1c), 1443 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_PHPRE_CTRL, 0x20), 1444 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38), 1445 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_Q_PI_INTRINSIC_BIAS_RATE32, 0x39), 1446 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B0, 0xd4), 1447 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B1, 0x23), 1448 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B2, 0x58), 1449 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B3, 0x9a), 1450 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B4, 0x38), 1451 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B5, 0xb6), 1452 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B6, 0xee), 1453 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE3_B0, 0x1c), 1454 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE3_B1, 0xe4), 1455 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE3_B2, 0x60), 1456 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE3_B3, 0xdf), 1457 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE3_B4, 0x69), 1458 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE3_B5, 0x76), 1459 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE3_B6, 0xff), 1460 + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_TX_ADPT_CTRL, 0x10), 1461 + }; 1462 + 1463 + static const struct qmp_phy_init_tbl x1e80100_qmp_gen4x8_pcie_rx_tbl[] = { 1464 + QMP_PHY_INIT_CFG_LANE(QSERDES_V6_20_RX_DFE_CTLE_POST_CAL_OFFSET, 0x3a, BIT(0)), 1465 + }; 1466 + 1467 + static const struct qmp_phy_init_tbl x1e80100_qmp_gen4x8_pcie_pcs_tbl[] = { 1468 + QMP_PHY_INIT_CFG(QPHY_V6_30_PCS_LOCK_DETECT_CONFIG2, 0x00), 1469 + QMP_PHY_INIT_CFG(QPHY_V6_30_PCS_G3S2_PRE_GAIN, 0x2e), 1470 + QMP_PHY_INIT_CFG(QPHY_V6_30_PCS_RX_SIGDET_LVL, 0x99), 1471 + QMP_PHY_INIT_CFG(QPHY_V6_30_PCS_ALIGN_DETECT_CONFIG7, 0x00), 1472 + QMP_PHY_INIT_CFG(QPHY_V6_30_PCS_EQ_CONFIG4, 0x00), 1473 + QMP_PHY_INIT_CFG(QPHY_V6_30_PCS_EQ_CONFIG5, 0x22), 1474 + QMP_PHY_INIT_CFG(QPHY_V6_30_PCS_TX_RX_CONFIG, 0x04), 1475 + QMP_PHY_INIT_CFG(QPHY_V6_30_PCS_TX_RX_CONFIG2, 0x02), 1476 + }; 1477 + 1478 + static const struct qmp_phy_init_tbl x1e80100_qmp_gen4x8_pcie_pcs_misc_tbl[] = { 1479 + QMP_PHY_INIT_CFG(QPHY_PCIE_V6_30_PCS_ENDPOINT_REFCLK_DRIVE, 0xc1), 1480 + QMP_PHY_INIT_CFG(QPHY_PCIE_V6_30_PCS_OSC_DTCT_ACTIONS, 0x00), 1481 + QMP_PHY_INIT_CFG(QPHY_PCIE_V6_30_PCS_EQ_CONFIG1, 0x16), 1482 + QMP_PHY_INIT_CFG(QPHY_PCIE_V6_30_PCS_G4_EQ_CONFIG5, 0x02), 1483 + QMP_PHY_INIT_CFG(QPHY_PCIE_V6_30_PCS_G4_PRE_GAIN, 0x2e), 1484 + QMP_PHY_INIT_CFG(QPHY_PCIE_V6_30_PCS_RX_MARGINING_CONFIG1, 0x03), 1485 + QMP_PHY_INIT_CFG(QPHY_PCIE_V6_30_PCS_RX_MARGINING_CONFIG3, 0x28), 1486 + QMP_PHY_INIT_CFG(QPHY_PCIE_V6_30_PCS_RX_MARGINING_CONFIG5, 0x18), 1487 + QMP_PHY_INIT_CFG(QPHY_PCIE_V6_30_PCS_G3_FOM_EQ_CONFIG5, 0x7a), 1488 + QMP_PHY_INIT_CFG(QPHY_PCIE_V6_30_PCS_G4_FOM_EQ_CONFIG5, 0x8a), 1489 + QMP_PHY_INIT_CFG(QPHY_PCIE_V6_30_PCS_G3_RXEQEVAL_TIME, 0x27), 1490 + QMP_PHY_INIT_CFG(QPHY_PCIE_V6_30_PCS_G4_RXEQEVAL_TIME, 0x27), 1491 + QMP_PHY_INIT_CFG(QPHY_PCIE_V6_30_PCS_TX_RX_CONFIG, 0xc0), 1492 + QMP_PHY_INIT_CFG(QPHY_PCIE_V6_30_PCS_POWER_STATE_CONFIG2, 0x1d), 1493 + }; 1494 + 1349 1495 static const struct qmp_phy_init_tbl sm8250_qmp_pcie_serdes_tbl[] = { 1350 1496 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_EN_SEL, 0x08), 1351 1497 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_SELECT, 0x34), ··· 2732 2582 u16 rx; 2733 2583 u16 tx2; 2734 2584 u16 rx2; 2585 + u16 txz; 2586 + u16 rxz; 2735 2587 u16 ln_shrd; 2736 2588 }; 2737 2589 ··· 2744 2592 int tx_num; 2745 2593 const struct qmp_phy_init_tbl *rx; 2746 2594 int rx_num; 2595 + const struct qmp_phy_init_tbl *txz; 2596 + int txz_num; 2597 + const struct qmp_phy_init_tbl *rxz; 2598 + int rxz_num; 2747 2599 const struct qmp_phy_init_tbl *pcs; 2748 2600 int pcs_num; 2749 2601 const struct qmp_phy_init_tbl *pcs_misc; ··· 2815 2659 void __iomem *rx; 2816 2660 void __iomem *tx2; 2817 2661 void __iomem *rx2; 2662 + void __iomem *txz; 2663 + void __iomem *rxz; 2818 2664 void __iomem *ln_shrd; 2819 2665 2820 2666 void __iomem *port_b; ··· 2982 2824 .tx2 = 0x0800, 2983 2825 .rx2 = 0x0a00, 2984 2826 .ln_shrd = 0x0e00, 2827 + }; 2828 + 2829 + static const struct qmp_pcie_offsets qmp_pcie_offsets_v6_30 = { 2830 + .serdes = 0x8800, 2831 + .pcs = 0x9000, 2832 + .pcs_misc = 0x9800, 2833 + .tx = 0x0000, 2834 + .rx = 0x0200, 2835 + .txz = 0xe000, 2836 + .rxz = 0xe200, 2837 + .ln_shrd = 0x8000, 2985 2838 }; 2986 2839 2987 2840 static const struct qmp_phy_cfg ipq8074_pciephy_cfg = { ··· 3873 3704 .has_nocsr_reset = true, 3874 3705 }; 3875 3706 3707 + static const struct qmp_phy_cfg x1e80100_qmp_gen4x8_pciephy_cfg = { 3708 + .lanes = 8, 3709 + 3710 + .offsets = &qmp_pcie_offsets_v6_30, 3711 + .tbls = { 3712 + .serdes = x1e80100_qmp_gen4x8_pcie_serdes_tbl, 3713 + .serdes_num = ARRAY_SIZE(x1e80100_qmp_gen4x8_pcie_serdes_tbl), 3714 + .rx = x1e80100_qmp_gen4x8_pcie_rx_tbl, 3715 + .rx_num = ARRAY_SIZE(x1e80100_qmp_gen4x8_pcie_rx_tbl), 3716 + .txz = x1e80100_qmp_gen4x8_pcie_txz_tbl, 3717 + .txz_num = ARRAY_SIZE(x1e80100_qmp_gen4x8_pcie_txz_tbl), 3718 + .rxz = x1e80100_qmp_gen4x8_pcie_rxz_tbl, 3719 + .rxz_num = ARRAY_SIZE(x1e80100_qmp_gen4x8_pcie_rxz_tbl), 3720 + .pcs = x1e80100_qmp_gen4x8_pcie_pcs_tbl, 3721 + .pcs_num = ARRAY_SIZE(x1e80100_qmp_gen4x8_pcie_pcs_tbl), 3722 + .pcs_misc = x1e80100_qmp_gen4x8_pcie_pcs_misc_tbl, 3723 + .pcs_misc_num = ARRAY_SIZE(x1e80100_qmp_gen4x8_pcie_pcs_misc_tbl), 3724 + .ln_shrd = x1e80100_qmp_gen4x8_pcie_ln_shrd_tbl, 3725 + .ln_shrd_num = ARRAY_SIZE(x1e80100_qmp_gen4x8_pcie_ln_shrd_tbl), 3726 + }, 3727 + 3728 + .reset_list = sdm845_pciephy_reset_l, 3729 + .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l), 3730 + .vreg_list = sm8550_qmp_phy_vreg_l, 3731 + .num_vregs = ARRAY_SIZE(sm8550_qmp_phy_vreg_l), 3732 + .regs = pciephy_v6_regs_layout, 3733 + 3734 + .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL, 3735 + .phy_status = PHYSTATUS_4_20, 3736 + .has_nocsr_reset = true, 3737 + }; 3738 + 3876 3739 static void qmp_pcie_init_port_b(struct qmp_pcie *qmp, const struct qmp_phy_cfg_tbls *tbls) 3877 3740 { 3878 3741 const struct qmp_phy_cfg *cfg = qmp->cfg; ··· 3951 3750 return; 3952 3751 3953 3752 qmp_configure(qmp->dev, serdes, tbls->serdes, tbls->serdes_num); 3753 + 3754 + /* 3755 + * Tx/Rx registers that require different settings than 3756 + * txz/rxz must be programmed after txz/rxz. 3757 + */ 3758 + qmp_configure(qmp->dev, qmp->txz, tbls->txz, tbls->txz_num); 3759 + qmp_configure(qmp->dev, qmp->rxz, tbls->rxz, tbls->rxz_num); 3954 3760 3955 3761 qmp_configure_lane(qmp->dev, tx, tbls->tx, tbls->tx_num, 1); 3956 3762 qmp_configure_lane(qmp->dev, rx, tbls->rx, tbls->rx_num, 1); ··· 4501 4293 return PTR_ERR(qmp->port_b); 4502 4294 } 4503 4295 4296 + qmp->txz = base + offs->txz; 4297 + qmp->rxz = base + offs->rxz; 4298 + 4504 4299 if (cfg->tbls.ln_shrd) 4505 4300 qmp->ln_shrd = base + offs->ln_shrd; 4506 4301 ··· 4689 4478 }, { 4690 4479 .compatible = "qcom,x1e80100-qmp-gen4x4-pcie-phy", 4691 4480 .data = &x1e80100_qmp_gen4x4_pciephy_cfg, 4481 + }, { 4482 + .compatible = "qcom,x1e80100-qmp-gen4x8-pcie-phy", 4483 + .data = &x1e80100_qmp_gen4x8_pciephy_cfg, 4692 4484 }, 4693 4485 { }, 4694 4486 };
+25
drivers/phy/qualcomm/phy-qcom-qmp-pcs-pcie-v6_30.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 */ 2 + /* 3 + * Copyright (c) 2024 Qualcomm Innovation Center. All rights reserved. 4 + */ 5 + 6 + #ifndef QCOM_PHY_QMP_PCS_PCIE_V6_30_H_ 7 + #define QCOM_PHY_QMP_PCS_PCIE_V6_30_H_ 8 + 9 + /* Only for QMP V6_30 PHY - PCIE have different offsets than V6 */ 10 + #define QPHY_PCIE_V6_30_PCS_POWER_STATE_CONFIG2 0x014 11 + #define QPHY_PCIE_V6_30_PCS_TX_RX_CONFIG 0x020 12 + #define QPHY_PCIE_V6_30_PCS_ENDPOINT_REFCLK_DRIVE 0x024 13 + #define QPHY_PCIE_V6_30_PCS_OSC_DTCT_ACTIONS 0x098 14 + #define QPHY_PCIE_V6_30_PCS_EQ_CONFIG1 0x0a8 15 + #define QPHY_PCIE_V6_30_PCS_G3_RXEQEVAL_TIME 0x0f8 16 + #define QPHY_PCIE_V6_30_PCS_G4_RXEQEVAL_TIME 0x0fc 17 + #define QPHY_PCIE_V6_30_PCS_G4_EQ_CONFIG5 0x110 18 + #define QPHY_PCIE_V6_30_PCS_G4_PRE_GAIN 0x164 19 + #define QPHY_PCIE_V6_30_PCS_RX_MARGINING_CONFIG1 0x184 20 + #define QPHY_PCIE_V6_30_PCS_RX_MARGINING_CONFIG3 0x18c 21 + #define QPHY_PCIE_V6_30_PCS_RX_MARGINING_CONFIG5 0x194 22 + #define QPHY_PCIE_V6_30_PCS_G3_FOM_EQ_CONFIG5 0x1b4 23 + #define QPHY_PCIE_V6_30_PCS_G4_FOM_EQ_CONFIG5 0x1c8 24 + 25 + #endif
+19
drivers/phy/qualcomm/phy-qcom-qmp-pcs-v6_30.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 */ 2 + /* 3 + * Copyright (c) 2024 Qualcomm Innovation Center. All rights reserved. 4 + */ 5 + 6 + #ifndef QCOM_PHY_QMP_PCS_V6_30_H_ 7 + #define QCOM_PHY_QMP_PCS_V6_30_H_ 8 + 9 + /* Only for QMP V6_30 PHY - PCIe PCS registers */ 10 + #define QPHY_V6_30_PCS_LOCK_DETECT_CONFIG2 0x0cc 11 + #define QPHY_V6_30_PCS_G3S2_PRE_GAIN 0x17c 12 + #define QPHY_V6_30_PCS_RX_SIGDET_LVL 0x194 13 + #define QPHY_V6_30_PCS_ALIGN_DETECT_CONFIG7 0x1dc 14 + #define QPHY_V6_30_PCS_TX_RX_CONFIG 0x1e0 15 + #define QPHY_V6_30_PCS_TX_RX_CONFIG2 0x1e4 16 + #define QPHY_V6_30_PCS_EQ_CONFIG4 0x1fc 17 + #define QPHY_V6_30_PCS_EQ_CONFIG5 0x200 18 + 19 + #endif
+65
drivers/phy/qualcomm/phy-qcom-qmp-usb.c
··· 871 871 QMP_PHY_INIT_CFG(QPHY_V6_PCS_USB3_RCVR_DTCT_DLY_U3_H, 0x00), 872 872 }; 873 873 874 + static const struct qmp_phy_init_tbl qcs8300_usb3_uniphy_tx_tbl[] = { 875 + QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_1, 0xa5), 876 + QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_2, 0xf2), 877 + QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_3, 0x3f), 878 + QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_4, 0x3f), 879 + QMP_PHY_INIT_CFG(QSERDES_V5_TX_PI_QEC_CTRL, 0x21), 880 + QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_TX, 0x10), 881 + QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_RX, 0x0e), 882 + }; 883 + 874 884 static const struct qmp_phy_init_tbl sm8350_usb3_uniphy_tx_tbl[] = { 875 885 QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_1, 0xa5), 876 886 QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_2, 0x82), ··· 997 987 QMP_PHY_INIT_CFG(QSERDES_V5_TX_PI_QEC_CTRL, 0x21), 998 988 QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_TX, 0x10), 999 989 QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_RX, 0x0e), 990 + }; 991 + 992 + static const struct qmp_phy_init_tbl qcs8300_usb3_uniphy_rx_tbl[] = { 993 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH4, 0xec), 994 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH3, 0xbd), 995 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH2, 0x7f), 996 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH, 0x3f), 997 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_LOW, 0x3f), 998 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH4, 0xa9), 999 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH3, 0x7b), 1000 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH2, 0xe4), 1001 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH, 0x24), 1002 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_LOW, 0x64), 1003 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_PI_CONTROLS, 0x99), 1004 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_THRESH1, 0x08), 1005 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_THRESH2, 0x08), 1006 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_GAIN1, 0x00), 1007 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_GAIN2, 0x04), 1008 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FASTLOCK_FO_GAIN, 0x2f), 1009 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FASTLOCK_COUNT_LOW, 0xff), 1010 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FASTLOCK_COUNT_HIGH, 0x0f), 1011 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FO_GAIN, 0x09), 1012 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_VGA_CAL_CNTRL1, 0x54), 1013 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_VGA_CAL_CNTRL2, 0x0f), 1014 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0f), 1015 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_EQU_ADAPTOR_CNTRL4, 0x0a), 1016 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x47), 1017 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80), 1018 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_SIGDET_CNTRL, 0x04), 1019 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_SIGDET_DEGLITCH_CNTRL, 0x0e), 1020 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38), 1021 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SO_GAIN, 0x06), 1022 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_GM_CAL, 0x19), 1023 + QMP_PHY_INIT_CFG(QSERDES_V5_RX_SIGDET_ENABLES, 0x00), 1000 1024 }; 1001 1025 1002 1026 static const struct qmp_phy_init_tbl sc8280xp_usb3_uniphy_rx_tbl[] = { ··· 1497 1453 .tx_tbl_num = ARRAY_SIZE(sc8280xp_usb3_uniphy_tx_tbl), 1498 1454 .rx_tbl = sc8280xp_usb3_uniphy_rx_tbl, 1499 1455 .rx_tbl_num = ARRAY_SIZE(sc8280xp_usb3_uniphy_rx_tbl), 1456 + .pcs_tbl = sa8775p_usb3_uniphy_pcs_tbl, 1457 + .pcs_tbl_num = ARRAY_SIZE(sa8775p_usb3_uniphy_pcs_tbl), 1458 + .pcs_usb_tbl = sa8775p_usb3_uniphy_pcs_usb_tbl, 1459 + .pcs_usb_tbl_num = ARRAY_SIZE(sa8775p_usb3_uniphy_pcs_usb_tbl), 1460 + .vreg_list = qmp_phy_vreg_l, 1461 + .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), 1462 + .regs = qmp_v5_usb3phy_regs_layout, 1463 + }; 1464 + 1465 + static const struct qmp_phy_cfg qcs8300_usb3_uniphy_cfg = { 1466 + .offsets = &qmp_usb_offsets_v5, 1467 + 1468 + .serdes_tbl = sc8280xp_usb3_uniphy_serdes_tbl, 1469 + .serdes_tbl_num = ARRAY_SIZE(sc8280xp_usb3_uniphy_serdes_tbl), 1470 + .tx_tbl = qcs8300_usb3_uniphy_tx_tbl, 1471 + .tx_tbl_num = ARRAY_SIZE(qcs8300_usb3_uniphy_tx_tbl), 1472 + .rx_tbl = qcs8300_usb3_uniphy_rx_tbl, 1473 + .rx_tbl_num = ARRAY_SIZE(qcs8300_usb3_uniphy_rx_tbl), 1500 1474 .pcs_tbl = sa8775p_usb3_uniphy_pcs_tbl, 1501 1475 .pcs_tbl_num = ARRAY_SIZE(sa8775p_usb3_uniphy_pcs_tbl), 1502 1476 .pcs_usb_tbl = sa8775p_usb3_uniphy_pcs_usb_tbl, ··· 2309 2247 }, { 2310 2248 .compatible = "qcom,msm8996-qmp-usb3-phy", 2311 2249 .data = &msm8996_usb3phy_cfg, 2250 + }, { 2251 + .compatible = "qcom,qcs8300-qmp-usb3-uni-phy", 2252 + .data = &qcs8300_usb3_uniphy_cfg, 2312 2253 }, { 2313 2254 .compatible = "qcom,qdu1000-qmp-usb3-uni-phy", 2314 2255 .data = &qdu1000_usb3_uniphy_cfg,
+1 -1
drivers/phy/realtek/phy-rtk-usb2.c
··· 1298 1298 1299 1299 static struct platform_driver rtk_usb2phy_driver = { 1300 1300 .probe = rtk_usb2phy_probe, 1301 - .remove_new = rtk_usb2phy_remove, 1301 + .remove = rtk_usb2phy_remove, 1302 1302 .driver = { 1303 1303 .name = "rtk-usb2phy", 1304 1304 .of_match_table = usbphy_rtk_dt_match,
+1 -1
drivers/phy/realtek/phy-rtk-usb3.c
··· 734 734 735 735 static struct platform_driver rtk_usb3phy_driver = { 736 736 .probe = rtk_usb3phy_probe, 737 - .remove_new = rtk_usb3phy_remove, 737 + .remove = rtk_usb3phy_remove, 738 738 .driver = { 739 739 .name = "rtk-usb3phy", 740 740 .of_match_table = usbphy_rtk_dt_match,
+4 -4
drivers/phy/renesas/phy-rcar-gen3-pcie.c
··· 132 132 133 133 static struct platform_driver rcar_gen3_phy_driver = { 134 134 .driver = { 135 - .name = "phy_rcar_gen3_pcie", 136 - .of_match_table = rcar_gen3_phy_pcie_match_table, 135 + .name = "phy_rcar_gen3_pcie", 136 + .of_match_table = rcar_gen3_phy_pcie_match_table, 137 137 }, 138 - .probe = rcar_gen3_phy_pcie_probe, 139 - .remove_new = rcar_gen3_phy_pcie_remove, 138 + .probe = rcar_gen3_phy_pcie_probe, 139 + .remove = rcar_gen3_phy_pcie_remove, 140 140 }; 141 141 142 142 module_platform_driver(rcar_gen3_phy_driver);
+1 -1
drivers/phy/renesas/phy-rcar-gen3-usb2.c
··· 825 825 .of_match_table = rcar_gen3_phy_usb2_match_table, 826 826 }, 827 827 .probe = rcar_gen3_phy_usb2_probe, 828 - .remove_new = rcar_gen3_phy_usb2_remove, 828 + .remove = rcar_gen3_phy_usb2_remove, 829 829 }; 830 830 module_platform_driver(rcar_gen3_phy_usb2_driver); 831 831
+4 -4
drivers/phy/renesas/phy-rcar-gen3-usb3.c
··· 206 206 207 207 static struct platform_driver rcar_gen3_phy_usb3_driver = { 208 208 .driver = { 209 - .name = "phy_rcar_gen3_usb3", 210 - .of_match_table = rcar_gen3_phy_usb3_match_table, 209 + .name = "phy_rcar_gen3_usb3", 210 + .of_match_table = rcar_gen3_phy_usb3_match_table, 211 211 }, 212 - .probe = rcar_gen3_phy_usb3_probe, 213 - .remove_new = rcar_gen3_phy_usb3_remove, 212 + .probe = rcar_gen3_phy_usb3_probe, 213 + .remove = rcar_gen3_phy_usb3_remove, 214 214 }; 215 215 module_platform_driver(rcar_gen3_phy_usb3_driver); 216 216
+1 -1
drivers/phy/renesas/r8a779f0-ether-serdes.c
··· 404 404 405 405 static struct platform_driver r8a779f0_eth_serdes_driver_platform = { 406 406 .probe = r8a779f0_eth_serdes_probe, 407 - .remove_new = r8a779f0_eth_serdes_remove, 407 + .remove = r8a779f0_eth_serdes_remove, 408 408 .driver = { 409 409 .name = "r8a779f0_eth_serdes", 410 410 .of_match_table = r8a779f0_eth_serdes_of_table,
+1 -1
drivers/phy/rockchip/phy-rockchip-inno-csidphy.c
··· 472 472 .of_match_table = rockchip_inno_csidphy_match_id, 473 473 }, 474 474 .probe = rockchip_inno_csidphy_probe, 475 - .remove_new = rockchip_inno_csidphy_remove, 475 + .remove = rockchip_inno_csidphy_remove, 476 476 }; 477 477 478 478 module_platform_driver(rockchip_inno_csidphy_driver);
+1 -1
drivers/phy/rockchip/phy-rockchip-inno-dsidphy.c
··· 784 784 .of_match_table = of_match_ptr(inno_dsidphy_of_match), 785 785 }, 786 786 .probe = inno_dsidphy_probe, 787 - .remove_new = inno_dsidphy_remove, 787 + .remove = inno_dsidphy_remove, 788 788 }; 789 789 module_platform_driver(inno_dsidphy_driver); 790 790
+2 -2
drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
··· 1424 1424 MODULE_DEVICE_TABLE(of, inno_hdmi_phy_of_match); 1425 1425 1426 1426 static struct platform_driver inno_hdmi_phy_driver = { 1427 - .probe = inno_hdmi_phy_probe, 1428 - .remove_new = inno_hdmi_phy_remove, 1427 + .probe = inno_hdmi_phy_probe, 1428 + .remove = inno_hdmi_phy_remove, 1429 1429 .driver = { 1430 1430 .name = "inno-hdmi-phy", 1431 1431 .of_match_table = inno_hdmi_phy_of_match,
+159 -41
drivers/phy/rockchip/phy-rockchip-inno-usb2.c
··· 229 229 * @dev: pointer to device. 230 230 * @grf: General Register Files regmap. 231 231 * @usbgrf: USB General Register Files regmap. 232 - * @clk: clock struct of phy input clk. 232 + * @clks: array of phy input clocks. 233 233 * @clk480m: clock struct of phy output clk. 234 234 * @clk480m_hw: clock struct of phy output clk management. 235 + * @num_clks: number of phy input clocks. 235 236 * @phy_reset: phy reset control. 236 237 * @chg_state: states involved in USB charger detection. 237 238 * @chg_type: USB charger types. ··· 247 246 struct device *dev; 248 247 struct regmap *grf; 249 248 struct regmap *usbgrf; 250 - struct clk *clk; 249 + struct clk_bulk_data *clks; 251 250 struct clk *clk480m; 252 251 struct clk_hw clk480m_hw; 252 + int num_clks; 253 253 struct reset_control *phy_reset; 254 254 enum usb_chg_state chg_state; 255 255 enum power_supply_type chg_type; ··· 310 308 usleep_range(100, 200); 311 309 312 310 return 0; 311 + } 312 + 313 + static void rockchip_usb2phy_clk_bulk_disable(void *data) 314 + { 315 + struct rockchip_usb2phy *rphy = data; 316 + 317 + clk_bulk_disable_unprepare(rphy->num_clks, rphy->clks); 313 318 } 314 319 315 320 static int rockchip_usb2phy_clk480m_prepare(struct clk_hw *hw) ··· 385 376 { 386 377 struct device_node *node = rphy->dev->of_node; 387 378 struct clk_init_data init; 379 + struct clk *refclk = NULL; 388 380 const char *clk_name; 381 + int i; 389 382 int ret = 0; 390 383 391 384 init.flags = 0; ··· 397 386 /* optional override of the clockname */ 398 387 of_property_read_string(node, "clock-output-names", &init.name); 399 388 400 - if (rphy->clk) { 401 - clk_name = __clk_get_name(rphy->clk); 389 + for (i = 0; i < rphy->num_clks; i++) { 390 + if (!strncmp(rphy->clks[i].id, "phyclk", 6)) { 391 + refclk = rphy->clks[i].clk; 392 + break; 393 + } 394 + } 395 + 396 + if (!IS_ERR(refclk)) { 397 + clk_name = __clk_get_name(refclk); 402 398 init.parent_names = &clk_name; 403 399 init.num_parents = 1; 404 400 } else { ··· 436 418 437 419 static int rockchip_usb2phy_extcon_register(struct rockchip_usb2phy *rphy) 438 420 { 439 - int ret; 440 421 struct device_node *node = rphy->dev->of_node; 441 422 struct extcon_dev *edev; 423 + int ret; 442 424 443 425 if (of_property_read_bool(node, "extcon")) { 444 426 edev = extcon_get_edev_by_phandle(rphy->dev, 0); 445 - if (IS_ERR(edev)) { 446 - if (PTR_ERR(edev) != -EPROBE_DEFER) 447 - dev_err(rphy->dev, "Invalid or missing extcon\n"); 448 - return PTR_ERR(edev); 449 - } 427 + if (IS_ERR(edev)) 428 + return dev_err_probe(rphy->dev, PTR_ERR(edev), 429 + "invalid or missing extcon\n"); 450 430 } else { 451 431 /* Initialize extcon device */ 452 432 edev = devm_extcon_dev_allocate(rphy->dev, 453 433 rockchip_usb2phy_extcon_cable); 454 434 455 435 if (IS_ERR(edev)) 456 - return -ENOMEM; 436 + return dev_err_probe(rphy->dev, PTR_ERR(edev), 437 + "failed to allocate extcon device\n"); 457 438 458 439 ret = devm_extcon_dev_register(rphy->dev, edev); 459 - if (ret) { 460 - dev_err(rphy->dev, "failed to register extcon device\n"); 461 - return ret; 462 - } 440 + if (ret) 441 + return dev_err_probe(rphy->dev, ret, 442 + "failed to register extcon device\n"); 463 443 } 464 444 465 445 rphy->edev = edev; ··· 1343 1327 struct rockchip_usb2phy *rphy; 1344 1328 const struct rockchip_usb2phy_cfg *phy_cfgs; 1345 1329 unsigned int reg; 1346 - int index, ret; 1330 + int index = 0, ret; 1347 1331 1348 1332 rphy = devm_kzalloc(dev, sizeof(*rphy), GFP_KERNEL); 1349 1333 if (!rphy) ··· 1355 1339 dev_err(dev, "failed to locate usbgrf\n"); 1356 1340 return PTR_ERR(rphy->grf); 1357 1341 } 1358 - } 1359 - 1360 - else { 1342 + } else { 1361 1343 rphy->grf = syscon_node_to_regmap(dev->parent->of_node); 1362 1344 if (IS_ERR(rphy->grf)) 1363 1345 return PTR_ERR(rphy->grf); ··· 1372 1358 } 1373 1359 1374 1360 if (of_property_read_u32_index(np, "reg", 0, &reg)) { 1375 - dev_err(dev, "the reg property is not assigned in %pOFn node\n", 1376 - np); 1361 + dev_err(dev, "the reg property is not assigned in %pOFn node\n", np); 1377 1362 return -EINVAL; 1378 1363 } 1379 1364 1380 1365 /* support address_cells=2 */ 1381 1366 if (of_property_count_u32_elems(np, "reg") > 2 && reg == 0) { 1382 1367 if (of_property_read_u32_index(np, "reg", 1, &reg)) { 1383 - dev_err(dev, "the reg property is not assigned in %pOFn node\n", 1384 - np); 1368 + dev_err(dev, "the reg property is not assigned in %pOFn node\n", np); 1385 1369 return -EINVAL; 1386 1370 } 1387 1371 } ··· 1398 1386 if (ret) 1399 1387 return ret; 1400 1388 1401 - /* find out a proper config which can be matched with dt. */ 1402 - index = 0; 1389 + /* find a proper config that can be matched with the DT */ 1403 1390 do { 1404 1391 if (phy_cfgs[index].reg == reg) { 1405 1392 rphy->phy_cfg = &phy_cfgs[index]; ··· 1417 1406 if (IS_ERR(rphy->phy_reset)) 1418 1407 return PTR_ERR(rphy->phy_reset); 1419 1408 1420 - rphy->clk = devm_clk_get_optional_enabled(dev, "phyclk"); 1421 - if (IS_ERR(rphy->clk)) { 1422 - return dev_err_probe(&pdev->dev, PTR_ERR(rphy->clk), 1423 - "failed to get phyclk\n"); 1424 - } 1409 + ret = devm_clk_bulk_get_all(dev, &rphy->clks); 1410 + if (ret == -EPROBE_DEFER) 1411 + return dev_err_probe(&pdev->dev, -EPROBE_DEFER, 1412 + "failed to get phy clock\n"); 1413 + 1414 + /* Clocks are optional */ 1415 + rphy->num_clks = ret < 0 ? 0 : ret; 1425 1416 1426 1417 ret = rockchip_usb2phy_clk480m_register(rphy); 1427 - if (ret) { 1428 - dev_err(dev, "failed to register 480m output clock\n"); 1418 + if (ret) 1419 + return dev_err_probe(dev, ret, "failed to register 480m output clock\n"); 1420 + 1421 + ret = clk_bulk_prepare_enable(rphy->num_clks, rphy->clks); 1422 + if (ret) 1423 + return dev_err_probe(dev, ret, "failed to enable phy clock\n"); 1424 + 1425 + ret = devm_add_action_or_reset(dev, rockchip_usb2phy_clk_bulk_disable, rphy); 1426 + if (ret) 1429 1427 return ret; 1430 - } 1431 1428 1432 1429 if (rphy->phy_cfg->phy_tuning) { 1433 1430 ret = rphy->phy_cfg->phy_tuning(rphy); ··· 1455 1436 1456 1437 phy = devm_phy_create(dev, child_np, &rockchip_usb2phy_ops); 1457 1438 if (IS_ERR(phy)) { 1458 - dev_err_probe(dev, PTR_ERR(phy), "failed to create phy\n"); 1459 - ret = PTR_ERR(phy); 1439 + ret = dev_err_probe(dev, PTR_ERR(phy), "failed to create phy\n"); 1460 1440 goto put_child; 1461 1441 } 1462 1442 ··· 1464 1446 1465 1447 /* initialize otg/host port separately */ 1466 1448 if (of_node_name_eq(child_np, "host-port")) { 1467 - ret = rockchip_usb2phy_host_port_init(rphy, rport, 1468 - child_np); 1449 + ret = rockchip_usb2phy_host_port_init(rphy, rport, child_np); 1469 1450 if (ret) 1470 1451 goto put_child; 1471 1452 } else { 1472 - ret = rockchip_usb2phy_otg_port_init(rphy, rport, 1473 - child_np); 1453 + ret = rockchip_usb2phy_otg_port_init(rphy, rport, child_np); 1474 1454 if (ret) 1475 1455 goto put_child; 1476 1456 } ··· 1490 1474 "rockchip_usb2phy", 1491 1475 rphy); 1492 1476 if (ret) { 1493 - dev_err(rphy->dev, 1494 - "failed to request usb2phy irq handle\n"); 1477 + dev_err_probe(rphy->dev, ret, "failed to request usb2phy irq handle\n"); 1495 1478 goto put_child; 1496 1479 } 1497 1480 } ··· 1508 1493 return regmap_write_bits(rphy->grf, 0x298, 1509 1494 BIT(2) << BIT_WRITEABLE_SHIFT | BIT(2), 1510 1495 BIT(2) << BIT_WRITEABLE_SHIFT | 0); 1496 + } 1497 + 1498 + static int rk3576_usb2phy_tuning(struct rockchip_usb2phy *rphy) 1499 + { 1500 + int ret; 1501 + u32 reg = rphy->phy_cfg->reg; 1502 + 1503 + /* Deassert SIDDQ to power on analog block */ 1504 + ret = regmap_write(rphy->grf, reg + 0x0010, GENMASK(29, 29) | 0x0000); 1505 + if (ret) 1506 + return ret; 1507 + 1508 + /* Do reset after exit IDDQ mode */ 1509 + ret = rockchip_usb2phy_reset(rphy); 1510 + if (ret) 1511 + return ret; 1512 + 1513 + /* HS DC Voltage Level Adjustment 4'b1001 : +5.89% */ 1514 + ret |= regmap_write(rphy->grf, reg + 0x000c, GENMASK(27, 24) | 0x0900); 1515 + 1516 + /* HS Transmitter Pre-Emphasis Current Control 2'b10 : 2x */ 1517 + ret |= regmap_write(rphy->grf, reg + 0x0010, GENMASK(20, 19) | 0x0010); 1518 + 1519 + return ret; 1511 1520 } 1512 1521 1513 1522 static int rk3588_usb2phy_tuning(struct rockchip_usb2phy *rphy) ··· 1962 1923 { /* sentinel */ } 1963 1924 }; 1964 1925 1926 + static const struct rockchip_usb2phy_cfg rk3576_phy_cfgs[] = { 1927 + { 1928 + .reg = 0x0, 1929 + .num_ports = 1, 1930 + .phy_tuning = rk3576_usb2phy_tuning, 1931 + .clkout_ctl = { 0x0008, 0, 0, 1, 0 }, 1932 + .port_cfgs = { 1933 + [USB2PHY_PORT_OTG] = { 1934 + .phy_sus = { 0x0000, 8, 0, 0, 0x1d1 }, 1935 + .bvalid_det_en = { 0x00c0, 1, 1, 0, 1 }, 1936 + .bvalid_det_st = { 0x00c4, 1, 1, 0, 1 }, 1937 + .bvalid_det_clr = { 0x00c8, 1, 1, 0, 1 }, 1938 + .ls_det_en = { 0x00c0, 0, 0, 0, 1 }, 1939 + .ls_det_st = { 0x00c4, 0, 0, 0, 1 }, 1940 + .ls_det_clr = { 0x00c8, 0, 0, 0, 1 }, 1941 + .disfall_en = { 0x00c0, 6, 6, 0, 1 }, 1942 + .disfall_st = { 0x00c4, 6, 6, 0, 1 }, 1943 + .disfall_clr = { 0x00c8, 6, 6, 0, 1 }, 1944 + .disrise_en = { 0x00c0, 5, 5, 0, 1 }, 1945 + .disrise_st = { 0x00c4, 5, 5, 0, 1 }, 1946 + .disrise_clr = { 0x00c8, 5, 5, 0, 1 }, 1947 + .utmi_avalid = { 0x0080, 1, 1, 0, 1 }, 1948 + .utmi_bvalid = { 0x0080, 0, 0, 0, 1 }, 1949 + .utmi_ls = { 0x0080, 5, 4, 0, 1 }, 1950 + } 1951 + }, 1952 + .chg_det = { 1953 + .cp_det = { 0x0080, 8, 8, 0, 1 }, 1954 + .dcp_det = { 0x0080, 8, 8, 0, 1 }, 1955 + .dp_det = { 0x0080, 9, 9, 1, 0 }, 1956 + .idm_sink_en = { 0x0010, 5, 5, 1, 0 }, 1957 + .idp_sink_en = { 0x0010, 5, 5, 0, 1 }, 1958 + .idp_src_en = { 0x0010, 14, 14, 0, 1 }, 1959 + .rdm_pdwn_en = { 0x0010, 14, 14, 0, 1 }, 1960 + .vdm_src_en = { 0x0010, 7, 6, 0, 3 }, 1961 + .vdp_src_en = { 0x0010, 7, 6, 0, 3 }, 1962 + }, 1963 + }, 1964 + { 1965 + .reg = 0x2000, 1966 + .num_ports = 1, 1967 + .phy_tuning = rk3576_usb2phy_tuning, 1968 + .clkout_ctl = { 0x2008, 0, 0, 1, 0 }, 1969 + .port_cfgs = { 1970 + [USB2PHY_PORT_OTG] = { 1971 + .phy_sus = { 0x2000, 8, 0, 0, 0x1d1 }, 1972 + .bvalid_det_en = { 0x20c0, 1, 1, 0, 1 }, 1973 + .bvalid_det_st = { 0x20c4, 1, 1, 0, 1 }, 1974 + .bvalid_det_clr = { 0x20c8, 1, 1, 0, 1 }, 1975 + .ls_det_en = { 0x20c0, 0, 0, 0, 1 }, 1976 + .ls_det_st = { 0x20c4, 0, 0, 0, 1 }, 1977 + .ls_det_clr = { 0x20c8, 0, 0, 0, 1 }, 1978 + .disfall_en = { 0x20c0, 6, 6, 0, 1 }, 1979 + .disfall_st = { 0x20c4, 6, 6, 0, 1 }, 1980 + .disfall_clr = { 0x20c8, 6, 6, 0, 1 }, 1981 + .disrise_en = { 0x20c0, 5, 5, 0, 1 }, 1982 + .disrise_st = { 0x20c4, 5, 5, 0, 1 }, 1983 + .disrise_clr = { 0x20c8, 5, 5, 0, 1 }, 1984 + .utmi_avalid = { 0x2080, 1, 1, 0, 1 }, 1985 + .utmi_bvalid = { 0x2080, 0, 0, 0, 1 }, 1986 + .utmi_ls = { 0x2080, 5, 4, 0, 1 }, 1987 + } 1988 + }, 1989 + .chg_det = { 1990 + .cp_det = { 0x2080, 8, 8, 0, 1 }, 1991 + .dcp_det = { 0x2080, 8, 8, 0, 1 }, 1992 + .dp_det = { 0x2080, 9, 9, 1, 0 }, 1993 + .idm_sink_en = { 0x2010, 5, 5, 1, 0 }, 1994 + .idp_sink_en = { 0x2010, 5, 5, 0, 1 }, 1995 + .idp_src_en = { 0x2010, 14, 14, 0, 1 }, 1996 + .rdm_pdwn_en = { 0x2010, 14, 14, 0, 1 }, 1997 + .vdm_src_en = { 0x2010, 7, 6, 0, 3 }, 1998 + .vdp_src_en = { 0x2010, 7, 6, 0, 3 }, 1999 + }, 2000 + }, 2001 + { /* sentinel */ } 2002 + }; 2003 + 1965 2004 static const struct rockchip_usb2phy_cfg rk3588_phy_cfgs[] = { 1966 2005 { 1967 2006 .reg = 0x0000, ··· 2211 2094 { .compatible = "rockchip,rk3366-usb2phy", .data = &rk3366_phy_cfgs }, 2212 2095 { .compatible = "rockchip,rk3399-usb2phy", .data = &rk3399_phy_cfgs }, 2213 2096 { .compatible = "rockchip,rk3568-usb2phy", .data = &rk3568_phy_cfgs }, 2097 + { .compatible = "rockchip,rk3576-usb2phy", .data = &rk3576_phy_cfgs }, 2214 2098 { .compatible = "rockchip,rk3588-usb2phy", .data = &rk3588_phy_cfgs }, 2215 2099 { .compatible = "rockchip,rv1108-usb2phy", .data = &rv1108_phy_cfgs }, 2216 2100 {}
+1 -16
drivers/phy/rockchip/phy-rockchip-samsung-hdptx.c
··· 256 256 }; 257 257 258 258 enum rk_hdptx_reset { 259 - RST_PHY = 0, 260 - RST_APB, 259 + RST_APB = 0, 261 260 RST_INIT, 262 261 RST_CMN, 263 262 RST_LANE, 264 - RST_ROPLL, 265 - RST_LCPLL, 266 263 RST_MAX 267 264 }; 268 265 ··· 662 665 { 663 666 u32 val; 664 667 665 - /* reset phy and apb, or phy locked flag may keep 1 */ 666 - reset_control_assert(hdptx->rsts[RST_PHY].rstc); 667 - usleep_range(20, 30); 668 - reset_control_deassert(hdptx->rsts[RST_PHY].rstc); 669 - 670 668 reset_control_assert(hdptx->rsts[RST_APB].rstc); 671 669 usleep_range(20, 30); 672 670 reset_control_deassert(hdptx->rsts[RST_APB].rstc); ··· 783 791 cfg->sdm_num_sign, cfg->sdm_num, cfg->sdm_deno); 784 792 785 793 rk_hdptx_pre_power_up(hdptx); 786 - 787 - reset_control_assert(hdptx->rsts[RST_ROPLL].rstc); 788 - usleep_range(20, 30); 789 - reset_control_deassert(hdptx->rsts[RST_ROPLL].rstc); 790 794 791 795 rk_hdptx_multi_reg_write(hdptx, rk_hdtpx_common_cmn_init_seq); 792 796 rk_hdptx_multi_reg_write(hdptx, rk_hdtpx_tmds_cmn_init_seq); ··· 1086 1098 return dev_err_probe(dev, PTR_ERR(hdptx->regmap), 1087 1099 "Failed to init regmap\n"); 1088 1100 1089 - hdptx->rsts[RST_PHY].id = "phy"; 1090 1101 hdptx->rsts[RST_APB].id = "apb"; 1091 1102 hdptx->rsts[RST_INIT].id = "init"; 1092 1103 hdptx->rsts[RST_CMN].id = "cmn"; 1093 1104 hdptx->rsts[RST_LANE].id = "lane"; 1094 - hdptx->rsts[RST_ROPLL].id = "ropll"; 1095 - hdptx->rsts[RST_LCPLL].id = "lcpll"; 1096 1105 1097 1106 ret = devm_reset_control_bulk_get_exclusive(dev, RST_MAX, hdptx->rsts); 1098 1107 if (ret)
+1 -1
drivers/phy/rockchip/phy-rockchip-typec.c
··· 1210 1210 1211 1211 static struct platform_driver rockchip_typec_phy_driver = { 1212 1212 .probe = rockchip_typec_phy_probe, 1213 - .remove_new = rockchip_typec_phy_remove, 1213 + .remove = rockchip_typec_phy_remove, 1214 1214 .driver = { 1215 1215 .name = "rockchip-typec-phy", 1216 1216 .of_match_table = rockchip_typec_phy_dt_ids,
+41
drivers/phy/rockchip/phy-rockchip-usbdp.c
··· 1538 1538 "init", "cmn", "lane", "pcs_apb", "pma_apb" 1539 1539 }; 1540 1540 1541 + static const struct rk_udphy_cfg rk3576_udphy_cfgs = { 1542 + .num_phys = 1, 1543 + .phy_ids = { 0x2b010000 }, 1544 + .num_rsts = ARRAY_SIZE(rk_udphy_rst_list), 1545 + .rst_list = rk_udphy_rst_list, 1546 + .grfcfg = { 1547 + /* u2phy-grf */ 1548 + .bvalid_phy_con = RK_UDPHY_GEN_GRF_REG(0x0010, 1, 0, 0x2, 0x3), 1549 + .bvalid_grf_con = RK_UDPHY_GEN_GRF_REG(0x0000, 15, 14, 0x1, 0x3), 1550 + 1551 + /* usb-grf */ 1552 + .usb3otg0_cfg = RK_UDPHY_GEN_GRF_REG(0x0030, 15, 0, 0x1100, 0x0188), 1553 + 1554 + /* usbdpphy-grf */ 1555 + .low_pwrn = RK_UDPHY_GEN_GRF_REG(0x0004, 13, 13, 0, 1), 1556 + .rx_lfps = RK_UDPHY_GEN_GRF_REG(0x0004, 14, 14, 0, 1), 1557 + }, 1558 + .vogrfcfg = { 1559 + { 1560 + .hpd_trigger = RK_UDPHY_GEN_GRF_REG(0x0000, 11, 10, 1, 3), 1561 + .dp_lane_reg = 0x0000, 1562 + }, 1563 + }, 1564 + .dp_tx_ctrl_cfg = { 1565 + rk3588_dp_tx_drv_ctrl_rbr_hbr_typec, 1566 + rk3588_dp_tx_drv_ctrl_rbr_hbr_typec, 1567 + rk3588_dp_tx_drv_ctrl_hbr2, 1568 + rk3588_dp_tx_drv_ctrl_hbr3, 1569 + }, 1570 + .dp_tx_ctrl_cfg_typec = { 1571 + rk3588_dp_tx_drv_ctrl_rbr_hbr_typec, 1572 + rk3588_dp_tx_drv_ctrl_rbr_hbr_typec, 1573 + rk3588_dp_tx_drv_ctrl_hbr2, 1574 + rk3588_dp_tx_drv_ctrl_hbr3, 1575 + }, 1576 + }; 1577 + 1541 1578 static const struct rk_udphy_cfg rk3588_udphy_cfgs = { 1542 1579 .num_phys = 2, 1543 1580 .phy_ids = { ··· 1621 1584 }; 1622 1585 1623 1586 static const struct of_device_id rk_udphy_dt_match[] = { 1587 + { 1588 + .compatible = "rockchip,rk3576-usbdp-phy", 1589 + .data = &rk3576_udphy_cfgs 1590 + }, 1624 1591 { 1625 1592 .compatible = "rockchip,rk3588-usbdp-phy", 1626 1593 .data = &rk3588_udphy_cfgs
+11
drivers/phy/st/Kconfig
··· 33 33 Enable this support to enable the picoPHY device used by USB2 34 34 and USB3 controllers on STMicroelectronics STiH407 SoC families. 35 35 36 + config PHY_STM32_COMBOPHY 37 + tristate "STMicroelectronics COMBOPHY driver for STM32MP25" 38 + depends on ARCH_STM32 || COMPILE_TEST 39 + select GENERIC_PHY 40 + help 41 + Enable this to support the COMBOPHY device used by USB3 or PCIe 42 + controllers on STMicroelectronics STM32MP25 SoC. 43 + This driver controls the COMBOPHY block to generate the PCIe 100Mhz 44 + reference clock from either the external clock generator or HSE 45 + internal SoC clock source. 46 + 36 47 config PHY_STM32_USBPHYC 37 48 tristate "STMicroelectronics STM32 USB HS PHY Controller driver" 38 49 depends on ARCH_STM32 || COMPILE_TEST
+1
drivers/phy/st/Makefile
··· 3 3 obj-$(CONFIG_PHY_ST_SPEAR1310_MIPHY) += phy-spear1310-miphy.o 4 4 obj-$(CONFIG_PHY_ST_SPEAR1340_MIPHY) += phy-spear1340-miphy.o 5 5 obj-$(CONFIG_PHY_STIH407_USB) += phy-stih407-usb.o 6 + obj-$(CONFIG_PHY_STM32_COMBOPHY) += phy-stm32-combophy.o 6 7 obj-$(CONFIG_PHY_STM32_USBPHYC) += phy-stm32-usbphyc.o
+598
drivers/phy/st/phy-stm32-combophy.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* 3 + * STMicroelectronics COMBOPHY STM32MP25 Controller driver. 4 + * 5 + * Copyright (C) 2024 STMicroelectronics 6 + * Author: Christian Bruel <christian.bruel@foss.st.com> 7 + */ 8 + 9 + #include <linux/bitfield.h> 10 + #include <linux/clk.h> 11 + #include <linux/mfd/syscon.h> 12 + #include <linux/platform_device.h> 13 + #include <linux/phy/phy.h> 14 + #include <linux/pm_runtime.h> 15 + #include <linux/regmap.h> 16 + #include <linux/reset.h> 17 + #include <dt-bindings/phy/phy.h> 18 + 19 + #define SYSCFG_COMBOPHY_CR1 0x4c00 20 + #define SYSCFG_COMBOPHY_CR2 0x4c04 21 + #define SYSCFG_COMBOPHY_CR4 0x4c0c 22 + #define SYSCFG_COMBOPHY_CR5 0x4c10 23 + #define SYSCFG_COMBOPHY_SR 0x4c14 24 + #define SYSCFG_PCIEPRGCR 0x6080 25 + 26 + /* SYSCFG PCIEPRGCR */ 27 + #define STM32MP25_PCIEPRGCR_EN BIT(0) 28 + #define STM32MP25_PCIEPRG_IMPCTRL_OHM GENMASK(3, 1) 29 + #define STM32MP25_PCIEPRG_IMPCTRL_VSWING GENMASK(5, 4) 30 + 31 + /* SYSCFG SYSCFG_COMBOPHY_SR */ 32 + #define STM32MP25_PIPE0_PHYSTATUS BIT(1) 33 + 34 + /* SYSCFG CR1 */ 35 + #define SYSCFG_COMBOPHY_CR1_REFUSEPAD BIT(0) 36 + #define SYSCFG_COMBOPHY_CR1_MPLLMULT GENMASK(7, 1) 37 + #define SYSCFG_COMBOPHY_CR1_REFCLKSEL GENMASK(16, 8) 38 + #define SYSCFG_COMBOPHY_CR1_REFCLKDIV2 BIT(17) 39 + #define SYSCFG_COMBOPHY_CR1_REFSSPEN BIT(18) 40 + #define SYSCFG_COMBOPHY_CR1_SSCEN BIT(19) 41 + 42 + /* SYSCFG CR4 */ 43 + #define SYSCFG_COMBOPHY_CR4_RX0_EQ GENMASK(2, 0) 44 + 45 + #define MPLLMULT_19_2 (0x02u << 1) 46 + #define MPLLMULT_20 (0x7du << 1) 47 + #define MPLLMULT_24 (0x68u << 1) 48 + #define MPLLMULT_25 (0x64u << 1) 49 + #define MPLLMULT_26 (0x60u << 1) 50 + #define MPLLMULT_38_4 (0x41u << 1) 51 + #define MPLLMULT_48 (0x6cu << 1) 52 + #define MPLLMULT_50 (0x32u << 1) 53 + #define MPLLMULT_52 (0x30u << 1) 54 + #define MPLLMULT_100 (0x19u << 1) 55 + 56 + #define REFCLKSEL_0 0 57 + #define REFCLKSEL_1 (0x108u << 8) 58 + 59 + #define REFCLDIV_0 0 60 + 61 + /* SYSCFG CR2 */ 62 + #define SYSCFG_COMBOPHY_CR2_MODESEL GENMASK(1, 0) 63 + #define SYSCFG_COMBOPHY_CR2_ISO_DIS BIT(15) 64 + 65 + #define COMBOPHY_MODESEL_PCIE 0 66 + #define COMBOPHY_MODESEL_USB 3 67 + 68 + /* SYSCFG CR5 */ 69 + #define SYSCFG_COMBOPHY_CR5_COMMON_CLOCKS BIT(12) 70 + 71 + #define COMBOPHY_SUP_ANA_MPLL_LOOP_CTL 0xc0 72 + #define COMBOPHY_PROP_CNTRL GENMASK(7, 4) 73 + 74 + /* Required apb/ker clocks first, optional pad last. */ 75 + static const char * const combophy_clks[] = {"apb", "ker", "pad"}; 76 + #define APB_CLK 0 77 + #define KER_CLK 1 78 + #define PAD_CLK 2 79 + 80 + struct stm32_combophy { 81 + struct phy *phy; 82 + struct regmap *regmap; 83 + struct device *dev; 84 + void __iomem *base; 85 + struct reset_control *phy_reset; 86 + struct clk_bulk_data clks[ARRAY_SIZE(combophy_clks)]; 87 + int num_clks; 88 + bool have_pad_clk; 89 + unsigned int type; 90 + bool is_init; 91 + int irq_wakeup; 92 + }; 93 + 94 + struct clk_impedance { 95 + u32 microohm; 96 + u32 vswing[4]; 97 + }; 98 + 99 + /* 100 + * lookup table to hold the settings needed for a ref clock frequency 101 + * impedance, the offset is used to set the IMP_CTL and DE_EMP bit of the 102 + * PRG_IMP_CTRL register. Use ordered discrete values in the table 103 + */ 104 + static const struct clk_impedance imp_lookup[] = { 105 + { 6090000, { 442000, 564000, 684000, 802000 } }, 106 + { 5662000, { 528000, 621000, 712000, 803000 } }, 107 + { 5292000, { 491000, 596000, 700000, 802000 } }, 108 + { 4968000, { 558000, 640000, 722000, 803000 } }, 109 + { 4684000, { 468000, 581000, 692000, 802000 } }, 110 + { 4429000, { 554000, 613000, 717000, 803000 } }, 111 + { 4204000, { 511000, 609000, 706000, 802000 } }, 112 + { 3999000, { 571000, 648000, 726000, 803000 } } 113 + }; 114 + 115 + static int stm32_impedance_tune(struct stm32_combophy *combophy) 116 + { 117 + u8 imp_size = ARRAY_SIZE(imp_lookup); 118 + u8 vswing_size = ARRAY_SIZE(imp_lookup[0].vswing); 119 + u8 imp_of, vswing_of; 120 + u32 max_imp = imp_lookup[0].microohm; 121 + u32 min_imp = imp_lookup[imp_size - 1].microohm; 122 + u32 max_vswing = imp_lookup[imp_size - 1].vswing[vswing_size - 1]; 123 + u32 min_vswing = imp_lookup[0].vswing[0]; 124 + u32 val; 125 + 126 + if (!of_property_read_u32(combophy->dev->of_node, "st,output-micro-ohms", &val)) { 127 + if (val < min_imp || val > max_imp) { 128 + dev_err(combophy->dev, "Invalid value %u for output ohm\n", val); 129 + return -EINVAL; 130 + } 131 + 132 + for (imp_of = 0; imp_of < ARRAY_SIZE(imp_lookup); imp_of++) 133 + if (imp_lookup[imp_of].microohm <= val) 134 + break; 135 + 136 + dev_dbg(combophy->dev, "Set %u micro-ohms output impedance\n", 137 + imp_lookup[imp_of].microohm); 138 + 139 + regmap_update_bits(combophy->regmap, SYSCFG_PCIEPRGCR, 140 + STM32MP25_PCIEPRG_IMPCTRL_OHM, 141 + FIELD_PREP(STM32MP25_PCIEPRG_IMPCTRL_OHM, imp_of)); 142 + } else { 143 + regmap_read(combophy->regmap, SYSCFG_PCIEPRGCR, &val); 144 + imp_of = FIELD_GET(STM32MP25_PCIEPRG_IMPCTRL_OHM, val); 145 + } 146 + 147 + if (!of_property_read_u32(combophy->dev->of_node, "st,output-vswing-microvolt", &val)) { 148 + if (val < min_vswing || val > max_vswing) { 149 + dev_err(combophy->dev, "Invalid value %u for output vswing\n", val); 150 + return -EINVAL; 151 + } 152 + 153 + for (vswing_of = 0; vswing_of < ARRAY_SIZE(imp_lookup[imp_of].vswing); vswing_of++) 154 + if (imp_lookup[imp_of].vswing[vswing_of] >= val) 155 + break; 156 + 157 + dev_dbg(combophy->dev, "Set %u microvolt swing\n", 158 + imp_lookup[imp_of].vswing[vswing_of]); 159 + 160 + regmap_update_bits(combophy->regmap, SYSCFG_PCIEPRGCR, 161 + STM32MP25_PCIEPRG_IMPCTRL_VSWING, 162 + FIELD_PREP(STM32MP25_PCIEPRG_IMPCTRL_VSWING, vswing_of)); 163 + } 164 + 165 + return 0; 166 + } 167 + 168 + static int stm32_combophy_pll_init(struct stm32_combophy *combophy) 169 + { 170 + int ret; 171 + u32 refclksel, pllmult, propcntrl, val; 172 + u32 clk_rate; 173 + struct clk *clk; 174 + u32 cr1_val = 0, cr1_mask = 0; 175 + 176 + if (combophy->have_pad_clk) 177 + clk = combophy->clks[PAD_CLK].clk; 178 + else 179 + clk = combophy->clks[KER_CLK].clk; 180 + 181 + clk_rate = clk_get_rate(clk); 182 + 183 + dev_dbg(combophy->dev, "%s pll init rate %d\n", 184 + combophy->have_pad_clk ? "External" : "Ker", clk_rate); 185 + 186 + if (combophy->type != PHY_TYPE_PCIE) { 187 + cr1_mask |= SYSCFG_COMBOPHY_CR1_REFSSPEN; 188 + cr1_val |= SYSCFG_COMBOPHY_CR1_REFSSPEN; 189 + } 190 + 191 + if (of_property_present(combophy->dev->of_node, "st,ssc-on")) { 192 + dev_dbg(combophy->dev, "Enabling clock with SSC\n"); 193 + cr1_mask |= SYSCFG_COMBOPHY_CR1_SSCEN; 194 + cr1_val |= SYSCFG_COMBOPHY_CR1_SSCEN; 195 + } 196 + 197 + switch (clk_rate) { 198 + case 100000000: 199 + pllmult = MPLLMULT_100; 200 + refclksel = REFCLKSEL_0; 201 + propcntrl = 0x8u << 4; 202 + break; 203 + case 19200000: 204 + pllmult = MPLLMULT_19_2; 205 + refclksel = REFCLKSEL_1; 206 + propcntrl = 0x8u << 4; 207 + break; 208 + case 25000000: 209 + pllmult = MPLLMULT_25; 210 + refclksel = REFCLKSEL_0; 211 + propcntrl = 0xeu << 4; 212 + break; 213 + case 24000000: 214 + pllmult = MPLLMULT_24; 215 + refclksel = REFCLKSEL_1; 216 + propcntrl = 0xeu << 4; 217 + break; 218 + case 20000000: 219 + pllmult = MPLLMULT_20; 220 + refclksel = REFCLKSEL_0; 221 + propcntrl = 0xeu << 4; 222 + break; 223 + default: 224 + dev_err(combophy->dev, "Invalid rate 0x%x\n", clk_rate); 225 + return -EINVAL; 226 + } 227 + 228 + cr1_mask |= SYSCFG_COMBOPHY_CR1_REFCLKDIV2; 229 + cr1_val |= REFCLDIV_0; 230 + 231 + cr1_mask |= SYSCFG_COMBOPHY_CR1_REFCLKSEL; 232 + cr1_val |= refclksel; 233 + 234 + cr1_mask |= SYSCFG_COMBOPHY_CR1_MPLLMULT; 235 + cr1_val |= pllmult; 236 + 237 + /* 238 + * vddcombophy is interconnected with vddcore. Isolation bit should be unset 239 + * before using the ComboPHY. 240 + */ 241 + regmap_update_bits(combophy->regmap, SYSCFG_COMBOPHY_CR2, 242 + SYSCFG_COMBOPHY_CR2_ISO_DIS, SYSCFG_COMBOPHY_CR2_ISO_DIS); 243 + 244 + reset_control_assert(combophy->phy_reset); 245 + 246 + if (combophy->type == PHY_TYPE_PCIE) { 247 + ret = stm32_impedance_tune(combophy); 248 + if (ret) 249 + goto out_iso; 250 + 251 + cr1_mask |= SYSCFG_COMBOPHY_CR1_REFUSEPAD; 252 + cr1_val |= combophy->have_pad_clk ? SYSCFG_COMBOPHY_CR1_REFUSEPAD : 0; 253 + } 254 + 255 + if (!of_property_read_u32(combophy->dev->of_node, "st,rx-equalizer", &val)) { 256 + dev_dbg(combophy->dev, "Set RX equalizer %u\n", val); 257 + if (val > SYSCFG_COMBOPHY_CR4_RX0_EQ) { 258 + dev_err(combophy->dev, "Invalid value %u for rx0 equalizer\n", val); 259 + ret = -EINVAL; 260 + goto out_iso; 261 + } 262 + 263 + regmap_update_bits(combophy->regmap, SYSCFG_COMBOPHY_CR4, 264 + SYSCFG_COMBOPHY_CR4_RX0_EQ, val); 265 + } 266 + 267 + regmap_update_bits(combophy->regmap, SYSCFG_COMBOPHY_CR1, cr1_mask, cr1_val); 268 + 269 + /* 270 + * Force elasticity buffer to be tuned for the reference clock as 271 + * the separated clock model is not supported 272 + */ 273 + regmap_update_bits(combophy->regmap, SYSCFG_COMBOPHY_CR5, 274 + SYSCFG_COMBOPHY_CR5_COMMON_CLOCKS, SYSCFG_COMBOPHY_CR5_COMMON_CLOCKS); 275 + 276 + reset_control_deassert(combophy->phy_reset); 277 + 278 + ret = regmap_read_poll_timeout(combophy->regmap, SYSCFG_COMBOPHY_SR, val, 279 + !(val & STM32MP25_PIPE0_PHYSTATUS), 280 + 10, 1000); 281 + if (ret) { 282 + dev_err(combophy->dev, "timeout, cannot lock PLL\n"); 283 + if (combophy->type == PHY_TYPE_PCIE && !combophy->have_pad_clk) 284 + regmap_update_bits(combophy->regmap, SYSCFG_PCIEPRGCR, 285 + STM32MP25_PCIEPRGCR_EN, 0); 286 + 287 + if (combophy->type != PHY_TYPE_PCIE) 288 + regmap_update_bits(combophy->regmap, SYSCFG_COMBOPHY_CR1, 289 + SYSCFG_COMBOPHY_CR1_REFSSPEN, 0); 290 + 291 + goto out; 292 + } 293 + 294 + 295 + if (combophy->type == PHY_TYPE_PCIE) { 296 + if (!combophy->have_pad_clk) 297 + regmap_update_bits(combophy->regmap, SYSCFG_PCIEPRGCR, 298 + STM32MP25_PCIEPRGCR_EN, STM32MP25_PCIEPRGCR_EN); 299 + 300 + val = readl_relaxed(combophy->base + COMBOPHY_SUP_ANA_MPLL_LOOP_CTL); 301 + val &= ~COMBOPHY_PROP_CNTRL; 302 + val |= propcntrl; 303 + writel_relaxed(val, combophy->base + COMBOPHY_SUP_ANA_MPLL_LOOP_CTL); 304 + } 305 + 306 + return 0; 307 + 308 + out_iso: 309 + reset_control_deassert(combophy->phy_reset); 310 + 311 + out: 312 + regmap_update_bits(combophy->regmap, SYSCFG_COMBOPHY_CR2, 313 + SYSCFG_COMBOPHY_CR2_ISO_DIS, 0); 314 + 315 + return ret; 316 + } 317 + 318 + static struct phy *stm32_combophy_xlate(struct device *dev, 319 + const struct of_phandle_args *args) 320 + { 321 + struct stm32_combophy *combophy = dev_get_drvdata(dev); 322 + unsigned int type; 323 + 324 + if (args->args_count != 1) { 325 + dev_err(dev, "invalid number of cells in 'phy' property\n"); 326 + return ERR_PTR(-EINVAL); 327 + } 328 + 329 + type = args->args[0]; 330 + if (type != PHY_TYPE_USB3 && type != PHY_TYPE_PCIE) { 331 + dev_err(dev, "unsupported device type: %d\n", type); 332 + return ERR_PTR(-EINVAL); 333 + } 334 + 335 + if (combophy->have_pad_clk && type != PHY_TYPE_PCIE) { 336 + dev_err(dev, "Invalid use of clk_pad for USB3 mode\n"); 337 + return ERR_PTR(-EINVAL); 338 + } 339 + 340 + combophy->type = type; 341 + 342 + return combophy->phy; 343 + } 344 + 345 + static int stm32_combophy_set_mode(struct stm32_combophy *combophy) 346 + { 347 + int type = combophy->type; 348 + u32 val; 349 + 350 + switch (type) { 351 + case PHY_TYPE_PCIE: 352 + dev_dbg(combophy->dev, "setting PCIe ComboPHY\n"); 353 + val = COMBOPHY_MODESEL_PCIE; 354 + break; 355 + case PHY_TYPE_USB3: 356 + dev_dbg(combophy->dev, "setting USB3 ComboPHY\n"); 357 + val = COMBOPHY_MODESEL_USB; 358 + break; 359 + default: 360 + dev_err(combophy->dev, "Invalid PHY mode %d\n", type); 361 + return -EINVAL; 362 + } 363 + 364 + return regmap_update_bits(combophy->regmap, SYSCFG_COMBOPHY_CR2, 365 + SYSCFG_COMBOPHY_CR2_MODESEL, val); 366 + } 367 + 368 + static int stm32_combophy_suspend_noirq(struct device *dev) 369 + { 370 + struct stm32_combophy *combophy = dev_get_drvdata(dev); 371 + 372 + /* 373 + * Clocks should be turned off since it is not needed for 374 + * wakeup capability. In case usb-remote wakeup is not enabled, 375 + * combo-phy is already turned off by HCD driver using exit callback 376 + */ 377 + if (combophy->is_init) { 378 + clk_bulk_disable_unprepare(combophy->num_clks, combophy->clks); 379 + 380 + /* since wakeup is enabled for ctrl */ 381 + enable_irq_wake(combophy->irq_wakeup); 382 + } 383 + 384 + return 0; 385 + } 386 + 387 + static int stm32_combophy_resume_noirq(struct device *dev) 388 + { 389 + struct stm32_combophy *combophy = dev_get_drvdata(dev); 390 + int ret; 391 + 392 + /* 393 + * If clocks was turned off by suspend call for wakeup then needs 394 + * to be turned back ON in resume. In case usb-remote wakeup is not 395 + * enabled, clocks already turned ON by HCD driver using init callback 396 + */ 397 + if (combophy->is_init) { 398 + /* since wakeup was enabled for ctrl */ 399 + disable_irq_wake(combophy->irq_wakeup); 400 + 401 + ret = clk_bulk_prepare_enable(combophy->num_clks, combophy->clks); 402 + if (ret) { 403 + dev_err(dev, "can't enable clocks (%d)\n", ret); 404 + return ret; 405 + } 406 + } 407 + 408 + return 0; 409 + } 410 + 411 + static int stm32_combophy_exit(struct phy *phy) 412 + { 413 + struct stm32_combophy *combophy = phy_get_drvdata(phy); 414 + struct device *dev = combophy->dev; 415 + 416 + combophy->is_init = false; 417 + 418 + if (combophy->type == PHY_TYPE_PCIE && !combophy->have_pad_clk) 419 + regmap_update_bits(combophy->regmap, SYSCFG_PCIEPRGCR, 420 + STM32MP25_PCIEPRGCR_EN, 0); 421 + 422 + if (combophy->type != PHY_TYPE_PCIE) 423 + regmap_update_bits(combophy->regmap, SYSCFG_COMBOPHY_CR1, 424 + SYSCFG_COMBOPHY_CR1_REFSSPEN, 0); 425 + 426 + regmap_update_bits(combophy->regmap, SYSCFG_COMBOPHY_CR2, 427 + SYSCFG_COMBOPHY_CR2_ISO_DIS, 0); 428 + 429 + clk_bulk_disable_unprepare(combophy->num_clks, combophy->clks); 430 + 431 + pm_runtime_put_noidle(dev); 432 + 433 + return 0; 434 + } 435 + 436 + static int stm32_combophy_init(struct phy *phy) 437 + { 438 + struct stm32_combophy *combophy = phy_get_drvdata(phy); 439 + struct device *dev = combophy->dev; 440 + int ret; 441 + 442 + pm_runtime_get_noresume(dev); 443 + 444 + ret = clk_bulk_prepare_enable(combophy->num_clks, combophy->clks); 445 + if (ret) { 446 + dev_err(dev, "can't enable clocks (%d)\n", ret); 447 + pm_runtime_put_noidle(dev); 448 + return ret; 449 + } 450 + 451 + ret = stm32_combophy_set_mode(combophy); 452 + if (ret) { 453 + dev_err(dev, "combophy mode not set\n"); 454 + clk_bulk_disable_unprepare(combophy->num_clks, combophy->clks); 455 + pm_runtime_put_noidle(dev); 456 + return ret; 457 + } 458 + 459 + ret = stm32_combophy_pll_init(combophy); 460 + if (ret) { 461 + clk_bulk_disable_unprepare(combophy->num_clks, combophy->clks); 462 + pm_runtime_put_noidle(dev); 463 + return ret; 464 + } 465 + 466 + pm_runtime_disable(dev); 467 + pm_runtime_set_active(dev); 468 + pm_runtime_enable(dev); 469 + 470 + combophy->is_init = true; 471 + 472 + return ret; 473 + } 474 + 475 + static const struct phy_ops stm32_combophy_phy_data = { 476 + .init = stm32_combophy_init, 477 + .exit = stm32_combophy_exit, 478 + .owner = THIS_MODULE 479 + }; 480 + 481 + static irqreturn_t stm32_combophy_irq_wakeup_handler(int irq, void *dev_id) 482 + { 483 + return IRQ_HANDLED; 484 + } 485 + 486 + static int stm32_combophy_get_clocks(struct stm32_combophy *combophy) 487 + { 488 + int i, ret; 489 + 490 + for (i = 0; i < ARRAY_SIZE(combophy_clks); i++) 491 + combophy->clks[i].id = combophy_clks[i]; 492 + 493 + combophy->num_clks = ARRAY_SIZE(combophy_clks) - 1; 494 + 495 + ret = devm_clk_bulk_get(combophy->dev, combophy->num_clks, combophy->clks); 496 + if (ret) 497 + return ret; 498 + 499 + ret = devm_clk_bulk_get_optional(combophy->dev, 1, combophy->clks + combophy->num_clks); 500 + if (ret) 501 + return ret; 502 + 503 + if (combophy->clks[combophy->num_clks].clk != NULL) { 504 + combophy->have_pad_clk = true; 505 + combophy->num_clks++; 506 + } 507 + 508 + return 0; 509 + } 510 + 511 + static int stm32_combophy_probe(struct platform_device *pdev) 512 + { 513 + struct stm32_combophy *combophy; 514 + struct device *dev = &pdev->dev; 515 + struct phy_provider *phy_provider; 516 + int ret, irq; 517 + 518 + combophy = devm_kzalloc(dev, sizeof(*combophy), GFP_KERNEL); 519 + if (!combophy) 520 + return -ENOMEM; 521 + 522 + combophy->dev = dev; 523 + 524 + dev_set_drvdata(dev, combophy); 525 + 526 + combophy->base = devm_platform_ioremap_resource(pdev, 0); 527 + if (IS_ERR(combophy->base)) 528 + return PTR_ERR(combophy->base); 529 + 530 + ret = stm32_combophy_get_clocks(combophy); 531 + if (ret) 532 + return ret; 533 + 534 + combophy->phy_reset = devm_reset_control_get_exclusive(dev, "phy"); 535 + if (IS_ERR(combophy->phy_reset)) 536 + return dev_err_probe(dev, PTR_ERR(combophy->phy_reset), 537 + "Failed to get PHY reset\n"); 538 + 539 + combophy->regmap = syscon_regmap_lookup_by_compatible("st,stm32mp25-syscfg"); 540 + if (IS_ERR(combophy->regmap)) 541 + return dev_err_probe(dev, PTR_ERR(combophy->regmap), 542 + "No syscfg specified\n"); 543 + 544 + combophy->phy = devm_phy_create(dev, NULL, &stm32_combophy_phy_data); 545 + if (IS_ERR(combophy->phy)) 546 + return dev_err_probe(dev, PTR_ERR(combophy->phy), 547 + "failed to create PCIe/USB3 ComboPHY\n"); 548 + 549 + if (device_property_read_bool(dev, "wakeup-source")) { 550 + irq = platform_get_irq(pdev, 0); 551 + if (irq < 0) 552 + return dev_err_probe(dev, irq, "failed to get IRQ\n"); 553 + combophy->irq_wakeup = irq; 554 + 555 + ret = devm_request_threaded_irq(dev, combophy->irq_wakeup, NULL, 556 + stm32_combophy_irq_wakeup_handler, IRQF_ONESHOT, 557 + NULL, NULL); 558 + if (ret) 559 + return dev_err_probe(dev, ret, "unable to request wake IRQ %d\n", 560 + combophy->irq_wakeup); 561 + } 562 + 563 + ret = devm_pm_runtime_enable(dev); 564 + if (ret) 565 + return dev_err_probe(dev, ret, "Failed to enable pm runtime\n"); 566 + 567 + phy_set_drvdata(combophy->phy, combophy); 568 + 569 + phy_provider = devm_of_phy_provider_register(dev, stm32_combophy_xlate); 570 + 571 + return PTR_ERR_OR_ZERO(phy_provider); 572 + } 573 + 574 + static const struct dev_pm_ops stm32_combophy_pm_ops = { 575 + NOIRQ_SYSTEM_SLEEP_PM_OPS(stm32_combophy_suspend_noirq, 576 + stm32_combophy_resume_noirq) 577 + }; 578 + 579 + static const struct of_device_id stm32_combophy_of_match[] = { 580 + { .compatible = "st,stm32mp25-combophy", }, 581 + { }, 582 + }; 583 + MODULE_DEVICE_TABLE(of, stm32_combophy_of_match); 584 + 585 + static struct platform_driver stm32_combophy_driver = { 586 + .probe = stm32_combophy_probe, 587 + .driver = { 588 + .name = "stm32-combophy", 589 + .of_match_table = stm32_combophy_of_match, 590 + .pm = pm_sleep_ptr(&stm32_combophy_pm_ops) 591 + } 592 + }; 593 + 594 + module_platform_driver(stm32_combophy_driver); 595 + 596 + MODULE_AUTHOR("Christian Bruel <christian.bruel@foss.st.com>"); 597 + MODULE_DESCRIPTION("STM32MP25 Combophy USB3/PCIe controller driver"); 598 + MODULE_LICENSE("GPL");
+1 -1
drivers/phy/st/phy-stm32-usbphyc.c
··· 812 812 813 813 static struct platform_driver stm32_usbphyc_driver = { 814 814 .probe = stm32_usbphyc_probe, 815 - .remove_new = stm32_usbphyc_remove, 815 + .remove = stm32_usbphyc_remove, 816 816 .driver = { 817 817 .of_match_table = stm32_usbphyc_of_match, 818 818 .name = "stm32-usbphyc",
+1 -1
drivers/phy/tegra/xusb.c
··· 1327 1327 .pm = &tegra_xusb_padctl_pm_ops, 1328 1328 }, 1329 1329 .probe = tegra_xusb_padctl_probe, 1330 - .remove_new = tegra_xusb_padctl_remove, 1330 + .remove = tegra_xusb_padctl_remove, 1331 1331 }; 1332 1332 module_platform_driver(tegra_xusb_padctl_driver); 1333 1333
+1 -1
drivers/phy/ti/phy-am654-serdes.c
··· 837 837 838 838 static struct platform_driver serdes_am654_driver = { 839 839 .probe = serdes_am654_probe, 840 - .remove_new = serdes_am654_remove, 840 + .remove = serdes_am654_remove, 841 841 .driver = { 842 842 .name = "phy-am654", 843 843 .of_match_table = serdes_am654_id_table,
+2 -2
drivers/phy/ti/phy-da8xx-usb.c
··· 277 277 278 278 static struct platform_driver da8xx_usb_phy_driver = { 279 279 .probe = da8xx_usb_phy_probe, 280 - .remove_new = da8xx_usb_phy_remove, 280 + .remove = da8xx_usb_phy_remove, 281 281 .driver = { 282 282 .name = "da8xx-usb-phy", 283 283 .pm = &da8xx_usb_phy_pm_ops, 284 - .of_match_table = da8xx_usb_phy_ids, 284 + .of_match_table = da8xx_usb_phy_ids, 285 285 }, 286 286 }; 287 287
+1 -1
drivers/phy/ti/phy-dm816x-usb.c
··· 259 259 260 260 static struct platform_driver dm816x_usb_phy_driver = { 261 261 .probe = dm816x_usb_phy_probe, 262 - .remove_new = dm816x_usb_phy_remove, 262 + .remove = dm816x_usb_phy_remove, 263 263 .driver = { 264 264 .name = "dm816x-usb-phy", 265 265 .pm = &dm816x_usb_phy_pm_ops,
+2 -1
drivers/phy/ti/phy-gmii-sel.c
··· 230 230 struct phy_gmii_sel_soc_data phy_gmii_sel_cpsw5g_soc_j7200 = { 231 231 .use_of_data = true, 232 232 .regfields = phy_gmii_sel_fields_am654, 233 - .extra_modes = BIT(PHY_INTERFACE_MODE_QSGMII) | BIT(PHY_INTERFACE_MODE_SGMII), 233 + .extra_modes = BIT(PHY_INTERFACE_MODE_QSGMII) | BIT(PHY_INTERFACE_MODE_SGMII) | 234 + BIT(PHY_INTERFACE_MODE_USXGMII), 234 235 .num_ports = 4, 235 236 .num_qsgmii_main_ports = 1, 236 237 };
+1 -1
drivers/phy/ti/phy-j721e-wiz.c
··· 1685 1685 1686 1686 static struct platform_driver wiz_driver = { 1687 1687 .probe = wiz_probe, 1688 - .remove_new = wiz_remove, 1688 + .remove = wiz_remove, 1689 1689 .driver = { 1690 1690 .name = "wiz", 1691 1691 .of_match_table = wiz_id_table,
+1 -1
drivers/phy/ti/phy-omap-usb2.c
··· 511 511 512 512 static struct platform_driver omap_usb2_driver = { 513 513 .probe = omap_usb2_probe, 514 - .remove_new = omap_usb2_remove, 514 + .remove = omap_usb2_remove, 515 515 .driver = { 516 516 .name = "omap-usb2", 517 517 .of_match_table = omap_usb2_id_table,
+1 -1
drivers/phy/ti/phy-ti-pipe3.c
··· 920 920 921 921 static struct platform_driver ti_pipe3_driver = { 922 922 .probe = ti_pipe3_probe, 923 - .remove_new = ti_pipe3_remove, 923 + .remove = ti_pipe3_remove, 924 924 .driver = { 925 925 .name = "ti-pipe3", 926 926 .of_match_table = ti_pipe3_id_table,
+1 -1
drivers/phy/ti/phy-twl4030-usb.c
··· 834 834 835 835 static struct platform_driver twl4030_usb_driver = { 836 836 .probe = twl4030_usb_probe, 837 - .remove_new = twl4030_usb_remove, 837 + .remove = twl4030_usb_remove, 838 838 .driver = { 839 839 .name = "twl4030_usb", 840 840 .pm = &twl4030_usb_pm_ops,
+1 -1
drivers/phy/xilinx/phy-zynqmp.c
··· 1071 1071 1072 1072 static struct platform_driver xpsgtr_driver = { 1073 1073 .probe = xpsgtr_probe, 1074 - .remove_new = xpsgtr_remove, 1074 + .remove = xpsgtr_remove, 1075 1075 .driver = { 1076 1076 .name = "xilinx-psgtr", 1077 1077 .of_match_table = xpsgtr_of_match,
+1 -1
include/linux/phy/phy-sun4i-usb.h
··· 11 11 /** 12 12 * sun4i_usb_phy_set_squelch_detect() - Enable/disable squelch detect 13 13 * @phy: reference to a sun4i usb phy 14 - * @enabled: wether to enable or disable squelch detect 14 + * @enabled: whether to enable or disable squelch detect 15 15 */ 16 16 void sun4i_usb_phy_set_squelch_detect(struct phy *phy, bool enabled); 17 17