mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-31 06:36:41 +00:00
linux (Rockchip): update patches for 5.13
This commit is contained in:
parent
36bf5aa381
commit
55fc867644
@ -1,318 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ezequiel Garcia <ezequiel@collabora.com>
|
|
||||||
Date: Wed, 21 Apr 2021 18:03:36 -0300
|
|
||||||
Subject: [PATCH] dt-bindings: vendor-prefixes: Add Tang Cheng (TCS)
|
|
||||||
|
|
||||||
Shenzhen City Tang Cheng Technology (http://www.tctek.cn/)
|
|
||||||
is a power management IC manufacturer.
|
|
||||||
|
|
||||||
Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
|
|
||||||
---
|
|
||||||
Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml
|
|
||||||
index 259faf1b382c..0ec33479df3c 100644
|
|
||||||
--- a/Documentation/devicetree/bindings/vendor-prefixes.yaml
|
|
||||||
+++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml
|
|
||||||
@@ -1055,6 +1055,8 @@ patternProperties:
|
|
||||||
description: Trusted Computing Group
|
|
||||||
"^tcl,.*":
|
|
||||||
description: Toby Churchill Ltd.
|
|
||||||
+ "^tcs,.*":
|
|
||||||
+ description: Shenzhen City Tang Cheng Technology Co., Ltd.
|
|
||||||
"^technexion,.*":
|
|
||||||
description: TechNexion
|
|
||||||
"^technologic,.*":
|
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ezequiel Garcia <ezequiel@collabora.com>
|
|
||||||
Date: Wed, 21 Apr 2021 18:03:37 -0300
|
|
||||||
Subject: [PATCH] dt-bindings: regulator: Add support for TCS4525
|
|
||||||
|
|
||||||
Add a compatible string to support TCS4525/TCS4526 devices,
|
|
||||||
which are compatible with Fairchild FAN53555 regulators.
|
|
||||||
|
|
||||||
Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
|
|
||||||
---
|
|
||||||
Documentation/devicetree/bindings/regulator/fan53555.txt | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/Documentation/devicetree/bindings/regulator/fan53555.txt b/Documentation/devicetree/bindings/regulator/fan53555.txt
|
|
||||||
index e7fc045281d1..013f096ac0aa 100644
|
|
||||||
--- a/Documentation/devicetree/bindings/regulator/fan53555.txt
|
|
||||||
+++ b/Documentation/devicetree/bindings/regulator/fan53555.txt
|
|
||||||
@@ -1,8 +1,8 @@
|
|
||||||
Binding for Fairchild FAN53555 regulators
|
|
||||||
|
|
||||||
Required properties:
|
|
||||||
- - compatible: one of "fcs,fan53555", "fcs,fan53526", "silergy,syr827" or
|
|
||||||
- "silergy,syr828"
|
|
||||||
+ - compatible: one of "fcs,fan53555", "fcs,fan53526", "silergy,syr827",
|
|
||||||
+ "silergy,syr828" or "tcs,tcs4525".
|
|
||||||
- reg: I2C address
|
|
||||||
|
|
||||||
Optional properties:
|
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Joseph Chen <chenjh@rock-chips.com>
|
|
||||||
Date: Wed, 21 Apr 2021 18:03:38 -0300
|
|
||||||
Subject: [PATCH] regulator: fan53555: Add TCS4525 DCDC support
|
|
||||||
|
|
||||||
TCS4525 main features:
|
|
||||||
|
|
||||||
- 2.7V to 5.5V Input Voltage Range;
|
|
||||||
- 3MHz Constant Switching Frequency;
|
|
||||||
- 5A Available Load Current;
|
|
||||||
- Programmable Output Voltage: 0.6V to 1.4V in 6.25mV Steps;
|
|
||||||
- PFM/PWM Operation for Optimum Increased Efficiency;
|
|
||||||
|
|
||||||
Signed-off-by: Joseph Chen <chenjh@rock-chips.com>
|
|
||||||
[Ezequiel: Forward port]
|
|
||||||
Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
|
|
||||||
---
|
|
||||||
drivers/regulator/fan53555.c | 136 +++++++++++++++++++++++++++++++----
|
|
||||||
1 file changed, 122 insertions(+), 14 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/regulator/fan53555.c b/drivers/regulator/fan53555.c
|
|
||||||
index aa426183b6a1..f3918f03aaf3 100644
|
|
||||||
--- a/drivers/regulator/fan53555.c
|
|
||||||
+++ b/drivers/regulator/fan53555.c
|
|
||||||
@@ -24,6 +24,12 @@
|
|
||||||
/* Voltage setting */
|
|
||||||
#define FAN53555_VSEL0 0x00
|
|
||||||
#define FAN53555_VSEL1 0x01
|
|
||||||
+
|
|
||||||
+#define TCS4525_VSEL0 0x11
|
|
||||||
+#define TCS4525_VSEL1 0x10
|
|
||||||
+#define TCS4525_TIME 0x13
|
|
||||||
+#define TCS4525_COMMAND 0x14
|
|
||||||
+
|
|
||||||
/* Control register */
|
|
||||||
#define FAN53555_CONTROL 0x02
|
|
||||||
/* IC Type */
|
|
||||||
@@ -49,11 +55,20 @@
|
|
||||||
|
|
||||||
#define FAN53555_NVOLTAGES 64 /* Numbers of voltages */
|
|
||||||
#define FAN53526_NVOLTAGES 128
|
|
||||||
+#define TCS4525_NVOLTAGES 127 /* Numbers of voltages */
|
|
||||||
+
|
|
||||||
+#define TCS_VSEL_NSEL_MASK 0x7f
|
|
||||||
+#define TCS_VSEL0_MODE (1 << 7)
|
|
||||||
+#define TCS_VSEL1_MODE (1 << 6)
|
|
||||||
+
|
|
||||||
+#define TCS_SLEW_SHIFT 3
|
|
||||||
+#define TCS_SLEW_MASK (0x3 < 3)
|
|
||||||
|
|
||||||
enum fan53555_vendor {
|
|
||||||
FAN53526_VENDOR_FAIRCHILD = 0,
|
|
||||||
FAN53555_VENDOR_FAIRCHILD,
|
|
||||||
FAN53555_VENDOR_SILERGY,
|
|
||||||
+ FAN53555_VENDOR_TCS,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum {
|
|
||||||
@@ -106,6 +121,11 @@ struct fan53555_device_info {
|
|
||||||
unsigned int mode_mask;
|
|
||||||
/* Sleep voltage cache */
|
|
||||||
unsigned int sleep_vol_cache;
|
|
||||||
+ /* Slew rate */
|
|
||||||
+ unsigned int slew_reg;
|
|
||||||
+ unsigned int slew_mask;
|
|
||||||
+ unsigned int slew_shift;
|
|
||||||
+ unsigned int slew_rate;
|
|
||||||
};
|
|
||||||
|
|
||||||
static int fan53555_set_suspend_voltage(struct regulator_dev *rdev, int uV)
|
|
||||||
@@ -189,13 +209,37 @@ static const int slew_rates[] = {
|
|
||||||
500,
|
|
||||||
};
|
|
||||||
|
|
||||||
+static const int tcs_slew_rates[] = {
|
|
||||||
+ 18700,
|
|
||||||
+ 9300,
|
|
||||||
+ 4600,
|
|
||||||
+ 2300,
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
static int fan53555_set_ramp(struct regulator_dev *rdev, int ramp)
|
|
||||||
{
|
|
||||||
struct fan53555_device_info *di = rdev_get_drvdata(rdev);
|
|
||||||
int regval = -1, i;
|
|
||||||
+ const int *slew_rate_t;
|
|
||||||
+ int slew_rate_n;
|
|
||||||
|
|
||||||
- for (i = 0; i < ARRAY_SIZE(slew_rates); i++) {
|
|
||||||
- if (ramp <= slew_rates[i])
|
|
||||||
+ switch (di->vendor) {
|
|
||||||
+ case FAN53526_VENDOR_FAIRCHILD:
|
|
||||||
+ case FAN53555_VENDOR_FAIRCHILD:
|
|
||||||
+ case FAN53555_VENDOR_SILERGY:
|
|
||||||
+ slew_rate_t = slew_rates;
|
|
||||||
+ slew_rate_n = ARRAY_SIZE(slew_rates);
|
|
||||||
+ break;
|
|
||||||
+ case FAN53555_VENDOR_TCS:
|
|
||||||
+ slew_rate_t = tcs_slew_rates;
|
|
||||||
+ slew_rate_n = ARRAY_SIZE(tcs_slew_rates);
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ return -EINVAL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < slew_rate_n; i++) {
|
|
||||||
+ if (ramp <= slew_rate_t[i])
|
|
||||||
regval = i;
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
@@ -206,8 +250,8 @@ static int fan53555_set_ramp(struct regulator_dev *rdev, int ramp)
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
- return regmap_update_bits(rdev->regmap, FAN53555_CONTROL,
|
|
||||||
- CTL_SLEW_MASK, regval << CTL_SLEW_SHIFT);
|
|
||||||
+ return regmap_update_bits(rdev->regmap, di->slew_reg,
|
|
||||||
+ di->slew_mask, regval << di->slew_shift);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct regulator_ops fan53555_regulator_ops = {
|
|
||||||
@@ -292,7 +336,9 @@ static int fan53555_voltages_setup_fairchild(struct fan53555_device_info *di)
|
|
||||||
"Chip ID %d not supported!\n", di->chip_id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
-
|
|
||||||
+ di->slew_reg = FAN53555_CONTROL;
|
|
||||||
+ di->slew_mask = CTL_SLEW_MASK;
|
|
||||||
+ di->slew_shift = CTL_SLEW_SHIFT;
|
|
||||||
di->vsel_count = FAN53555_NVOLTAGES;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
@@ -312,12 +358,29 @@ static int fan53555_voltages_setup_silergy(struct fan53555_device_info *di)
|
|
||||||
"Chip ID %d not supported!\n", di->chip_id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
-
|
|
||||||
+ di->slew_reg = FAN53555_CONTROL;
|
|
||||||
+ di->slew_reg = FAN53555_CONTROL;
|
|
||||||
+ di->slew_mask = CTL_SLEW_MASK;
|
|
||||||
+ di->slew_shift = CTL_SLEW_SHIFT;
|
|
||||||
di->vsel_count = FAN53555_NVOLTAGES;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static int fan53555_voltages_setup_tcs(struct fan53555_device_info *di)
|
|
||||||
+{
|
|
||||||
+ di->slew_reg = TCS4525_TIME;
|
|
||||||
+ di->slew_mask = TCS_SLEW_MASK;
|
|
||||||
+ di->slew_shift = TCS_SLEW_MASK;
|
|
||||||
+
|
|
||||||
+ /* Init voltage range and step */
|
|
||||||
+ di->vsel_min = 600000;
|
|
||||||
+ di->vsel_step = 6250;
|
|
||||||
+ di->vsel_count = TCS4525_NVOLTAGES;
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/* For 00,01,03,05 options:
|
|
||||||
* VOUT = 0.60V + NSELx * 10mV, from 0.60 to 1.23V.
|
|
||||||
* For 04 option:
|
|
||||||
@@ -329,17 +392,41 @@ static int fan53555_device_setup(struct fan53555_device_info *di,
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
/* Setup voltage control register */
|
|
||||||
- switch (pdata->sleep_vsel_id) {
|
|
||||||
- case FAN53555_VSEL_ID_0:
|
|
||||||
- di->sleep_reg = FAN53555_VSEL0;
|
|
||||||
- di->vol_reg = FAN53555_VSEL1;
|
|
||||||
+ switch (di->vendor) {
|
|
||||||
+ case FAN53526_VENDOR_FAIRCHILD:
|
|
||||||
+ case FAN53555_VENDOR_FAIRCHILD:
|
|
||||||
+ case FAN53555_VENDOR_SILERGY:
|
|
||||||
+ switch (pdata->sleep_vsel_id) {
|
|
||||||
+ case FAN53555_VSEL_ID_0:
|
|
||||||
+ di->sleep_reg = FAN53555_VSEL0;
|
|
||||||
+ di->vol_reg = FAN53555_VSEL1;
|
|
||||||
+ break;
|
|
||||||
+ case FAN53555_VSEL_ID_1:
|
|
||||||
+ di->sleep_reg = FAN53555_VSEL1;
|
|
||||||
+ di->vol_reg = FAN53555_VSEL0;
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ dev_err(di->dev, "Invalid VSEL ID!\n");
|
|
||||||
+ return -EINVAL;
|
|
||||||
+ }
|
|
||||||
break;
|
|
||||||
- case FAN53555_VSEL_ID_1:
|
|
||||||
- di->sleep_reg = FAN53555_VSEL1;
|
|
||||||
- di->vol_reg = FAN53555_VSEL0;
|
|
||||||
+ case FAN53555_VENDOR_TCS:
|
|
||||||
+ switch (pdata->sleep_vsel_id) {
|
|
||||||
+ case FAN53555_VSEL_ID_0:
|
|
||||||
+ di->sleep_reg = TCS4525_VSEL0;
|
|
||||||
+ di->vol_reg = TCS4525_VSEL1;
|
|
||||||
+ break;
|
|
||||||
+ case FAN53555_VSEL_ID_1:
|
|
||||||
+ di->sleep_reg = TCS4525_VSEL1;
|
|
||||||
+ di->vol_reg = TCS4525_VSEL0;
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ dev_err(di->dev, "Invalid VSEL ID!\n");
|
|
||||||
+ return -EINVAL;
|
|
||||||
+ }
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
- dev_err(di->dev, "Invalid VSEL ID!\n");
|
|
||||||
+ dev_err(di->dev, "vendor %d not supported!\n", di->vendor);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -362,6 +449,18 @@ static int fan53555_device_setup(struct fan53555_device_info *di,
|
|
||||||
di->mode_reg = di->vol_reg;
|
|
||||||
di->mode_mask = VSEL_MODE;
|
|
||||||
break;
|
|
||||||
+ case FAN53555_VENDOR_TCS:
|
|
||||||
+ di->mode_reg = TCS4525_COMMAND;
|
|
||||||
+
|
|
||||||
+ switch (pdata->sleep_vsel_id) {
|
|
||||||
+ case FAN53555_VSEL_ID_0:
|
|
||||||
+ di->mode_mask = TCS_VSEL1_MODE;
|
|
||||||
+ break;
|
|
||||||
+ case FAN53555_VSEL_ID_1:
|
|
||||||
+ di->mode_mask = TCS_VSEL0_MODE;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
default:
|
|
||||||
dev_err(di->dev, "vendor %d not supported!\n", di->vendor);
|
|
||||||
return -EINVAL;
|
|
||||||
@@ -378,6 +477,9 @@ static int fan53555_device_setup(struct fan53555_device_info *di,
|
|
||||||
case FAN53555_VENDOR_SILERGY:
|
|
||||||
ret = fan53555_voltages_setup_silergy(di);
|
|
||||||
break;
|
|
||||||
+ case FAN53555_VENDOR_TCS:
|
|
||||||
+ ret = fan53555_voltages_setup_tcs(di);
|
|
||||||
+ break;
|
|
||||||
default:
|
|
||||||
dev_err(di->dev, "vendor %d not supported!\n", di->vendor);
|
|
||||||
return -EINVAL;
|
|
||||||
@@ -449,6 +551,9 @@ static const struct of_device_id __maybe_unused fan53555_dt_ids[] = {
|
|
||||||
}, {
|
|
||||||
.compatible = "silergy,syr828",
|
|
||||||
.data = (void *)FAN53555_VENDOR_SILERGY,
|
|
||||||
+ }, {
|
|
||||||
+ .compatible = "tcs,tcs4525",
|
|
||||||
+ .data = (void *)FAN53555_VENDOR_TCS
|
|
||||||
},
|
|
||||||
{ }
|
|
||||||
};
|
|
||||||
@@ -554,6 +659,9 @@ static const struct i2c_device_id fan53555_id[] = {
|
|
||||||
}, {
|
|
||||||
.name = "syr828",
|
|
||||||
.driver_data = FAN53555_VENDOR_SILERGY
|
|
||||||
+ }, {
|
|
||||||
+ .name = "tcs4525",
|
|
||||||
+ .driver_data = FAN53555_VENDOR_TCS
|
|
||||||
},
|
|
||||||
{ },
|
|
||||||
};
|
|
@ -1,45 +1,3 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Peter Geis <pgwipeout@gmail.com>
|
|
||||||
Date: Tue, 11 May 2021 17:13:33 -0400
|
|
||||||
Subject: [PATCH] regulator: fan53555: fix TCS4525 voltage calulation
|
|
||||||
|
|
||||||
The TCS4525 has 128 voltage steps. With the calculation set to 127 the
|
|
||||||
most significant bit is disregarded which leads to a miscalculation of
|
|
||||||
the voltage by about 200mv.
|
|
||||||
|
|
||||||
Fix the calculation to end deadlock on the rk3566-quartz64 which uses
|
|
||||||
this as the cpu regulator.
|
|
||||||
|
|
||||||
Fixes: 914df8faa7d6 ("regulator: fan53555: Add TCS4525 DCDC support")
|
|
||||||
Signed-off-by: Peter Geis <pgwipeout@gmail.com>
|
|
||||||
Link: https://lore.kernel.org/r/20210511211335.2935163-2-pgwipeout@gmail.com
|
|
||||||
Signed-off-by: Mark Brown <broonie@kernel.org>
|
|
||||||
---
|
|
||||||
drivers/regulator/fan53555.c | 3 +--
|
|
||||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/regulator/fan53555.c b/drivers/regulator/fan53555.c
|
|
||||||
index f3918f03aaf3..26f06f685b1b 100644
|
|
||||||
--- a/drivers/regulator/fan53555.c
|
|
||||||
+++ b/drivers/regulator/fan53555.c
|
|
||||||
@@ -55,7 +55,6 @@
|
|
||||||
|
|
||||||
#define FAN53555_NVOLTAGES 64 /* Numbers of voltages */
|
|
||||||
#define FAN53526_NVOLTAGES 128
|
|
||||||
-#define TCS4525_NVOLTAGES 127 /* Numbers of voltages */
|
|
||||||
|
|
||||||
#define TCS_VSEL_NSEL_MASK 0x7f
|
|
||||||
#define TCS_VSEL0_MODE (1 << 7)
|
|
||||||
@@ -376,7 +375,7 @@ static int fan53555_voltages_setup_tcs(struct fan53555_device_info *di)
|
|
||||||
/* Init voltage range and step */
|
|
||||||
di->vsel_min = 600000;
|
|
||||||
di->vsel_step = 6250;
|
|
||||||
- di->vsel_count = TCS4525_NVOLTAGES;
|
|
||||||
+ di->vsel_count = FAN53526_NVOLTAGES;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Peter Geis <pgwipeout@gmail.com>
|
From: Peter Geis <pgwipeout@gmail.com>
|
||||||
Date: Tue, 11 May 2021 17:13:34 -0400
|
Date: Tue, 11 May 2021 17:13:34 -0400
|
||||||
|
@ -785,10 +785,10 @@ index ae86da0dc5bd..f5eb7de10128 100644
|
|||||||
--- a/drivers/usb/dwc3/Makefile
|
--- a/drivers/usb/dwc3/Makefile
|
||||||
+++ b/drivers/usb/dwc3/Makefile
|
+++ b/drivers/usb/dwc3/Makefile
|
||||||
@@ -51,4 +51,5 @@ obj-$(CONFIG_USB_DWC3_MESON_G12A) += dwc3-meson-g12a.o
|
@@ -51,4 +51,5 @@ obj-$(CONFIG_USB_DWC3_MESON_G12A) += dwc3-meson-g12a.o
|
||||||
obj-$(CONFIG_USB_DWC3_OF_SIMPLE) += dwc3-of-simple.o
|
|
||||||
obj-$(CONFIG_USB_DWC3_ST) += dwc3-st.o
|
obj-$(CONFIG_USB_DWC3_ST) += dwc3-st.o
|
||||||
obj-$(CONFIG_USB_DWC3_QCOM) += dwc3-qcom.o
|
obj-$(CONFIG_USB_DWC3_QCOM) += dwc3-qcom.o
|
||||||
obj-$(CONFIG_USB_DWC3_IMX8MP) += dwc3-imx8mp.o
|
obj-$(CONFIG_USB_DWC3_IMX8MP) += dwc3-imx8mp.o
|
||||||
|
obj-$(CONFIG_USB_DWC3_XILINX) += dwc3-xilinx.o
|
||||||
+obj-$(CONFIG_USB_DWC3_ROCKCHIP_INNO) += dwc3-rockchip-inno.o
|
+obj-$(CONFIG_USB_DWC3_ROCKCHIP_INNO) += dwc3-rockchip-inno.o
|
||||||
diff --git a/drivers/usb/dwc3/dwc3-rockchip-inno.c b/drivers/usb/dwc3/dwc3-rockchip-inno.c
|
diff --git a/drivers/usb/dwc3/dwc3-rockchip-inno.c b/drivers/usb/dwc3/dwc3-rockchip-inno.c
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
|
@ -782,7 +782,7 @@ index c81ca5c7e979..a11474214bde 100644
|
|||||||
+{
|
+{
|
||||||
+ struct rkvdec_ctx *ctx = container_of(ctrl->handler, struct rkvdec_ctx, ctrl_hdl);
|
+ struct rkvdec_ctx *ctx = container_of(ctrl->handler, struct rkvdec_ctx, ctrl_hdl);
|
||||||
+
|
+
|
||||||
+ if (ctrl->id == V4L2_CID_MPEG_VIDEO_H264_SPS && !ctx->valid_fmt) {
|
+ if (ctrl->id == V4L2_CID_STATELESS_H264_SPS && !ctx->valid_fmt) {
|
||||||
+ ctx->valid_fmt = rkvdec_valid_fmt(ctx, ctrl);
|
+ ctx->valid_fmt = rkvdec_valid_fmt(ctx, ctrl);
|
||||||
+ if (ctx->valid_fmt) {
|
+ if (ctx->valid_fmt) {
|
||||||
+ struct v4l2_pix_format_mplane *pix_mp;
|
+ struct v4l2_pix_format_mplane *pix_mp;
|
||||||
@ -949,7 +949,7 @@ index a11474214bde..b57a39ce4f48 100644
|
|||||||
DIV_ROUND_UP(pix_mp->width, 16) *
|
DIV_ROUND_UP(pix_mp->width, 16) *
|
||||||
DIV_ROUND_UP(pix_mp->height, 16);
|
DIV_ROUND_UP(pix_mp->height, 16);
|
||||||
@@ -55,19 +55,15 @@ static int rkvdec_try_ctrl(struct v4l2_ctrl *ctrl)
|
@@ -55,19 +55,15 @@ static int rkvdec_try_ctrl(struct v4l2_ctrl *ctrl)
|
||||||
if (ctrl->id == V4L2_CID_MPEG_VIDEO_H264_SPS) {
|
if (ctrl->id == V4L2_CID_STATELESS_H264_SPS) {
|
||||||
const struct v4l2_ctrl_h264_sps *sps = ctrl->p_new.p_h264_sps;
|
const struct v4l2_ctrl_h264_sps *sps = ctrl->p_new.p_h264_sps;
|
||||||
unsigned int width, height;
|
unsigned int width, height;
|
||||||
- /*
|
- /*
|
||||||
|
@ -362,211 +362,3 @@ index 41edd0a421b2..4d463d50a63a 100644
|
|||||||
DRM_DEV_ERROR(lvds->dev, "failed to get pm runtime: %d\n", ret);
|
DRM_DEV_ERROR(lvds->dev, "failed to get pm runtime: %d\n", ret);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lukasz Luba <lukasz.luba@arm.com>
|
|
||||||
Date: Thu, 21 Jan 2021 17:04:45 +0000
|
|
||||||
Subject: [PATCH] drm/panfrost: Add governor data with pre-defined thresholds
|
|
||||||
|
|
||||||
The simple_ondemand devfreq governor uses two thresholds to decide about
|
|
||||||
the frequency change: upthreshold, downdifferential. These two tunable
|
|
||||||
change the behavior of the governor decision, e.g. how fast to increase
|
|
||||||
the frequency or how rapidly limit the frequency. This patch adds needed
|
|
||||||
governor data with thresholds values gathered experimentally in different
|
|
||||||
workloads.
|
|
||||||
|
|
||||||
Signed-off-by: Lukasz Luba <lukasz.luba@arm.com>
|
|
||||||
---
|
|
||||||
drivers/gpu/drm/panfrost/panfrost_devfreq.c | 10 +++++++++-
|
|
||||||
drivers/gpu/drm/panfrost/panfrost_devfreq.h | 2 ++
|
|
||||||
2 files changed, 11 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/panfrost/panfrost_devfreq.c b/drivers/gpu/drm/panfrost/panfrost_devfreq.c
|
|
||||||
index 17d5fa6e0b83..53e0188ce8e8 100644
|
|
||||||
--- a/drivers/gpu/drm/panfrost/panfrost_devfreq.c
|
|
||||||
+++ b/drivers/gpu/drm/panfrost/panfrost_devfreq.c
|
|
||||||
@@ -130,8 +130,16 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev)
|
|
||||||
panfrost_devfreq_profile.initial_freq = cur_freq;
|
|
||||||
dev_pm_opp_put(opp);
|
|
||||||
|
|
||||||
+ /*
|
|
||||||
+ * Setup default thresholds for the simple_ondemand governor.
|
|
||||||
+ * The values are chosen based on experiments.
|
|
||||||
+ */
|
|
||||||
+ pfdevfreq->gov_data.upthreshold = 45;
|
|
||||||
+ pfdevfreq->gov_data.downdifferential = 5;
|
|
||||||
+
|
|
||||||
devfreq = devm_devfreq_add_device(dev, &panfrost_devfreq_profile,
|
|
||||||
- DEVFREQ_GOV_SIMPLE_ONDEMAND, NULL);
|
|
||||||
+ DEVFREQ_GOV_SIMPLE_ONDEMAND,
|
|
||||||
+ &pfdevfreq->gov_data);
|
|
||||||
if (IS_ERR(devfreq)) {
|
|
||||||
DRM_DEV_ERROR(dev, "Couldn't initialize GPU devfreq\n");
|
|
||||||
ret = PTR_ERR(devfreq);
|
|
||||||
diff --git a/drivers/gpu/drm/panfrost/panfrost_devfreq.h b/drivers/gpu/drm/panfrost/panfrost_devfreq.h
|
|
||||||
index db6ea48e21f9..1e2a4de941aa 100644
|
|
||||||
--- a/drivers/gpu/drm/panfrost/panfrost_devfreq.h
|
|
||||||
+++ b/drivers/gpu/drm/panfrost/panfrost_devfreq.h
|
|
||||||
@@ -4,6 +4,7 @@
|
|
||||||
#ifndef __PANFROST_DEVFREQ_H__
|
|
||||||
#define __PANFROST_DEVFREQ_H__
|
|
||||||
|
|
||||||
+#include <linux/devfreq.h>
|
|
||||||
#include <linux/spinlock.h>
|
|
||||||
#include <linux/ktime.h>
|
|
||||||
|
|
||||||
@@ -17,6 +18,7 @@ struct panfrost_devfreq {
|
|
||||||
struct devfreq *devfreq;
|
|
||||||
struct opp_table *regulators_opp_table;
|
|
||||||
struct thermal_cooling_device *cooling;
|
|
||||||
+ struct devfreq_simple_ondemand_data gov_data;
|
|
||||||
bool opp_of_table_added;
|
|
||||||
|
|
||||||
ktime_t busy_time;
|
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Boris Brezillon <boris.brezillon@collabora.com>
|
|
||||||
Date: Fri, 5 Feb 2021 12:17:57 +0100
|
|
||||||
Subject: [PATCH] drm/panfrost: Stay in the threaded MMU IRQ handler until
|
|
||||||
we've handled all IRQs
|
|
||||||
|
|
||||||
Doing a hw-irq -> threaded-irq round-trip is counter-productive, stay
|
|
||||||
in the threaded irq handler as long as we can.
|
|
||||||
|
|
||||||
v2:
|
|
||||||
* Rework the loop to avoid a goto
|
|
||||||
|
|
||||||
Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
|
|
||||||
Reviewed-by: Steven Price <steven.price@arm.com>
|
|
||||||
Reviewed-by: Rob Herring <robh@kernel.org>
|
|
||||||
---
|
|
||||||
drivers/gpu/drm/panfrost/panfrost_mmu.c | 26 +++++++++++++------------
|
|
||||||
1 file changed, 14 insertions(+), 12 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panfrost/panfrost_mmu.c
|
|
||||||
index 198686216317..5a3d18c05802 100644
|
|
||||||
--- a/drivers/gpu/drm/panfrost/panfrost_mmu.c
|
|
||||||
+++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c
|
|
||||||
@@ -585,22 +585,20 @@ static irqreturn_t panfrost_mmu_irq_handler_thread(int irq, void *data)
|
|
||||||
{
|
|
||||||
struct panfrost_device *pfdev = data;
|
|
||||||
u32 status = mmu_read(pfdev, MMU_INT_RAWSTAT);
|
|
||||||
- int i, ret;
|
|
||||||
+ int ret;
|
|
||||||
|
|
||||||
- for (i = 0; status; i++) {
|
|
||||||
- u32 mask = BIT(i) | BIT(i + 16);
|
|
||||||
+ while (status) {
|
|
||||||
+ u32 as = ffs(status | (status >> 16)) - 1;
|
|
||||||
+ u32 mask = BIT(as) | BIT(as + 16);
|
|
||||||
u64 addr;
|
|
||||||
u32 fault_status;
|
|
||||||
u32 exception_type;
|
|
||||||
u32 access_type;
|
|
||||||
u32 source_id;
|
|
||||||
|
|
||||||
- if (!(status & mask))
|
|
||||||
- continue;
|
|
||||||
-
|
|
||||||
- fault_status = mmu_read(pfdev, AS_FAULTSTATUS(i));
|
|
||||||
- addr = mmu_read(pfdev, AS_FAULTADDRESS_LO(i));
|
|
||||||
- addr |= (u64)mmu_read(pfdev, AS_FAULTADDRESS_HI(i)) << 32;
|
|
||||||
+ fault_status = mmu_read(pfdev, AS_FAULTSTATUS(as));
|
|
||||||
+ addr = mmu_read(pfdev, AS_FAULTADDRESS_LO(as));
|
|
||||||
+ addr |= (u64)mmu_read(pfdev, AS_FAULTADDRESS_HI(as)) << 32;
|
|
||||||
|
|
||||||
/* decode the fault status */
|
|
||||||
exception_type = fault_status & 0xFF;
|
|
||||||
@@ -611,8 +609,8 @@ static irqreturn_t panfrost_mmu_irq_handler_thread(int irq, void *data)
|
|
||||||
|
|
||||||
/* Page fault only */
|
|
||||||
ret = -1;
|
|
||||||
- if ((status & mask) == BIT(i) && (exception_type & 0xF8) == 0xC0)
|
|
||||||
- ret = panfrost_mmu_map_fault_addr(pfdev, i, addr);
|
|
||||||
+ if ((status & mask) == BIT(as) && (exception_type & 0xF8) == 0xC0)
|
|
||||||
+ ret = panfrost_mmu_map_fault_addr(pfdev, as, addr);
|
|
||||||
|
|
||||||
if (ret)
|
|
||||||
/* terminal fault, print info about the fault */
|
|
||||||
@@ -624,7 +622,7 @@ static irqreturn_t panfrost_mmu_irq_handler_thread(int irq, void *data)
|
|
||||||
"exception type 0x%X: %s\n"
|
|
||||||
"access type 0x%X: %s\n"
|
|
||||||
"source id 0x%X\n",
|
|
||||||
- i, addr,
|
|
||||||
+ as, addr,
|
|
||||||
"TODO",
|
|
||||||
fault_status,
|
|
||||||
(fault_status & (1 << 10) ? "DECODER FAULT" : "SLAVE FAULT"),
|
|
||||||
@@ -633,6 +631,10 @@ static irqreturn_t panfrost_mmu_irq_handler_thread(int irq, void *data)
|
|
||||||
source_id);
|
|
||||||
|
|
||||||
status &= ~mask;
|
|
||||||
+
|
|
||||||
+ /* If we received new MMU interrupts, process them before returning. */
|
|
||||||
+ if (!status)
|
|
||||||
+ status = mmu_read(pfdev, MMU_INT_RAWSTAT);
|
|
||||||
}
|
|
||||||
|
|
||||||
mmu_write(pfdev, MMU_INT_MASK, ~0);
|
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Christian Hewitt <christianshewitt@gmail.com>
|
|
||||||
Date: Wed, 27 Jan 2021 19:40:47 +0000
|
|
||||||
Subject: [PATCH] drm/lima: add governor data with pre-defined thresholds
|
|
||||||
|
|
||||||
This patch adapts the panfrost pre-defined thresholds change [0] to the
|
|
||||||
lima driver to improve real-world performance. The upthreshold value has
|
|
||||||
been set to ramp GPU frequency to max freq faster (compared to panfrost)
|
|
||||||
to compensate for the lower overall performance of utgard devices.
|
|
||||||
|
|
||||||
[0] https://patchwork.kernel.org/project/dri-devel/patch/20210121170445.19761-1-lukasz.luba@arm.com/
|
|
||||||
|
|
||||||
Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
|
|
||||||
Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>
|
|
||||||
Reviewed-by: Qiang Yu <yuq825@gmail.com>
|
|
||||||
---
|
|
||||||
drivers/gpu/drm/lima/lima_devfreq.c | 10 +++++++++-
|
|
||||||
drivers/gpu/drm/lima/lima_devfreq.h | 2 ++
|
|
||||||
2 files changed, 11 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/lima/lima_devfreq.c b/drivers/gpu/drm/lima/lima_devfreq.c
|
|
||||||
index 5686ad4aaf7c..c9854315a0b5 100644
|
|
||||||
--- a/drivers/gpu/drm/lima/lima_devfreq.c
|
|
||||||
+++ b/drivers/gpu/drm/lima/lima_devfreq.c
|
|
||||||
@@ -163,8 +163,16 @@ int lima_devfreq_init(struct lima_device *ldev)
|
|
||||||
lima_devfreq_profile.initial_freq = cur_freq;
|
|
||||||
dev_pm_opp_put(opp);
|
|
||||||
|
|
||||||
+ /*
|
|
||||||
+ * Setup default thresholds for the simple_ondemand governor.
|
|
||||||
+ * The values are chosen based on experiments.
|
|
||||||
+ */
|
|
||||||
+ ldevfreq->gov_data.upthreshold = 30;
|
|
||||||
+ ldevfreq->gov_data.downdifferential = 5;
|
|
||||||
+
|
|
||||||
devfreq = devm_devfreq_add_device(dev, &lima_devfreq_profile,
|
|
||||||
- DEVFREQ_GOV_SIMPLE_ONDEMAND, NULL);
|
|
||||||
+ DEVFREQ_GOV_SIMPLE_ONDEMAND,
|
|
||||||
+ &ldevfreq->gov_data);
|
|
||||||
if (IS_ERR(devfreq)) {
|
|
||||||
dev_err(dev, "Couldn't initialize GPU devfreq\n");
|
|
||||||
ret = PTR_ERR(devfreq);
|
|
||||||
diff --git a/drivers/gpu/drm/lima/lima_devfreq.h b/drivers/gpu/drm/lima/lima_devfreq.h
|
|
||||||
index 2d9b3008ce77..b0c7c736e81a 100644
|
|
||||||
--- a/drivers/gpu/drm/lima/lima_devfreq.h
|
|
||||||
+++ b/drivers/gpu/drm/lima/lima_devfreq.h
|
|
||||||
@@ -4,6 +4,7 @@
|
|
||||||
#ifndef __LIMA_DEVFREQ_H__
|
|
||||||
#define __LIMA_DEVFREQ_H__
|
|
||||||
|
|
||||||
+#include <linux/devfreq.h>
|
|
||||||
#include <linux/spinlock.h>
|
|
||||||
#include <linux/ktime.h>
|
|
||||||
|
|
||||||
@@ -18,6 +19,7 @@ struct lima_devfreq {
|
|
||||||
struct opp_table *clkname_opp_table;
|
|
||||||
struct opp_table *regulators_opp_table;
|
|
||||||
struct thermal_cooling_device *cooling;
|
|
||||||
+ struct devfreq_simple_ondemand_data gov_data;
|
|
||||||
|
|
||||||
ktime_t busy_time;
|
|
||||||
ktime_t idle_time;
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user