forked from coolsnowwolf/lede
-
Notifications
You must be signed in to change notification settings - Fork 67
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
rockchip: backport upstream rk3576 support for kernel 6.6
- Loading branch information
1 parent
8decff2
commit ab8cac3
Showing
40 changed files
with
13,674 additions
and
63 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
73 changes: 73 additions & 0 deletions
73
...ux/rockchip/patches-6.6/030-09-v6.12-soc-rockchip-grf-Add-rk3576-default-GRF-values.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
From e1aaecacfa135cd264a0db331d3ab8b2a04a54a3 Mon Sep 17 00:00:00 2001 | ||
From: Detlev Casanova <[email protected]> | ||
Date: Thu, 22 Aug 2024 15:53:37 -0400 | ||
Subject: [PATCH] soc: rockchip: grf: Add rk3576 default GRF values | ||
|
||
Set SW controlled i3c weak pull up and disable JTAG function on SDMMC IO. | ||
|
||
The i3c weak pull up is activated to let all gpio banks be controlled | ||
by the pinctrl driver. | ||
|
||
Disabling the JTAG function lets the SDMMC core use its full IO width. | ||
|
||
Signed-off-by: Detlev Casanova <[email protected]> | ||
Acked-by: Dragan Simic <[email protected]> | ||
Link: https://lore.kernel.org/r/[email protected] | ||
Signed-off-by: Heiko Stuebner <[email protected]> | ||
--- | ||
drivers/soc/rockchip/grf.c | 30 +++++++++++++++++++++++++++++- | ||
1 file changed, 29 insertions(+), 1 deletion(-) | ||
|
||
--- a/drivers/soc/rockchip/grf.c | ||
+++ b/drivers/soc/rockchip/grf.c | ||
@@ -121,6 +121,29 @@ static const struct rockchip_grf_info rk | ||
.num_values = ARRAY_SIZE(rk3566_defaults), | ||
}; | ||
|
||
+#define RK3576_SYSGRF_SOC_CON1 0x0004 | ||
+ | ||
+static const struct rockchip_grf_value rk3576_defaults_sys_grf[] __initconst = { | ||
+ { "i3c0 weakpull", RK3576_SYSGRF_SOC_CON1, HIWORD_UPDATE(3, 3, 6) }, | ||
+ { "i3c1 weakpull", RK3576_SYSGRF_SOC_CON1, HIWORD_UPDATE(3, 3, 8) }, | ||
+}; | ||
+ | ||
+static const struct rockchip_grf_info rk3576_sysgrf __initconst = { | ||
+ .values = rk3576_defaults_sys_grf, | ||
+ .num_values = ARRAY_SIZE(rk3576_defaults_sys_grf), | ||
+}; | ||
+ | ||
+#define RK3576_IOCGRF_MISC_CON 0x04F0 | ||
+ | ||
+static const struct rockchip_grf_value rk3576_defaults_ioc_grf[] __initconst = { | ||
+ { "jtag switching", RK3576_IOCGRF_MISC_CON, HIWORD_UPDATE(0, 1, 1) }, | ||
+}; | ||
+ | ||
+static const struct rockchip_grf_info rk3576_iocgrf __initconst = { | ||
+ .values = rk3576_defaults_ioc_grf, | ||
+ .num_values = ARRAY_SIZE(rk3576_defaults_ioc_grf), | ||
+}; | ||
+ | ||
#define RK3588_GRF_SOC_CON6 0x0318 | ||
|
||
static const struct rockchip_grf_value rk3588_defaults[] __initconst = { | ||
@@ -132,7 +155,6 @@ static const struct rockchip_grf_info rk | ||
.num_values = ARRAY_SIZE(rk3588_defaults), | ||
}; | ||
|
||
- | ||
static const struct of_device_id rockchip_grf_dt_match[] __initconst = { | ||
{ | ||
.compatible = "rockchip,rk3036-grf", | ||
@@ -159,6 +181,12 @@ static const struct of_device_id rockchi | ||
.compatible = "rockchip,rk3566-pipe-grf", | ||
.data = (void *)&rk3566_pipegrf, | ||
}, { | ||
+ .compatible = "rockchip,rk3576-sys-grf", | ||
+ .data = (void *)&rk3576_sysgrf, | ||
+ }, { | ||
+ .compatible = "rockchip,rk3576-ioc-grf", | ||
+ .data = (void *)&rk3576_iocgrf, | ||
+ }, { | ||
.compatible = "rockchip,rk3588-sys-grf", | ||
.data = (void *)&rk3588_sysgrf, | ||
}, |
307 changes: 307 additions & 0 deletions
307
...linux/rockchip/patches-6.6/030-10-v6.12-pinctrl-rockchip-Add-rk3576-pinctrl-support.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,307 @@ | ||
From 69c6343ed03486c86271c7a4fdd5a2af4637c38b Mon Sep 17 00:00:00 2001 | ||
From: Steven Liu <[email protected]> | ||
Date: Thu, 22 Aug 2024 15:53:39 -0400 | ||
Subject: [PATCH] pinctrl: rockchip: Add rk3576 pinctrl support | ||
|
||
Add support for the 5 rk3576 GPIO banks. | ||
|
||
Signed-off-by: Steven Liu <[email protected]> | ||
Signed-off-by: Detlev Casanova <[email protected]> | ||
Acked-by: Dragan Simic <[email protected]> | ||
Reviewed-by: Heiko Stuebner <[email protected]> | ||
Link: https://lore.kernel.org/[email protected] | ||
Signed-off-by: Linus Walleij <[email protected]> | ||
--- | ||
drivers/pinctrl/pinctrl-rockchip.c | 207 +++++++++++++++++++++++++++++ | ||
drivers/pinctrl/pinctrl-rockchip.h | 1 + | ||
2 files changed, 208 insertions(+) | ||
|
||
--- a/drivers/pinctrl/pinctrl-rockchip.c | ||
+++ b/drivers/pinctrl/pinctrl-rockchip.c | ||
@@ -84,6 +84,27 @@ | ||
}, \ | ||
} | ||
|
||
+#define PIN_BANK_IOMUX_FLAGS_OFFSET_PULL_FLAGS(id, pins, label, iom0, \ | ||
+ iom1, iom2, iom3, \ | ||
+ offset0, offset1, \ | ||
+ offset2, offset3, pull0, \ | ||
+ pull1, pull2, pull3) \ | ||
+ { \ | ||
+ .bank_num = id, \ | ||
+ .nr_pins = pins, \ | ||
+ .name = label, \ | ||
+ .iomux = { \ | ||
+ { .type = iom0, .offset = offset0 }, \ | ||
+ { .type = iom1, .offset = offset1 }, \ | ||
+ { .type = iom2, .offset = offset2 }, \ | ||
+ { .type = iom3, .offset = offset3 }, \ | ||
+ }, \ | ||
+ .pull_type[0] = pull0, \ | ||
+ .pull_type[1] = pull1, \ | ||
+ .pull_type[2] = pull2, \ | ||
+ .pull_type[3] = pull3, \ | ||
+ } | ||
+ | ||
#define PIN_BANK_DRV_FLAGS(id, pins, label, type0, type1, type2, type3) \ | ||
{ \ | ||
.bank_num = id, \ | ||
@@ -1120,6 +1141,11 @@ static int rockchip_get_mux(struct rockc | ||
if (bank->recalced_mask & BIT(pin)) | ||
rockchip_get_recalced_mux(bank, pin, ®, &bit, &mask); | ||
|
||
+ if (ctrl->type == RK3576) { | ||
+ if ((bank->bank_num == 0) && (pin >= RK_PB4) && (pin <= RK_PB7)) | ||
+ reg += 0x1ff4; /* GPIO0_IOC_GPIO0B_IOMUX_SEL_H */ | ||
+ } | ||
+ | ||
if (ctrl->type == RK3588) { | ||
if (bank->bank_num == 0) { | ||
if ((pin >= RK_PB4) && (pin <= RK_PD7)) { | ||
@@ -1234,6 +1260,11 @@ static int rockchip_set_mux(struct rockc | ||
if (bank->recalced_mask & BIT(pin)) | ||
rockchip_get_recalced_mux(bank, pin, ®, &bit, &mask); | ||
|
||
+ if (ctrl->type == RK3576) { | ||
+ if ((bank->bank_num == 0) && (pin >= RK_PB4) && (pin <= RK_PB7)) | ||
+ reg += 0x1ff4; /* GPIO0_IOC_GPIO0B_IOMUX_SEL_H */ | ||
+ } | ||
+ | ||
if (ctrl->type == RK3588) { | ||
if (bank->bank_num == 0) { | ||
if ((pin >= RK_PB4) && (pin <= RK_PD7)) { | ||
@@ -2038,6 +2069,142 @@ static int rk3568_calc_drv_reg_and_bit(s | ||
return 0; | ||
} | ||
|
||
+#define RK3576_DRV_BITS_PER_PIN 4 | ||
+#define RK3576_DRV_PINS_PER_REG 4 | ||
+#define RK3576_DRV_GPIO0_AL_OFFSET 0x10 | ||
+#define RK3576_DRV_GPIO0_BH_OFFSET 0x2014 | ||
+#define RK3576_DRV_GPIO1_OFFSET 0x6020 | ||
+#define RK3576_DRV_GPIO2_OFFSET 0x6040 | ||
+#define RK3576_DRV_GPIO3_OFFSET 0x6060 | ||
+#define RK3576_DRV_GPIO4_AL_OFFSET 0x6080 | ||
+#define RK3576_DRV_GPIO4_CL_OFFSET 0xA090 | ||
+#define RK3576_DRV_GPIO4_DL_OFFSET 0xB098 | ||
+ | ||
+static int rk3576_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 && pin_num < 12) | ||
+ *reg = RK3576_DRV_GPIO0_AL_OFFSET; | ||
+ else if (bank->bank_num == 0) | ||
+ *reg = RK3576_DRV_GPIO0_BH_OFFSET - 0xc; | ||
+ else if (bank->bank_num == 1) | ||
+ *reg = RK3576_DRV_GPIO1_OFFSET; | ||
+ else if (bank->bank_num == 2) | ||
+ *reg = RK3576_DRV_GPIO2_OFFSET; | ||
+ else if (bank->bank_num == 3) | ||
+ *reg = RK3576_DRV_GPIO3_OFFSET; | ||
+ else if (bank->bank_num == 4 && pin_num < 16) | ||
+ *reg = RK3576_DRV_GPIO4_AL_OFFSET; | ||
+ else if (bank->bank_num == 4 && pin_num < 24) | ||
+ *reg = RK3576_DRV_GPIO4_CL_OFFSET - 0x10; | ||
+ else if (bank->bank_num == 4) | ||
+ *reg = RK3576_DRV_GPIO4_DL_OFFSET - 0x18; | ||
+ else | ||
+ dev_err(info->dev, "unsupported bank_num %d\n", bank->bank_num); | ||
+ | ||
+ *reg += ((pin_num / RK3576_DRV_PINS_PER_REG) * 4); | ||
+ *bit = pin_num % RK3576_DRV_PINS_PER_REG; | ||
+ *bit *= RK3576_DRV_BITS_PER_PIN; | ||
+ | ||
+ return 0; | ||
+} | ||
+ | ||
+#define RK3576_PULL_BITS_PER_PIN 2 | ||
+#define RK3576_PULL_PINS_PER_REG 8 | ||
+#define RK3576_PULL_GPIO0_AL_OFFSET 0x20 | ||
+#define RK3576_PULL_GPIO0_BH_OFFSET 0x2028 | ||
+#define RK3576_PULL_GPIO1_OFFSET 0x6110 | ||
+#define RK3576_PULL_GPIO2_OFFSET 0x6120 | ||
+#define RK3576_PULL_GPIO3_OFFSET 0x6130 | ||
+#define RK3576_PULL_GPIO4_AL_OFFSET 0x6140 | ||
+#define RK3576_PULL_GPIO4_CL_OFFSET 0xA148 | ||
+#define RK3576_PULL_GPIO4_DL_OFFSET 0xB14C | ||
+ | ||
+static int rk3576_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 && pin_num < 12) | ||
+ *reg = RK3576_PULL_GPIO0_AL_OFFSET; | ||
+ else if (bank->bank_num == 0) | ||
+ *reg = RK3576_PULL_GPIO0_BH_OFFSET - 0x4; | ||
+ else if (bank->bank_num == 1) | ||
+ *reg = RK3576_PULL_GPIO1_OFFSET; | ||
+ else if (bank->bank_num == 2) | ||
+ *reg = RK3576_PULL_GPIO2_OFFSET; | ||
+ else if (bank->bank_num == 3) | ||
+ *reg = RK3576_PULL_GPIO3_OFFSET; | ||
+ else if (bank->bank_num == 4 && pin_num < 16) | ||
+ *reg = RK3576_PULL_GPIO4_AL_OFFSET; | ||
+ else if (bank->bank_num == 4 && pin_num < 24) | ||
+ *reg = RK3576_PULL_GPIO4_CL_OFFSET - 0x8; | ||
+ else if (bank->bank_num == 4) | ||
+ *reg = RK3576_PULL_GPIO4_DL_OFFSET - 0xc; | ||
+ else | ||
+ dev_err(info->dev, "unsupported bank_num %d\n", bank->bank_num); | ||
+ | ||
+ *reg += ((pin_num / RK3576_PULL_PINS_PER_REG) * 4); | ||
+ *bit = pin_num % RK3576_PULL_PINS_PER_REG; | ||
+ *bit *= RK3576_PULL_BITS_PER_PIN; | ||
+ | ||
+ return 0; | ||
+} | ||
+ | ||
+#define RK3576_SMT_BITS_PER_PIN 1 | ||
+#define RK3576_SMT_PINS_PER_REG 8 | ||
+#define RK3576_SMT_GPIO0_AL_OFFSET 0x30 | ||
+#define RK3576_SMT_GPIO0_BH_OFFSET 0x2040 | ||
+#define RK3576_SMT_GPIO1_OFFSET 0x6210 | ||
+#define RK3576_SMT_GPIO2_OFFSET 0x6220 | ||
+#define RK3576_SMT_GPIO3_OFFSET 0x6230 | ||
+#define RK3576_SMT_GPIO4_AL_OFFSET 0x6240 | ||
+#define RK3576_SMT_GPIO4_CL_OFFSET 0xA248 | ||
+#define RK3576_SMT_GPIO4_DL_OFFSET 0xB24C | ||
+ | ||
+static int rk3576_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 && pin_num < 12) | ||
+ *reg = RK3576_SMT_GPIO0_AL_OFFSET; | ||
+ else if (bank->bank_num == 0) | ||
+ *reg = RK3576_SMT_GPIO0_BH_OFFSET - 0x4; | ||
+ else if (bank->bank_num == 1) | ||
+ *reg = RK3576_SMT_GPIO1_OFFSET; | ||
+ else if (bank->bank_num == 2) | ||
+ *reg = RK3576_SMT_GPIO2_OFFSET; | ||
+ else if (bank->bank_num == 3) | ||
+ *reg = RK3576_SMT_GPIO3_OFFSET; | ||
+ else if (bank->bank_num == 4 && pin_num < 16) | ||
+ *reg = RK3576_SMT_GPIO4_AL_OFFSET; | ||
+ else if (bank->bank_num == 4 && pin_num < 24) | ||
+ *reg = RK3576_SMT_GPIO4_CL_OFFSET - 0x8; | ||
+ else if (bank->bank_num == 4) | ||
+ *reg = RK3576_SMT_GPIO4_DL_OFFSET - 0xc; | ||
+ else | ||
+ dev_err(info->dev, "unsupported bank_num %d\n", bank->bank_num); | ||
+ | ||
+ *reg += ((pin_num / RK3576_SMT_PINS_PER_REG) * 4); | ||
+ *bit = pin_num % RK3576_SMT_PINS_PER_REG; | ||
+ *bit *= RK3576_SMT_BITS_PER_PIN; | ||
+ | ||
+ return 0; | ||
+} | ||
+ | ||
#define RK3588_PMU1_IOC_REG (0x0000) | ||
#define RK3588_PMU2_IOC_REG (0x4000) | ||
#define RK3588_BUS_IOC_REG (0x8000) | ||
@@ -2332,6 +2499,10 @@ static int rockchip_set_drive_perpin(str | ||
rmask_bits = RK3568_DRV_BITS_PER_PIN; | ||
ret = (1 << (strength + 1)) - 1; | ||
goto config; | ||
+ } else if (ctrl->type == RK3576) { | ||
+ rmask_bits = RK3576_DRV_BITS_PER_PIN; | ||
+ ret = ((strength & BIT(2)) >> 2) | ((strength & BIT(0)) << 2) | (strength & BIT(1)); | ||
+ goto config; | ||
} | ||
|
||
if (ctrl->type == RV1126) { | ||
@@ -2469,6 +2640,7 @@ static int rockchip_get_pull(struct rock | ||
case RK3368: | ||
case RK3399: | ||
case RK3568: | ||
+ case RK3576: | ||
case RK3588: | ||
pull_type = bank->pull_type[pin_num / 8]; | ||
data >>= bit; | ||
@@ -2528,6 +2700,7 @@ static int rockchip_set_pull(struct rock | ||
case RK3368: | ||
case RK3399: | ||
case RK3568: | ||
+ case RK3576: | ||
case RK3588: | ||
pull_type = bank->pull_type[pin_num / 8]; | ||
ret = -EINVAL; | ||
@@ -2793,6 +2966,7 @@ static bool rockchip_pinconf_pull_valid( | ||
case RK3368: | ||
case RK3399: | ||
case RK3568: | ||
+ case RK3576: | ||
case RK3588: | ||
return (pull != PIN_CONFIG_BIAS_PULL_PIN_DEFAULT); | ||
} | ||
@@ -3956,6 +4130,37 @@ static struct rockchip_pin_ctrl rk3568_p | ||
.schmitt_calc_reg = rk3568_calc_schmitt_reg_and_bit, | ||
}; | ||
|
||
+#define RK3576_PIN_BANK(ID, LABEL, OFFSET0, OFFSET1, OFFSET2, OFFSET3) \ | ||
+ PIN_BANK_IOMUX_FLAGS_OFFSET_PULL_FLAGS(ID, 32, LABEL, \ | ||
+ IOMUX_WIDTH_4BIT, \ | ||
+ IOMUX_WIDTH_4BIT, \ | ||
+ IOMUX_WIDTH_4BIT, \ | ||
+ IOMUX_WIDTH_4BIT, \ | ||
+ OFFSET0, OFFSET1, \ | ||
+ OFFSET2, OFFSET3, \ | ||
+ PULL_TYPE_IO_1V8_ONLY, \ | ||
+ PULL_TYPE_IO_1V8_ONLY, \ | ||
+ PULL_TYPE_IO_1V8_ONLY, \ | ||
+ PULL_TYPE_IO_1V8_ONLY) | ||
+ | ||
+static struct rockchip_pin_bank rk3576_pin_banks[] = { | ||
+ RK3576_PIN_BANK(0, "gpio0", 0, 0x8, 0x2004, 0x200C), | ||
+ RK3576_PIN_BANK(1, "gpio1", 0x4020, 0x4028, 0x4030, 0x4038), | ||
+ RK3576_PIN_BANK(2, "gpio2", 0x4040, 0x4048, 0x4050, 0x4058), | ||
+ RK3576_PIN_BANK(3, "gpio3", 0x4060, 0x4068, 0x4070, 0x4078), | ||
+ RK3576_PIN_BANK(4, "gpio4", 0x4080, 0x4088, 0xA390, 0xB398), | ||
+}; | ||
+ | ||
+static struct rockchip_pin_ctrl rk3576_pin_ctrl __maybe_unused = { | ||
+ .pin_banks = rk3576_pin_banks, | ||
+ .nr_banks = ARRAY_SIZE(rk3576_pin_banks), | ||
+ .label = "RK3576-GPIO", | ||
+ .type = RK3576, | ||
+ .pull_calc_reg = rk3576_calc_pull_reg_and_bit, | ||
+ .drv_calc_reg = rk3576_calc_drv_reg_and_bit, | ||
+ .schmitt_calc_reg = rk3576_calc_schmitt_reg_and_bit, | ||
+}; | ||
+ | ||
static struct rockchip_pin_bank rk3588_pin_banks[] = { | ||
RK3588_PIN_BANK_FLAGS(0, 32, "gpio0", | ||
IOMUX_WIDTH_4BIT, PULL_TYPE_IO_1V8_ONLY), | ||
@@ -4012,6 +4217,8 @@ static const struct of_device_id rockchi | ||
.data = &rk3399_pin_ctrl }, | ||
{ .compatible = "rockchip,rk3568-pinctrl", | ||
.data = &rk3568_pin_ctrl }, | ||
+ { .compatible = "rockchip,rk3576-pinctrl", | ||
+ .data = &rk3576_pin_ctrl }, | ||
{ .compatible = "rockchip,rk3588-pinctrl", | ||
.data = &rk3588_pin_ctrl }, | ||
{}, | ||
--- a/drivers/pinctrl/pinctrl-rockchip.h | ||
+++ b/drivers/pinctrl/pinctrl-rockchip.h | ||
@@ -197,6 +197,7 @@ enum rockchip_pinctrl_type { | ||
RK3368, | ||
RK3399, | ||
RK3568, | ||
+ RK3576, | ||
RK3588, | ||
}; | ||
|
Oops, something went wrong.