diff --git a/projects/Rockchip/patches/linux/default/linux-0003-rockchip-from-5.13.patch b/projects/Rockchip/patches/linux/default/linux-0003-rockchip-from-5.13.patch deleted file mode 100644 index 59ab005aef..0000000000 --- a/projects/Rockchip/patches/linux/default/linux-0003-rockchip-from-5.13.patch +++ /dev/null @@ -1,318 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Ezequiel Garcia -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 ---- - 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 -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 ---- - 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 -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 -[Ezequiel: Forward port] -Signed-off-by: Ezequiel Garcia ---- - 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 - }, - { }, - }; diff --git a/projects/Rockchip/patches/linux/default/linux-0003-rockchip-from-next.patch b/projects/Rockchip/patches/linux/default/linux-0003-rockchip-from-next.patch index d505f26bfd..234c257969 100644 --- a/projects/Rockchip/patches/linux/default/linux-0003-rockchip-from-next.patch +++ b/projects/Rockchip/patches/linux/default/linux-0003-rockchip-from-next.patch @@ -1,45 +1,3 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Peter Geis -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 -Link: https://lore.kernel.org/r/20210511211335.2935163-2-pgwipeout@gmail.com -Signed-off-by: Mark Brown ---- - 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: Peter Geis Date: Tue, 11 May 2021 17:13:34 -0400 diff --git a/projects/Rockchip/patches/linux/default/linux-0004-rockchip-from-list.patch b/projects/Rockchip/patches/linux/default/linux-0004-rockchip-from-list.patch index 4fe61149e1..2f04777360 100644 --- a/projects/Rockchip/patches/linux/default/linux-0004-rockchip-from-list.patch +++ b/projects/Rockchip/patches/linux/default/linux-0004-rockchip-from-list.patch @@ -785,10 +785,10 @@ index ae86da0dc5bd..f5eb7de10128 100644 --- a/drivers/usb/dwc3/Makefile +++ b/drivers/usb/dwc3/Makefile @@ -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_QCOM) += dwc3-qcom.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 diff --git a/drivers/usb/dwc3/dwc3-rockchip-inno.c b/drivers/usb/dwc3/dwc3-rockchip-inno.c new file mode 100644 diff --git a/projects/Rockchip/patches/linux/default/linux-0010-v4l2-from-list.patch b/projects/Rockchip/patches/linux/default/linux-0010-v4l2-from-list.patch index d12a43215d..a835cda740 100644 --- a/projects/Rockchip/patches/linux/default/linux-0010-v4l2-from-list.patch +++ b/projects/Rockchip/patches/linux/default/linux-0010-v4l2-from-list.patch @@ -782,7 +782,7 @@ index c81ca5c7e979..a11474214bde 100644 +{ + 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); + if (ctx->valid_fmt) { + 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->height, 16); @@ -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; unsigned int width, height; - /* diff --git a/projects/Rockchip/patches/linux/default/linux-0021-drm-from-list.patch b/projects/Rockchip/patches/linux/default/linux-0021-drm-from-list.patch index 93bc774629..46a5a8f046 100644 --- a/projects/Rockchip/patches/linux/default/linux-0021-drm-from-list.patch +++ b/projects/Rockchip/patches/linux/default/linux-0021-drm-from-list.patch @@ -362,211 +362,3 @@ index 41edd0a421b2..4d463d50a63a 100644 DRM_DEV_ERROR(lvds->dev, "failed to get pm runtime: %d\n", ret); return ret; -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Lukasz Luba -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 ---- - 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 - #include - #include - -@@ -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 -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 -Reviewed-by: Steven Price -Reviewed-by: Rob Herring ---- - 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 -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 -Reviewed-by: Lukasz Luba -Reviewed-by: Qiang Yu ---- - 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 - #include - #include - -@@ -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;