mirror of
https://git.openwrt.org/openwrt/openwrt.git
synced 2026-01-28 03:37:17 +01:00
rockchip: backport driver updates for rk3528
Backport clk/mac/phy driver updates for rk3528. Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org> Link: https://github.com/openwrt/openwrt/pull/20375 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
parent
d7530c1e54
commit
c7a26da60d
21 changed files with 5282 additions and 0 deletions
|
|
@ -128,6 +128,7 @@ CONFIG_CLK_RK3308=y
|
|||
CONFIG_CLK_RK3328=y
|
||||
CONFIG_CLK_RK3368=y
|
||||
CONFIG_CLK_RK3399=y
|
||||
CONFIG_CLK_RK3528=y
|
||||
CONFIG_CLK_RK3568=y
|
||||
CONFIG_CLK_RK3576=y
|
||||
CONFIG_CLK_RK3588=y
|
||||
|
|
|
|||
|
|
@ -0,0 +1,792 @@
|
|||
From e0c0a97bc308f71b0934e3637ac545ce65195df0 Mon Sep 17 00:00:00 2001
|
||||
From: Yao Zi <ziyao@disroot.org>
|
||||
Date: Mon, 17 Feb 2025 06:11:42 +0000
|
||||
Subject: [PATCH] dt-bindings: clock: Document clock and reset unit of RK3528
|
||||
|
||||
There are two types of clocks in RK3528 SoC, CRU-managed and
|
||||
SCMI-managed. Independent IDs are assigned to them.
|
||||
|
||||
For the reset part, differing from previous Rockchip SoCs and
|
||||
downstream bindings which embeds register offsets into the IDs, gapless
|
||||
numbers starting from zero are used.
|
||||
|
||||
Signed-off-by: Yao Zi <ziyao@disroot.org>
|
||||
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
|
||||
Link: https://lore.kernel.org/r/20250217061142.38480-6-ziyao@disroot.org
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
.../bindings/clock/rockchip,rk3528-cru.yaml | 64 +++
|
||||
.../dt-bindings/clock/rockchip,rk3528-cru.h | 453 ++++++++++++++++++
|
||||
.../dt-bindings/reset/rockchip,rk3528-cru.h | 241 ++++++++++
|
||||
3 files changed, 758 insertions(+)
|
||||
create mode 100644 Documentation/devicetree/bindings/clock/rockchip,rk3528-cru.yaml
|
||||
create mode 100644 include/dt-bindings/clock/rockchip,rk3528-cru.h
|
||||
create mode 100644 include/dt-bindings/reset/rockchip,rk3528-cru.h
|
||||
|
||||
--- /dev/null
|
||||
+++ b/Documentation/devicetree/bindings/clock/rockchip,rk3528-cru.yaml
|
||||
@@ -0,0 +1,64 @@
|
||||
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
+%YAML 1.2
|
||||
+---
|
||||
+$id: http://devicetree.org/schemas/clock/rockchip,rk3528-cru.yaml#
|
||||
+$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
+
|
||||
+title: Rockchip RK3528 Clock and Reset Controller
|
||||
+
|
||||
+maintainers:
|
||||
+ - Yao Zi <ziyao@disroot.org>
|
||||
+
|
||||
+description: |
|
||||
+ The RK3528 clock controller generates the clock and also implements a reset
|
||||
+ controller for SoC peripherals. For example, it provides SCLK_UART0 and
|
||||
+ PCLK_UART0 as well as SRST_P_UART0 and SRST_S_UART0 for the first UART
|
||||
+ module.
|
||||
+ Each clock is assigned an identifier, consumer nodes can use it to specify
|
||||
+ the clock. All available clock and reset IDs are defined in dt-binding
|
||||
+ headers.
|
||||
+
|
||||
+properties:
|
||||
+ compatible:
|
||||
+ const: rockchip,rk3528-cru
|
||||
+
|
||||
+ reg:
|
||||
+ maxItems: 1
|
||||
+
|
||||
+ clocks:
|
||||
+ items:
|
||||
+ - description: External 24MHz oscillator clock
|
||||
+ - description: >
|
||||
+ 50MHz clock generated by PHY module, for generating GMAC0 clocks only.
|
||||
+
|
||||
+ clock-names:
|
||||
+ items:
|
||||
+ - const: xin24m
|
||||
+ - const: gmac0
|
||||
+
|
||||
+ "#clock-cells":
|
||||
+ const: 1
|
||||
+
|
||||
+ "#reset-cells":
|
||||
+ const: 1
|
||||
+
|
||||
+required:
|
||||
+ - compatible
|
||||
+ - reg
|
||||
+ - clocks
|
||||
+ - clock-names
|
||||
+ - "#clock-cells"
|
||||
+ - "#reset-cells"
|
||||
+
|
||||
+additionalProperties: false
|
||||
+
|
||||
+examples:
|
||||
+ - |
|
||||
+ clock-controller@ff4a0000 {
|
||||
+ compatible = "rockchip,rk3528-cru";
|
||||
+ reg = <0xff4a0000 0x30000>;
|
||||
+ clocks = <&xin24m>, <&gmac0_clk>;
|
||||
+ clock-names = "xin24m", "gmac0";
|
||||
+ #clock-cells = <1>;
|
||||
+ #reset-cells = <1>;
|
||||
+ };
|
||||
--- /dev/null
|
||||
+++ b/include/dt-bindings/clock/rockchip,rk3528-cru.h
|
||||
@@ -0,0 +1,453 @@
|
||||
+/* SPDX-License-Identifier: (GPL-2.0-only OR MIT) */
|
||||
+/*
|
||||
+ * Copyright (c) 2022 Rockchip Electronics Co. Ltd.
|
||||
+ * Copyright (c) 2024 Yao Zi <ziyao@disroot.org>
|
||||
+ * Author: Joseph Chen <chenjh@rock-chips.com>
|
||||
+ */
|
||||
+
|
||||
+#ifndef _DT_BINDINGS_CLK_ROCKCHIP_RK3528_H
|
||||
+#define _DT_BINDINGS_CLK_ROCKCHIP_RK3528_H
|
||||
+
|
||||
+/* cru-clocks indices */
|
||||
+#define PLL_APLL 0
|
||||
+#define PLL_CPLL 1
|
||||
+#define PLL_GPLL 2
|
||||
+#define PLL_PPLL 3
|
||||
+#define PLL_DPLL 4
|
||||
+#define ARMCLK 5
|
||||
+#define XIN_OSC0_HALF 6
|
||||
+#define CLK_MATRIX_50M_SRC 7
|
||||
+#define CLK_MATRIX_100M_SRC 8
|
||||
+#define CLK_MATRIX_150M_SRC 9
|
||||
+#define CLK_MATRIX_200M_SRC 10
|
||||
+#define CLK_MATRIX_250M_SRC 11
|
||||
+#define CLK_MATRIX_300M_SRC 12
|
||||
+#define CLK_MATRIX_339M_SRC 13
|
||||
+#define CLK_MATRIX_400M_SRC 14
|
||||
+#define CLK_MATRIX_500M_SRC 15
|
||||
+#define CLK_MATRIX_600M_SRC 16
|
||||
+#define CLK_UART0_SRC 17
|
||||
+#define CLK_UART0_FRAC 18
|
||||
+#define SCLK_UART0 19
|
||||
+#define CLK_UART1_SRC 20
|
||||
+#define CLK_UART1_FRAC 21
|
||||
+#define SCLK_UART1 22
|
||||
+#define CLK_UART2_SRC 23
|
||||
+#define CLK_UART2_FRAC 24
|
||||
+#define SCLK_UART2 25
|
||||
+#define CLK_UART3_SRC 26
|
||||
+#define CLK_UART3_FRAC 27
|
||||
+#define SCLK_UART3 28
|
||||
+#define CLK_UART4_SRC 29
|
||||
+#define CLK_UART4_FRAC 30
|
||||
+#define SCLK_UART4 31
|
||||
+#define CLK_UART5_SRC 32
|
||||
+#define CLK_UART5_FRAC 33
|
||||
+#define SCLK_UART5 34
|
||||
+#define CLK_UART6_SRC 35
|
||||
+#define CLK_UART6_FRAC 36
|
||||
+#define SCLK_UART6 37
|
||||
+#define CLK_UART7_SRC 38
|
||||
+#define CLK_UART7_FRAC 39
|
||||
+#define SCLK_UART7 40
|
||||
+#define CLK_I2S0_2CH_SRC 41
|
||||
+#define CLK_I2S0_2CH_FRAC 42
|
||||
+#define MCLK_I2S0_2CH_SAI_SRC 43
|
||||
+#define CLK_I2S3_8CH_SRC 44
|
||||
+#define CLK_I2S3_8CH_FRAC 45
|
||||
+#define MCLK_I2S3_8CH_SAI_SRC 46
|
||||
+#define CLK_I2S1_8CH_SRC 47
|
||||
+#define CLK_I2S1_8CH_FRAC 48
|
||||
+#define MCLK_I2S1_8CH_SAI_SRC 49
|
||||
+#define CLK_I2S2_2CH_SRC 50
|
||||
+#define CLK_I2S2_2CH_FRAC 51
|
||||
+#define MCLK_I2S2_2CH_SAI_SRC 52
|
||||
+#define CLK_SPDIF_SRC 53
|
||||
+#define CLK_SPDIF_FRAC 54
|
||||
+#define MCLK_SPDIF_SRC 55
|
||||
+#define DCLK_VOP_SRC0 56
|
||||
+#define DCLK_VOP_SRC1 57
|
||||
+#define CLK_HSM 58
|
||||
+#define CLK_CORE_SRC_ACS 59
|
||||
+#define CLK_CORE_SRC_PVTMUX 60
|
||||
+#define CLK_CORE_SRC 61
|
||||
+#define CLK_CORE 62
|
||||
+#define ACLK_M_CORE_BIU 63
|
||||
+#define CLK_CORE_PVTPLL_SRC 64
|
||||
+#define PCLK_DBG 65
|
||||
+#define SWCLKTCK 66
|
||||
+#define CLK_SCANHS_CORE 67
|
||||
+#define CLK_SCANHS_ACLKM_CORE 68
|
||||
+#define CLK_SCANHS_PCLK_DBG 69
|
||||
+#define CLK_SCANHS_PCLK_CPU_BIU 70
|
||||
+#define PCLK_CPU_ROOT 71
|
||||
+#define PCLK_CORE_GRF 72
|
||||
+#define PCLK_DAPLITE_BIU 73
|
||||
+#define PCLK_CPU_BIU 74
|
||||
+#define CLK_REF_PVTPLL_CORE 75
|
||||
+#define ACLK_BUS_VOPGL_ROOT 76
|
||||
+#define ACLK_BUS_VOPGL_BIU 77
|
||||
+#define ACLK_BUS_H_ROOT 78
|
||||
+#define ACLK_BUS_H_BIU 79
|
||||
+#define ACLK_BUS_ROOT 80
|
||||
+#define HCLK_BUS_ROOT 81
|
||||
+#define PCLK_BUS_ROOT 82
|
||||
+#define ACLK_BUS_M_ROOT 83
|
||||
+#define ACLK_SYSMEM_BIU 84
|
||||
+#define CLK_TIMER_ROOT 85
|
||||
+#define ACLK_BUS_BIU 86
|
||||
+#define HCLK_BUS_BIU 87
|
||||
+#define PCLK_BUS_BIU 88
|
||||
+#define PCLK_DFT2APB 89
|
||||
+#define PCLK_BUS_GRF 90
|
||||
+#define ACLK_BUS_M_BIU 91
|
||||
+#define ACLK_GIC 92
|
||||
+#define ACLK_SPINLOCK 93
|
||||
+#define ACLK_DMAC 94
|
||||
+#define PCLK_TIMER 95
|
||||
+#define CLK_TIMER0 96
|
||||
+#define CLK_TIMER1 97
|
||||
+#define CLK_TIMER2 98
|
||||
+#define CLK_TIMER3 99
|
||||
+#define CLK_TIMER4 100
|
||||
+#define CLK_TIMER5 101
|
||||
+#define PCLK_JDBCK_DAP 102
|
||||
+#define CLK_JDBCK_DAP 103
|
||||
+#define PCLK_WDT_NS 104
|
||||
+#define TCLK_WDT_NS 105
|
||||
+#define HCLK_TRNG_NS 106
|
||||
+#define PCLK_UART0 107
|
||||
+#define PCLK_DMA2DDR 108
|
||||
+#define ACLK_DMA2DDR 109
|
||||
+#define PCLK_PWM0 110
|
||||
+#define CLK_PWM0 111
|
||||
+#define CLK_CAPTURE_PWM0 112
|
||||
+#define PCLK_PWM1 113
|
||||
+#define CLK_PWM1 114
|
||||
+#define CLK_CAPTURE_PWM1 115
|
||||
+#define PCLK_SCR 116
|
||||
+#define ACLK_DCF 117
|
||||
+#define PCLK_INTMUX 118
|
||||
+#define CLK_PPLL_I 119
|
||||
+#define CLK_PPLL_MUX 120
|
||||
+#define CLK_PPLL_100M_MATRIX 121
|
||||
+#define CLK_PPLL_50M_MATRIX 122
|
||||
+#define CLK_REF_PCIE_INNER_PHY 123
|
||||
+#define CLK_REF_PCIE_100M_PHY 124
|
||||
+#define ACLK_VPU_L_ROOT 125
|
||||
+#define CLK_GMAC1_VPU_25M 126
|
||||
+#define CLK_PPLL_125M_MATRIX 127
|
||||
+#define ACLK_VPU_ROOT 128
|
||||
+#define HCLK_VPU_ROOT 129
|
||||
+#define PCLK_VPU_ROOT 130
|
||||
+#define ACLK_VPU_BIU 131
|
||||
+#define HCLK_VPU_BIU 132
|
||||
+#define PCLK_VPU_BIU 133
|
||||
+#define ACLK_VPU 134
|
||||
+#define HCLK_VPU 135
|
||||
+#define PCLK_CRU_PCIE 136
|
||||
+#define PCLK_VPU_GRF 137
|
||||
+#define HCLK_SFC 138
|
||||
+#define SCLK_SFC 139
|
||||
+#define CCLK_SRC_EMMC 140
|
||||
+#define HCLK_EMMC 141
|
||||
+#define ACLK_EMMC 142
|
||||
+#define BCLK_EMMC 143
|
||||
+#define TCLK_EMMC 144
|
||||
+#define PCLK_GPIO1 145
|
||||
+#define DBCLK_GPIO1 146
|
||||
+#define ACLK_VPU_L_BIU 147
|
||||
+#define PCLK_VPU_IOC 148
|
||||
+#define HCLK_SAI_I2S0 149
|
||||
+#define MCLK_SAI_I2S0 150
|
||||
+#define HCLK_SAI_I2S2 151
|
||||
+#define MCLK_SAI_I2S2 152
|
||||
+#define PCLK_ACODEC 153
|
||||
+#define MCLK_ACODEC_TX 154
|
||||
+#define PCLK_GPIO3 155
|
||||
+#define DBCLK_GPIO3 156
|
||||
+#define PCLK_SPI1 157
|
||||
+#define CLK_SPI1 158
|
||||
+#define SCLK_IN_SPI1 159
|
||||
+#define PCLK_UART2 160
|
||||
+#define PCLK_UART5 161
|
||||
+#define PCLK_UART6 162
|
||||
+#define PCLK_UART7 163
|
||||
+#define PCLK_I2C3 164
|
||||
+#define CLK_I2C3 165
|
||||
+#define PCLK_I2C5 166
|
||||
+#define CLK_I2C5 167
|
||||
+#define PCLK_I2C6 168
|
||||
+#define CLK_I2C6 169
|
||||
+#define ACLK_MAC_VPU 170
|
||||
+#define PCLK_MAC_VPU 171
|
||||
+#define CLK_GMAC1_RMII_VPU 172
|
||||
+#define CLK_GMAC1_SRC_VPU 173
|
||||
+#define PCLK_PCIE 174
|
||||
+#define CLK_PCIE_AUX 175
|
||||
+#define ACLK_PCIE 176
|
||||
+#define HCLK_PCIE_SLV 177
|
||||
+#define HCLK_PCIE_DBI 178
|
||||
+#define PCLK_PCIE_PHY 179
|
||||
+#define PCLK_PIPE_GRF 180
|
||||
+#define CLK_PIPE_USB3OTG_COMBO 181
|
||||
+#define CLK_UTMI_USB3OTG 182
|
||||
+#define CLK_PCIE_PIPE_PHY 183
|
||||
+#define CCLK_SRC_SDIO0 184
|
||||
+#define HCLK_SDIO0 185
|
||||
+#define CCLK_SRC_SDIO1 186
|
||||
+#define HCLK_SDIO1 187
|
||||
+#define CLK_TS_0 188
|
||||
+#define CLK_TS_1 189
|
||||
+#define PCLK_CAN2 190
|
||||
+#define CLK_CAN2 191
|
||||
+#define PCLK_CAN3 192
|
||||
+#define CLK_CAN3 193
|
||||
+#define PCLK_SARADC 194
|
||||
+#define CLK_SARADC 195
|
||||
+#define PCLK_TSADC 196
|
||||
+#define CLK_TSADC 197
|
||||
+#define CLK_TSADC_TSEN 198
|
||||
+#define ACLK_USB3OTG 199
|
||||
+#define CLK_REF_USB3OTG 200
|
||||
+#define CLK_SUSPEND_USB3OTG 201
|
||||
+#define ACLK_GPU_ROOT 202
|
||||
+#define PCLK_GPU_ROOT 203
|
||||
+#define ACLK_GPU_BIU 204
|
||||
+#define PCLK_GPU_BIU 205
|
||||
+#define ACLK_GPU 206
|
||||
+#define CLK_GPU_PVTPLL_SRC 207
|
||||
+#define ACLK_GPU_MALI 208
|
||||
+#define HCLK_RKVENC_ROOT 209
|
||||
+#define ACLK_RKVENC_ROOT 210
|
||||
+#define PCLK_RKVENC_ROOT 211
|
||||
+#define HCLK_RKVENC_BIU 212
|
||||
+#define ACLK_RKVENC_BIU 213
|
||||
+#define PCLK_RKVENC_BIU 214
|
||||
+#define HCLK_RKVENC 215
|
||||
+#define ACLK_RKVENC 216
|
||||
+#define CLK_CORE_RKVENC 217
|
||||
+#define HCLK_SAI_I2S1 218
|
||||
+#define MCLK_SAI_I2S1 219
|
||||
+#define PCLK_I2C1 220
|
||||
+#define CLK_I2C1 221
|
||||
+#define PCLK_I2C0 222
|
||||
+#define CLK_I2C0 223
|
||||
+#define CLK_UART_JTAG 224
|
||||
+#define PCLK_SPI0 225
|
||||
+#define CLK_SPI0 226
|
||||
+#define SCLK_IN_SPI0 227
|
||||
+#define PCLK_GPIO4 228
|
||||
+#define DBCLK_GPIO4 229
|
||||
+#define PCLK_RKVENC_IOC 230
|
||||
+#define HCLK_SPDIF 231
|
||||
+#define MCLK_SPDIF 232
|
||||
+#define HCLK_PDM 233
|
||||
+#define MCLK_PDM 234
|
||||
+#define PCLK_UART1 235
|
||||
+#define PCLK_UART3 236
|
||||
+#define PCLK_RKVENC_GRF 237
|
||||
+#define PCLK_CAN0 238
|
||||
+#define CLK_CAN0 239
|
||||
+#define PCLK_CAN1 240
|
||||
+#define CLK_CAN1 241
|
||||
+#define ACLK_VO_ROOT 242
|
||||
+#define HCLK_VO_ROOT 243
|
||||
+#define PCLK_VO_ROOT 244
|
||||
+#define ACLK_VO_BIU 245
|
||||
+#define HCLK_VO_BIU 246
|
||||
+#define PCLK_VO_BIU 247
|
||||
+#define HCLK_RGA2E 248
|
||||
+#define ACLK_RGA2E 249
|
||||
+#define CLK_CORE_RGA2E 250
|
||||
+#define HCLK_VDPP 251
|
||||
+#define ACLK_VDPP 252
|
||||
+#define CLK_CORE_VDPP 253
|
||||
+#define PCLK_VO_GRF 254
|
||||
+#define PCLK_CRU 255
|
||||
+#define ACLK_VOP_ROOT 256
|
||||
+#define ACLK_VOP_BIU 257
|
||||
+#define HCLK_VOP 258
|
||||
+#define DCLK_VOP0 259
|
||||
+#define DCLK_VOP1 260
|
||||
+#define ACLK_VOP 261
|
||||
+#define PCLK_HDMI 262
|
||||
+#define CLK_SFR_HDMI 263
|
||||
+#define CLK_CEC_HDMI 264
|
||||
+#define CLK_SPDIF_HDMI 265
|
||||
+#define CLK_HDMIPHY_TMDSSRC 266
|
||||
+#define CLK_HDMIPHY_PREP 267
|
||||
+#define PCLK_HDMIPHY 268
|
||||
+#define HCLK_HDCP_KEY 269
|
||||
+#define ACLK_HDCP 270
|
||||
+#define HCLK_HDCP 271
|
||||
+#define PCLK_HDCP 272
|
||||
+#define HCLK_CVBS 273
|
||||
+#define DCLK_CVBS 274
|
||||
+#define DCLK_4X_CVBS 275
|
||||
+#define ACLK_JPEG_DECODER 276
|
||||
+#define HCLK_JPEG_DECODER 277
|
||||
+#define ACLK_VO_L_ROOT 278
|
||||
+#define ACLK_VO_L_BIU 279
|
||||
+#define ACLK_MAC_VO 280
|
||||
+#define PCLK_MAC_VO 281
|
||||
+#define CLK_GMAC0_SRC 282
|
||||
+#define CLK_GMAC0_RMII_50M 283
|
||||
+#define CLK_GMAC0_TX 284
|
||||
+#define CLK_GMAC0_RX 285
|
||||
+#define ACLK_JPEG_ROOT 286
|
||||
+#define ACLK_JPEG_BIU 287
|
||||
+#define HCLK_SAI_I2S3 288
|
||||
+#define MCLK_SAI_I2S3 289
|
||||
+#define CLK_MACPHY 290
|
||||
+#define PCLK_VCDCPHY 291
|
||||
+#define PCLK_GPIO2 292
|
||||
+#define DBCLK_GPIO2 293
|
||||
+#define PCLK_VO_IOC 294
|
||||
+#define CCLK_SRC_SDMMC0 295
|
||||
+#define HCLK_SDMMC0 296
|
||||
+#define PCLK_OTPC_NS 297
|
||||
+#define CLK_SBPI_OTPC_NS 298
|
||||
+#define CLK_USER_OTPC_NS 299
|
||||
+#define CLK_HDMIHDP0 300
|
||||
+#define HCLK_USBHOST 301
|
||||
+#define HCLK_USBHOST_ARB 302
|
||||
+#define CLK_USBHOST_OHCI 303
|
||||
+#define CLK_USBHOST_UTMI 304
|
||||
+#define PCLK_UART4 305
|
||||
+#define PCLK_I2C4 306
|
||||
+#define CLK_I2C4 307
|
||||
+#define PCLK_I2C7 308
|
||||
+#define CLK_I2C7 309
|
||||
+#define PCLK_USBPHY 310
|
||||
+#define CLK_REF_USBPHY 311
|
||||
+#define HCLK_RKVDEC_ROOT 312
|
||||
+#define ACLK_RKVDEC_ROOT_NDFT 313
|
||||
+#define PCLK_DDRPHY_CRU 314
|
||||
+#define HCLK_RKVDEC_BIU 315
|
||||
+#define ACLK_RKVDEC_BIU 316
|
||||
+#define ACLK_RKVDEC 317
|
||||
+#define HCLK_RKVDEC 318
|
||||
+#define CLK_HEVC_CA_RKVDEC 319
|
||||
+#define ACLK_RKVDEC_PVTMUX_ROOT 320
|
||||
+#define CLK_RKVDEC_PVTPLL_SRC 321
|
||||
+#define PCLK_DDR_ROOT 322
|
||||
+#define PCLK_DDR_BIU 323
|
||||
+#define PCLK_DDRC 324
|
||||
+#define PCLK_DDRMON 325
|
||||
+#define CLK_TIMER_DDRMON 326
|
||||
+#define PCLK_MSCH_BIU 327
|
||||
+#define PCLK_DDR_GRF 328
|
||||
+#define PCLK_DDR_HWLP 329
|
||||
+#define PCLK_DDRPHY 330
|
||||
+#define CLK_MSCH_BIU 331
|
||||
+#define ACLK_DDR_UPCTL 332
|
||||
+#define CLK_DDR_UPCTL 333
|
||||
+#define CLK_DDRMON 334
|
||||
+#define ACLK_DDR_SCRAMBLE 335
|
||||
+#define ACLK_SPLIT 336
|
||||
+#define CLK_DDRC_SRC 337
|
||||
+#define CLK_DDR_PHY 338
|
||||
+#define PCLK_OTPC_S 339
|
||||
+#define CLK_SBPI_OTPC_S 340
|
||||
+#define CLK_USER_OTPC_S 341
|
||||
+#define PCLK_KEYREADER 342
|
||||
+#define PCLK_BUS_SGRF 343
|
||||
+#define PCLK_STIMER 344
|
||||
+#define CLK_STIMER0 345
|
||||
+#define CLK_STIMER1 346
|
||||
+#define PCLK_WDT_S 347
|
||||
+#define TCLK_WDT_S 348
|
||||
+#define HCLK_TRNG_S 349
|
||||
+#define HCLK_BOOTROM 350
|
||||
+#define PCLK_DCF 351
|
||||
+#define ACLK_SYSMEM 352
|
||||
+#define HCLK_TSP 353
|
||||
+#define ACLK_TSP 354
|
||||
+#define CLK_CORE_TSP 355
|
||||
+#define CLK_OTPC_ARB 356
|
||||
+#define PCLK_OTP_MASK 357
|
||||
+#define CLK_PMC_OTP 358
|
||||
+#define PCLK_PMU_ROOT 359
|
||||
+#define HCLK_PMU_ROOT 360
|
||||
+#define PCLK_I2C2 361
|
||||
+#define CLK_I2C2 362
|
||||
+#define HCLK_PMU_BIU 363
|
||||
+#define PCLK_PMU_BIU 364
|
||||
+#define FCLK_MCU 365
|
||||
+#define RTC_CLK_MCU 366
|
||||
+#define PCLK_OSCCHK 367
|
||||
+#define CLK_PMU_MCU_JTAG 368
|
||||
+#define PCLK_PMU 369
|
||||
+#define PCLK_GPIO0 370
|
||||
+#define DBCLK_GPIO0 371
|
||||
+#define XIN_OSC0_DIV 372
|
||||
+#define CLK_DEEPSLOW 373
|
||||
+#define CLK_DDR_FAIL_SAFE 374
|
||||
+#define PCLK_PMU_HP_TIMER 375
|
||||
+#define CLK_PMU_HP_TIMER 376
|
||||
+#define CLK_PMU_32K_HP_TIMER 377
|
||||
+#define PCLK_PMU_IOC 378
|
||||
+#define PCLK_PMU_CRU 379
|
||||
+#define PCLK_PMU_GRF 380
|
||||
+#define PCLK_PMU_WDT 381
|
||||
+#define TCLK_PMU_WDT 382
|
||||
+#define PCLK_PMU_MAILBOX 383
|
||||
+#define PCLK_SCRKEYGEN 384
|
||||
+#define CLK_SCRKEYGEN 385
|
||||
+#define CLK_PVTM_OSCCHK 386
|
||||
+#define CLK_REFOUT 387
|
||||
+#define CLK_PVTM_PMU 388
|
||||
+#define PCLK_PVTM_PMU 389
|
||||
+#define PCLK_PMU_SGRF 390
|
||||
+#define HCLK_PMU_SRAM 391
|
||||
+#define CLK_UART0 392
|
||||
+#define CLK_UART1 393
|
||||
+#define CLK_UART2 394
|
||||
+#define CLK_UART3 395
|
||||
+#define CLK_UART4 396
|
||||
+#define CLK_UART5 397
|
||||
+#define CLK_UART6 398
|
||||
+#define CLK_UART7 399
|
||||
+#define MCLK_I2S0_2CH_SAI_SRC_PRE 400
|
||||
+#define MCLK_I2S1_8CH_SAI_SRC_PRE 401
|
||||
+#define MCLK_I2S2_2CH_SAI_SRC_PRE 402
|
||||
+#define MCLK_I2S3_8CH_SAI_SRC_PRE 403
|
||||
+#define MCLK_SDPDIF_SRC_PRE 404
|
||||
+
|
||||
+/* scmi-clocks indices */
|
||||
+#define SCMI_PCLK_KEYREADER 0
|
||||
+#define SCMI_HCLK_KLAD 1
|
||||
+#define SCMI_PCLK_KLAD 2
|
||||
+#define SCMI_HCLK_TRNG_S 3
|
||||
+#define SCMI_HCLK_CRYPTO_S 4
|
||||
+#define SCMI_PCLK_WDT_S 5
|
||||
+#define SCMI_TCLK_WDT_S 6
|
||||
+#define SCMI_PCLK_STIMER 7
|
||||
+#define SCMI_CLK_STIMER0 8
|
||||
+#define SCMI_CLK_STIMER1 9
|
||||
+#define SCMI_PCLK_OTP_MASK 10
|
||||
+#define SCMI_PCLK_OTPC_S 11
|
||||
+#define SCMI_CLK_SBPI_OTPC_S 12
|
||||
+#define SCMI_CLK_USER_OTPC_S 13
|
||||
+#define SCMI_CLK_PMC_OTP 14
|
||||
+#define SCMI_CLK_OTPC_ARB 15
|
||||
+#define SCMI_CLK_CORE_TSP 16
|
||||
+#define SCMI_ACLK_TSP 17
|
||||
+#define SCMI_HCLK_TSP 18
|
||||
+#define SCMI_PCLK_DCF 19
|
||||
+#define SCMI_CLK_DDR 20
|
||||
+#define SCMI_CLK_CPU 21
|
||||
+#define SCMI_CLK_GPU 22
|
||||
+#define SCMI_CORE_CRYPTO 23
|
||||
+#define SCMI_ACLK_CRYPTO 24
|
||||
+#define SCMI_PKA_CRYPTO 25
|
||||
+#define SCMI_HCLK_CRYPTO 26
|
||||
+#define SCMI_CORE_CRYPTO_S 27
|
||||
+#define SCMI_ACLK_CRYPTO_S 28
|
||||
+#define SCMI_PKA_CRYPTO_S 29
|
||||
+#define SCMI_CORE_KLAD 30
|
||||
+#define SCMI_ACLK_KLAD 31
|
||||
+#define SCMI_HCLK_TRNG 32
|
||||
+
|
||||
+#endif // _DT_BINDINGS_CLK_ROCKCHIP_RK3528_H
|
||||
--- /dev/null
|
||||
+++ b/include/dt-bindings/reset/rockchip,rk3528-cru.h
|
||||
@@ -0,0 +1,241 @@
|
||||
+/* SPDX-License-Identifier: (GPL-2.0-only OR MIT) */
|
||||
+/*
|
||||
+ * Copyright (c) 2022 Rockchip Electronics Co. Ltd.
|
||||
+ * Copyright (c) 2024 Yao Zi <ziyao@disroot.org>
|
||||
+ * Author: Joseph Chen <chenjh@rock-chips.com>
|
||||
+ */
|
||||
+
|
||||
+#ifndef _DT_BINDINGS_RESET_ROCKCHIP_RK3528_H
|
||||
+#define _DT_BINDINGS_RESET_ROCKCHIP_RK3528_H
|
||||
+
|
||||
+#define SRST_CORE0_PO 0
|
||||
+#define SRST_CORE1_PO 1
|
||||
+#define SRST_CORE2_PO 2
|
||||
+#define SRST_CORE3_PO 3
|
||||
+#define SRST_CORE0 4
|
||||
+#define SRST_CORE1 5
|
||||
+#define SRST_CORE2 6
|
||||
+#define SRST_CORE3 7
|
||||
+#define SRST_NL2 8
|
||||
+#define SRST_CORE_BIU 9
|
||||
+#define SRST_CORE_CRYPTO 10
|
||||
+#define SRST_P_DBG 11
|
||||
+#define SRST_POT_DBG 12
|
||||
+#define SRST_NT_DBG 13
|
||||
+#define SRST_P_CORE_GRF 14
|
||||
+#define SRST_P_DAPLITE_BIU 15
|
||||
+#define SRST_P_CPU_BIU 16
|
||||
+#define SRST_REF_PVTPLL_CORE 17
|
||||
+#define SRST_A_BUS_VOPGL_BIU 18
|
||||
+#define SRST_A_BUS_H_BIU 19
|
||||
+#define SRST_A_SYSMEM_BIU 20
|
||||
+#define SRST_A_BUS_BIU 21
|
||||
+#define SRST_H_BUS_BIU 22
|
||||
+#define SRST_P_BUS_BIU 23
|
||||
+#define SRST_P_DFT2APB 24
|
||||
+#define SRST_P_BUS_GRF 25
|
||||
+#define SRST_A_BUS_M_BIU 26
|
||||
+#define SRST_A_GIC 27
|
||||
+#define SRST_A_SPINLOCK 28
|
||||
+#define SRST_A_DMAC 29
|
||||
+#define SRST_P_TIMER 30
|
||||
+#define SRST_TIMER0 31
|
||||
+#define SRST_TIMER1 32
|
||||
+#define SRST_TIMER2 33
|
||||
+#define SRST_TIMER3 34
|
||||
+#define SRST_TIMER4 35
|
||||
+#define SRST_TIMER5 36
|
||||
+#define SRST_P_JDBCK_DAP 37
|
||||
+#define SRST_JDBCK_DAP 38
|
||||
+#define SRST_P_WDT_NS 39
|
||||
+#define SRST_T_WDT_NS 40
|
||||
+#define SRST_H_TRNG_NS 41
|
||||
+#define SRST_P_UART0 42
|
||||
+#define SRST_S_UART0 43
|
||||
+#define SRST_PKA_CRYPTO 44
|
||||
+#define SRST_A_CRYPTO 45
|
||||
+#define SRST_H_CRYPTO 46
|
||||
+#define SRST_P_DMA2DDR 47
|
||||
+#define SRST_A_DMA2DDR 48
|
||||
+#define SRST_P_PWM0 49
|
||||
+#define SRST_PWM0 50
|
||||
+#define SRST_P_PWM1 51
|
||||
+#define SRST_PWM1 52
|
||||
+#define SRST_P_SCR 53
|
||||
+#define SRST_A_DCF 54
|
||||
+#define SRST_P_INTMUX 55
|
||||
+#define SRST_A_VPU_BIU 56
|
||||
+#define SRST_H_VPU_BIU 57
|
||||
+#define SRST_P_VPU_BIU 58
|
||||
+#define SRST_A_VPU 59
|
||||
+#define SRST_H_VPU 60
|
||||
+#define SRST_P_CRU_PCIE 61
|
||||
+#define SRST_P_VPU_GRF 62
|
||||
+#define SRST_H_SFC 63
|
||||
+#define SRST_S_SFC 64
|
||||
+#define SRST_C_EMMC 65
|
||||
+#define SRST_H_EMMC 66
|
||||
+#define SRST_A_EMMC 67
|
||||
+#define SRST_B_EMMC 68
|
||||
+#define SRST_T_EMMC 69
|
||||
+#define SRST_P_GPIO1 70
|
||||
+#define SRST_DB_GPIO1 71
|
||||
+#define SRST_A_VPU_L_BIU 72
|
||||
+#define SRST_P_VPU_IOC 73
|
||||
+#define SRST_H_SAI_I2S0 74
|
||||
+#define SRST_M_SAI_I2S0 75
|
||||
+#define SRST_H_SAI_I2S2 76
|
||||
+#define SRST_M_SAI_I2S2 77
|
||||
+#define SRST_P_ACODEC 78
|
||||
+#define SRST_P_GPIO3 79
|
||||
+#define SRST_DB_GPIO3 80
|
||||
+#define SRST_P_SPI1 81
|
||||
+#define SRST_SPI1 82
|
||||
+#define SRST_P_UART2 83
|
||||
+#define SRST_S_UART2 84
|
||||
+#define SRST_P_UART5 85
|
||||
+#define SRST_S_UART5 86
|
||||
+#define SRST_P_UART6 87
|
||||
+#define SRST_S_UART6 88
|
||||
+#define SRST_P_UART7 89
|
||||
+#define SRST_S_UART7 90
|
||||
+#define SRST_P_I2C3 91
|
||||
+#define SRST_I2C3 92
|
||||
+#define SRST_P_I2C5 93
|
||||
+#define SRST_I2C5 94
|
||||
+#define SRST_P_I2C6 95
|
||||
+#define SRST_I2C6 96
|
||||
+#define SRST_A_MAC 97
|
||||
+#define SRST_P_PCIE 98
|
||||
+#define SRST_PCIE_PIPE_PHY 99
|
||||
+#define SRST_PCIE_POWER_UP 100
|
||||
+#define SRST_P_PCIE_PHY 101
|
||||
+#define SRST_P_PIPE_GRF 102
|
||||
+#define SRST_H_SDIO0 103
|
||||
+#define SRST_H_SDIO1 104
|
||||
+#define SRST_TS_0 105
|
||||
+#define SRST_TS_1 106
|
||||
+#define SRST_P_CAN2 107
|
||||
+#define SRST_CAN2 108
|
||||
+#define SRST_P_CAN3 109
|
||||
+#define SRST_CAN3 110
|
||||
+#define SRST_P_SARADC 111
|
||||
+#define SRST_SARADC 112
|
||||
+#define SRST_SARADC_PHY 113
|
||||
+#define SRST_P_TSADC 114
|
||||
+#define SRST_TSADC 115
|
||||
+#define SRST_A_USB3OTG 116
|
||||
+#define SRST_A_GPU_BIU 117
|
||||
+#define SRST_P_GPU_BIU 118
|
||||
+#define SRST_A_GPU 119
|
||||
+#define SRST_REF_PVTPLL_GPU 120
|
||||
+#define SRST_H_RKVENC_BIU 121
|
||||
+#define SRST_A_RKVENC_BIU 122
|
||||
+#define SRST_P_RKVENC_BIU 123
|
||||
+#define SRST_H_RKVENC 124
|
||||
+#define SRST_A_RKVENC 125
|
||||
+#define SRST_CORE_RKVENC 126
|
||||
+#define SRST_H_SAI_I2S1 127
|
||||
+#define SRST_M_SAI_I2S1 128
|
||||
+#define SRST_P_I2C1 129
|
||||
+#define SRST_I2C1 130
|
||||
+#define SRST_P_I2C0 131
|
||||
+#define SRST_I2C0 132
|
||||
+#define SRST_P_SPI0 133
|
||||
+#define SRST_SPI0 134
|
||||
+#define SRST_P_GPIO4 135
|
||||
+#define SRST_DB_GPIO4 136
|
||||
+#define SRST_P_RKVENC_IOC 137
|
||||
+#define SRST_H_SPDIF 138
|
||||
+#define SRST_M_SPDIF 139
|
||||
+#define SRST_H_PDM 140
|
||||
+#define SRST_M_PDM 141
|
||||
+#define SRST_P_UART1 142
|
||||
+#define SRST_S_UART1 143
|
||||
+#define SRST_P_UART3 144
|
||||
+#define SRST_S_UART3 145
|
||||
+#define SRST_P_RKVENC_GRF 146
|
||||
+#define SRST_P_CAN0 147
|
||||
+#define SRST_CAN0 148
|
||||
+#define SRST_P_CAN1 149
|
||||
+#define SRST_CAN1 150
|
||||
+#define SRST_A_VO_BIU 151
|
||||
+#define SRST_H_VO_BIU 152
|
||||
+#define SRST_P_VO_BIU 153
|
||||
+#define SRST_H_RGA2E 154
|
||||
+#define SRST_A_RGA2E 155
|
||||
+#define SRST_CORE_RGA2E 156
|
||||
+#define SRST_H_VDPP 157
|
||||
+#define SRST_A_VDPP 158
|
||||
+#define SRST_CORE_VDPP 159
|
||||
+#define SRST_P_VO_GRF 160
|
||||
+#define SRST_P_CRU 161
|
||||
+#define SRST_A_VOP_BIU 162
|
||||
+#define SRST_H_VOP 163
|
||||
+#define SRST_D_VOP0 164
|
||||
+#define SRST_D_VOP1 165
|
||||
+#define SRST_A_VOP 166
|
||||
+#define SRST_P_HDMI 167
|
||||
+#define SRST_HDMI 168
|
||||
+#define SRST_P_HDMIPHY 169
|
||||
+#define SRST_H_HDCP_KEY 170
|
||||
+#define SRST_A_HDCP 171
|
||||
+#define SRST_H_HDCP 172
|
||||
+#define SRST_P_HDCP 173
|
||||
+#define SRST_H_CVBS 174
|
||||
+#define SRST_D_CVBS_VOP 175
|
||||
+#define SRST_D_4X_CVBS_VOP 176
|
||||
+#define SRST_A_JPEG_DECODER 177
|
||||
+#define SRST_H_JPEG_DECODER 178
|
||||
+#define SRST_A_VO_L_BIU 179
|
||||
+#define SRST_A_MAC_VO 180
|
||||
+#define SRST_A_JPEG_BIU 181
|
||||
+#define SRST_H_SAI_I2S3 182
|
||||
+#define SRST_M_SAI_I2S3 183
|
||||
+#define SRST_MACPHY 184
|
||||
+#define SRST_P_VCDCPHY 185
|
||||
+#define SRST_P_GPIO2 186
|
||||
+#define SRST_DB_GPIO2 187
|
||||
+#define SRST_P_VO_IOC 188
|
||||
+#define SRST_H_SDMMC0 189
|
||||
+#define SRST_P_OTPC_NS 190
|
||||
+#define SRST_SBPI_OTPC_NS 191
|
||||
+#define SRST_USER_OTPC_NS 192
|
||||
+#define SRST_HDMIHDP0 193
|
||||
+#define SRST_H_USBHOST 194
|
||||
+#define SRST_H_USBHOST_ARB 195
|
||||
+#define SRST_HOST_UTMI 196
|
||||
+#define SRST_P_UART4 197
|
||||
+#define SRST_S_UART4 198
|
||||
+#define SRST_P_I2C4 199
|
||||
+#define SRST_I2C4 200
|
||||
+#define SRST_P_I2C7 201
|
||||
+#define SRST_I2C7 202
|
||||
+#define SRST_P_USBPHY 203
|
||||
+#define SRST_USBPHY_POR 204
|
||||
+#define SRST_USBPHY_OTG 205
|
||||
+#define SRST_USBPHY_HOST 206
|
||||
+#define SRST_P_DDRPHY_CRU 207
|
||||
+#define SRST_H_RKVDEC_BIU 208
|
||||
+#define SRST_A_RKVDEC_BIU 209
|
||||
+#define SRST_A_RKVDEC 210
|
||||
+#define SRST_H_RKVDEC 211
|
||||
+#define SRST_HEVC_CA_RKVDEC 212
|
||||
+#define SRST_REF_PVTPLL_RKVDEC 213
|
||||
+#define SRST_P_DDR_BIU 214
|
||||
+#define SRST_P_DDRC 215
|
||||
+#define SRST_P_DDRMON 216
|
||||
+#define SRST_TIMER_DDRMON 217
|
||||
+#define SRST_P_MSCH_BIU 218
|
||||
+#define SRST_P_DDR_GRF 219
|
||||
+#define SRST_P_DDR_HWLP 220
|
||||
+#define SRST_P_DDRPHY 221
|
||||
+#define SRST_MSCH_BIU 222
|
||||
+#define SRST_A_DDR_UPCTL 223
|
||||
+#define SRST_DDR_UPCTL 224
|
||||
+#define SRST_DDRMON 225
|
||||
+#define SRST_A_DDR_SCRAMBLE 226
|
||||
+#define SRST_A_SPLIT 227
|
||||
+#define SRST_DDR_PHY 228
|
||||
+
|
||||
+#endif // _DT_BINDINGS_RESET_ROCKCHIP_RK3528_H
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
From 651aabc9fb0f354ad2ba5fd06a6011e652447489 Mon Sep 17 00:00:00 2001
|
||||
From: Yao Zi <ziyao@disroot.org>
|
||||
Date: Mon, 17 Feb 2025 06:11:43 +0000
|
||||
Subject: [PATCH] clk: rockchip: Add PLL flag ROCKCHIP_PLL_FIXED_MODE
|
||||
|
||||
RK3528 comes with a new PLL variant: its "PPLL", which mainly generates
|
||||
clocks for the PCIe controller, operates in normal mode only. Let's
|
||||
describe it with flag ROCKCHIP_PLL_FIXED_MODE and handle it in code.
|
||||
|
||||
Signed-off-by: Yao Zi <ziyao@disroot.org>
|
||||
Link: https://lore.kernel.org/r/20250217061142.38480-7-ziyao@disroot.org
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/clk-pll.c | 10 ++++++----
|
||||
drivers/clk/rockchip/clk.h | 2 ++
|
||||
2 files changed, 8 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/clk/rockchip/clk-pll.c
|
||||
+++ b/drivers/clk/rockchip/clk-pll.c
|
||||
@@ -204,10 +204,12 @@ static int rockchip_rk3036_pll_set_param
|
||||
rockchip_rk3036_pll_get_params(pll, &cur);
|
||||
cur.rate = 0;
|
||||
|
||||
- cur_parent = pll_mux_ops->get_parent(&pll_mux->hw);
|
||||
- if (cur_parent == PLL_MODE_NORM) {
|
||||
- pll_mux_ops->set_parent(&pll_mux->hw, PLL_MODE_SLOW);
|
||||
- rate_change_remuxed = 1;
|
||||
+ if (!(pll->flags & ROCKCHIP_PLL_FIXED_MODE)) {
|
||||
+ cur_parent = pll_mux_ops->get_parent(&pll_mux->hw);
|
||||
+ if (cur_parent == PLL_MODE_NORM) {
|
||||
+ pll_mux_ops->set_parent(&pll_mux->hw, PLL_MODE_SLOW);
|
||||
+ rate_change_remuxed = 1;
|
||||
+ }
|
||||
}
|
||||
|
||||
/* update pll values */
|
||||
--- a/drivers/clk/rockchip/clk.h
|
||||
+++ b/drivers/clk/rockchip/clk.h
|
||||
@@ -469,6 +469,7 @@ struct rockchip_pll_rate_table {
|
||||
* Flags:
|
||||
* ROCKCHIP_PLL_SYNC_RATE - check rate parameters to match against the
|
||||
* rate_table parameters and ajust them if necessary.
|
||||
+ * ROCKCHIP_PLL_FIXED_MODE - the pll operates in normal mode only
|
||||
*/
|
||||
struct rockchip_pll_clock {
|
||||
unsigned int id;
|
||||
@@ -486,6 +487,7 @@ struct rockchip_pll_clock {
|
||||
};
|
||||
|
||||
#define ROCKCHIP_PLL_SYNC_RATE BIT(0)
|
||||
+#define ROCKCHIP_PLL_FIXED_MODE BIT(1)
|
||||
|
||||
#define PLL(_type, _id, _name, _pnames, _flags, _con, _mode, _mshift, \
|
||||
_lshift, _pflags, _rtable) \
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,364 @@
|
|||
From 5738362a5ee7e3417312e7fc03bcb0ffb12ba4f3 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Thu, 27 Feb 2025 17:52:57 +0000
|
||||
Subject: [PATCH] clk: rockchip: rk3528: Add reset lookup table
|
||||
|
||||
In the commit 5d0eb375e685 ("clk: rockchip: Add clock controller driver
|
||||
for RK3528 SoC") only the dt-binding header was added for the reset
|
||||
controller for the RK3528 SoC.
|
||||
|
||||
Add a reset lookup table generated from the SRST symbols used by vendor
|
||||
linux-6.1-stan-rkr5 kernel to complete support for the reset controller.
|
||||
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
Link: https://lore.kernel.org/r/20250227175302.2950788-1-jonas@kwiboo.se
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/Makefile | 2 +-
|
||||
drivers/clk/rockchip/clk-rk3528.c | 2 +
|
||||
drivers/clk/rockchip/clk.h | 1 +
|
||||
drivers/clk/rockchip/rst-rk3528.c | 306 ++++++++++++++++++++++++++++++
|
||||
4 files changed, 310 insertions(+), 1 deletion(-)
|
||||
create mode 100644 drivers/clk/rockchip/rst-rk3528.c
|
||||
|
||||
--- a/drivers/clk/rockchip/Makefile
|
||||
+++ b/drivers/clk/rockchip/Makefile
|
||||
@@ -29,7 +29,7 @@ obj-$(CONFIG_CLK_RK3308) += clk-r
|
||||
obj-$(CONFIG_CLK_RK3328) += clk-rk3328.o
|
||||
obj-$(CONFIG_CLK_RK3368) += clk-rk3368.o
|
||||
obj-$(CONFIG_CLK_RK3399) += clk-rk3399.o
|
||||
-obj-$(CONFIG_CLK_RK3528) += clk-rk3528.o
|
||||
+obj-$(CONFIG_CLK_RK3528) += clk-rk3528.o rst-rk3528.o
|
||||
obj-$(CONFIG_CLK_RK3568) += clk-rk3568.o
|
||||
obj-$(CONFIG_CLK_RK3576) += clk-rk3576.o rst-rk3576.o
|
||||
obj-$(CONFIG_CLK_RK3588) += clk-rk3588.o rst-rk3588.o
|
||||
--- a/drivers/clk/rockchip/clk-rk3528.c
|
||||
+++ b/drivers/clk/rockchip/clk-rk3528.c
|
||||
@@ -1092,6 +1092,8 @@ static int __init clk_rk3528_probe(struc
|
||||
ARRAY_SIZE(rk3528_cpuclk_rates));
|
||||
rockchip_clk_register_branches(ctx, rk3528_clk_branches, nr_branches);
|
||||
|
||||
+ rk3528_rst_init(np, reg_base);
|
||||
+
|
||||
rockchip_register_restart_notifier(ctx, RK3528_GLB_SRST_FST, NULL);
|
||||
|
||||
rockchip_clk_of_add_provider(np, ctx);
|
||||
--- a/drivers/clk/rockchip/clk.h
|
||||
+++ b/drivers/clk/rockchip/clk.h
|
||||
@@ -1187,6 +1187,7 @@ static inline void rockchip_register_sof
|
||||
return rockchip_register_softrst_lut(np, NULL, num_regs, base, flags);
|
||||
}
|
||||
|
||||
+void rk3528_rst_init(struct device_node *np, void __iomem *reg_base);
|
||||
void rk3576_rst_init(struct device_node *np, void __iomem *reg_base);
|
||||
void rk3588_rst_init(struct device_node *np, void __iomem *reg_base);
|
||||
|
||||
--- /dev/null
|
||||
+++ b/drivers/clk/rockchip/rst-rk3528.c
|
||||
@@ -0,0 +1,306 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
+/*
|
||||
+ * Copyright (c) 2022 Rockchip Electronics Co., Ltd.
|
||||
+ * Based on Sebastian Reichel's implementation for RK3588
|
||||
+ */
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/of.h>
|
||||
+#include <dt-bindings/reset/rockchip,rk3528-cru.h>
|
||||
+#include "clk.h"
|
||||
+
|
||||
+/* 0xFF4A0000 + 0x0A00 */
|
||||
+#define RK3528_CRU_RESET_OFFSET(id, reg, bit) [id] = (0 + reg * 16 + bit)
|
||||
+
|
||||
+/* mapping table for reset ID to register offset */
|
||||
+static const int rk3528_register_offset[] = {
|
||||
+ /* CRU_SOFTRST_CON03 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE0_PO, 3, 0),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE1_PO, 3, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE2_PO, 3, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE3_PO, 3, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE0, 3, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE1, 3, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE2, 3, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE3, 3, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_NL2, 3, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE_BIU, 3, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE_CRYPTO, 3, 10),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON05 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DBG, 5, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_POT_DBG, 5, 14),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_NT_DBG, 5, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON06 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_CORE_GRF, 6, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DAPLITE_BIU, 6, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_CPU_BIU, 6, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_REF_PVTPLL_CORE, 6, 7),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON08 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_BUS_VOPGL_BIU, 8, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_BUS_H_BIU, 8, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_SYSMEM_BIU, 8, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_BUS_BIU, 8, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_BUS_BIU, 8, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_BUS_BIU, 8, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DFT2APB, 8, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_BUS_GRF, 8, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON09 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_BUS_M_BIU, 9, 0),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_GIC, 9, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_SPINLOCK, 9, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_DMAC, 9, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_TIMER, 9, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_TIMER0, 9, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_TIMER1, 9, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_TIMER2, 9, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_TIMER3, 9, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_TIMER4, 9, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_TIMER5, 9, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_JDBCK_DAP, 9, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_JDBCK_DAP, 9, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_WDT_NS, 9, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON10 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_T_WDT_NS, 10, 0),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_TRNG_NS, 10, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_UART0, 10, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_S_UART0, 10, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_PKA_CRYPTO, 10, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_CRYPTO, 10, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_CRYPTO, 10, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DMA2DDR, 10, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_DMA2DDR, 10, 14),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON11 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_PWM0, 11, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_PWM0, 11, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_PWM1, 11, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_PWM1, 11, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_SCR, 11, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_DCF, 11, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_INTMUX, 11, 12),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON25 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_VPU_BIU, 25, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_VPU_BIU, 25, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_VPU_BIU, 25, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_VPU, 25, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_VPU, 25, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_CRU_PCIE, 25, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_VPU_GRF, 25, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_SFC, 25, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_S_SFC, 25, 14),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_C_EMMC, 25, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON26 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_EMMC, 26, 0),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_EMMC, 26, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_B_EMMC, 26, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_T_EMMC, 26, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_GPIO1, 26, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_DB_GPIO1, 26, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_VPU_L_BIU, 26, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_VPU_IOC, 26, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_SAI_I2S0, 26, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_M_SAI_I2S0, 26, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_SAI_I2S2, 26, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_M_SAI_I2S2, 26, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_ACODEC, 26, 13),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON27 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_GPIO3, 27, 0),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_DB_GPIO3, 27, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_SPI1, 27, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_SPI1, 27, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_UART2, 27, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_S_UART2, 27, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_UART5, 27, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_S_UART5, 27, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_UART6, 27, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_S_UART6, 27, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_UART7, 27, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_S_UART7, 27, 14),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_I2C3, 27, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON28 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_I2C3, 28, 0),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_I2C5, 28, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_I2C5, 28, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_I2C6, 28, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_I2C6, 28, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_MAC, 28, 5),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON30 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_PCIE, 30, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_PCIE_PIPE_PHY, 30, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_PCIE_POWER_UP, 30, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_PCIE_PHY, 30, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_PIPE_GRF, 30, 7),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON32 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_SDIO0, 32, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_SDIO1, 32, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_TS_0, 32, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_TS_1, 32, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_CAN2, 32, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CAN2, 32, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_CAN3, 32, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CAN3, 32, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_SARADC, 32, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_SARADC, 32, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_SARADC_PHY, 32, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_TSADC, 32, 14),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_TSADC, 32, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON33 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_USB3OTG, 33, 1),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON34 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_GPU_BIU, 34, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_GPU_BIU, 34, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_GPU, 34, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_REF_PVTPLL_GPU, 34, 9),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON36 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_RKVENC_BIU, 36, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_RKVENC_BIU, 36, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_RKVENC_BIU, 36, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_RKVENC, 36, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_RKVENC, 36, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE_RKVENC, 36, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_SAI_I2S1, 36, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_M_SAI_I2S1, 36, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_I2C1, 36, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_I2C1, 36, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_I2C0, 36, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_I2C0, 36, 14),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON37 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_SPI0, 37, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_SPI0, 37, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_GPIO4, 37, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_DB_GPIO4, 37, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_RKVENC_IOC, 37, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_SPDIF, 37, 14),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_M_SPDIF, 37, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON38 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_PDM, 38, 0),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_M_PDM, 38, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_UART1, 38, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_S_UART1, 38, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_UART3, 38, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_S_UART3, 38, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_RKVENC_GRF, 38, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_CAN0, 38, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CAN0, 38, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_CAN1, 38, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CAN1, 38, 10),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON39 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_VO_BIU, 39, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_VO_BIU, 39, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_VO_BIU, 39, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_RGA2E, 39, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_RGA2E, 39, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE_RGA2E, 39, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_VDPP, 39, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_VDPP, 39, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE_VDPP, 39, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_VO_GRF, 39, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_CRU, 39, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON40 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_VOP_BIU, 40, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_VOP, 40, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_D_VOP0, 40, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_D_VOP1, 40, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_VOP, 40, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_HDMI, 40, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_HDMI, 40, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_HDMIPHY, 40, 14),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_HDCP_KEY, 40, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON41 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_HDCP, 41, 0),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_HDCP, 41, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_HDCP, 41, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_CVBS, 41, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_D_CVBS_VOP, 41, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_D_4X_CVBS_VOP, 41, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_JPEG_DECODER, 41, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_JPEG_DECODER, 41, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_VO_L_BIU, 41, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_MAC_VO, 41, 10),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON42 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_JPEG_BIU, 42, 0),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_SAI_I2S3, 42, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_M_SAI_I2S3, 42, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_MACPHY, 42, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_VCDCPHY, 42, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_GPIO2, 42, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_DB_GPIO2, 42, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_VO_IOC, 42, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_SDMMC0, 42, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_OTPC_NS, 42, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_SBPI_OTPC_NS, 42, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_USER_OTPC_NS, 42, 13),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON43 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_HDMIHDP0, 43, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_USBHOST, 43, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_USBHOST_ARB, 43, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_HOST_UTMI, 43, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_UART4, 43, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_S_UART4, 43, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_I2C4, 43, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_I2C4, 43, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_I2C7, 43, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_I2C7, 43, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_USBPHY, 43, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_USBPHY_POR, 43, 14),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_USBPHY_OTG, 43, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON44 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_USBPHY_HOST, 44, 0),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DDRPHY_CRU, 44, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_RKVDEC_BIU, 44, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_RKVDEC_BIU, 44, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_RKVDEC, 44, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_RKVDEC, 44, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_HEVC_CA_RKVDEC, 44, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_REF_PVTPLL_RKVDEC, 44, 12),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON45 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DDR_BIU, 45, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DDRC, 45, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DDRMON, 45, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_TIMER_DDRMON, 45, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_MSCH_BIU, 45, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DDR_GRF, 45, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DDR_HWLP, 45, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DDRPHY, 45, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_MSCH_BIU, 45, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL, 45, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_DDR_UPCTL, 45, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_DDRMON, 45, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_DDR_SCRAMBLE, 45, 14),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_SPLIT, 45, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON46 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_DDR_PHY, 46, 0),
|
||||
+};
|
||||
+
|
||||
+void rk3528_rst_init(struct device_node *np, void __iomem *reg_base)
|
||||
+{
|
||||
+ rockchip_register_softrst_lut(np,
|
||||
+ rk3528_register_offset,
|
||||
+ ARRAY_SIZE(rk3528_register_offset),
|
||||
+ reg_base + RK3528_SOFTRST_CON(0),
|
||||
+ ROCKCHIP_SOFTRST_HIWORD_MASK);
|
||||
+}
|
||||
|
|
@ -0,0 +1,238 @@
|
|||
From a5e4cde647851ed67f19a5cb54a99282f32aae99 Mon Sep 17 00:00:00 2001
|
||||
From: Steven Liu <steven.liu@rock-chips.com>
|
||||
Date: Fri, 28 Feb 2025 06:40:09 +0000
|
||||
Subject: [PATCH] pinctrl: rockchip: Add support for RK3528
|
||||
|
||||
Add gpio and pinctrl support for the 5 GPIO banks on RK3528.
|
||||
|
||||
Signed-off-by: Steven Liu <steven.liu@rock-chips.com>
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Link: https://lore.kernel.org/20250228064024.3200000-4-jonas@kwiboo.se
|
||||
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
---
|
||||
drivers/pinctrl/pinctrl-rockchip.c | 160 ++++++++++++++++++++++++++++-
|
||||
drivers/pinctrl/pinctrl-rockchip.h | 1 +
|
||||
2 files changed, 160 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/pinctrl/pinctrl-rockchip.c
|
||||
+++ b/drivers/pinctrl/pinctrl-rockchip.c
|
||||
@@ -2003,6 +2003,115 @@ static int rk3399_calc_drv_reg_and_bit(s
|
||||
return 0;
|
||||
}
|
||||
|
||||
+#define RK3528_DRV_BITS_PER_PIN 8
|
||||
+#define RK3528_DRV_PINS_PER_REG 2
|
||||
+#define RK3528_DRV_GPIO0_OFFSET 0x100
|
||||
+#define RK3528_DRV_GPIO1_OFFSET 0x20120
|
||||
+#define RK3528_DRV_GPIO2_OFFSET 0x30160
|
||||
+#define RK3528_DRV_GPIO3_OFFSET 0x20190
|
||||
+#define RK3528_DRV_GPIO4_OFFSET 0x101C0
|
||||
+
|
||||
+static int rk3528_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank,
|
||||
+ int pin_num, struct regmap **regmap,
|
||||
+ int *reg, u8 *bit)
|
||||
+{
|
||||
+ struct rockchip_pinctrl *info = bank->drvdata;
|
||||
+
|
||||
+ *regmap = info->regmap_base;
|
||||
+
|
||||
+ if (bank->bank_num == 0)
|
||||
+ *reg = RK3528_DRV_GPIO0_OFFSET;
|
||||
+ else if (bank->bank_num == 1)
|
||||
+ *reg = RK3528_DRV_GPIO1_OFFSET;
|
||||
+ else if (bank->bank_num == 2)
|
||||
+ *reg = RK3528_DRV_GPIO2_OFFSET;
|
||||
+ else if (bank->bank_num == 3)
|
||||
+ *reg = RK3528_DRV_GPIO3_OFFSET;
|
||||
+ else if (bank->bank_num == 4)
|
||||
+ *reg = RK3528_DRV_GPIO4_OFFSET;
|
||||
+ else
|
||||
+ dev_err(info->dev, "unsupported bank_num %d\n", bank->bank_num);
|
||||
+
|
||||
+ *reg += ((pin_num / RK3528_DRV_PINS_PER_REG) * 4);
|
||||
+ *bit = pin_num % RK3528_DRV_PINS_PER_REG;
|
||||
+ *bit *= RK3528_DRV_BITS_PER_PIN;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+#define RK3528_PULL_BITS_PER_PIN 2
|
||||
+#define RK3528_PULL_PINS_PER_REG 8
|
||||
+#define RK3528_PULL_GPIO0_OFFSET 0x200
|
||||
+#define RK3528_PULL_GPIO1_OFFSET 0x20210
|
||||
+#define RK3528_PULL_GPIO2_OFFSET 0x30220
|
||||
+#define RK3528_PULL_GPIO3_OFFSET 0x20230
|
||||
+#define RK3528_PULL_GPIO4_OFFSET 0x10240
|
||||
+
|
||||
+static int rk3528_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
|
||||
+ int pin_num, struct regmap **regmap,
|
||||
+ int *reg, u8 *bit)
|
||||
+{
|
||||
+ struct rockchip_pinctrl *info = bank->drvdata;
|
||||
+
|
||||
+ *regmap = info->regmap_base;
|
||||
+
|
||||
+ if (bank->bank_num == 0)
|
||||
+ *reg = RK3528_PULL_GPIO0_OFFSET;
|
||||
+ else if (bank->bank_num == 1)
|
||||
+ *reg = RK3528_PULL_GPIO1_OFFSET;
|
||||
+ else if (bank->bank_num == 2)
|
||||
+ *reg = RK3528_PULL_GPIO2_OFFSET;
|
||||
+ else if (bank->bank_num == 3)
|
||||
+ *reg = RK3528_PULL_GPIO3_OFFSET;
|
||||
+ else if (bank->bank_num == 4)
|
||||
+ *reg = RK3528_PULL_GPIO4_OFFSET;
|
||||
+ else
|
||||
+ dev_err(info->dev, "unsupported bank_num %d\n", bank->bank_num);
|
||||
+
|
||||
+ *reg += ((pin_num / RK3528_PULL_PINS_PER_REG) * 4);
|
||||
+ *bit = pin_num % RK3528_PULL_PINS_PER_REG;
|
||||
+ *bit *= RK3528_PULL_BITS_PER_PIN;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+#define RK3528_SMT_BITS_PER_PIN 1
|
||||
+#define RK3528_SMT_PINS_PER_REG 8
|
||||
+#define RK3528_SMT_GPIO0_OFFSET 0x400
|
||||
+#define RK3528_SMT_GPIO1_OFFSET 0x20410
|
||||
+#define RK3528_SMT_GPIO2_OFFSET 0x30420
|
||||
+#define RK3528_SMT_GPIO3_OFFSET 0x20430
|
||||
+#define RK3528_SMT_GPIO4_OFFSET 0x10440
|
||||
+
|
||||
+static int rk3528_calc_schmitt_reg_and_bit(struct rockchip_pin_bank *bank,
|
||||
+ int pin_num,
|
||||
+ struct regmap **regmap,
|
||||
+ int *reg, u8 *bit)
|
||||
+{
|
||||
+ struct rockchip_pinctrl *info = bank->drvdata;
|
||||
+
|
||||
+ *regmap = info->regmap_base;
|
||||
+
|
||||
+ if (bank->bank_num == 0)
|
||||
+ *reg = RK3528_SMT_GPIO0_OFFSET;
|
||||
+ else if (bank->bank_num == 1)
|
||||
+ *reg = RK3528_SMT_GPIO1_OFFSET;
|
||||
+ else if (bank->bank_num == 2)
|
||||
+ *reg = RK3528_SMT_GPIO2_OFFSET;
|
||||
+ else if (bank->bank_num == 3)
|
||||
+ *reg = RK3528_SMT_GPIO3_OFFSET;
|
||||
+ else if (bank->bank_num == 4)
|
||||
+ *reg = RK3528_SMT_GPIO4_OFFSET;
|
||||
+ else
|
||||
+ dev_err(info->dev, "unsupported bank_num %d\n", bank->bank_num);
|
||||
+
|
||||
+ *reg += ((pin_num / RK3528_SMT_PINS_PER_REG) * 4);
|
||||
+ *bit = pin_num % RK3528_SMT_PINS_PER_REG;
|
||||
+ *bit *= RK3528_SMT_BITS_PER_PIN;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
#define RK3568_PULL_PMU_OFFSET 0x20
|
||||
#define RK3568_PULL_GRF_OFFSET 0x80
|
||||
#define RK3568_PULL_BITS_PER_PIN 2
|
||||
@@ -2495,7 +2604,8 @@ static int rockchip_set_drive_perpin(str
|
||||
rmask_bits = RK3588_DRV_BITS_PER_PIN;
|
||||
ret = strength;
|
||||
goto config;
|
||||
- } else if (ctrl->type == RK3568) {
|
||||
+ } else if (ctrl->type == RK3528 ||
|
||||
+ ctrl->type == RK3568) {
|
||||
rmask_bits = RK3568_DRV_BITS_PER_PIN;
|
||||
ret = (1 << (strength + 1)) - 1;
|
||||
goto config;
|
||||
@@ -2639,6 +2749,7 @@ static int rockchip_get_pull(struct rock
|
||||
case RK3328:
|
||||
case RK3368:
|
||||
case RK3399:
|
||||
+ case RK3528:
|
||||
case RK3568:
|
||||
case RK3576:
|
||||
case RK3588:
|
||||
@@ -2699,6 +2810,7 @@ static int rockchip_set_pull(struct rock
|
||||
case RK3328:
|
||||
case RK3368:
|
||||
case RK3399:
|
||||
+ case RK3528:
|
||||
case RK3568:
|
||||
case RK3576:
|
||||
case RK3588:
|
||||
@@ -2965,6 +3077,7 @@ static bool rockchip_pinconf_pull_valid(
|
||||
case RK3328:
|
||||
case RK3368:
|
||||
case RK3399:
|
||||
+ case RK3528:
|
||||
case RK3568:
|
||||
case RK3576:
|
||||
case RK3588:
|
||||
@@ -4084,6 +4197,49 @@ static struct rockchip_pin_ctrl rk3399_p
|
||||
.drv_calc_reg = rk3399_calc_drv_reg_and_bit,
|
||||
};
|
||||
|
||||
+static struct rockchip_pin_bank rk3528_pin_banks[] = {
|
||||
+ PIN_BANK_IOMUX_FLAGS_OFFSET(0, 32, "gpio0",
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ 0, 0, 0, 0),
|
||||
+ PIN_BANK_IOMUX_FLAGS_OFFSET(1, 32, "gpio1",
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ 0x20020, 0x20028, 0x20030, 0x20038),
|
||||
+ PIN_BANK_IOMUX_FLAGS_OFFSET(2, 32, "gpio2",
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ 0x30040, 0, 0, 0),
|
||||
+ PIN_BANK_IOMUX_FLAGS_OFFSET(3, 32, "gpio3",
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ 0x20060, 0x20068, 0x20070, 0),
|
||||
+ PIN_BANK_IOMUX_FLAGS_OFFSET(4, 32, "gpio4",
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ 0x10080, 0x10088, 0x10090, 0x10098),
|
||||
+};
|
||||
+
|
||||
+static struct rockchip_pin_ctrl rk3528_pin_ctrl = {
|
||||
+ .pin_banks = rk3528_pin_banks,
|
||||
+ .nr_banks = ARRAY_SIZE(rk3528_pin_banks),
|
||||
+ .label = "RK3528-GPIO",
|
||||
+ .type = RK3528,
|
||||
+ .pull_calc_reg = rk3528_calc_pull_reg_and_bit,
|
||||
+ .drv_calc_reg = rk3528_calc_drv_reg_and_bit,
|
||||
+ .schmitt_calc_reg = rk3528_calc_schmitt_reg_and_bit,
|
||||
+};
|
||||
+
|
||||
static struct rockchip_pin_bank rk3568_pin_banks[] = {
|
||||
PIN_BANK_IOMUX_FLAGS(0, 32, "gpio0", IOMUX_SOURCE_PMU | IOMUX_WIDTH_4BIT,
|
||||
IOMUX_SOURCE_PMU | IOMUX_WIDTH_4BIT,
|
||||
@@ -4208,6 +4364,8 @@ static const struct of_device_id rockchi
|
||||
.data = &rk3368_pin_ctrl },
|
||||
{ .compatible = "rockchip,rk3399-pinctrl",
|
||||
.data = &rk3399_pin_ctrl },
|
||||
+ { .compatible = "rockchip,rk3528-pinctrl",
|
||||
+ .data = &rk3528_pin_ctrl },
|
||||
{ .compatible = "rockchip,rk3568-pinctrl",
|
||||
.data = &rk3568_pin_ctrl },
|
||||
{ .compatible = "rockchip,rk3576-pinctrl",
|
||||
--- a/drivers/pinctrl/pinctrl-rockchip.h
|
||||
+++ b/drivers/pinctrl/pinctrl-rockchip.h
|
||||
@@ -196,6 +196,7 @@ enum rockchip_pinctrl_type {
|
||||
RK3328,
|
||||
RK3368,
|
||||
RK3399,
|
||||
+ RK3528,
|
||||
RK3568,
|
||||
RK3576,
|
||||
RK3588,
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
From 8a023e86f3d999007f2687952afe78ef34a6aa91 Mon Sep 17 00:00:00 2001
|
||||
From: Yao Zi <ziyao@disroot.org>
|
||||
Date: Tue, 6 May 2025 09:22:02 +0000
|
||||
Subject: [PATCH] dt-bindings: clock: Add GRF clock definition for RK3528
|
||||
|
||||
These clocks are for SD/SDIO tuning purpose and come with registers
|
||||
in GRF syscon.
|
||||
|
||||
Signed-off-by: Yao Zi <ziyao@disroot.org>
|
||||
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
|
||||
Link: https://lore.kernel.org/r/20250506092206.46143-2-ziyao@disroot.org
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
include/dt-bindings/clock/rockchip,rk3528-cru.h | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
--- a/include/dt-bindings/clock/rockchip,rk3528-cru.h
|
||||
+++ b/include/dt-bindings/clock/rockchip,rk3528-cru.h
|
||||
@@ -414,6 +414,12 @@
|
||||
#define MCLK_I2S2_2CH_SAI_SRC_PRE 402
|
||||
#define MCLK_I2S3_8CH_SAI_SRC_PRE 403
|
||||
#define MCLK_SDPDIF_SRC_PRE 404
|
||||
+#define SCLK_SDMMC_DRV 405
|
||||
+#define SCLK_SDMMC_SAMPLE 406
|
||||
+#define SCLK_SDIO0_DRV 407
|
||||
+#define SCLK_SDIO0_SAMPLE 408
|
||||
+#define SCLK_SDIO1_DRV 409
|
||||
+#define SCLK_SDIO1_SAMPLE 410
|
||||
|
||||
/* scmi-clocks indices */
|
||||
#define SCMI_PCLK_KEYREADER 0
|
||||
|
|
@ -0,0 +1,156 @@
|
|||
From 621ba4d9f6db560a7406fd732af1b495ff5aa103 Mon Sep 17 00:00:00 2001
|
||||
From: Yao Zi <ziyao@disroot.org>
|
||||
Date: Tue, 6 May 2025 09:22:03 +0000
|
||||
Subject: [PATCH] clk: rockchip: Support MMC clocks in GRF region
|
||||
|
||||
Registers of MMC drive/sample clocks in Rockchip RV1106 and RK3528
|
||||
locate in GRF regions. Adjust MMC clock code to support register
|
||||
operations through regmap.
|
||||
|
||||
Signed-off-by: Yao Zi <ziyao@disroot.org>
|
||||
Link: https://lore.kernel.org/r/20250506092206.46143-3-ziyao@disroot.org
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/clk-mmc-phase.c | 24 ++++++++++++++++++++----
|
||||
drivers/clk/rockchip/clk.c | 16 ++++++++++++++--
|
||||
drivers/clk/rockchip/clk.h | 17 ++++++++++++++++-
|
||||
3 files changed, 50 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/clk/rockchip/clk-mmc-phase.c
|
||||
+++ b/drivers/clk/rockchip/clk-mmc-phase.c
|
||||
@@ -9,11 +9,14 @@
|
||||
#include <linux/clk-provider.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/kernel.h>
|
||||
+#include <linux/regmap.h>
|
||||
#include "clk.h"
|
||||
|
||||
struct rockchip_mmc_clock {
|
||||
struct clk_hw hw;
|
||||
void __iomem *reg;
|
||||
+ struct regmap *grf;
|
||||
+ int grf_reg;
|
||||
int shift;
|
||||
int cached_phase;
|
||||
struct notifier_block clk_rate_change_nb;
|
||||
@@ -54,7 +57,12 @@ static int rockchip_mmc_get_phase(struct
|
||||
if (!rate)
|
||||
return 0;
|
||||
|
||||
- raw_value = readl(mmc_clock->reg) >> (mmc_clock->shift);
|
||||
+ if (mmc_clock->grf)
|
||||
+ regmap_read(mmc_clock->grf, mmc_clock->grf_reg, &raw_value);
|
||||
+ else
|
||||
+ raw_value = readl(mmc_clock->reg);
|
||||
+
|
||||
+ raw_value >>= mmc_clock->shift;
|
||||
|
||||
degrees = (raw_value & ROCKCHIP_MMC_DEGREE_MASK) * 90;
|
||||
|
||||
@@ -134,8 +142,12 @@ static int rockchip_mmc_set_phase(struct
|
||||
raw_value = delay_num ? ROCKCHIP_MMC_DELAY_SEL : 0;
|
||||
raw_value |= delay_num << ROCKCHIP_MMC_DELAYNUM_OFFSET;
|
||||
raw_value |= nineties;
|
||||
- writel(HIWORD_UPDATE(raw_value, 0x07ff, mmc_clock->shift),
|
||||
- mmc_clock->reg);
|
||||
+ raw_value = HIWORD_UPDATE(raw_value, 0x07ff, mmc_clock->shift);
|
||||
+
|
||||
+ if (mmc_clock->grf)
|
||||
+ regmap_write(mmc_clock->grf, mmc_clock->grf_reg, raw_value);
|
||||
+ else
|
||||
+ writel(raw_value, mmc_clock->reg);
|
||||
|
||||
pr_debug("%s->set_phase(%d) delay_nums=%u reg[0x%p]=0x%03x actual_degrees=%d\n",
|
||||
clk_hw_get_name(hw), degrees, delay_num,
|
||||
@@ -189,7 +201,9 @@ static int rockchip_mmc_clk_rate_notify(
|
||||
|
||||
struct clk *rockchip_clk_register_mmc(const char *name,
|
||||
const char *const *parent_names, u8 num_parents,
|
||||
- void __iomem *reg, int shift)
|
||||
+ void __iomem *reg,
|
||||
+ struct regmap *grf, int grf_reg,
|
||||
+ int shift)
|
||||
{
|
||||
struct clk_init_data init;
|
||||
struct rockchip_mmc_clock *mmc_clock;
|
||||
@@ -208,6 +222,8 @@ struct clk *rockchip_clk_register_mmc(co
|
||||
|
||||
mmc_clock->hw.init = &init;
|
||||
mmc_clock->reg = reg;
|
||||
+ mmc_clock->grf = grf;
|
||||
+ mmc_clock->grf_reg = grf_reg;
|
||||
mmc_clock->shift = shift;
|
||||
|
||||
clk = clk_register(NULL, &mmc_clock->hw);
|
||||
--- a/drivers/clk/rockchip/clk.c
|
||||
+++ b/drivers/clk/rockchip/clk.c
|
||||
@@ -509,8 +509,10 @@ void rockchip_clk_register_branches(stru
|
||||
clk = NULL;
|
||||
|
||||
/* for GRF-dependent branches, choose the right grf first */
|
||||
- if ((list->branch_type == branch_muxgrf || list->branch_type == branch_grf_gate) &&
|
||||
- list->grf_type != grf_type_sys) {
|
||||
+ if ((list->branch_type == branch_muxgrf ||
|
||||
+ list->branch_type == branch_grf_gate ||
|
||||
+ list->branch_type == branch_grf_mmc) &&
|
||||
+ list->grf_type != grf_type_sys) {
|
||||
hash_for_each_possible(ctx->aux_grf_table, agrf, node, list->grf_type) {
|
||||
if (agrf->type == list->grf_type) {
|
||||
grf = agrf->grf;
|
||||
@@ -612,6 +614,16 @@ void rockchip_clk_register_branches(stru
|
||||
list->name,
|
||||
list->parent_names, list->num_parents,
|
||||
ctx->reg_base + list->muxdiv_offset,
|
||||
+ NULL, 0,
|
||||
+ list->div_shift
|
||||
+ );
|
||||
+ break;
|
||||
+ case branch_grf_mmc:
|
||||
+ clk = rockchip_clk_register_mmc(
|
||||
+ list->name,
|
||||
+ list->parent_names, list->num_parents,
|
||||
+ 0,
|
||||
+ grf, list->muxdiv_offset,
|
||||
list->div_shift
|
||||
);
|
||||
break;
|
||||
--- a/drivers/clk/rockchip/clk.h
|
||||
+++ b/drivers/clk/rockchip/clk.h
|
||||
@@ -580,7 +580,9 @@ struct clk *rockchip_clk_register_cpuclk
|
||||
|
||||
struct clk *rockchip_clk_register_mmc(const char *name,
|
||||
const char *const *parent_names, u8 num_parents,
|
||||
- void __iomem *reg, int shift);
|
||||
+ void __iomem *reg,
|
||||
+ struct regmap *grf, int grf_reg,
|
||||
+ int shift);
|
||||
|
||||
/*
|
||||
* DDRCLK flags, including method of setting the rate
|
||||
@@ -625,6 +627,7 @@ enum rockchip_clk_branch_type {
|
||||
branch_grf_gate,
|
||||
branch_linked_gate,
|
||||
branch_mmc,
|
||||
+ branch_grf_mmc,
|
||||
branch_inverter,
|
||||
branch_factor,
|
||||
branch_ddrclk,
|
||||
@@ -991,6 +994,18 @@ struct rockchip_clk_branch {
|
||||
.div_shift = shift, \
|
||||
}
|
||||
|
||||
+#define MMC_GRF(_id, cname, pname, offset, shift, grftype) \
|
||||
+ { \
|
||||
+ .id = _id, \
|
||||
+ .branch_type = branch_grf_mmc, \
|
||||
+ .name = cname, \
|
||||
+ .parent_names = (const char *[]){ pname }, \
|
||||
+ .num_parents = 1, \
|
||||
+ .muxdiv_offset = offset, \
|
||||
+ .div_shift = shift, \
|
||||
+ .grf_type = grftype, \
|
||||
+ }
|
||||
+
|
||||
#define INVERTER(_id, cname, pname, io, is, if) \
|
||||
{ \
|
||||
.id = _id, \
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
From 61bf658a4d95e8f982b6e66dea763bff57996349 Mon Sep 17 00:00:00 2001
|
||||
From: Yao Zi <ziyao@disroot.org>
|
||||
Date: Sat, 10 May 2025 07:52:49 +0000
|
||||
Subject: [PATCH] clk: rockchip: Pass NULL as reg pointer when registering GRF
|
||||
MMC clocks
|
||||
|
||||
This corrects the type and suppresses sparse warnings about passing
|
||||
plain integers as NULL pointer.
|
||||
|
||||
Fixes: 621ba4d9f6db ("clk: rockchip: Support MMC clocks in GRF region")
|
||||
Reported-by: kernel test robot <lkp@intel.com>
|
||||
Closes: https://lore.kernel.org/oe-kbuild-all/202505100302.YVtB1zhF-lkp@intel.com/
|
||||
Signed-off-by: Yao Zi <ziyao@disroot.org>
|
||||
Link: https://lore.kernel.org/r/20250510075248.34006-2-ziyao@disroot.org
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/clk.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/clk/rockchip/clk.c
|
||||
+++ b/drivers/clk/rockchip/clk.c
|
||||
@@ -622,7 +622,7 @@ void rockchip_clk_register_branches(stru
|
||||
clk = rockchip_clk_register_mmc(
|
||||
list->name,
|
||||
list->parent_names, list->num_parents,
|
||||
- 0,
|
||||
+ NULL,
|
||||
grf, list->muxdiv_offset,
|
||||
list->div_shift
|
||||
);
|
||||
|
|
@ -0,0 +1,157 @@
|
|||
From 306d2f5ddaa765f04ffb54fc9437a6318f904b53 Mon Sep 17 00:00:00 2001
|
||||
From: Yao Zi <ziyao@disroot.org>
|
||||
Date: Tue, 6 May 2025 09:22:04 +0000
|
||||
Subject: [PATCH] clk: rockchip: rk3528: Add SD/SDIO tuning clocks in GRF
|
||||
region
|
||||
|
||||
These clocks locate in VO and VPU GRF, serving for SD/SDIO controller
|
||||
tuning purpose. Add their definitions and register them in driver if
|
||||
corresponding GRF is available.
|
||||
|
||||
GRFs are looked up by compatible to simplify devicetree binding.
|
||||
|
||||
Signed-off-by: Yao Zi <ziyao@disroot.org>
|
||||
Link: https://lore.kernel.org/r/20250506092206.46143-4-ziyao@disroot.org
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/clk-rk3528.c | 82 ++++++++++++++++++++++++++++---
|
||||
drivers/clk/rockchip/clk.h | 5 ++
|
||||
2 files changed, 81 insertions(+), 6 deletions(-)
|
||||
|
||||
--- a/drivers/clk/rockchip/clk-rk3528.c
|
||||
+++ b/drivers/clk/rockchip/clk-rk3528.c
|
||||
@@ -10,6 +10,8 @@
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/platform_device.h>
|
||||
+#include <linux/mfd/syscon.h>
|
||||
+#include <linux/minmax.h>
|
||||
|
||||
#include <dt-bindings/clock/rockchip,rk3528-cru.h>
|
||||
|
||||
@@ -1061,23 +1063,65 @@ static struct rockchip_clk_branch rk3528
|
||||
0, 1, 1),
|
||||
};
|
||||
|
||||
+static struct rockchip_clk_branch rk3528_vo_clk_branches[] __initdata = {
|
||||
+ MMC_GRF(SCLK_SDMMC_DRV, "sdmmc_drv", "cclk_src_sdmmc0",
|
||||
+ RK3528_SDMMC_CON(0), 1, grf_type_vo),
|
||||
+ MMC_GRF(SCLK_SDMMC_SAMPLE, "sdmmc_sample", "cclk_src_sdmmc0",
|
||||
+ RK3528_SDMMC_CON(1), 1, grf_type_vo),
|
||||
+};
|
||||
+
|
||||
+static struct rockchip_clk_branch rk3528_vpu_clk_branches[] __initdata = {
|
||||
+ MMC_GRF(SCLK_SDIO0_DRV, "sdio0_drv", "cclk_src_sdio0",
|
||||
+ RK3528_SDIO0_CON(0), 1, grf_type_vpu),
|
||||
+ MMC_GRF(SCLK_SDIO0_SAMPLE, "sdio0_sample", "cclk_src_sdio0",
|
||||
+ RK3528_SDIO0_CON(1), 1, grf_type_vpu),
|
||||
+ MMC_GRF(SCLK_SDIO1_DRV, "sdio1_drv", "cclk_src_sdio1",
|
||||
+ RK3528_SDIO1_CON(0), 1, grf_type_vpu),
|
||||
+ MMC_GRF(SCLK_SDIO1_SAMPLE, "sdio1_sample", "cclk_src_sdio1",
|
||||
+ RK3528_SDIO1_CON(1), 1, grf_type_vpu),
|
||||
+};
|
||||
+
|
||||
static int __init clk_rk3528_probe(struct platform_device *pdev)
|
||||
{
|
||||
- struct rockchip_clk_provider *ctx;
|
||||
+ unsigned long nr_vpu_branches = ARRAY_SIZE(rk3528_vpu_clk_branches);
|
||||
+ unsigned long nr_vo_branches = ARRAY_SIZE(rk3528_vo_clk_branches);
|
||||
+ unsigned long nr_branches = ARRAY_SIZE(rk3528_clk_branches);
|
||||
+ unsigned long nr_clks, nr_vo_clks, nr_vpu_clks;
|
||||
+ struct rockchip_aux_grf *vo_grf_e, *vpu_grf_e;
|
||||
+ struct regmap *vo_grf, *vpu_grf;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct device_node *np = dev->of_node;
|
||||
- unsigned long nr_branches = ARRAY_SIZE(rk3528_clk_branches);
|
||||
- unsigned long nr_clks;
|
||||
+ struct rockchip_clk_provider *ctx;
|
||||
void __iomem *reg_base;
|
||||
|
||||
- nr_clks = rockchip_clk_find_max_clk_id(rk3528_clk_branches,
|
||||
- nr_branches) + 1;
|
||||
-
|
||||
reg_base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(reg_base))
|
||||
return dev_err_probe(dev, PTR_ERR(reg_base),
|
||||
"could not map cru region");
|
||||
|
||||
+ nr_clks = rockchip_clk_find_max_clk_id(rk3528_clk_branches,
|
||||
+ nr_branches) + 1;
|
||||
+
|
||||
+ vo_grf = syscon_regmap_lookup_by_compatible("rockchip,rk3528-vo-grf");
|
||||
+ if (!IS_ERR(vo_grf)) {
|
||||
+ nr_vo_clks = rockchip_clk_find_max_clk_id(rk3528_vo_clk_branches,
|
||||
+ nr_vo_branches) + 1;
|
||||
+ nr_clks = max(nr_clks, nr_vo_clks);
|
||||
+ } else if (PTR_ERR(vo_grf) != -ENODEV) {
|
||||
+ return dev_err_probe(dev, PTR_ERR(vo_grf),
|
||||
+ "failed to look up VO GRF\n");
|
||||
+ }
|
||||
+
|
||||
+ vpu_grf = syscon_regmap_lookup_by_compatible("rockchip,rk3528-vpu-grf");
|
||||
+ if (!IS_ERR(vpu_grf)) {
|
||||
+ nr_vpu_clks = rockchip_clk_find_max_clk_id(rk3528_vpu_clk_branches,
|
||||
+ nr_vpu_branches) + 1;
|
||||
+ nr_clks = max(nr_clks, nr_vpu_clks);
|
||||
+ } else if (PTR_ERR(vpu_grf) != -ENODEV) {
|
||||
+ return dev_err_probe(dev, PTR_ERR(vpu_grf),
|
||||
+ "failed to look up VPU GRF\n");
|
||||
+ }
|
||||
+
|
||||
ctx = rockchip_clk_init(np, reg_base, nr_clks);
|
||||
if (IS_ERR(ctx))
|
||||
return dev_err_probe(dev, PTR_ERR(ctx),
|
||||
@@ -1092,6 +1136,32 @@ static int __init clk_rk3528_probe(struc
|
||||
ARRAY_SIZE(rk3528_cpuclk_rates));
|
||||
rockchip_clk_register_branches(ctx, rk3528_clk_branches, nr_branches);
|
||||
|
||||
+ if (!IS_ERR(vo_grf)) {
|
||||
+ vo_grf_e = devm_kzalloc(dev, sizeof(*vo_grf_e), GFP_KERNEL);
|
||||
+ if (!vo_grf_e)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ vo_grf_e->grf = vo_grf;
|
||||
+ vo_grf_e->type = grf_type_vo;
|
||||
+ hash_add(ctx->aux_grf_table, &vo_grf_e->node, grf_type_vo);
|
||||
+
|
||||
+ rockchip_clk_register_branches(ctx, rk3528_vo_clk_branches,
|
||||
+ nr_vo_branches);
|
||||
+ }
|
||||
+
|
||||
+ if (!IS_ERR(vpu_grf)) {
|
||||
+ vpu_grf_e = devm_kzalloc(dev, sizeof(*vpu_grf_e), GFP_KERNEL);
|
||||
+ if (!vpu_grf_e)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ vpu_grf_e->grf = vpu_grf;
|
||||
+ vpu_grf_e->type = grf_type_vpu;
|
||||
+ hash_add(ctx->aux_grf_table, &vpu_grf_e->node, grf_type_vpu);
|
||||
+
|
||||
+ rockchip_clk_register_branches(ctx, rk3528_vpu_clk_branches,
|
||||
+ nr_vpu_branches);
|
||||
+ }
|
||||
+
|
||||
rk3528_rst_init(np, reg_base);
|
||||
|
||||
rockchip_register_restart_notifier(ctx, RK3528_GLB_SRST_FST, NULL);
|
||||
--- a/drivers/clk/rockchip/clk.h
|
||||
+++ b/drivers/clk/rockchip/clk.h
|
||||
@@ -218,6 +218,9 @@ struct clk;
|
||||
#define RK3528_CLKSEL_CON(x) ((x) * 0x4 + 0x300)
|
||||
#define RK3528_CLKGATE_CON(x) ((x) * 0x4 + 0x800)
|
||||
#define RK3528_SOFTRST_CON(x) ((x) * 0x4 + 0xa00)
|
||||
+#define RK3528_SDMMC_CON(x) ((x) * 0x4 + 0x24)
|
||||
+#define RK3528_SDIO0_CON(x) ((x) * 0x4 + 0x4)
|
||||
+#define RK3528_SDIO1_CON(x) ((x) * 0x4 + 0xc)
|
||||
#define RK3528_PMU_CLKSEL_CON(x) ((x) * 0x4 + 0x300 + RK3528_PMU_CRU_BASE)
|
||||
#define RK3528_PMU_CLKGATE_CON(x) ((x) * 0x4 + 0x800 + RK3528_PMU_CRU_BASE)
|
||||
#define RK3528_PCIE_CLKSEL_CON(x) ((x) * 0x4 + 0x300 + RK3528_PCIE_CRU_BASE)
|
||||
@@ -407,6 +410,8 @@ enum rockchip_grf_type {
|
||||
grf_type_pmu0,
|
||||
grf_type_pmu1,
|
||||
grf_type_ioc,
|
||||
+ grf_type_vo,
|
||||
+ grf_type_vpu,
|
||||
};
|
||||
|
||||
/* ceil(sqrt(enums in rockchip_grf_type - 1)) */
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
From 276036283716b9135525b195675ea42801bde204 Mon Sep 17 00:00:00 2001
|
||||
From: Heiko Stuebner <heiko@sntech.de>
|
||||
Date: Thu, 15 May 2025 10:26:52 +0200
|
||||
Subject: [PATCH] clk: rockchip: rk3528: add slab.h header include
|
||||
|
||||
The newly added GRF types introduced kzalloc usage into the rk3528.
|
||||
At least for the similar rk3576 driver, the kernel-test-robot reported the
|
||||
missing prototype, which warranted adding a slab.h include.
|
||||
|
||||
While it did not complain about the rk3528, so the header might be included
|
||||
"accidentially" right now, add a real include to make sure we keep it
|
||||
included in the future.
|
||||
|
||||
Fixes: 306d2f5ddaa7 ("clk: rockchip: rk3528: Add SD/SDIO tuning clocks in GRF region")
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Link: https://lore.kernel.org/r/20250515082652.2503063-2-heiko@sntech.de
|
||||
---
|
||||
drivers/clk/rockchip/clk-rk3528.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/drivers/clk/rockchip/clk-rk3528.c
|
||||
+++ b/drivers/clk/rockchip/clk-rk3528.c
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mfd/syscon.h>
|
||||
#include <linux/minmax.h>
|
||||
+#include <linux/slab.h>
|
||||
|
||||
#include <dt-bindings/clock/rockchip,rk3528-cru.h>
|
||||
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
From 8358102806c619d8d6c814010173617fb374b77e Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sun, 18 May 2025 22:06:48 +0000
|
||||
Subject: [PATCH] dt-bindings: power: rockchip: Add support for RK3528
|
||||
|
||||
Add the compatible string and power domains for RK3528 SoC.
|
||||
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
Acked-by: Conor Dooley <conor.dooley@microchip.com>
|
||||
Link: https://lore.kernel.org/r/20250518220707.669515-2-jonas@kwiboo.se
|
||||
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
|
||||
---
|
||||
.../power/rockchip,power-controller.yaml | 1 +
|
||||
.../dt-bindings/power/rockchip,rk3528-power.h | 19 +++++++++++++++++++
|
||||
2 files changed, 20 insertions(+)
|
||||
create mode 100644 include/dt-bindings/power/rockchip,rk3528-power.h
|
||||
|
||||
--- a/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
|
||||
+++ b/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
|
||||
@@ -40,6 +40,7 @@ properties:
|
||||
- rockchip,rk3366-power-controller
|
||||
- rockchip,rk3368-power-controller
|
||||
- rockchip,rk3399-power-controller
|
||||
+ - rockchip,rk3528-power-controller
|
||||
- rockchip,rk3568-power-controller
|
||||
- rockchip,rk3576-power-controller
|
||||
- rockchip,rk3588-power-controller
|
||||
--- /dev/null
|
||||
+++ b/include/dt-bindings/power/rockchip,rk3528-power.h
|
||||
@@ -0,0 +1,19 @@
|
||||
+/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
|
||||
+#ifndef __DT_BINDINGS_POWER_RK3528_POWER_H__
|
||||
+#define __DT_BINDINGS_POWER_RK3528_POWER_H__
|
||||
+
|
||||
+#define RK3528_PD_PMU 0
|
||||
+#define RK3528_PD_BUS 1
|
||||
+#define RK3528_PD_DDR 2
|
||||
+#define RK3528_PD_MSCH 3
|
||||
+
|
||||
+/* VD_GPU */
|
||||
+#define RK3528_PD_GPU 4
|
||||
+
|
||||
+/* VD_LOGIC */
|
||||
+#define RK3528_PD_RKVDEC 5
|
||||
+#define RK3528_PD_RKVENC 6
|
||||
+#define RK3528_PD_VO 7
|
||||
+#define RK3528_PD_VPU 8
|
||||
+
|
||||
+#endif
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
From 3068b386232f0a7d84da6d1366dbd0b7926c5652 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sun, 18 May 2025 22:06:49 +0000
|
||||
Subject: [PATCH] pmdomain: rockchip: Add support for RK3528
|
||||
|
||||
Add configuration and power domains for RK3528 SoC.
|
||||
|
||||
Only PD_GPU can fully be powered down. PD_RKVDEC, PD_RKVENC, PD_VO and
|
||||
PD_VPU are used by miscellaneous devices in RK3528.
|
||||
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
Link: https://lore.kernel.org/r/20250518220707.669515-3-jonas@kwiboo.se
|
||||
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
|
||||
---
|
||||
drivers/pmdomain/rockchip/pm-domains.c | 27 ++++++++++++++++++++++++++
|
||||
1 file changed, 27 insertions(+)
|
||||
|
||||
--- a/drivers/pmdomain/rockchip/pm-domains.c
|
||||
+++ b/drivers/pmdomain/rockchip/pm-domains.c
|
||||
@@ -34,6 +34,7 @@
|
||||
#include <dt-bindings/power/rk3366-power.h>
|
||||
#include <dt-bindings/power/rk3368-power.h>
|
||||
#include <dt-bindings/power/rk3399-power.h>
|
||||
+#include <dt-bindings/power/rockchip,rk3528-power.h>
|
||||
#include <dt-bindings/power/rk3568-power.h>
|
||||
#include <dt-bindings/power/rockchip,rk3576-power.h>
|
||||
#include <dt-bindings/power/rk3588-power.h>
|
||||
@@ -196,6 +197,9 @@ struct rockchip_pmu {
|
||||
#define DOMAIN_RK3399(name, pwr, status, req, wakeup) \
|
||||
DOMAIN(name, pwr, status, req, req, req, wakeup)
|
||||
|
||||
+#define DOMAIN_RK3528(name, pwr, req) \
|
||||
+ DOMAIN_M(name, pwr, pwr, req, req, req, false)
|
||||
+
|
||||
#define DOMAIN_RK3568(name, pwr, req, wakeup) \
|
||||
DOMAIN_M(name, pwr, pwr, req, req, req, wakeup)
|
||||
|
||||
@@ -1139,6 +1143,14 @@ static const struct rockchip_domain_info
|
||||
[RK3399_PD_SDIOAUDIO] = DOMAIN_RK3399("sdioaudio", BIT(31), BIT(31), BIT(29), true),
|
||||
};
|
||||
|
||||
+static const struct rockchip_domain_info rk3528_pm_domains[] = {
|
||||
+ [RK3528_PD_GPU] = DOMAIN_RK3528("gpu", BIT(0), BIT(4)),
|
||||
+ [RK3528_PD_RKVDEC] = DOMAIN_RK3528("vdec", 0, BIT(5)),
|
||||
+ [RK3528_PD_RKVENC] = DOMAIN_RK3528("venc", 0, BIT(6)),
|
||||
+ [RK3528_PD_VO] = DOMAIN_RK3528("vo", 0, BIT(7)),
|
||||
+ [RK3528_PD_VPU] = DOMAIN_RK3528("vpu", 0, BIT(8)),
|
||||
+};
|
||||
+
|
||||
static const struct rockchip_domain_info rk3568_pm_domains[] = {
|
||||
[RK3568_PD_NPU] = DOMAIN_RK3568("npu", BIT(1), BIT(2), false),
|
||||
[RK3568_PD_GPU] = DOMAIN_RK3568("gpu", BIT(0), BIT(1), false),
|
||||
@@ -1340,6 +1352,17 @@ static const struct rockchip_pmu_info rk
|
||||
.domain_info = rk3399_pm_domains,
|
||||
};
|
||||
|
||||
+static const struct rockchip_pmu_info rk3528_pmu = {
|
||||
+ .pwr_offset = 0x1210,
|
||||
+ .status_offset = 0x1230,
|
||||
+ .req_offset = 0x1110,
|
||||
+ .idle_offset = 0x1128,
|
||||
+ .ack_offset = 0x1120,
|
||||
+
|
||||
+ .num_domains = ARRAY_SIZE(rk3528_pm_domains),
|
||||
+ .domain_info = rk3528_pm_domains,
|
||||
+};
|
||||
+
|
||||
static const struct rockchip_pmu_info rk3568_pmu = {
|
||||
.pwr_offset = 0xa0,
|
||||
.status_offset = 0x98,
|
||||
@@ -1439,6 +1462,10 @@ static const struct of_device_id rockchi
|
||||
.data = (void *)&rk3399_pmu,
|
||||
},
|
||||
{
|
||||
+ .compatible = "rockchip,rk3528-power-controller",
|
||||
+ .data = (void *)&rk3528_pmu,
|
||||
+ },
|
||||
+ {
|
||||
.compatible = "rockchip,rk3568-power-controller",
|
||||
.data = (void *)&rk3568_pmu,
|
||||
},
|
||||
|
|
@ -0,0 +1,758 @@
|
|||
From 11f1896e60f61ca1948cb7920585a79ce5254c0c Mon Sep 17 00:00:00 2001
|
||||
From: Yao Zi <ziyao@disroot.org>
|
||||
Date: Mon, 28 Jul 2025 10:29:46 +0000
|
||||
Subject: [PATCH] phy: rockchip: naneng-combphy: Add SoC prefix to register
|
||||
definitions
|
||||
|
||||
All supported variants of naneng-combphy follow a register layout
|
||||
similar to the RK3568 variant with some exceptions of SoC-specific
|
||||
registers.
|
||||
|
||||
Add RK3568 prefix for the common set of registers and the corresponding
|
||||
SoC prefix for SoC-specific registers, making usage of definitions clear
|
||||
and preparing for future COMBPHY variants with a different register
|
||||
layout.
|
||||
|
||||
Signed-off-by: Yao Zi <ziyao@disroot.org>
|
||||
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
|
||||
Link: https://lore.kernel.org/r/20250728102947.38984-6-ziyao@disroot.org
|
||||
Signed-off-by: Vinod Koul <vkoul@kernel.org>
|
||||
---
|
||||
.../rockchip/phy-rockchip-naneng-combphy.c | 560 +++++++++---------
|
||||
1 file changed, 288 insertions(+), 272 deletions(-)
|
||||
|
||||
--- a/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
|
||||
+++ b/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
|
||||
@@ -21,78 +21,80 @@
|
||||
#define REF_CLOCK_100MHz (100 * HZ_PER_MHZ)
|
||||
|
||||
/* COMBO PHY REG */
|
||||
-#define PHYREG6 0x14
|
||||
-#define PHYREG6_PLL_DIV_MASK GENMASK(7, 6)
|
||||
-#define PHYREG6_PLL_DIV_SHIFT 6
|
||||
-#define PHYREG6_PLL_DIV_2 1
|
||||
-
|
||||
-#define PHYREG7 0x18
|
||||
-#define PHYREG7_TX_RTERM_MASK GENMASK(7, 4)
|
||||
-#define PHYREG7_TX_RTERM_SHIFT 4
|
||||
-#define PHYREG7_TX_RTERM_50OHM 8
|
||||
-#define PHYREG7_RX_RTERM_MASK GENMASK(3, 0)
|
||||
-#define PHYREG7_RX_RTERM_SHIFT 0
|
||||
-#define PHYREG7_RX_RTERM_44OHM 15
|
||||
-
|
||||
-#define PHYREG8 0x1C
|
||||
-#define PHYREG8_SSC_EN BIT(4)
|
||||
-
|
||||
-#define PHYREG10 0x24
|
||||
-#define PHYREG10_SSC_PCM_MASK GENMASK(3, 0)
|
||||
-#define PHYREG10_SSC_PCM_3500PPM 7
|
||||
-
|
||||
-#define PHYREG11 0x28
|
||||
-#define PHYREG11_SU_TRIM_0_7 0xF0
|
||||
-
|
||||
-#define PHYREG12 0x2C
|
||||
-#define PHYREG12_PLL_LPF_ADJ_VALUE 4
|
||||
-
|
||||
-#define PHYREG13 0x30
|
||||
-#define PHYREG13_RESISTER_MASK GENMASK(5, 4)
|
||||
-#define PHYREG13_RESISTER_SHIFT 0x4
|
||||
-#define PHYREG13_RESISTER_HIGH_Z 3
|
||||
-#define PHYREG13_CKRCV_AMP0 BIT(7)
|
||||
-
|
||||
-#define PHYREG14 0x34
|
||||
-#define PHYREG14_CKRCV_AMP1 BIT(0)
|
||||
-
|
||||
-#define PHYREG15 0x38
|
||||
-#define PHYREG15_CTLE_EN BIT(0)
|
||||
-#define PHYREG15_SSC_CNT_MASK GENMASK(7, 6)
|
||||
-#define PHYREG15_SSC_CNT_SHIFT 6
|
||||
-#define PHYREG15_SSC_CNT_VALUE 1
|
||||
-
|
||||
-#define PHYREG16 0x3C
|
||||
-#define PHYREG16_SSC_CNT_VALUE 0x5f
|
||||
-
|
||||
-#define PHYREG17 0x40
|
||||
-
|
||||
-#define PHYREG18 0x44
|
||||
-#define PHYREG18_PLL_LOOP 0x32
|
||||
-
|
||||
-#define PHYREG21 0x50
|
||||
-#define PHYREG21_RX_SQUELCH_VAL 0x0D
|
||||
-
|
||||
-#define PHYREG27 0x6C
|
||||
-#define PHYREG27_RX_TRIM_RK3588 0x4C
|
||||
-
|
||||
-#define PHYREG30 0x74
|
||||
-
|
||||
-#define PHYREG32 0x7C
|
||||
-#define PHYREG32_SSC_MASK GENMASK(7, 4)
|
||||
-#define PHYREG32_SSC_DIR_MASK GENMASK(5, 4)
|
||||
-#define PHYREG32_SSC_DIR_SHIFT 4
|
||||
-#define PHYREG32_SSC_UPWARD 0
|
||||
-#define PHYREG32_SSC_DOWNWARD 1
|
||||
-#define PHYREG32_SSC_OFFSET_MASK GENMASK(7, 6)
|
||||
-#define PHYREG32_SSC_OFFSET_SHIFT 6
|
||||
-#define PHYREG32_SSC_OFFSET_500PPM 1
|
||||
-
|
||||
-#define PHYREG33 0x80
|
||||
-#define PHYREG33_PLL_KVCO_MASK GENMASK(4, 2)
|
||||
-#define PHYREG33_PLL_KVCO_SHIFT 2
|
||||
-#define PHYREG33_PLL_KVCO_VALUE 2
|
||||
-#define PHYREG33_PLL_KVCO_VALUE_RK3576 4
|
||||
+#define RK3568_PHYREG6 0x14
|
||||
+#define RK3568_PHYREG6_PLL_DIV_MASK GENMASK(7, 6)
|
||||
+#define RK3568_PHYREG6_PLL_DIV_SHIFT 6
|
||||
+#define RK3568_PHYREG6_PLL_DIV_2 1
|
||||
+
|
||||
+#define RK3568_PHYREG7 0x18
|
||||
+#define RK3568_PHYREG7_TX_RTERM_MASK GENMASK(7, 4)
|
||||
+#define RK3568_PHYREG7_TX_RTERM_SHIFT 4
|
||||
+#define RK3568_PHYREG7_TX_RTERM_50OHM 8
|
||||
+#define RK3568_PHYREG7_RX_RTERM_MASK GENMASK(3, 0)
|
||||
+#define RK3568_PHYREG7_RX_RTERM_SHIFT 0
|
||||
+#define RK3568_PHYREG7_RX_RTERM_44OHM 15
|
||||
+
|
||||
+#define RK3568_PHYREG8 0x1C
|
||||
+#define RK3568_PHYREG8_SSC_EN BIT(4)
|
||||
+
|
||||
+#define RK3568_PHYREG11 0x28
|
||||
+#define RK3568_PHYREG11_SU_TRIM_0_7 0xF0
|
||||
+
|
||||
+#define RK3568_PHYREG12 0x2C
|
||||
+#define RK3568_PHYREG12_PLL_LPF_ADJ_VALUE 4
|
||||
+
|
||||
+#define RK3568_PHYREG13 0x30
|
||||
+#define RK3568_PHYREG13_RESISTER_MASK GENMASK(5, 4)
|
||||
+#define RK3568_PHYREG13_RESISTER_SHIFT 0x4
|
||||
+#define RK3568_PHYREG13_RESISTER_HIGH_Z 3
|
||||
+#define RK3568_PHYREG13_CKRCV_AMP0 BIT(7)
|
||||
+
|
||||
+#define RK3568_PHYREG14 0x34
|
||||
+#define RK3568_PHYREG14_CKRCV_AMP1 BIT(0)
|
||||
+
|
||||
+#define RK3568_PHYREG15 0x38
|
||||
+#define RK3568_PHYREG15_CTLE_EN BIT(0)
|
||||
+#define RK3568_PHYREG15_SSC_CNT_MASK GENMASK(7, 6)
|
||||
+#define RK3568_PHYREG15_SSC_CNT_SHIFT 6
|
||||
+#define RK3568_PHYREG15_SSC_CNT_VALUE 1
|
||||
+
|
||||
+#define RK3568_PHYREG16 0x3C
|
||||
+#define RK3568_PHYREG16_SSC_CNT_VALUE 0x5f
|
||||
+
|
||||
+#define RK3568_PHYREG18 0x44
|
||||
+#define RK3568_PHYREG18_PLL_LOOP 0x32
|
||||
+
|
||||
+#define RK3568_PHYREG32 0x7C
|
||||
+#define RK3568_PHYREG32_SSC_MASK GENMASK(7, 4)
|
||||
+#define RK3568_PHYREG32_SSC_DIR_MASK GENMASK(5, 4)
|
||||
+#define RK3568_PHYREG32_SSC_DIR_SHIFT 4
|
||||
+#define RK3568_PHYREG32_SSC_UPWARD 0
|
||||
+#define RK3568_PHYREG32_SSC_DOWNWARD 1
|
||||
+#define RK3568_PHYREG32_SSC_OFFSET_MASK GENMASK(7, 6)
|
||||
+#define RK3568_PHYREG32_SSC_OFFSET_SHIFT 6
|
||||
+#define RK3568_PHYREG32_SSC_OFFSET_500PPM 1
|
||||
+
|
||||
+#define RK3568_PHYREG33 0x80
|
||||
+#define RK3568_PHYREG33_PLL_KVCO_MASK GENMASK(4, 2)
|
||||
+#define RK3568_PHYREG33_PLL_KVCO_SHIFT 2
|
||||
+#define RK3568_PHYREG33_PLL_KVCO_VALUE 2
|
||||
+#define RK3576_PHYREG33_PLL_KVCO_VALUE 4
|
||||
+
|
||||
+/* RK3588 COMBO PHY registers */
|
||||
+#define RK3588_PHYREG27 0x6C
|
||||
+#define RK3588_PHYREG27_RX_TRIM 0x4C
|
||||
+
|
||||
+/* RK3576 COMBO PHY registers */
|
||||
+#define RK3576_PHYREG10 0x24
|
||||
+#define RK3576_PHYREG10_SSC_PCM_MASK GENMASK(3, 0)
|
||||
+#define RK3576_PHYREG10_SSC_PCM_3500PPM 7
|
||||
+
|
||||
+#define RK3576_PHYREG17 0x40
|
||||
+
|
||||
+#define RK3576_PHYREG21 0x50
|
||||
+#define RK3576_PHYREG21_RX_SQUELCH_VAL 0x0D
|
||||
+
|
||||
+#define RK3576_PHYREG30 0x74
|
||||
|
||||
struct rockchip_combphy_priv;
|
||||
|
||||
@@ -407,9 +409,9 @@ static int rk3568_combphy_cfg(struct roc
|
||||
switch (priv->type) {
|
||||
case PHY_TYPE_PCIE:
|
||||
/* Set SSC downward spread spectrum. */
|
||||
- rockchip_combphy_updatel(priv, PHYREG32_SSC_MASK,
|
||||
- PHYREG32_SSC_DOWNWARD << PHYREG32_SSC_DIR_SHIFT,
|
||||
- PHYREG32);
|
||||
+ val = RK3568_PHYREG32_SSC_DOWNWARD << RK3568_PHYREG32_SSC_DIR_SHIFT;
|
||||
+
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG32_SSC_MASK, val, RK3568_PHYREG32);
|
||||
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->con0_for_pcie, true);
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->con1_for_pcie, true);
|
||||
@@ -419,30 +421,28 @@ static int rk3568_combphy_cfg(struct roc
|
||||
|
||||
case PHY_TYPE_USB3:
|
||||
/* Set SSC downward spread spectrum. */
|
||||
- rockchip_combphy_updatel(priv, PHYREG32_SSC_MASK,
|
||||
- PHYREG32_SSC_DOWNWARD << PHYREG32_SSC_DIR_SHIFT,
|
||||
- PHYREG32);
|
||||
+ val = RK3568_PHYREG32_SSC_DOWNWARD << RK3568_PHYREG32_SSC_DIR_SHIFT,
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG32_SSC_MASK, val, RK3568_PHYREG32);
|
||||
|
||||
/* Enable adaptive CTLE for USB3.0 Rx. */
|
||||
- val = readl(priv->mmio + PHYREG15);
|
||||
- val |= PHYREG15_CTLE_EN;
|
||||
- writel(val, priv->mmio + PHYREG15);
|
||||
+ val = readl(priv->mmio + RK3568_PHYREG15);
|
||||
+ val |= RK3568_PHYREG15_CTLE_EN;
|
||||
+ writel(val, priv->mmio + RK3568_PHYREG15);
|
||||
|
||||
/* Set PLL KVCO fine tuning signals. */
|
||||
- rockchip_combphy_updatel(priv, PHYREG33_PLL_KVCO_MASK,
|
||||
- PHYREG33_PLL_KVCO_VALUE << PHYREG33_PLL_KVCO_SHIFT,
|
||||
- PHYREG33);
|
||||
+ val = RK3568_PHYREG33_PLL_KVCO_VALUE << RK3568_PHYREG33_PLL_KVCO_SHIFT;
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG33_PLL_KVCO_MASK, val, RK3568_PHYREG33);
|
||||
|
||||
/* Enable controlling random jitter. */
|
||||
- writel(PHYREG12_PLL_LPF_ADJ_VALUE, priv->mmio + PHYREG12);
|
||||
+ writel(RK3568_PHYREG12_PLL_LPF_ADJ_VALUE, priv->mmio + RK3568_PHYREG12);
|
||||
|
||||
/* Set PLL input clock divider 1/2. */
|
||||
- rockchip_combphy_updatel(priv, PHYREG6_PLL_DIV_MASK,
|
||||
- PHYREG6_PLL_DIV_2 << PHYREG6_PLL_DIV_SHIFT,
|
||||
- PHYREG6);
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG6_PLL_DIV_MASK,
|
||||
+ RK3568_PHYREG6_PLL_DIV_2 << RK3568_PHYREG6_PLL_DIV_SHIFT,
|
||||
+ RK3568_PHYREG6);
|
||||
|
||||
- writel(PHYREG18_PLL_LOOP, priv->mmio + PHYREG18);
|
||||
- writel(PHYREG11_SU_TRIM_0_7, priv->mmio + PHYREG11);
|
||||
+ writel(RK3568_PHYREG18_PLL_LOOP, priv->mmio + RK3568_PHYREG18);
|
||||
+ writel(RK3568_PHYREG11_SU_TRIM_0_7, priv->mmio + RK3568_PHYREG11);
|
||||
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->pipe_sel_usb, true);
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->pipe_txcomp_sel, false);
|
||||
@@ -460,16 +460,16 @@ static int rk3568_combphy_cfg(struct roc
|
||||
|
||||
case PHY_TYPE_SATA:
|
||||
/* Enable adaptive CTLE for SATA Rx. */
|
||||
- val = readl(priv->mmio + PHYREG15);
|
||||
- val |= PHYREG15_CTLE_EN;
|
||||
- writel(val, priv->mmio + PHYREG15);
|
||||
+ val = readl(priv->mmio + RK3568_PHYREG15);
|
||||
+ val |= RK3568_PHYREG15_CTLE_EN;
|
||||
+ writel(val, priv->mmio + RK3568_PHYREG15);
|
||||
/*
|
||||
* Set tx_rterm=50ohm and rx_rterm=44ohm for SATA.
|
||||
* 0: 60ohm, 8: 50ohm 15: 44ohm (by step abort 1ohm)
|
||||
*/
|
||||
- val = PHYREG7_TX_RTERM_50OHM << PHYREG7_TX_RTERM_SHIFT;
|
||||
- val |= PHYREG7_RX_RTERM_44OHM << PHYREG7_RX_RTERM_SHIFT;
|
||||
- writel(val, priv->mmio + PHYREG7);
|
||||
+ val = RK3568_PHYREG7_TX_RTERM_50OHM << RK3568_PHYREG7_TX_RTERM_SHIFT;
|
||||
+ val |= RK3568_PHYREG7_RX_RTERM_44OHM << RK3568_PHYREG7_RX_RTERM_SHIFT;
|
||||
+ writel(val, priv->mmio + RK3568_PHYREG7);
|
||||
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->con0_for_sata, true);
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->con1_for_sata, true);
|
||||
@@ -504,11 +504,11 @@ static int rk3568_combphy_cfg(struct roc
|
||||
case REF_CLOCK_24MHz:
|
||||
if (priv->type == PHY_TYPE_USB3 || priv->type == PHY_TYPE_SATA) {
|
||||
/* Set ssc_cnt[9:0]=0101111101 & 31.5KHz. */
|
||||
- val = PHYREG15_SSC_CNT_VALUE << PHYREG15_SSC_CNT_SHIFT;
|
||||
- rockchip_combphy_updatel(priv, PHYREG15_SSC_CNT_MASK,
|
||||
- val, PHYREG15);
|
||||
+ val = RK3568_PHYREG15_SSC_CNT_VALUE << RK3568_PHYREG15_SSC_CNT_SHIFT;
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG15_SSC_CNT_MASK,
|
||||
+ val, RK3568_PHYREG15);
|
||||
|
||||
- writel(PHYREG16_SSC_CNT_VALUE, priv->mmio + PHYREG16);
|
||||
+ writel(RK3568_PHYREG16_SSC_CNT_VALUE, priv->mmio + RK3568_PHYREG16);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -520,24 +520,26 @@ static int rk3568_combphy_cfg(struct roc
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->pipe_clk_100m, true);
|
||||
if (priv->type == PHY_TYPE_PCIE) {
|
||||
/* PLL KVCO fine tuning. */
|
||||
- val = PHYREG33_PLL_KVCO_VALUE << PHYREG33_PLL_KVCO_SHIFT;
|
||||
- rockchip_combphy_updatel(priv, PHYREG33_PLL_KVCO_MASK,
|
||||
- val, PHYREG33);
|
||||
+ val = RK3568_PHYREG33_PLL_KVCO_VALUE << RK3568_PHYREG33_PLL_KVCO_SHIFT;
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG33_PLL_KVCO_MASK,
|
||||
+ val, RK3568_PHYREG33);
|
||||
|
||||
/* Enable controlling random jitter. */
|
||||
- writel(PHYREG12_PLL_LPF_ADJ_VALUE, priv->mmio + PHYREG12);
|
||||
+ writel(RK3568_PHYREG12_PLL_LPF_ADJ_VALUE, priv->mmio + RK3568_PHYREG12);
|
||||
|
||||
- val = PHYREG6_PLL_DIV_2 << PHYREG6_PLL_DIV_SHIFT;
|
||||
- rockchip_combphy_updatel(priv, PHYREG6_PLL_DIV_MASK,
|
||||
- val, PHYREG6);
|
||||
+ val = RK3568_PHYREG6_PLL_DIV_2 << RK3568_PHYREG6_PLL_DIV_SHIFT;
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG6_PLL_DIV_MASK,
|
||||
+ val, RK3568_PHYREG6);
|
||||
|
||||
- writel(PHYREG18_PLL_LOOP, priv->mmio + PHYREG18);
|
||||
- writel(PHYREG11_SU_TRIM_0_7, priv->mmio + PHYREG11);
|
||||
+ writel(RK3568_PHYREG18_PLL_LOOP, priv->mmio + RK3568_PHYREG18);
|
||||
+ writel(RK3568_PHYREG11_SU_TRIM_0_7, priv->mmio + RK3568_PHYREG11);
|
||||
} else if (priv->type == PHY_TYPE_SATA) {
|
||||
/* downward spread spectrum +500ppm */
|
||||
- val = PHYREG32_SSC_DOWNWARD << PHYREG32_SSC_DIR_SHIFT;
|
||||
- val |= PHYREG32_SSC_OFFSET_500PPM << PHYREG32_SSC_OFFSET_SHIFT;
|
||||
- rockchip_combphy_updatel(priv, PHYREG32_SSC_MASK, val, PHYREG32);
|
||||
+ val = RK3568_PHYREG32_SSC_DOWNWARD << RK3568_PHYREG32_SSC_DIR_SHIFT;
|
||||
+ val |= RK3568_PHYREG32_SSC_OFFSET_500PPM <<
|
||||
+ RK3568_PHYREG32_SSC_OFFSET_SHIFT;
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG32_SSC_MASK, val,
|
||||
+ RK3568_PHYREG32);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -549,20 +551,21 @@ static int rk3568_combphy_cfg(struct roc
|
||||
if (priv->ext_refclk) {
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->pipe_clk_ext, true);
|
||||
if (priv->type == PHY_TYPE_PCIE && rate == REF_CLOCK_100MHz) {
|
||||
- val = PHYREG13_RESISTER_HIGH_Z << PHYREG13_RESISTER_SHIFT;
|
||||
- val |= PHYREG13_CKRCV_AMP0;
|
||||
- rockchip_combphy_updatel(priv, PHYREG13_RESISTER_MASK, val, PHYREG13);
|
||||
-
|
||||
- val = readl(priv->mmio + PHYREG14);
|
||||
- val |= PHYREG14_CKRCV_AMP1;
|
||||
- writel(val, priv->mmio + PHYREG14);
|
||||
+ val = RK3568_PHYREG13_RESISTER_HIGH_Z << RK3568_PHYREG13_RESISTER_SHIFT;
|
||||
+ val |= RK3568_PHYREG13_CKRCV_AMP0;
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG13_RESISTER_MASK, val,
|
||||
+ RK3568_PHYREG13);
|
||||
+
|
||||
+ val = readl(priv->mmio + RK3568_PHYREG14);
|
||||
+ val |= RK3568_PHYREG14_CKRCV_AMP1;
|
||||
+ writel(val, priv->mmio + RK3568_PHYREG14);
|
||||
}
|
||||
}
|
||||
|
||||
if (priv->enable_ssc) {
|
||||
- val = readl(priv->mmio + PHYREG8);
|
||||
- val |= PHYREG8_SSC_EN;
|
||||
- writel(val, priv->mmio + PHYREG8);
|
||||
+ val = readl(priv->mmio + RK3568_PHYREG8);
|
||||
+ val |= RK3568_PHYREG8_SSC_EN;
|
||||
+ writel(val, priv->mmio + RK3568_PHYREG8);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -623,8 +626,8 @@ static int rk3576_combphy_cfg(struct roc
|
||||
switch (priv->type) {
|
||||
case PHY_TYPE_PCIE:
|
||||
/* Set SSC downward spread spectrum */
|
||||
- val = FIELD_PREP(PHYREG32_SSC_MASK, PHYREG32_SSC_DOWNWARD);
|
||||
- rockchip_combphy_updatel(priv, PHYREG32_SSC_MASK, val, PHYREG32);
|
||||
+ val = FIELD_PREP(RK3568_PHYREG32_SSC_MASK, RK3568_PHYREG32_SSC_DOWNWARD);
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG32_SSC_MASK, val, RK3568_PHYREG32);
|
||||
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->con0_for_pcie, true);
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->con1_for_pcie, true);
|
||||
@@ -634,32 +637,33 @@ static int rk3576_combphy_cfg(struct roc
|
||||
|
||||
case PHY_TYPE_USB3:
|
||||
/* Set SSC downward spread spectrum */
|
||||
- val = FIELD_PREP(PHYREG32_SSC_MASK, PHYREG32_SSC_DOWNWARD);
|
||||
- rockchip_combphy_updatel(priv, PHYREG32_SSC_MASK, val, PHYREG32);
|
||||
+ val = FIELD_PREP(RK3568_PHYREG32_SSC_MASK, RK3568_PHYREG32_SSC_DOWNWARD);
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG32_SSC_MASK, val, RK3568_PHYREG32);
|
||||
|
||||
/* Enable adaptive CTLE for USB3.0 Rx */
|
||||
- val = readl(priv->mmio + PHYREG15);
|
||||
- val |= PHYREG15_CTLE_EN;
|
||||
- writel(val, priv->mmio + PHYREG15);
|
||||
+ val = readl(priv->mmio + RK3568_PHYREG15);
|
||||
+ val |= RK3568_PHYREG15_CTLE_EN;
|
||||
+ writel(val, priv->mmio + RK3568_PHYREG15);
|
||||
|
||||
/* Set PLL KVCO fine tuning signals */
|
||||
- rockchip_combphy_updatel(priv, PHYREG33_PLL_KVCO_MASK, BIT(3), PHYREG33);
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG33_PLL_KVCO_MASK, BIT(3),
|
||||
+ RK3568_PHYREG33);
|
||||
|
||||
/* Set PLL LPF R1 to su_trim[10:7]=1001 */
|
||||
- writel(PHYREG12_PLL_LPF_ADJ_VALUE, priv->mmio + PHYREG12);
|
||||
+ writel(RK3568_PHYREG12_PLL_LPF_ADJ_VALUE, priv->mmio + RK3568_PHYREG12);
|
||||
|
||||
/* Set PLL input clock divider 1/2 */
|
||||
- val = FIELD_PREP(PHYREG6_PLL_DIV_MASK, PHYREG6_PLL_DIV_2);
|
||||
- rockchip_combphy_updatel(priv, PHYREG6_PLL_DIV_MASK, val, PHYREG6);
|
||||
+ val = FIELD_PREP(RK3568_PHYREG6_PLL_DIV_MASK, RK3568_PHYREG6_PLL_DIV_2);
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG6_PLL_DIV_MASK, val, RK3568_PHYREG6);
|
||||
|
||||
/* Set PLL loop divider */
|
||||
- writel(PHYREG18_PLL_LOOP, priv->mmio + PHYREG18);
|
||||
+ writel(RK3568_PHYREG18_PLL_LOOP, priv->mmio + RK3568_PHYREG18);
|
||||
|
||||
/* Set PLL KVCO to min and set PLL charge pump current to max */
|
||||
- writel(PHYREG11_SU_TRIM_0_7, priv->mmio + PHYREG11);
|
||||
+ writel(RK3568_PHYREG11_SU_TRIM_0_7, priv->mmio + RK3568_PHYREG11);
|
||||
|
||||
/* Set Rx squelch input filler bandwidth */
|
||||
- writel(PHYREG21_RX_SQUELCH_VAL, priv->mmio + PHYREG21);
|
||||
+ writel(RK3576_PHYREG21_RX_SQUELCH_VAL, priv->mmio + RK3576_PHYREG21);
|
||||
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->pipe_txcomp_sel, false);
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->pipe_txelec_sel, false);
|
||||
@@ -668,14 +672,14 @@ static int rk3576_combphy_cfg(struct roc
|
||||
|
||||
case PHY_TYPE_SATA:
|
||||
/* Enable adaptive CTLE for SATA Rx */
|
||||
- val = readl(priv->mmio + PHYREG15);
|
||||
- val |= PHYREG15_CTLE_EN;
|
||||
- writel(val, priv->mmio + PHYREG15);
|
||||
+ val = readl(priv->mmio + RK3568_PHYREG15);
|
||||
+ val |= RK3568_PHYREG15_CTLE_EN;
|
||||
+ writel(val, priv->mmio + RK3568_PHYREG15);
|
||||
|
||||
/* Set tx_rterm = 50 ohm and rx_rterm = 43.5 ohm */
|
||||
- val = PHYREG7_TX_RTERM_50OHM << PHYREG7_TX_RTERM_SHIFT;
|
||||
- val |= PHYREG7_RX_RTERM_44OHM << PHYREG7_RX_RTERM_SHIFT;
|
||||
- writel(val, priv->mmio + PHYREG7);
|
||||
+ val = RK3568_PHYREG7_TX_RTERM_50OHM << RK3568_PHYREG7_TX_RTERM_SHIFT;
|
||||
+ val |= RK3568_PHYREG7_RX_RTERM_44OHM << RK3568_PHYREG7_RX_RTERM_SHIFT;
|
||||
+ writel(val, priv->mmio + RK3568_PHYREG7);
|
||||
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->con0_for_sata, true);
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->con1_for_sata, true);
|
||||
@@ -697,19 +701,21 @@ static int rk3576_combphy_cfg(struct roc
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->pipe_clk_24m, true);
|
||||
if (priv->type == PHY_TYPE_USB3 || priv->type == PHY_TYPE_SATA) {
|
||||
/* Set ssc_cnt[9:0]=0101111101 & 31.5KHz */
|
||||
- val = FIELD_PREP(PHYREG15_SSC_CNT_MASK, PHYREG15_SSC_CNT_VALUE);
|
||||
- rockchip_combphy_updatel(priv, PHYREG15_SSC_CNT_MASK,
|
||||
- val, PHYREG15);
|
||||
+ val = FIELD_PREP(RK3568_PHYREG15_SSC_CNT_MASK,
|
||||
+ RK3568_PHYREG15_SSC_CNT_VALUE);
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG15_SSC_CNT_MASK,
|
||||
+ val, RK3568_PHYREG15);
|
||||
|
||||
- writel(PHYREG16_SSC_CNT_VALUE, priv->mmio + PHYREG16);
|
||||
+ writel(RK3568_PHYREG16_SSC_CNT_VALUE, priv->mmio + RK3568_PHYREG16);
|
||||
} else if (priv->type == PHY_TYPE_PCIE) {
|
||||
/* PLL KVCO tuning fine */
|
||||
- val = FIELD_PREP(PHYREG33_PLL_KVCO_MASK, PHYREG33_PLL_KVCO_VALUE_RK3576);
|
||||
- rockchip_combphy_updatel(priv, PHYREG33_PLL_KVCO_MASK,
|
||||
- val, PHYREG33);
|
||||
+ val = FIELD_PREP(RK3568_PHYREG33_PLL_KVCO_MASK,
|
||||
+ RK3576_PHYREG33_PLL_KVCO_VALUE);
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG33_PLL_KVCO_MASK,
|
||||
+ val, RK3568_PHYREG33);
|
||||
|
||||
/* Set up rx_pck invert and rx msb to disable */
|
||||
- writel(0x00, priv->mmio + PHYREG27);
|
||||
+ writel(0x00, priv->mmio + RK3588_PHYREG27);
|
||||
|
||||
/*
|
||||
* Set up SU adjust signal:
|
||||
@@ -717,11 +723,11 @@ static int rk3576_combphy_cfg(struct roc
|
||||
* su_trim[15:8], PLL LPF R1 adujst bits[9:7]=3'b011
|
||||
* su_trim[31:24], CKDRV adjust
|
||||
*/
|
||||
- writel(0x90, priv->mmio + PHYREG11);
|
||||
- writel(0x02, priv->mmio + PHYREG12);
|
||||
- writel(0x57, priv->mmio + PHYREG14);
|
||||
+ writel(0x90, priv->mmio + RK3568_PHYREG11);
|
||||
+ writel(0x02, priv->mmio + RK3568_PHYREG12);
|
||||
+ writel(0x57, priv->mmio + RK3568_PHYREG14);
|
||||
|
||||
- writel(PHYREG16_SSC_CNT_VALUE, priv->mmio + PHYREG16);
|
||||
+ writel(RK3568_PHYREG16_SSC_CNT_VALUE, priv->mmio + RK3568_PHYREG16);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -733,15 +739,16 @@ static int rk3576_combphy_cfg(struct roc
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->pipe_clk_100m, true);
|
||||
if (priv->type == PHY_TYPE_PCIE) {
|
||||
/* gate_tx_pck_sel length select work for L1SS */
|
||||
- writel(0xc0, priv->mmio + PHYREG30);
|
||||
+ writel(0xc0, priv->mmio + RK3576_PHYREG30);
|
||||
|
||||
/* PLL KVCO tuning fine */
|
||||
- val = FIELD_PREP(PHYREG33_PLL_KVCO_MASK, PHYREG33_PLL_KVCO_VALUE_RK3576);
|
||||
- rockchip_combphy_updatel(priv, PHYREG33_PLL_KVCO_MASK,
|
||||
- val, PHYREG33);
|
||||
+ val = FIELD_PREP(RK3568_PHYREG33_PLL_KVCO_MASK,
|
||||
+ RK3576_PHYREG33_PLL_KVCO_VALUE);
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG33_PLL_KVCO_MASK,
|
||||
+ val, RK3568_PHYREG33);
|
||||
|
||||
/* Set up rx_trim: PLL LPF C1 85pf R1 1.25kohm */
|
||||
- writel(0x4c, priv->mmio + PHYREG27);
|
||||
+ writel(0x4c, priv->mmio + RK3588_PHYREG27);
|
||||
|
||||
/*
|
||||
* Set up SU adjust signal:
|
||||
@@ -751,20 +758,23 @@ static int rk3576_combphy_cfg(struct roc
|
||||
* su_trim[23:16], CKRCV adjust
|
||||
* su_trim[31:24], CKDRV adjust
|
||||
*/
|
||||
- writel(0x90, priv->mmio + PHYREG11);
|
||||
- writel(0x43, priv->mmio + PHYREG12);
|
||||
- writel(0x88, priv->mmio + PHYREG13);
|
||||
- writel(0x56, priv->mmio + PHYREG14);
|
||||
+ writel(0x90, priv->mmio + RK3568_PHYREG11);
|
||||
+ writel(0x43, priv->mmio + RK3568_PHYREG12);
|
||||
+ writel(0x88, priv->mmio + RK3568_PHYREG13);
|
||||
+ writel(0x56, priv->mmio + RK3568_PHYREG14);
|
||||
} else if (priv->type == PHY_TYPE_SATA) {
|
||||
/* downward spread spectrum +500ppm */
|
||||
- val = FIELD_PREP(PHYREG32_SSC_DIR_MASK, PHYREG32_SSC_DOWNWARD);
|
||||
- val |= FIELD_PREP(PHYREG32_SSC_OFFSET_MASK, PHYREG32_SSC_OFFSET_500PPM);
|
||||
- rockchip_combphy_updatel(priv, PHYREG32_SSC_MASK, val, PHYREG32);
|
||||
+ val = FIELD_PREP(RK3568_PHYREG32_SSC_DIR_MASK,
|
||||
+ RK3568_PHYREG32_SSC_DOWNWARD);
|
||||
+ val |= FIELD_PREP(RK3568_PHYREG32_SSC_OFFSET_MASK,
|
||||
+ RK3568_PHYREG32_SSC_OFFSET_500PPM);
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG32_SSC_MASK, val,
|
||||
+ RK3568_PHYREG32);
|
||||
|
||||
/* ssc ppm adjust to 3500ppm */
|
||||
- rockchip_combphy_updatel(priv, PHYREG10_SSC_PCM_MASK,
|
||||
- PHYREG10_SSC_PCM_3500PPM,
|
||||
- PHYREG10);
|
||||
+ rockchip_combphy_updatel(priv, RK3576_PHYREG10_SSC_PCM_MASK,
|
||||
+ RK3576_PHYREG10_SSC_PCM_3500PPM,
|
||||
+ RK3576_PHYREG10);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -776,12 +786,13 @@ static int rk3576_combphy_cfg(struct roc
|
||||
if (priv->ext_refclk) {
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->pipe_clk_ext, true);
|
||||
if (priv->type == PHY_TYPE_PCIE && rate == REF_CLOCK_100MHz) {
|
||||
- val = FIELD_PREP(PHYREG33_PLL_KVCO_MASK, PHYREG33_PLL_KVCO_VALUE_RK3576);
|
||||
- rockchip_combphy_updatel(priv, PHYREG33_PLL_KVCO_MASK,
|
||||
- val, PHYREG33);
|
||||
+ val = FIELD_PREP(RK3568_PHYREG33_PLL_KVCO_MASK,
|
||||
+ RK3576_PHYREG33_PLL_KVCO_VALUE);
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG33_PLL_KVCO_MASK,
|
||||
+ val, RK3568_PHYREG33);
|
||||
|
||||
/* Set up rx_trim: PLL LPF C1 85pf R1 2.5kohm */
|
||||
- writel(0x0c, priv->mmio + PHYREG27);
|
||||
+ writel(0x0c, priv->mmio + RK3588_PHYREG27);
|
||||
|
||||
/*
|
||||
* Set up SU adjust signal:
|
||||
@@ -791,25 +802,25 @@ static int rk3576_combphy_cfg(struct roc
|
||||
* su_trim[23:16], CKRCV adjust
|
||||
* su_trim[31:24], CKDRV adjust
|
||||
*/
|
||||
- writel(0x90, priv->mmio + PHYREG11);
|
||||
- writel(0x43, priv->mmio + PHYREG12);
|
||||
- writel(0x88, priv->mmio + PHYREG13);
|
||||
- writel(0x56, priv->mmio + PHYREG14);
|
||||
+ writel(0x90, priv->mmio + RK3568_PHYREG11);
|
||||
+ writel(0x43, priv->mmio + RK3568_PHYREG12);
|
||||
+ writel(0x88, priv->mmio + RK3568_PHYREG13);
|
||||
+ writel(0x56, priv->mmio + RK3568_PHYREG14);
|
||||
}
|
||||
}
|
||||
|
||||
if (priv->enable_ssc) {
|
||||
- val = readl(priv->mmio + PHYREG8);
|
||||
- val |= PHYREG8_SSC_EN;
|
||||
- writel(val, priv->mmio + PHYREG8);
|
||||
+ val = readl(priv->mmio + RK3568_PHYREG8);
|
||||
+ val |= RK3568_PHYREG8_SSC_EN;
|
||||
+ writel(val, priv->mmio + RK3568_PHYREG8);
|
||||
|
||||
if (priv->type == PHY_TYPE_PCIE && rate == REF_CLOCK_24MHz) {
|
||||
/* Set PLL loop divider */
|
||||
- writel(0x00, priv->mmio + PHYREG17);
|
||||
- writel(PHYREG18_PLL_LOOP, priv->mmio + PHYREG18);
|
||||
+ writel(0x00, priv->mmio + RK3576_PHYREG17);
|
||||
+ writel(RK3568_PHYREG18_PLL_LOOP, priv->mmio + RK3568_PHYREG18);
|
||||
|
||||
/* Set up rx_pck invert and rx msb to disable */
|
||||
- writel(0x00, priv->mmio + PHYREG27);
|
||||
+ writel(0x00, priv->mmio + RK3588_PHYREG27);
|
||||
|
||||
/*
|
||||
* Set up SU adjust signal:
|
||||
@@ -818,16 +829,17 @@ static int rk3576_combphy_cfg(struct roc
|
||||
* su_trim[23:16], CKRCV adjust
|
||||
* su_trim[31:24], CKDRV adjust
|
||||
*/
|
||||
- writel(0x90, priv->mmio + PHYREG11);
|
||||
- writel(0x02, priv->mmio + PHYREG12);
|
||||
- writel(0x08, priv->mmio + PHYREG13);
|
||||
- writel(0x57, priv->mmio + PHYREG14);
|
||||
- writel(0x40, priv->mmio + PHYREG15);
|
||||
-
|
||||
- writel(PHYREG16_SSC_CNT_VALUE, priv->mmio + PHYREG16);
|
||||
-
|
||||
- val = FIELD_PREP(PHYREG33_PLL_KVCO_MASK, PHYREG33_PLL_KVCO_VALUE_RK3576);
|
||||
- writel(val, priv->mmio + PHYREG33);
|
||||
+ writel(0x90, priv->mmio + RK3568_PHYREG11);
|
||||
+ writel(0x02, priv->mmio + RK3568_PHYREG12);
|
||||
+ writel(0x08, priv->mmio + RK3568_PHYREG13);
|
||||
+ writel(0x57, priv->mmio + RK3568_PHYREG14);
|
||||
+ writel(0x40, priv->mmio + RK3568_PHYREG15);
|
||||
+
|
||||
+ writel(RK3568_PHYREG16_SSC_CNT_VALUE, priv->mmio + RK3568_PHYREG16);
|
||||
+
|
||||
+ val = FIELD_PREP(RK3568_PHYREG33_PLL_KVCO_MASK,
|
||||
+ RK3576_PHYREG33_PLL_KVCO_VALUE);
|
||||
+ writel(val, priv->mmio + RK3568_PHYREG33);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -897,30 +909,28 @@ static int rk3588_combphy_cfg(struct roc
|
||||
break;
|
||||
case PHY_TYPE_USB3:
|
||||
/* Set SSC downward spread spectrum */
|
||||
- rockchip_combphy_updatel(priv, PHYREG32_SSC_MASK,
|
||||
- PHYREG32_SSC_DOWNWARD << PHYREG32_SSC_DIR_SHIFT,
|
||||
- PHYREG32);
|
||||
+ val = RK3568_PHYREG32_SSC_DOWNWARD << RK3568_PHYREG32_SSC_DIR_SHIFT;
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG32_SSC_MASK, val, RK3568_PHYREG32);
|
||||
|
||||
/* Enable adaptive CTLE for USB3.0 Rx. */
|
||||
- val = readl(priv->mmio + PHYREG15);
|
||||
- val |= PHYREG15_CTLE_EN;
|
||||
- writel(val, priv->mmio + PHYREG15);
|
||||
+ val = readl(priv->mmio + RK3568_PHYREG15);
|
||||
+ val |= RK3568_PHYREG15_CTLE_EN;
|
||||
+ writel(val, priv->mmio + RK3568_PHYREG15);
|
||||
|
||||
/* Set PLL KVCO fine tuning signals. */
|
||||
- rockchip_combphy_updatel(priv, PHYREG33_PLL_KVCO_MASK,
|
||||
- PHYREG33_PLL_KVCO_VALUE << PHYREG33_PLL_KVCO_SHIFT,
|
||||
- PHYREG33);
|
||||
+ val = RK3568_PHYREG33_PLL_KVCO_VALUE << RK3568_PHYREG33_PLL_KVCO_SHIFT,
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG33_PLL_KVCO_MASK, val, RK3568_PHYREG33);
|
||||
|
||||
/* Enable controlling random jitter. */
|
||||
- writel(PHYREG12_PLL_LPF_ADJ_VALUE, priv->mmio + PHYREG12);
|
||||
+ writel(RK3568_PHYREG12_PLL_LPF_ADJ_VALUE, priv->mmio + RK3568_PHYREG12);
|
||||
|
||||
/* Set PLL input clock divider 1/2. */
|
||||
- rockchip_combphy_updatel(priv, PHYREG6_PLL_DIV_MASK,
|
||||
- PHYREG6_PLL_DIV_2 << PHYREG6_PLL_DIV_SHIFT,
|
||||
- PHYREG6);
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG6_PLL_DIV_MASK,
|
||||
+ RK3568_PHYREG6_PLL_DIV_2 << RK3568_PHYREG6_PLL_DIV_SHIFT,
|
||||
+ RK3568_PHYREG6);
|
||||
|
||||
- writel(PHYREG18_PLL_LOOP, priv->mmio + PHYREG18);
|
||||
- writel(PHYREG11_SU_TRIM_0_7, priv->mmio + PHYREG11);
|
||||
+ writel(RK3568_PHYREG18_PLL_LOOP, priv->mmio + RK3568_PHYREG18);
|
||||
+ writel(RK3568_PHYREG11_SU_TRIM_0_7, priv->mmio + RK3568_PHYREG11);
|
||||
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->pipe_txcomp_sel, false);
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->pipe_txelec_sel, false);
|
||||
@@ -928,16 +938,16 @@ static int rk3588_combphy_cfg(struct roc
|
||||
break;
|
||||
case PHY_TYPE_SATA:
|
||||
/* Enable adaptive CTLE for SATA Rx. */
|
||||
- val = readl(priv->mmio + PHYREG15);
|
||||
- val |= PHYREG15_CTLE_EN;
|
||||
- writel(val, priv->mmio + PHYREG15);
|
||||
+ val = readl(priv->mmio + RK3568_PHYREG15);
|
||||
+ val |= RK3568_PHYREG15_CTLE_EN;
|
||||
+ writel(val, priv->mmio + RK3568_PHYREG15);
|
||||
/*
|
||||
* Set tx_rterm=50ohm and rx_rterm=44ohm for SATA.
|
||||
* 0: 60ohm, 8: 50ohm 15: 44ohm (by step abort 1ohm)
|
||||
*/
|
||||
- val = PHYREG7_TX_RTERM_50OHM << PHYREG7_TX_RTERM_SHIFT;
|
||||
- val |= PHYREG7_RX_RTERM_44OHM << PHYREG7_RX_RTERM_SHIFT;
|
||||
- writel(val, priv->mmio + PHYREG7);
|
||||
+ val = RK3568_PHYREG7_TX_RTERM_50OHM << RK3568_PHYREG7_TX_RTERM_SHIFT;
|
||||
+ val |= RK3568_PHYREG7_RX_RTERM_44OHM << RK3568_PHYREG7_RX_RTERM_SHIFT;
|
||||
+ writel(val, priv->mmio + RK3568_PHYREG7);
|
||||
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->con0_for_sata, true);
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->con1_for_sata, true);
|
||||
@@ -959,11 +969,11 @@ static int rk3588_combphy_cfg(struct roc
|
||||
case REF_CLOCK_24MHz:
|
||||
if (priv->type == PHY_TYPE_USB3 || priv->type == PHY_TYPE_SATA) {
|
||||
/* Set ssc_cnt[9:0]=0101111101 & 31.5KHz. */
|
||||
- val = PHYREG15_SSC_CNT_VALUE << PHYREG15_SSC_CNT_SHIFT;
|
||||
- rockchip_combphy_updatel(priv, PHYREG15_SSC_CNT_MASK,
|
||||
- val, PHYREG15);
|
||||
+ val = RK3568_PHYREG15_SSC_CNT_VALUE << RK3568_PHYREG15_SSC_CNT_SHIFT;
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG15_SSC_CNT_MASK,
|
||||
+ val, RK3568_PHYREG15);
|
||||
|
||||
- writel(PHYREG16_SSC_CNT_VALUE, priv->mmio + PHYREG16);
|
||||
+ writel(RK3568_PHYREG16_SSC_CNT_VALUE, priv->mmio + RK3568_PHYREG16);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -974,23 +984,25 @@ static int rk3588_combphy_cfg(struct roc
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->pipe_clk_100m, true);
|
||||
if (priv->type == PHY_TYPE_PCIE) {
|
||||
/* PLL KVCO fine tuning. */
|
||||
- val = 4 << PHYREG33_PLL_KVCO_SHIFT;
|
||||
- rockchip_combphy_updatel(priv, PHYREG33_PLL_KVCO_MASK,
|
||||
- val, PHYREG33);
|
||||
+ val = 4 << RK3568_PHYREG33_PLL_KVCO_SHIFT;
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG33_PLL_KVCO_MASK,
|
||||
+ val, RK3568_PHYREG33);
|
||||
|
||||
/* Enable controlling random jitter. */
|
||||
- writel(PHYREG12_PLL_LPF_ADJ_VALUE, priv->mmio + PHYREG12);
|
||||
+ writel(RK3568_PHYREG12_PLL_LPF_ADJ_VALUE, priv->mmio + RK3568_PHYREG12);
|
||||
|
||||
/* Set up rx_trim: PLL LPF C1 85pf R1 1.25kohm */
|
||||
- writel(PHYREG27_RX_TRIM_RK3588, priv->mmio + PHYREG27);
|
||||
+ writel(RK3588_PHYREG27_RX_TRIM, priv->mmio + RK3588_PHYREG27);
|
||||
|
||||
/* Set up su_trim: */
|
||||
- writel(PHYREG11_SU_TRIM_0_7, priv->mmio + PHYREG11);
|
||||
+ writel(RK3568_PHYREG11_SU_TRIM_0_7, priv->mmio + RK3568_PHYREG11);
|
||||
} else if (priv->type == PHY_TYPE_SATA) {
|
||||
/* downward spread spectrum +500ppm */
|
||||
- val = PHYREG32_SSC_DOWNWARD << PHYREG32_SSC_DIR_SHIFT;
|
||||
- val |= PHYREG32_SSC_OFFSET_500PPM << PHYREG32_SSC_OFFSET_SHIFT;
|
||||
- rockchip_combphy_updatel(priv, PHYREG32_SSC_MASK, val, PHYREG32);
|
||||
+ val = RK3568_PHYREG32_SSC_DOWNWARD << RK3568_PHYREG32_SSC_DIR_SHIFT;
|
||||
+ val |= RK3568_PHYREG32_SSC_OFFSET_500PPM <<
|
||||
+ RK3568_PHYREG32_SSC_OFFSET_SHIFT;
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG32_SSC_MASK, val,
|
||||
+ RK3568_PHYREG32);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@@ -1001,20 +1013,21 @@ static int rk3588_combphy_cfg(struct roc
|
||||
if (priv->ext_refclk) {
|
||||
rockchip_combphy_param_write(priv->phy_grf, &cfg->pipe_clk_ext, true);
|
||||
if (priv->type == PHY_TYPE_PCIE && rate == REF_CLOCK_100MHz) {
|
||||
- val = PHYREG13_RESISTER_HIGH_Z << PHYREG13_RESISTER_SHIFT;
|
||||
- val |= PHYREG13_CKRCV_AMP0;
|
||||
- rockchip_combphy_updatel(priv, PHYREG13_RESISTER_MASK, val, PHYREG13);
|
||||
-
|
||||
- val = readl(priv->mmio + PHYREG14);
|
||||
- val |= PHYREG14_CKRCV_AMP1;
|
||||
- writel(val, priv->mmio + PHYREG14);
|
||||
+ val = RK3568_PHYREG13_RESISTER_HIGH_Z << RK3568_PHYREG13_RESISTER_SHIFT;
|
||||
+ val |= RK3568_PHYREG13_CKRCV_AMP0;
|
||||
+ rockchip_combphy_updatel(priv, RK3568_PHYREG13_RESISTER_MASK, val,
|
||||
+ RK3568_PHYREG13);
|
||||
+
|
||||
+ val = readl(priv->mmio + RK3568_PHYREG14);
|
||||
+ val |= RK3568_PHYREG14_CKRCV_AMP1;
|
||||
+ writel(val, priv->mmio + RK3568_PHYREG14);
|
||||
}
|
||||
}
|
||||
|
||||
if (priv->enable_ssc) {
|
||||
- val = readl(priv->mmio + PHYREG8);
|
||||
- val |= PHYREG8_SSC_EN;
|
||||
- writel(val, priv->mmio + PHYREG8);
|
||||
+ val = readl(priv->mmio + RK3568_PHYREG8);
|
||||
+ val |= RK3568_PHYREG8_SSC_EN;
|
||||
+ writel(val, priv->mmio + RK3568_PHYREG8);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
@ -0,0 +1,231 @@
|
|||
From aee07ee1b97d9a3825e8db609a1c76157218cc59 Mon Sep 17 00:00:00 2001
|
||||
From: Yao Zi <ziyao@disroot.org>
|
||||
Date: Mon, 28 Jul 2025 10:29:47 +0000
|
||||
Subject: [PATCH] phy: rockchip: naneng-combphy: Add RK3528 support
|
||||
|
||||
Rockchip RK3528 integrates one naneng-combphy that is able to operate in
|
||||
PCIe and USB3 mode. The control logic is similar to previous variants of
|
||||
naneng-combphy but the register layout is apparently different from the
|
||||
RK3568 one.
|
||||
|
||||
Signed-off-by: Yao Zi <ziyao@disroot.org>
|
||||
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
|
||||
Link: https://lore.kernel.org/r/20250728102947.38984-7-ziyao@disroot.org
|
||||
Signed-off-by: Vinod Koul <vkoul@kernel.org>
|
||||
---
|
||||
.../rockchip/phy-rockchip-naneng-combphy.c | 189 +++++++++++++++++-
|
||||
1 file changed, 188 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
|
||||
+++ b/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
|
||||
@@ -20,7 +20,46 @@
|
||||
#define REF_CLOCK_25MHz (25 * HZ_PER_MHZ)
|
||||
#define REF_CLOCK_100MHz (100 * HZ_PER_MHZ)
|
||||
|
||||
-/* COMBO PHY REG */
|
||||
+/* RK3528 COMBO PHY REG */
|
||||
+#define RK3528_PHYREG6 0x18
|
||||
+#define RK3528_PHYREG6_PLL_KVCO GENMASK(12, 10)
|
||||
+#define RK3528_PHYREG6_PLL_KVCO_VALUE 0x2
|
||||
+#define RK3528_PHYREG6_SSC_DIR GENMASK(5, 4)
|
||||
+#define RK3528_PHYREG6_SSC_UPWARD 0
|
||||
+#define RK3528_PHYREG6_SSC_DOWNWARD 1
|
||||
+
|
||||
+#define RK3528_PHYREG40 0x100
|
||||
+#define RK3528_PHYREG40_SSC_EN BIT(20)
|
||||
+#define RK3528_PHYREG40_SSC_CNT GENMASK(10, 0)
|
||||
+#define RK3528_PHYREG40_SSC_CNT_VALUE 0x17d
|
||||
+
|
||||
+#define RK3528_PHYREG42 0x108
|
||||
+#define RK3528_PHYREG42_CKDRV_CLK_SEL BIT(29)
|
||||
+#define RK3528_PHYREG42_CKDRV_CLK_PLL 0
|
||||
+#define RK3528_PHYREG42_CKDRV_CLK_CKRCV 1
|
||||
+#define RK3528_PHYREG42_PLL_LPF_R1_ADJ GENMASK(10, 7)
|
||||
+#define RK3528_PHYREG42_PLL_LPF_R1_ADJ_VALUE 0x9
|
||||
+#define RK3528_PHYREG42_PLL_CHGPUMP_CUR_ADJ GENMASK(6, 4)
|
||||
+#define RK3528_PHYREG42_PLL_CHGPUMP_CUR_ADJ_VALUE 0x7
|
||||
+#define RK3528_PHYREG42_PLL_KVCO_ADJ GENMASK(2, 0)
|
||||
+#define RK3528_PHYREG42_PLL_KVCO_ADJ_VALUE 0x0
|
||||
+
|
||||
+#define RK3528_PHYREG80 0x200
|
||||
+#define RK3528_PHYREG80_CTLE_EN BIT(17)
|
||||
+
|
||||
+#define RK3528_PHYREG81 0x204
|
||||
+#define RK3528_PHYREG81_CDR_PHASE_PATH_GAIN_2X BIT(5)
|
||||
+#define RK3528_PHYREG81_SLEW_RATE_CTRL GENMASK(2, 0)
|
||||
+#define RK3528_PHYREG81_SLEW_RATE_CTRL_SLOW 0x7
|
||||
+
|
||||
+#define RK3528_PHYREG83 0x20c
|
||||
+#define RK3528_PHYREG83_RX_SQUELCH GENMASK(2, 0)
|
||||
+#define RK3528_PHYREG83_RX_SQUELCH_VALUE 0x6
|
||||
+
|
||||
+#define RK3528_PHYREG86 0x218
|
||||
+#define RK3528_PHYREG86_RTERM_DET_CLK_EN BIT(14)
|
||||
+
|
||||
+/* RK3568 COMBO PHY REG */
|
||||
#define RK3568_PHYREG6 0x14
|
||||
#define RK3568_PHYREG6_PLL_DIV_MASK GENMASK(7, 6)
|
||||
#define RK3568_PHYREG6_PLL_DIV_SHIFT 6
|
||||
@@ -400,6 +439,150 @@ static int rockchip_combphy_probe(struct
|
||||
return PTR_ERR_OR_ZERO(phy_provider);
|
||||
}
|
||||
|
||||
+static int rk3528_combphy_cfg(struct rockchip_combphy_priv *priv)
|
||||
+{
|
||||
+ const struct rockchip_combphy_grfcfg *cfg = priv->cfg->grfcfg;
|
||||
+ unsigned long rate;
|
||||
+ u32 val;
|
||||
+
|
||||
+ /* Set SSC downward spread spectrum */
|
||||
+ val = FIELD_PREP(RK3528_PHYREG6_SSC_DIR, RK3528_PHYREG6_SSC_DOWNWARD);
|
||||
+ rockchip_combphy_updatel(priv, RK3528_PHYREG6_SSC_DIR, val, RK3528_PHYREG6);
|
||||
+
|
||||
+ switch (priv->type) {
|
||||
+ case PHY_TYPE_PCIE:
|
||||
+ rockchip_combphy_param_write(priv->phy_grf, &cfg->con0_for_pcie, true);
|
||||
+ rockchip_combphy_param_write(priv->phy_grf, &cfg->con1_for_pcie, true);
|
||||
+ rockchip_combphy_param_write(priv->phy_grf, &cfg->con2_for_pcie, true);
|
||||
+ rockchip_combphy_param_write(priv->phy_grf, &cfg->con3_for_pcie, true);
|
||||
+ break;
|
||||
+ case PHY_TYPE_USB3:
|
||||
+ /* Enable adaptive CTLE for USB3.0 Rx */
|
||||
+ rockchip_combphy_updatel(priv, RK3528_PHYREG80_CTLE_EN, RK3528_PHYREG80_CTLE_EN,
|
||||
+ RK3528_PHYREG80);
|
||||
+
|
||||
+ /* Set slow slew rate control for PI */
|
||||
+ val = FIELD_PREP(RK3528_PHYREG81_SLEW_RATE_CTRL,
|
||||
+ RK3528_PHYREG81_SLEW_RATE_CTRL_SLOW);
|
||||
+ rockchip_combphy_updatel(priv, RK3528_PHYREG81_SLEW_RATE_CTRL, val,
|
||||
+ RK3528_PHYREG81);
|
||||
+
|
||||
+ /* Set CDR phase path with 2x gain */
|
||||
+ rockchip_combphy_updatel(priv, RK3528_PHYREG81_CDR_PHASE_PATH_GAIN_2X,
|
||||
+ RK3528_PHYREG81_CDR_PHASE_PATH_GAIN_2X, RK3528_PHYREG81);
|
||||
+
|
||||
+ /* Set Rx squelch input filler bandwidth */
|
||||
+ val = FIELD_PREP(RK3528_PHYREG83_RX_SQUELCH, RK3528_PHYREG83_RX_SQUELCH_VALUE);
|
||||
+ rockchip_combphy_updatel(priv, RK3528_PHYREG83_RX_SQUELCH, val, RK3528_PHYREG83);
|
||||
+
|
||||
+ rockchip_combphy_param_write(priv->phy_grf, &cfg->pipe_txcomp_sel, false);
|
||||
+ rockchip_combphy_param_write(priv->phy_grf, &cfg->pipe_txelec_sel, false);
|
||||
+ rockchip_combphy_param_write(priv->phy_grf, &cfg->usb_mode_set, true);
|
||||
+ rockchip_combphy_param_write(priv->pipe_grf, &cfg->u3otg0_port_en, true);
|
||||
+ break;
|
||||
+ default:
|
||||
+ dev_err(priv->dev, "incompatible PHY type\n");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ rate = clk_get_rate(priv->refclk);
|
||||
+
|
||||
+ switch (rate) {
|
||||
+ case REF_CLOCK_24MHz:
|
||||
+ rockchip_combphy_param_write(priv->phy_grf, &cfg->pipe_clk_24m, true);
|
||||
+ if (priv->type == PHY_TYPE_USB3) {
|
||||
+ /* Set ssc_cnt[10:0]=00101111101 & 31.5KHz */
|
||||
+ val = FIELD_PREP(RK3528_PHYREG40_SSC_CNT, RK3528_PHYREG40_SSC_CNT_VALUE);
|
||||
+ rockchip_combphy_updatel(priv, RK3528_PHYREG40_SSC_CNT, val,
|
||||
+ RK3528_PHYREG40);
|
||||
+ } else if (priv->type == PHY_TYPE_PCIE) {
|
||||
+ /* tx_trim[14]=1, Enable the counting clock of the rterm detect */
|
||||
+ rockchip_combphy_updatel(priv, RK3528_PHYREG86_RTERM_DET_CLK_EN,
|
||||
+ RK3528_PHYREG86_RTERM_DET_CLK_EN, RK3528_PHYREG86);
|
||||
+ }
|
||||
+ break;
|
||||
+ case REF_CLOCK_100MHz:
|
||||
+ rockchip_combphy_param_write(priv->phy_grf, &cfg->pipe_clk_100m, true);
|
||||
+ if (priv->type == PHY_TYPE_PCIE) {
|
||||
+ /* PLL KVCO tuning fine */
|
||||
+ val = FIELD_PREP(RK3528_PHYREG6_PLL_KVCO, RK3528_PHYREG6_PLL_KVCO_VALUE);
|
||||
+ rockchip_combphy_updatel(priv, RK3528_PHYREG6_PLL_KVCO, val,
|
||||
+ RK3528_PHYREG6);
|
||||
+
|
||||
+ /* su_trim[6:4]=111, [10:7]=1001, [2:0]=000, swing 650mv */
|
||||
+ writel(0x570804f0, priv->mmio + RK3528_PHYREG42);
|
||||
+ }
|
||||
+ break;
|
||||
+ default:
|
||||
+ dev_err(priv->dev, "Unsupported rate: %lu\n", rate);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ if (device_property_read_bool(priv->dev, "rockchip,ext-refclk")) {
|
||||
+ rockchip_combphy_param_write(priv->phy_grf, &cfg->pipe_clk_ext, true);
|
||||
+
|
||||
+ if (priv->type == PHY_TYPE_PCIE && rate == REF_CLOCK_100MHz) {
|
||||
+ val = FIELD_PREP(RK3528_PHYREG42_CKDRV_CLK_SEL,
|
||||
+ RK3528_PHYREG42_CKDRV_CLK_CKRCV);
|
||||
+ val |= FIELD_PREP(RK3528_PHYREG42_PLL_LPF_R1_ADJ,
|
||||
+ RK3528_PHYREG42_PLL_LPF_R1_ADJ_VALUE);
|
||||
+ val |= FIELD_PREP(RK3528_PHYREG42_PLL_CHGPUMP_CUR_ADJ,
|
||||
+ RK3528_PHYREG42_PLL_CHGPUMP_CUR_ADJ_VALUE);
|
||||
+ val |= FIELD_PREP(RK3528_PHYREG42_PLL_KVCO_ADJ,
|
||||
+ RK3528_PHYREG42_PLL_KVCO_ADJ_VALUE);
|
||||
+ rockchip_combphy_updatel(priv,
|
||||
+ RK3528_PHYREG42_CKDRV_CLK_SEL |
|
||||
+ RK3528_PHYREG42_PLL_LPF_R1_ADJ |
|
||||
+ RK3528_PHYREG42_PLL_CHGPUMP_CUR_ADJ |
|
||||
+ RK3528_PHYREG42_PLL_KVCO_ADJ,
|
||||
+ val, RK3528_PHYREG42);
|
||||
+
|
||||
+ val = FIELD_PREP(RK3528_PHYREG6_PLL_KVCO, RK3528_PHYREG6_PLL_KVCO_VALUE);
|
||||
+ rockchip_combphy_updatel(priv, RK3528_PHYREG6_PLL_KVCO, val,
|
||||
+ RK3528_PHYREG6);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (priv->type == PHY_TYPE_PCIE) {
|
||||
+ if (device_property_read_bool(priv->dev, "rockchip,enable-ssc"))
|
||||
+ rockchip_combphy_updatel(priv, RK3528_PHYREG40_SSC_EN,
|
||||
+ RK3528_PHYREG40_SSC_EN, RK3528_PHYREG40);
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static const struct rockchip_combphy_grfcfg rk3528_combphy_grfcfgs = {
|
||||
+ /* pipe-phy-grf */
|
||||
+ .pcie_mode_set = { 0x0000, 5, 0, 0x00, 0x11 },
|
||||
+ .usb_mode_set = { 0x0000, 5, 0, 0x00, 0x04 },
|
||||
+ .pipe_rxterm_set = { 0x0000, 12, 12, 0x00, 0x01 },
|
||||
+ .pipe_txelec_set = { 0x0004, 1, 1, 0x00, 0x01 },
|
||||
+ .pipe_txcomp_set = { 0x0004, 4, 4, 0x00, 0x01 },
|
||||
+ .pipe_clk_24m = { 0x0004, 14, 13, 0x00, 0x00 },
|
||||
+ .pipe_clk_100m = { 0x0004, 14, 13, 0x00, 0x02 },
|
||||
+ .pipe_rxterm_sel = { 0x0008, 8, 8, 0x00, 0x01 },
|
||||
+ .pipe_txelec_sel = { 0x0008, 12, 12, 0x00, 0x01 },
|
||||
+ .pipe_txcomp_sel = { 0x0008, 15, 15, 0x00, 0x01 },
|
||||
+ .pipe_clk_ext = { 0x000c, 9, 8, 0x02, 0x01 },
|
||||
+ .pipe_phy_status = { 0x0034, 6, 6, 0x01, 0x00 },
|
||||
+ .con0_for_pcie = { 0x0000, 15, 0, 0x00, 0x110 },
|
||||
+ .con1_for_pcie = { 0x0004, 15, 0, 0x00, 0x00 },
|
||||
+ .con2_for_pcie = { 0x0008, 15, 0, 0x00, 0x101 },
|
||||
+ .con3_for_pcie = { 0x000c, 15, 0, 0x00, 0x0200 },
|
||||
+ /* pipe-grf */
|
||||
+ .u3otg0_port_en = { 0x0044, 15, 0, 0x0181, 0x1100 },
|
||||
+};
|
||||
+
|
||||
+static const struct rockchip_combphy_cfg rk3528_combphy_cfgs = {
|
||||
+ .num_phys = 1,
|
||||
+ .phy_ids = {
|
||||
+ 0xffdc0000,
|
||||
+ },
|
||||
+ .grfcfg = &rk3528_combphy_grfcfgs,
|
||||
+ .combphy_cfg = rk3528_combphy_cfg,
|
||||
+};
|
||||
+
|
||||
static int rk3568_combphy_cfg(struct rockchip_combphy_priv *priv)
|
||||
{
|
||||
const struct rockchip_combphy_grfcfg *cfg = priv->cfg->grfcfg;
|
||||
@@ -1075,6 +1258,10 @@ static const struct rockchip_combphy_cfg
|
||||
|
||||
static const struct of_device_id rockchip_combphy_of_match[] = {
|
||||
{
|
||||
+ .compatible = "rockchip,rk3528-naneng-combphy",
|
||||
+ .data = &rk3528_combphy_cfgs,
|
||||
+ },
|
||||
+ {
|
||||
.compatible = "rockchip,rk3568-naneng-combphy",
|
||||
.data = &rk3568_combphy_cfgs,
|
||||
},
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
From 8a9aa0bbd615c9b377bd82e671519f0c4cb272dd Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Thu, 27 Feb 2025 18:40:51 +0000
|
||||
Subject: [PATCH] iio: adc: rockchip_saradc: Add support for RK3528
|
||||
|
||||
The Successive Approximation ADC (SARADC) in RK3528 uses the v2
|
||||
controller and support:
|
||||
- 10-bit resolution
|
||||
- Up to 1MS/s sampling rate
|
||||
- 4 single-ended input channels
|
||||
- Current consumption: 0.5mA @ 1MS/s
|
||||
|
||||
Add support for the 4 channels of 10-bit resolution supported by SARADC
|
||||
in RK3528.
|
||||
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Link: https://patch.msgid.link/20250227184058.2964204-3-jonas@kwiboo.se
|
||||
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
|
||||
---
|
||||
drivers/iio/adc/rockchip_saradc.c | 18 ++++++++++++++++++
|
||||
1 file changed, 18 insertions(+)
|
||||
|
||||
--- a/drivers/iio/adc/rockchip_saradc.c
|
||||
+++ b/drivers/iio/adc/rockchip_saradc.c
|
||||
@@ -275,6 +275,21 @@ static const struct rockchip_saradc_data
|
||||
.power_down = rockchip_saradc_power_down_v1,
|
||||
};
|
||||
|
||||
+static const struct iio_chan_spec rockchip_rk3528_saradc_iio_channels[] = {
|
||||
+ SARADC_CHANNEL(0, "adc0", 10),
|
||||
+ SARADC_CHANNEL(1, "adc1", 10),
|
||||
+ SARADC_CHANNEL(2, "adc2", 10),
|
||||
+ SARADC_CHANNEL(3, "adc3", 10),
|
||||
+};
|
||||
+
|
||||
+static const struct rockchip_saradc_data rk3528_saradc_data = {
|
||||
+ .channels = rockchip_rk3528_saradc_iio_channels,
|
||||
+ .num_channels = ARRAY_SIZE(rockchip_rk3528_saradc_iio_channels),
|
||||
+ .clk_rate = 1000000,
|
||||
+ .start = rockchip_saradc_start_v2,
|
||||
+ .read = rockchip_saradc_read_v2,
|
||||
+};
|
||||
+
|
||||
static const struct iio_chan_spec rockchip_rk3568_saradc_iio_channels[] = {
|
||||
SARADC_CHANNEL(0, "adc0", 10),
|
||||
SARADC_CHANNEL(1, "adc1", 10),
|
||||
@@ -325,6 +340,9 @@ static const struct of_device_id rockchi
|
||||
.compatible = "rockchip,rk3399-saradc",
|
||||
.data = &rk3399_saradc_data,
|
||||
}, {
|
||||
+ .compatible = "rockchip,rk3528-saradc",
|
||||
+ .data = &rk3528_saradc_data,
|
||||
+ }, {
|
||||
.compatible = "rockchip,rk3568-saradc",
|
||||
.data = &rk3568_saradc_data,
|
||||
}, {
|
||||
|
|
@ -0,0 +1,166 @@
|
|||
From 1725f0eb37d621ce48303ccc14748fb66d618c9e Mon Sep 17 00:00:00 2001
|
||||
From: David Wu <david.wu@rock-chips.com>
|
||||
Date: Wed, 19 Mar 2025 21:44:06 +0000
|
||||
Subject: [PATCH] net: stmmac: dwmac-rk: Add GMAC support for RK3528
|
||||
|
||||
Rockchip RK3528 has two Ethernet controllers based on Synopsys DWC
|
||||
Ethernet QoS IP.
|
||||
|
||||
Add initial support for the RK3528 GMAC variant.
|
||||
|
||||
Signed-off-by: David Wu <david.wu@rock-chips.com>
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
Link: https://patch.msgid.link/20250319214415.3086027-3-jonas@kwiboo.se
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
.../net/ethernet/stmicro/stmmac/dwmac-rk.c | 132 ++++++++++++++++++
|
||||
1 file changed, 132 insertions(+)
|
||||
|
||||
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
|
||||
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
|
||||
@@ -1014,6 +1014,137 @@ static const struct rk_gmac_ops rk3399_o
|
||||
.set_rmii_speed = rk3399_set_rmii_speed,
|
||||
};
|
||||
|
||||
+#define RK3528_VO_GRF_GMAC_CON 0x0018
|
||||
+#define RK3528_VO_GRF_MACPHY_CON0 0x001c
|
||||
+#define RK3528_VO_GRF_MACPHY_CON1 0x0020
|
||||
+#define RK3528_VPU_GRF_GMAC_CON5 0x0018
|
||||
+#define RK3528_VPU_GRF_GMAC_CON6 0x001c
|
||||
+
|
||||
+#define RK3528_GMAC_RXCLK_DLY_ENABLE GRF_BIT(15)
|
||||
+#define RK3528_GMAC_RXCLK_DLY_DISABLE GRF_CLR_BIT(15)
|
||||
+#define RK3528_GMAC_TXCLK_DLY_ENABLE GRF_BIT(14)
|
||||
+#define RK3528_GMAC_TXCLK_DLY_DISABLE GRF_CLR_BIT(14)
|
||||
+
|
||||
+#define RK3528_GMAC_CLK_RX_DL_CFG(val) HIWORD_UPDATE(val, 0xFF, 8)
|
||||
+#define RK3528_GMAC_CLK_TX_DL_CFG(val) HIWORD_UPDATE(val, 0xFF, 0)
|
||||
+
|
||||
+#define RK3528_GMAC0_PHY_INTF_SEL_RMII GRF_BIT(1)
|
||||
+#define RK3528_GMAC1_PHY_INTF_SEL_RGMII GRF_CLR_BIT(8)
|
||||
+#define RK3528_GMAC1_PHY_INTF_SEL_RMII GRF_BIT(8)
|
||||
+
|
||||
+#define RK3528_GMAC1_CLK_SELECT_CRU GRF_CLR_BIT(12)
|
||||
+#define RK3528_GMAC1_CLK_SELECT_IO GRF_BIT(12)
|
||||
+
|
||||
+#define RK3528_GMAC0_CLK_RMII_DIV2 GRF_BIT(3)
|
||||
+#define RK3528_GMAC0_CLK_RMII_DIV20 GRF_CLR_BIT(3)
|
||||
+#define RK3528_GMAC1_CLK_RMII_DIV2 GRF_BIT(10)
|
||||
+#define RK3528_GMAC1_CLK_RMII_DIV20 GRF_CLR_BIT(10)
|
||||
+
|
||||
+#define RK3528_GMAC1_CLK_RGMII_DIV1 (GRF_CLR_BIT(11) | GRF_CLR_BIT(10))
|
||||
+#define RK3528_GMAC1_CLK_RGMII_DIV5 (GRF_BIT(11) | GRF_BIT(10))
|
||||
+#define RK3528_GMAC1_CLK_RGMII_DIV50 (GRF_BIT(11) | GRF_CLR_BIT(10))
|
||||
+
|
||||
+#define RK3528_GMAC0_CLK_RMII_GATE GRF_BIT(2)
|
||||
+#define RK3528_GMAC0_CLK_RMII_NOGATE GRF_CLR_BIT(2)
|
||||
+#define RK3528_GMAC1_CLK_RMII_GATE GRF_BIT(9)
|
||||
+#define RK3528_GMAC1_CLK_RMII_NOGATE GRF_CLR_BIT(9)
|
||||
+
|
||||
+static void rk3528_set_to_rgmii(struct rk_priv_data *bsp_priv,
|
||||
+ int tx_delay, int rx_delay)
|
||||
+{
|
||||
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON5,
|
||||
+ RK3528_GMAC1_PHY_INTF_SEL_RGMII);
|
||||
+
|
||||
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON5,
|
||||
+ DELAY_ENABLE(RK3528, tx_delay, rx_delay));
|
||||
+
|
||||
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON6,
|
||||
+ RK3528_GMAC_CLK_RX_DL_CFG(rx_delay) |
|
||||
+ RK3528_GMAC_CLK_TX_DL_CFG(tx_delay));
|
||||
+}
|
||||
+
|
||||
+static void rk3528_set_to_rmii(struct rk_priv_data *bsp_priv)
|
||||
+{
|
||||
+ if (bsp_priv->id == 1)
|
||||
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON5,
|
||||
+ RK3528_GMAC1_PHY_INTF_SEL_RMII);
|
||||
+ else
|
||||
+ regmap_write(bsp_priv->grf, RK3528_VO_GRF_GMAC_CON,
|
||||
+ RK3528_GMAC0_PHY_INTF_SEL_RMII |
|
||||
+ RK3528_GMAC0_CLK_RMII_DIV2);
|
||||
+}
|
||||
+
|
||||
+static void rk3528_set_rgmii_speed(struct rk_priv_data *bsp_priv, int speed)
|
||||
+{
|
||||
+ struct device *dev = &bsp_priv->pdev->dev;
|
||||
+
|
||||
+ if (speed == 10)
|
||||
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON5,
|
||||
+ RK3528_GMAC1_CLK_RGMII_DIV50);
|
||||
+ else if (speed == 100)
|
||||
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON5,
|
||||
+ RK3528_GMAC1_CLK_RGMII_DIV5);
|
||||
+ else if (speed == 1000)
|
||||
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON5,
|
||||
+ RK3528_GMAC1_CLK_RGMII_DIV1);
|
||||
+ else
|
||||
+ dev_err(dev, "unknown speed value for RGMII! speed=%d", speed);
|
||||
+}
|
||||
+
|
||||
+static void rk3528_set_rmii_speed(struct rk_priv_data *bsp_priv, int speed)
|
||||
+{
|
||||
+ struct device *dev = &bsp_priv->pdev->dev;
|
||||
+ unsigned int reg, val;
|
||||
+
|
||||
+ if (speed == 10)
|
||||
+ val = bsp_priv->id == 1 ? RK3528_GMAC1_CLK_RMII_DIV20 :
|
||||
+ RK3528_GMAC0_CLK_RMII_DIV20;
|
||||
+ else if (speed == 100)
|
||||
+ val = bsp_priv->id == 1 ? RK3528_GMAC1_CLK_RMII_DIV2 :
|
||||
+ RK3528_GMAC0_CLK_RMII_DIV2;
|
||||
+ else {
|
||||
+ dev_err(dev, "unknown speed value for RMII! speed=%d", speed);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ reg = bsp_priv->id == 1 ? RK3528_VPU_GRF_GMAC_CON5 :
|
||||
+ RK3528_VO_GRF_GMAC_CON;
|
||||
+
|
||||
+ regmap_write(bsp_priv->grf, reg, val);
|
||||
+}
|
||||
+
|
||||
+static void rk3528_set_clock_selection(struct rk_priv_data *bsp_priv,
|
||||
+ bool input, bool enable)
|
||||
+{
|
||||
+ unsigned int val;
|
||||
+
|
||||
+ if (bsp_priv->id == 1) {
|
||||
+ val = input ? RK3528_GMAC1_CLK_SELECT_IO :
|
||||
+ RK3528_GMAC1_CLK_SELECT_CRU;
|
||||
+ val |= enable ? RK3528_GMAC1_CLK_RMII_NOGATE :
|
||||
+ RK3528_GMAC1_CLK_RMII_GATE;
|
||||
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON5, val);
|
||||
+ } else {
|
||||
+ val = enable ? RK3528_GMAC0_CLK_RMII_NOGATE :
|
||||
+ RK3528_GMAC0_CLK_RMII_GATE;
|
||||
+ regmap_write(bsp_priv->grf, RK3528_VO_GRF_GMAC_CON, val);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static const struct rk_gmac_ops rk3528_ops = {
|
||||
+ .set_to_rgmii = rk3528_set_to_rgmii,
|
||||
+ .set_to_rmii = rk3528_set_to_rmii,
|
||||
+ .set_rgmii_speed = rk3528_set_rgmii_speed,
|
||||
+ .set_rmii_speed = rk3528_set_rmii_speed,
|
||||
+ .set_clock_selection = rk3528_set_clock_selection,
|
||||
+ .regs_valid = true,
|
||||
+ .regs = {
|
||||
+ 0xffbd0000, /* gmac0 */
|
||||
+ 0xffbe0000, /* gmac1 */
|
||||
+ 0x0, /* sentinel */
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
#define RK3568_GRF_GMAC0_CON0 0x0380
|
||||
#define RK3568_GRF_GMAC0_CON1 0x0384
|
||||
#define RK3568_GRF_GMAC1_CON0 0x0388
|
||||
@@ -2080,6 +2211,7 @@ static const struct of_device_id rk_gmac
|
||||
{ .compatible = "rockchip,rk3366-gmac", .data = &rk3366_ops },
|
||||
{ .compatible = "rockchip,rk3368-gmac", .data = &rk3368_ops },
|
||||
{ .compatible = "rockchip,rk3399-gmac", .data = &rk3399_ops },
|
||||
+ { .compatible = "rockchip,rk3528-gmac", .data = &rk3528_ops },
|
||||
{ .compatible = "rockchip,rk3568-gmac", .data = &rk3568_ops },
|
||||
{ .compatible = "rockchip,rk3576-gmac", .data = &rk3576_ops },
|
||||
{ .compatible = "rockchip,rk3588-gmac", .data = &rk3588_ops },
|
||||
|
|
@ -0,0 +1,126 @@
|
|||
From 0bed91f2b183bc38c216299ce035b44210148785 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Wed, 19 Mar 2025 21:44:07 +0000
|
||||
Subject: [PATCH] net: stmmac: dwmac-rk: Move integrated_phy_powerup/down
|
||||
functions
|
||||
|
||||
Rockchip RK3528 (and RV1106) has a different integrated PHY compared to
|
||||
the integrated PHY on RK3228/RK3328. Current powerup/down operation is
|
||||
not compatible with the integrated PHY found in these SoCs.
|
||||
|
||||
Move the rk_gmac_integrated_phy_powerup/down functions to top of the
|
||||
file to prepare for them to be called directly by a GMAC variant
|
||||
specific powerup/down operation.
|
||||
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
||||
Link: https://patch.msgid.link/20250319214415.3086027-4-jonas@kwiboo.se
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
.../net/ethernet/stmicro/stmmac/dwmac-rk.c | 88 +++++++++----------
|
||||
1 file changed, 44 insertions(+), 44 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
|
||||
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
|
||||
@@ -92,6 +92,50 @@ struct rk_priv_data {
|
||||
(((tx) ? soc##_GMAC_TXCLK_DLY_ENABLE : soc##_GMAC_TXCLK_DLY_DISABLE) | \
|
||||
((rx) ? soc##_GMAC_RXCLK_DLY_ENABLE : soc##_GMAC_RXCLK_DLY_DISABLE))
|
||||
|
||||
+#define RK_GRF_MACPHY_CON0 0xb00
|
||||
+#define RK_GRF_MACPHY_CON1 0xb04
|
||||
+#define RK_GRF_MACPHY_CON2 0xb08
|
||||
+#define RK_GRF_MACPHY_CON3 0xb0c
|
||||
+
|
||||
+#define RK_MACPHY_ENABLE GRF_BIT(0)
|
||||
+#define RK_MACPHY_DISABLE GRF_CLR_BIT(0)
|
||||
+#define RK_MACPHY_CFG_CLK_50M GRF_BIT(14)
|
||||
+#define RK_GMAC2PHY_RMII_MODE (GRF_BIT(6) | GRF_CLR_BIT(7))
|
||||
+#define RK_GRF_CON2_MACPHY_ID HIWORD_UPDATE(0x1234, 0xffff, 0)
|
||||
+#define RK_GRF_CON3_MACPHY_ID HIWORD_UPDATE(0x35, 0x3f, 0)
|
||||
+
|
||||
+static void rk_gmac_integrated_phy_powerup(struct rk_priv_data *priv)
|
||||
+{
|
||||
+ if (priv->ops->integrated_phy_powerup)
|
||||
+ priv->ops->integrated_phy_powerup(priv);
|
||||
+
|
||||
+ regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_CFG_CLK_50M);
|
||||
+ regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_GMAC2PHY_RMII_MODE);
|
||||
+
|
||||
+ regmap_write(priv->grf, RK_GRF_MACPHY_CON2, RK_GRF_CON2_MACPHY_ID);
|
||||
+ regmap_write(priv->grf, RK_GRF_MACPHY_CON3, RK_GRF_CON3_MACPHY_ID);
|
||||
+
|
||||
+ if (priv->phy_reset) {
|
||||
+ /* PHY needs to be disabled before trying to reset it */
|
||||
+ regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_DISABLE);
|
||||
+ if (priv->phy_reset)
|
||||
+ reset_control_assert(priv->phy_reset);
|
||||
+ usleep_range(10, 20);
|
||||
+ if (priv->phy_reset)
|
||||
+ reset_control_deassert(priv->phy_reset);
|
||||
+ usleep_range(10, 20);
|
||||
+ regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_ENABLE);
|
||||
+ msleep(30);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void rk_gmac_integrated_phy_powerdown(struct rk_priv_data *priv)
|
||||
+{
|
||||
+ regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_DISABLE);
|
||||
+ if (priv->phy_reset)
|
||||
+ reset_control_assert(priv->phy_reset);
|
||||
+}
|
||||
+
|
||||
#define PX30_GRF_GMAC_CON1 0x0904
|
||||
|
||||
/* PX30_GRF_GMAC_CON1 */
|
||||
@@ -1730,50 +1774,6 @@ static const struct rk_gmac_ops rv1126_o
|
||||
.set_rmii_speed = rv1126_set_rmii_speed,
|
||||
};
|
||||
|
||||
-#define RK_GRF_MACPHY_CON0 0xb00
|
||||
-#define RK_GRF_MACPHY_CON1 0xb04
|
||||
-#define RK_GRF_MACPHY_CON2 0xb08
|
||||
-#define RK_GRF_MACPHY_CON3 0xb0c
|
||||
-
|
||||
-#define RK_MACPHY_ENABLE GRF_BIT(0)
|
||||
-#define RK_MACPHY_DISABLE GRF_CLR_BIT(0)
|
||||
-#define RK_MACPHY_CFG_CLK_50M GRF_BIT(14)
|
||||
-#define RK_GMAC2PHY_RMII_MODE (GRF_BIT(6) | GRF_CLR_BIT(7))
|
||||
-#define RK_GRF_CON2_MACPHY_ID HIWORD_UPDATE(0x1234, 0xffff, 0)
|
||||
-#define RK_GRF_CON3_MACPHY_ID HIWORD_UPDATE(0x35, 0x3f, 0)
|
||||
-
|
||||
-static void rk_gmac_integrated_phy_powerup(struct rk_priv_data *priv)
|
||||
-{
|
||||
- if (priv->ops->integrated_phy_powerup)
|
||||
- priv->ops->integrated_phy_powerup(priv);
|
||||
-
|
||||
- regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_CFG_CLK_50M);
|
||||
- regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_GMAC2PHY_RMII_MODE);
|
||||
-
|
||||
- regmap_write(priv->grf, RK_GRF_MACPHY_CON2, RK_GRF_CON2_MACPHY_ID);
|
||||
- regmap_write(priv->grf, RK_GRF_MACPHY_CON3, RK_GRF_CON3_MACPHY_ID);
|
||||
-
|
||||
- if (priv->phy_reset) {
|
||||
- /* PHY needs to be disabled before trying to reset it */
|
||||
- regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_DISABLE);
|
||||
- if (priv->phy_reset)
|
||||
- reset_control_assert(priv->phy_reset);
|
||||
- usleep_range(10, 20);
|
||||
- if (priv->phy_reset)
|
||||
- reset_control_deassert(priv->phy_reset);
|
||||
- usleep_range(10, 20);
|
||||
- regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_ENABLE);
|
||||
- msleep(30);
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-static void rk_gmac_integrated_phy_powerdown(struct rk_priv_data *priv)
|
||||
-{
|
||||
- regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_DISABLE);
|
||||
- if (priv->phy_reset)
|
||||
- reset_control_assert(priv->phy_reset);
|
||||
-}
|
||||
-
|
||||
static int rk_gmac_clk_init(struct plat_stmmacenet_data *plat)
|
||||
{
|
||||
struct rk_priv_data *bsp_priv = plat->bsp_priv;
|
||||
|
|
@ -0,0 +1,112 @@
|
|||
From 32c7bc0747bbd8ee4ee32026d36a24be56117d96 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Wed, 19 Mar 2025 21:44:08 +0000
|
||||
Subject: [PATCH] net: stmmac: dwmac-rk: Add integrated_phy_powerdown operation
|
||||
|
||||
Rockchip RK3528 (and RV1106) has a different integrated PHY compared to
|
||||
the integrated PHY on RK3228/RK3328. Current powerup/down operation is
|
||||
not compatible with the integrated PHY found in these newer SoCs.
|
||||
|
||||
Add a new integrated_phy_powerdown operation and change the call chain
|
||||
for integrated_phy_powerup to prepare support for the integrated PHY
|
||||
found in these newer SoCs.
|
||||
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
||||
Link: https://patch.msgid.link/20250319214415.3086027-5-jonas@kwiboo.se
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
.../net/ethernet/stmicro/stmmac/dwmac-rk.c | 26 +++++++++++--------
|
||||
1 file changed, 15 insertions(+), 11 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
|
||||
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
|
||||
@@ -33,6 +33,7 @@ struct rk_gmac_ops {
|
||||
void (*set_clock_selection)(struct rk_priv_data *bsp_priv, bool input,
|
||||
bool enable);
|
||||
void (*integrated_phy_powerup)(struct rk_priv_data *bsp_priv);
|
||||
+ void (*integrated_phy_powerdown)(struct rk_priv_data *bsp_priv);
|
||||
bool php_grf_required;
|
||||
bool regs_valid;
|
||||
u32 regs[];
|
||||
@@ -104,11 +105,8 @@ struct rk_priv_data {
|
||||
#define RK_GRF_CON2_MACPHY_ID HIWORD_UPDATE(0x1234, 0xffff, 0)
|
||||
#define RK_GRF_CON3_MACPHY_ID HIWORD_UPDATE(0x35, 0x3f, 0)
|
||||
|
||||
-static void rk_gmac_integrated_phy_powerup(struct rk_priv_data *priv)
|
||||
+static void rk_gmac_integrated_ephy_powerup(struct rk_priv_data *priv)
|
||||
{
|
||||
- if (priv->ops->integrated_phy_powerup)
|
||||
- priv->ops->integrated_phy_powerup(priv);
|
||||
-
|
||||
regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_CFG_CLK_50M);
|
||||
regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_GMAC2PHY_RMII_MODE);
|
||||
|
||||
@@ -129,7 +127,7 @@ static void rk_gmac_integrated_phy_power
|
||||
}
|
||||
}
|
||||
|
||||
-static void rk_gmac_integrated_phy_powerdown(struct rk_priv_data *priv)
|
||||
+static void rk_gmac_integrated_ephy_powerdown(struct rk_priv_data *priv)
|
||||
{
|
||||
regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_DISABLE);
|
||||
if (priv->phy_reset)
|
||||
@@ -423,6 +421,8 @@ static void rk3228_integrated_phy_poweru
|
||||
{
|
||||
regmap_write(priv->grf, RK3228_GRF_CON_MUX,
|
||||
RK3228_GRF_CON_MUX_GMAC_INTEGRATED_PHY);
|
||||
+
|
||||
+ rk_gmac_integrated_ephy_powerup(priv);
|
||||
}
|
||||
|
||||
static const struct rk_gmac_ops rk3228_ops = {
|
||||
@@ -430,7 +430,8 @@ static const struct rk_gmac_ops rk3228_o
|
||||
.set_to_rmii = rk3228_set_to_rmii,
|
||||
.set_rgmii_speed = rk3228_set_rgmii_speed,
|
||||
.set_rmii_speed = rk3228_set_rmii_speed,
|
||||
- .integrated_phy_powerup = rk3228_integrated_phy_powerup,
|
||||
+ .integrated_phy_powerup = rk3228_integrated_phy_powerup,
|
||||
+ .integrated_phy_powerdown = rk_gmac_integrated_ephy_powerdown,
|
||||
};
|
||||
|
||||
#define RK3288_GRF_SOC_CON1 0x0248
|
||||
@@ -715,6 +716,8 @@ static void rk3328_integrated_phy_poweru
|
||||
{
|
||||
regmap_write(priv->grf, RK3328_GRF_MACPHY_CON1,
|
||||
RK3328_MACPHY_RMII_MODE);
|
||||
+
|
||||
+ rk_gmac_integrated_ephy_powerup(priv);
|
||||
}
|
||||
|
||||
static const struct rk_gmac_ops rk3328_ops = {
|
||||
@@ -722,7 +725,8 @@ static const struct rk_gmac_ops rk3328_o
|
||||
.set_to_rmii = rk3328_set_to_rmii,
|
||||
.set_rgmii_speed = rk3328_set_rgmii_speed,
|
||||
.set_rmii_speed = rk3328_set_rmii_speed,
|
||||
- .integrated_phy_powerup = rk3328_integrated_phy_powerup,
|
||||
+ .integrated_phy_powerup = rk3328_integrated_phy_powerup,
|
||||
+ .integrated_phy_powerdown = rk_gmac_integrated_ephy_powerdown,
|
||||
};
|
||||
|
||||
#define RK3366_GRF_SOC_CON6 0x0418
|
||||
@@ -2070,16 +2074,16 @@ static int rk_gmac_powerup(struct rk_pri
|
||||
|
||||
pm_runtime_get_sync(dev);
|
||||
|
||||
- if (bsp_priv->integrated_phy)
|
||||
- rk_gmac_integrated_phy_powerup(bsp_priv);
|
||||
+ if (bsp_priv->integrated_phy && bsp_priv->ops->integrated_phy_powerup)
|
||||
+ bsp_priv->ops->integrated_phy_powerup(bsp_priv);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void rk_gmac_powerdown(struct rk_priv_data *gmac)
|
||||
{
|
||||
- if (gmac->integrated_phy)
|
||||
- rk_gmac_integrated_phy_powerdown(gmac);
|
||||
+ if (gmac->integrated_phy && gmac->ops->integrated_phy_powerdown)
|
||||
+ gmac->ops->integrated_phy_powerdown(gmac);
|
||||
|
||||
pm_runtime_put_sync(&gmac->pdev->dev);
|
||||
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
From 83e7b35c7879497b51fd3fcd3a17b0b07f89e81b Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Wed, 19 Mar 2025 21:44:09 +0000
|
||||
Subject: [PATCH] net: stmmac: dwmac-rk: Add initial support for RK3528
|
||||
integrated PHY
|
||||
|
||||
Rockchip RK3528 (and RV1106) has a different integrated PHY compared to
|
||||
the integrated PHY on RK3228/RK3328. Current powerup/down operation is
|
||||
not compatible with the integrated PHY found in these newer SoCs.
|
||||
|
||||
Add operations to powerup/down the integrated PHY found in RK3528.
|
||||
Use helpers that can be used by other GMAC variants in the future.
|
||||
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
||||
Link: https://patch.msgid.link/20250319214415.3086027-6-jonas@kwiboo.se
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
.../net/ethernet/stmicro/stmmac/dwmac-rk.c | 41 +++++++++++++++++++
|
||||
1 file changed, 41 insertions(+)
|
||||
|
||||
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
|
||||
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
|
||||
@@ -134,6 +134,35 @@ static void rk_gmac_integrated_ephy_powe
|
||||
reset_control_assert(priv->phy_reset);
|
||||
}
|
||||
|
||||
+#define RK_FEPHY_SHUTDOWN GRF_BIT(1)
|
||||
+#define RK_FEPHY_POWERUP GRF_CLR_BIT(1)
|
||||
+#define RK_FEPHY_INTERNAL_RMII_SEL GRF_BIT(6)
|
||||
+#define RK_FEPHY_24M_CLK_SEL (GRF_BIT(8) | GRF_BIT(9))
|
||||
+#define RK_FEPHY_PHY_ID GRF_BIT(11)
|
||||
+
|
||||
+static void rk_gmac_integrated_fephy_powerup(struct rk_priv_data *priv,
|
||||
+ unsigned int reg)
|
||||
+{
|
||||
+ reset_control_assert(priv->phy_reset);
|
||||
+ usleep_range(20, 30);
|
||||
+
|
||||
+ regmap_write(priv->grf, reg,
|
||||
+ RK_FEPHY_POWERUP |
|
||||
+ RK_FEPHY_INTERNAL_RMII_SEL |
|
||||
+ RK_FEPHY_24M_CLK_SEL |
|
||||
+ RK_FEPHY_PHY_ID);
|
||||
+ usleep_range(10000, 12000);
|
||||
+
|
||||
+ reset_control_deassert(priv->phy_reset);
|
||||
+ usleep_range(50000, 60000);
|
||||
+}
|
||||
+
|
||||
+static void rk_gmac_integrated_fephy_powerdown(struct rk_priv_data *priv,
|
||||
+ unsigned int reg)
|
||||
+{
|
||||
+ regmap_write(priv->grf, reg, RK_FEPHY_SHUTDOWN);
|
||||
+}
|
||||
+
|
||||
#define PX30_GRF_GMAC_CON1 0x0904
|
||||
|
||||
/* PX30_GRF_GMAC_CON1 */
|
||||
@@ -1179,12 +1208,24 @@ static void rk3528_set_clock_selection(s
|
||||
}
|
||||
}
|
||||
|
||||
+static void rk3528_integrated_phy_powerup(struct rk_priv_data *bsp_priv)
|
||||
+{
|
||||
+ rk_gmac_integrated_fephy_powerup(bsp_priv, RK3528_VO_GRF_MACPHY_CON0);
|
||||
+}
|
||||
+
|
||||
+static void rk3528_integrated_phy_powerdown(struct rk_priv_data *bsp_priv)
|
||||
+{
|
||||
+ rk_gmac_integrated_fephy_powerdown(bsp_priv, RK3528_VO_GRF_MACPHY_CON0);
|
||||
+}
|
||||
+
|
||||
static const struct rk_gmac_ops rk3528_ops = {
|
||||
.set_to_rgmii = rk3528_set_to_rgmii,
|
||||
.set_to_rmii = rk3528_set_to_rmii,
|
||||
.set_rgmii_speed = rk3528_set_rgmii_speed,
|
||||
.set_rmii_speed = rk3528_set_rmii_speed,
|
||||
.set_clock_selection = rk3528_set_clock_selection,
|
||||
+ .integrated_phy_powerup = rk3528_integrated_phy_powerup,
|
||||
+ .integrated_phy_powerdown = rk3528_integrated_phy_powerdown,
|
||||
.regs_valid = true,
|
||||
.regs = {
|
||||
0xffbd0000, /* gmac0 */
|
||||
|
|
@ -0,0 +1,572 @@
|
|||
From 41f35564cb71e7043e0afcf30078b4a6145cab64 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sat, 8 Mar 2025 21:37:15 +0000
|
||||
Subject: [PATCH] net: stmmac: dwmac-rk: Remove unneeded GRF and peripheral GRF
|
||||
checks
|
||||
|
||||
Now that GRF, and peripheral GRF where needed, is validated at probe
|
||||
time there is no longer any need to check and log an error in each SoC
|
||||
specific operation.
|
||||
|
||||
Remove unneeded IS_ERR() checks and early bail out from each SoC
|
||||
specific operation.
|
||||
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
Reviewed-by: Simon Horman <horms@kernel.org>
|
||||
Link: https://patch.msgid.link/20250308213720.2517944-4-jonas@kwiboo.se
|
||||
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
---
|
||||
.../net/ethernet/stmicro/stmmac/dwmac-rk.c | 249 ------------------
|
||||
1 file changed, 249 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
|
||||
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
|
||||
@@ -173,13 +173,6 @@ static void rk_gmac_integrated_fephy_pow
|
||||
|
||||
static void px30_set_to_rmii(struct rk_priv_data *bsp_priv)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
-
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "%s: Missing rockchip,grf property\n", __func__);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
regmap_write(bsp_priv->grf, PX30_GRF_GMAC_CON1,
|
||||
PX30_GMAC_PHY_INTF_SEL_RMII);
|
||||
}
|
||||
@@ -253,13 +246,6 @@ static const struct rk_gmac_ops px30_ops
|
||||
static void rk3128_set_to_rgmii(struct rk_priv_data *bsp_priv,
|
||||
int tx_delay, int rx_delay)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
-
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
regmap_write(bsp_priv->grf, RK3128_GRF_MAC_CON1,
|
||||
RK3128_GMAC_PHY_INTF_SEL_RGMII |
|
||||
RK3128_GMAC_RMII_MODE_CLR);
|
||||
@@ -271,13 +257,6 @@ static void rk3128_set_to_rgmii(struct r
|
||||
|
||||
static void rk3128_set_to_rmii(struct rk_priv_data *bsp_priv)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
-
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
regmap_write(bsp_priv->grf, RK3128_GRF_MAC_CON1,
|
||||
RK3128_GMAC_PHY_INTF_SEL_RMII | RK3128_GMAC_RMII_MODE);
|
||||
}
|
||||
@@ -286,11 +265,6 @@ static void rk3128_set_rgmii_speed(struc
|
||||
{
|
||||
struct device *dev = &bsp_priv->pdev->dev;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
if (speed == 10)
|
||||
regmap_write(bsp_priv->grf, RK3128_GRF_MAC_CON1,
|
||||
RK3128_GMAC_CLK_2_5M);
|
||||
@@ -308,11 +282,6 @@ static void rk3128_set_rmii_speed(struct
|
||||
{
|
||||
struct device *dev = &bsp_priv->pdev->dev;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
if (speed == 10) {
|
||||
regmap_write(bsp_priv->grf, RK3128_GRF_MAC_CON1,
|
||||
RK3128_GMAC_RMII_CLK_2_5M |
|
||||
@@ -369,13 +338,6 @@ static const struct rk_gmac_ops rk3128_o
|
||||
static void rk3228_set_to_rgmii(struct rk_priv_data *bsp_priv,
|
||||
int tx_delay, int rx_delay)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
-
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
regmap_write(bsp_priv->grf, RK3228_GRF_MAC_CON1,
|
||||
RK3228_GMAC_PHY_INTF_SEL_RGMII |
|
||||
RK3228_GMAC_RMII_MODE_CLR |
|
||||
@@ -388,13 +350,6 @@ static void rk3228_set_to_rgmii(struct r
|
||||
|
||||
static void rk3228_set_to_rmii(struct rk_priv_data *bsp_priv)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
-
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
regmap_write(bsp_priv->grf, RK3228_GRF_MAC_CON1,
|
||||
RK3228_GMAC_PHY_INTF_SEL_RMII |
|
||||
RK3228_GMAC_RMII_MODE);
|
||||
@@ -407,11 +362,6 @@ static void rk3228_set_rgmii_speed(struc
|
||||
{
|
||||
struct device *dev = &bsp_priv->pdev->dev;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
if (speed == 10)
|
||||
regmap_write(bsp_priv->grf, RK3228_GRF_MAC_CON1,
|
||||
RK3228_GMAC_CLK_2_5M);
|
||||
@@ -429,11 +379,6 @@ static void rk3228_set_rmii_speed(struct
|
||||
{
|
||||
struct device *dev = &bsp_priv->pdev->dev;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
if (speed == 10)
|
||||
regmap_write(bsp_priv->grf, RK3228_GRF_MAC_CON1,
|
||||
RK3228_GMAC_RMII_CLK_2_5M |
|
||||
@@ -494,13 +439,6 @@ static const struct rk_gmac_ops rk3228_o
|
||||
static void rk3288_set_to_rgmii(struct rk_priv_data *bsp_priv,
|
||||
int tx_delay, int rx_delay)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
-
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
regmap_write(bsp_priv->grf, RK3288_GRF_SOC_CON1,
|
||||
RK3288_GMAC_PHY_INTF_SEL_RGMII |
|
||||
RK3288_GMAC_RMII_MODE_CLR);
|
||||
@@ -512,13 +450,6 @@ static void rk3288_set_to_rgmii(struct r
|
||||
|
||||
static void rk3288_set_to_rmii(struct rk_priv_data *bsp_priv)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
-
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
regmap_write(bsp_priv->grf, RK3288_GRF_SOC_CON1,
|
||||
RK3288_GMAC_PHY_INTF_SEL_RMII | RK3288_GMAC_RMII_MODE);
|
||||
}
|
||||
@@ -527,11 +458,6 @@ static void rk3288_set_rgmii_speed(struc
|
||||
{
|
||||
struct device *dev = &bsp_priv->pdev->dev;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
if (speed == 10)
|
||||
regmap_write(bsp_priv->grf, RK3288_GRF_SOC_CON1,
|
||||
RK3288_GMAC_CLK_2_5M);
|
||||
@@ -549,11 +475,6 @@ static void rk3288_set_rmii_speed(struct
|
||||
{
|
||||
struct device *dev = &bsp_priv->pdev->dev;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
if (speed == 10) {
|
||||
regmap_write(bsp_priv->grf, RK3288_GRF_SOC_CON1,
|
||||
RK3288_GMAC_RMII_CLK_2_5M |
|
||||
@@ -586,13 +507,6 @@ static const struct rk_gmac_ops rk3288_o
|
||||
|
||||
static void rk3308_set_to_rmii(struct rk_priv_data *bsp_priv)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
-
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
regmap_write(bsp_priv->grf, RK3308_GRF_MAC_CON0,
|
||||
RK3308_GMAC_PHY_INTF_SEL_RMII);
|
||||
}
|
||||
@@ -601,11 +515,6 @@ static void rk3308_set_rmii_speed(struct
|
||||
{
|
||||
struct device *dev = &bsp_priv->pdev->dev;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
if (speed == 10) {
|
||||
regmap_write(bsp_priv->grf, RK3308_GRF_MAC_CON0,
|
||||
RK3308_GMAC_SPEED_10M);
|
||||
@@ -658,13 +567,6 @@ static const struct rk_gmac_ops rk3308_o
|
||||
static void rk3328_set_to_rgmii(struct rk_priv_data *bsp_priv,
|
||||
int tx_delay, int rx_delay)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
-
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
regmap_write(bsp_priv->grf, RK3328_GRF_MAC_CON1,
|
||||
RK3328_GMAC_PHY_INTF_SEL_RGMII |
|
||||
RK3328_GMAC_RMII_MODE_CLR |
|
||||
@@ -678,14 +580,8 @@ static void rk3328_set_to_rgmii(struct r
|
||||
|
||||
static void rk3328_set_to_rmii(struct rk_priv_data *bsp_priv)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
unsigned int reg;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
reg = bsp_priv->integrated_phy ? RK3328_GRF_MAC_CON2 :
|
||||
RK3328_GRF_MAC_CON1;
|
||||
|
||||
@@ -698,11 +594,6 @@ static void rk3328_set_rgmii_speed(struc
|
||||
{
|
||||
struct device *dev = &bsp_priv->pdev->dev;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
if (speed == 10)
|
||||
regmap_write(bsp_priv->grf, RK3328_GRF_MAC_CON1,
|
||||
RK3328_GMAC_CLK_2_5M);
|
||||
@@ -721,11 +612,6 @@ static void rk3328_set_rmii_speed(struct
|
||||
struct device *dev = &bsp_priv->pdev->dev;
|
||||
unsigned int reg;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
reg = bsp_priv->integrated_phy ? RK3328_GRF_MAC_CON2 :
|
||||
RK3328_GRF_MAC_CON1;
|
||||
|
||||
@@ -789,13 +675,6 @@ static const struct rk_gmac_ops rk3328_o
|
||||
static void rk3366_set_to_rgmii(struct rk_priv_data *bsp_priv,
|
||||
int tx_delay, int rx_delay)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
-
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "%s: Missing rockchip,grf property\n", __func__);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
regmap_write(bsp_priv->grf, RK3366_GRF_SOC_CON6,
|
||||
RK3366_GMAC_PHY_INTF_SEL_RGMII |
|
||||
RK3366_GMAC_RMII_MODE_CLR);
|
||||
@@ -807,13 +686,6 @@ static void rk3366_set_to_rgmii(struct r
|
||||
|
||||
static void rk3366_set_to_rmii(struct rk_priv_data *bsp_priv)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
-
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "%s: Missing rockchip,grf property\n", __func__);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
regmap_write(bsp_priv->grf, RK3366_GRF_SOC_CON6,
|
||||
RK3366_GMAC_PHY_INTF_SEL_RMII | RK3366_GMAC_RMII_MODE);
|
||||
}
|
||||
@@ -822,11 +694,6 @@ static void rk3366_set_rgmii_speed(struc
|
||||
{
|
||||
struct device *dev = &bsp_priv->pdev->dev;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "%s: Missing rockchip,grf property\n", __func__);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
if (speed == 10)
|
||||
regmap_write(bsp_priv->grf, RK3366_GRF_SOC_CON6,
|
||||
RK3366_GMAC_CLK_2_5M);
|
||||
@@ -844,11 +711,6 @@ static void rk3366_set_rmii_speed(struct
|
||||
{
|
||||
struct device *dev = &bsp_priv->pdev->dev;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "%s: Missing rockchip,grf property\n", __func__);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
if (speed == 10) {
|
||||
regmap_write(bsp_priv->grf, RK3366_GRF_SOC_CON6,
|
||||
RK3366_GMAC_RMII_CLK_2_5M |
|
||||
@@ -900,13 +762,6 @@ static const struct rk_gmac_ops rk3366_o
|
||||
static void rk3368_set_to_rgmii(struct rk_priv_data *bsp_priv,
|
||||
int tx_delay, int rx_delay)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
-
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "%s: Missing rockchip,grf property\n", __func__);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
regmap_write(bsp_priv->grf, RK3368_GRF_SOC_CON15,
|
||||
RK3368_GMAC_PHY_INTF_SEL_RGMII |
|
||||
RK3368_GMAC_RMII_MODE_CLR);
|
||||
@@ -918,13 +773,6 @@ static void rk3368_set_to_rgmii(struct r
|
||||
|
||||
static void rk3368_set_to_rmii(struct rk_priv_data *bsp_priv)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
-
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "%s: Missing rockchip,grf property\n", __func__);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
regmap_write(bsp_priv->grf, RK3368_GRF_SOC_CON15,
|
||||
RK3368_GMAC_PHY_INTF_SEL_RMII | RK3368_GMAC_RMII_MODE);
|
||||
}
|
||||
@@ -933,11 +781,6 @@ static void rk3368_set_rgmii_speed(struc
|
||||
{
|
||||
struct device *dev = &bsp_priv->pdev->dev;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "%s: Missing rockchip,grf property\n", __func__);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
if (speed == 10)
|
||||
regmap_write(bsp_priv->grf, RK3368_GRF_SOC_CON15,
|
||||
RK3368_GMAC_CLK_2_5M);
|
||||
@@ -955,11 +798,6 @@ static void rk3368_set_rmii_speed(struct
|
||||
{
|
||||
struct device *dev = &bsp_priv->pdev->dev;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "%s: Missing rockchip,grf property\n", __func__);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
if (speed == 10) {
|
||||
regmap_write(bsp_priv->grf, RK3368_GRF_SOC_CON15,
|
||||
RK3368_GMAC_RMII_CLK_2_5M |
|
||||
@@ -1011,13 +849,6 @@ static const struct rk_gmac_ops rk3368_o
|
||||
static void rk3399_set_to_rgmii(struct rk_priv_data *bsp_priv,
|
||||
int tx_delay, int rx_delay)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
-
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "%s: Missing rockchip,grf property\n", __func__);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
regmap_write(bsp_priv->grf, RK3399_GRF_SOC_CON5,
|
||||
RK3399_GMAC_PHY_INTF_SEL_RGMII |
|
||||
RK3399_GMAC_RMII_MODE_CLR);
|
||||
@@ -1029,13 +860,6 @@ static void rk3399_set_to_rgmii(struct r
|
||||
|
||||
static void rk3399_set_to_rmii(struct rk_priv_data *bsp_priv)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
-
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "%s: Missing rockchip,grf property\n", __func__);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
regmap_write(bsp_priv->grf, RK3399_GRF_SOC_CON5,
|
||||
RK3399_GMAC_PHY_INTF_SEL_RMII | RK3399_GMAC_RMII_MODE);
|
||||
}
|
||||
@@ -1044,11 +868,6 @@ static void rk3399_set_rgmii_speed(struc
|
||||
{
|
||||
struct device *dev = &bsp_priv->pdev->dev;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "%s: Missing rockchip,grf property\n", __func__);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
if (speed == 10)
|
||||
regmap_write(bsp_priv->grf, RK3399_GRF_SOC_CON5,
|
||||
RK3399_GMAC_CLK_2_5M);
|
||||
@@ -1066,11 +885,6 @@ static void rk3399_set_rmii_speed(struct
|
||||
{
|
||||
struct device *dev = &bsp_priv->pdev->dev;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "%s: Missing rockchip,grf property\n", __func__);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
if (speed == 10) {
|
||||
regmap_write(bsp_priv->grf, RK3399_GRF_SOC_CON5,
|
||||
RK3399_GMAC_RMII_CLK_2_5M |
|
||||
@@ -1258,14 +1072,8 @@ static const struct rk_gmac_ops rk3528_o
|
||||
static void rk3568_set_to_rgmii(struct rk_priv_data *bsp_priv,
|
||||
int tx_delay, int rx_delay)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
u32 con0, con1;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
con0 = (bsp_priv->id == 1) ? RK3568_GRF_GMAC1_CON0 :
|
||||
RK3568_GRF_GMAC0_CON0;
|
||||
con1 = (bsp_priv->id == 1) ? RK3568_GRF_GMAC1_CON1 :
|
||||
@@ -1283,14 +1091,8 @@ static void rk3568_set_to_rgmii(struct r
|
||||
|
||||
static void rk3568_set_to_rmii(struct rk_priv_data *bsp_priv)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
u32 con1;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "%s: Missing rockchip,grf property\n", __func__);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
con1 = (bsp_priv->id == 1) ? RK3568_GRF_GMAC1_CON1 :
|
||||
RK3568_GRF_GMAC0_CON1;
|
||||
regmap_write(bsp_priv->grf, con1, RK3568_GMAC_PHY_INTF_SEL_RMII);
|
||||
@@ -1377,14 +1179,8 @@ static const struct rk_gmac_ops rk3568_o
|
||||
static void rk3576_set_to_rgmii(struct rk_priv_data *bsp_priv,
|
||||
int tx_delay, int rx_delay)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
unsigned int offset_con;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf) || IS_ERR(bsp_priv->php_grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf or rockchip,php-grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
offset_con = bsp_priv->id == 1 ? RK3576_GRF_GMAC_CON1 :
|
||||
RK3576_GRF_GMAC_CON0;
|
||||
|
||||
@@ -1410,14 +1206,8 @@ static void rk3576_set_to_rgmii(struct r
|
||||
|
||||
static void rk3576_set_to_rmii(struct rk_priv_data *bsp_priv)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
unsigned int offset_con;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "%s: Missing rockchip,grf property\n", __func__);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
offset_con = bsp_priv->id == 1 ? RK3576_GRF_GMAC_CON1 :
|
||||
RK3576_GRF_GMAC_CON0;
|
||||
|
||||
@@ -1537,14 +1327,8 @@ static const struct rk_gmac_ops rk3576_o
|
||||
static void rk3588_set_to_rgmii(struct rk_priv_data *bsp_priv,
|
||||
int tx_delay, int rx_delay)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
u32 offset_con, id = bsp_priv->id;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf) || IS_ERR(bsp_priv->php_grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf or rockchip,php_grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
offset_con = bsp_priv->id == 1 ? RK3588_GRF_GMAC_CON9 :
|
||||
RK3588_GRF_GMAC_CON8;
|
||||
|
||||
@@ -1565,13 +1349,6 @@ static void rk3588_set_to_rgmii(struct r
|
||||
|
||||
static void rk3588_set_to_rmii(struct rk_priv_data *bsp_priv)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
-
|
||||
- if (IS_ERR(bsp_priv->php_grf)) {
|
||||
- dev_err(dev, "%s: Missing rockchip,php_grf property\n", __func__);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
regmap_write(bsp_priv->php_grf, RK3588_GRF_GMAC_CON0,
|
||||
RK3588_GMAC_PHY_INTF_SEL_RMII(bsp_priv->id));
|
||||
|
||||
@@ -1655,13 +1432,6 @@ static const struct rk_gmac_ops rk3588_o
|
||||
|
||||
static void rv1108_set_to_rmii(struct rk_priv_data *bsp_priv)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
-
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "%s: Missing rockchip,grf property\n", __func__);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
regmap_write(bsp_priv->grf, RV1108_GRF_GMAC_CON0,
|
||||
RV1108_GMAC_PHY_INTF_SEL_RMII);
|
||||
}
|
||||
@@ -1670,11 +1440,6 @@ static void rv1108_set_rmii_speed(struct
|
||||
{
|
||||
struct device *dev = &bsp_priv->pdev->dev;
|
||||
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "%s: Missing rockchip,grf property\n", __func__);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
if (speed == 10) {
|
||||
regmap_write(bsp_priv->grf, RV1108_GRF_GMAC_CON0,
|
||||
RV1108_GMAC_RMII_CLK_2_5M |
|
||||
@@ -1723,13 +1488,6 @@ static const struct rk_gmac_ops rv1108_o
|
||||
static void rv1126_set_to_rgmii(struct rk_priv_data *bsp_priv,
|
||||
int tx_delay, int rx_delay)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
-
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "Missing rockchip,grf property\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
regmap_write(bsp_priv->grf, RV1126_GRF_GMAC_CON0,
|
||||
RV1126_GMAC_PHY_INTF_SEL_RGMII |
|
||||
RV1126_GMAC_M0_RXCLK_DLY_ENABLE |
|
||||
@@ -1748,13 +1506,6 @@ static void rv1126_set_to_rgmii(struct r
|
||||
|
||||
static void rv1126_set_to_rmii(struct rk_priv_data *bsp_priv)
|
||||
{
|
||||
- struct device *dev = &bsp_priv->pdev->dev;
|
||||
-
|
||||
- if (IS_ERR(bsp_priv->grf)) {
|
||||
- dev_err(dev, "%s: Missing rockchip,grf property\n", __func__);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
regmap_write(bsp_priv->grf, RV1126_GRF_GMAC_CON0,
|
||||
RV1126_GMAC_PHY_INTF_SEL_RMII);
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue