--- /dev/null
+From f07ec85365807b3939f32d0094a6dd5ce065d1b9 Mon Sep 17 00:00:00 2001
+From: Yang Yingliang <yangyingliang@huawei.com>
+Date: Tue, 15 Jun 2021 20:52:39 +0800
+Subject: ARM: imx: add missing clk_disable_unprepare()
+
+From: Yang Yingliang <yangyingliang@huawei.com>
+
+commit f07ec85365807b3939f32d0094a6dd5ce065d1b9 upstream.
+
+clock source is prepared and enabled by clk_prepare_enable()
+in probe function, but no disable or unprepare in remove and
+error path.
+
+Fixes: 9454a0caff6a ("ARM: imx: add mmdc ipg clock operation for mmdc")
+Reported-by: Hulk Robot <hulkci@huawei.com>
+Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
+Reviewed-by: Dong Aisheng <aisheng.dong@nxp.com>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+Signed-off-by: Nobuhiro Iwamatsu (CIP) <nobuhiro1.iwamatsu@toshiba.co.jp>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/arm/mach-imx/mmdc.c | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+--- a/arch/arm/mach-imx/mmdc.c
++++ b/arch/arm/mach-imx/mmdc.c
+@@ -109,6 +109,7 @@ struct mmdc_pmu {
+ struct perf_event *mmdc_events[MMDC_NUM_COUNTERS];
+ struct hlist_node node;
+ struct fsl_mmdc_devtype_data *devtype_data;
++ struct clk *mmdc_ipg_clk;
+ };
+
+ /*
+@@ -474,11 +475,13 @@ static int imx_mmdc_remove(struct platfo
+ cpuhp_state_remove_instance_nocalls(cpuhp_mmdc_state, &pmu_mmdc->node);
+ perf_pmu_unregister(&pmu_mmdc->pmu);
+ iounmap(pmu_mmdc->mmdc_base);
++ clk_disable_unprepare(pmu_mmdc->mmdc_ipg_clk);
+ kfree(pmu_mmdc);
+ return 0;
+ }
+
+-static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_base)
++static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_base,
++ struct clk *mmdc_ipg_clk)
+ {
+ struct mmdc_pmu *pmu_mmdc;
+ char *name;
+@@ -506,6 +509,7 @@ static int imx_mmdc_perf_init(struct pla
+ }
+
+ mmdc_num = mmdc_pmu_init(pmu_mmdc, mmdc_base, &pdev->dev);
++ pmu_mmdc->mmdc_ipg_clk = mmdc_ipg_clk;
+ if (mmdc_num == 0)
+ name = "mmdc";
+ else
+@@ -579,9 +583,11 @@ static int imx_mmdc_probe(struct platfor
+ val &= ~(1 << BP_MMDC_MAPSR_PSD);
+ writel_relaxed(val, reg);
+
+- err = imx_mmdc_perf_init(pdev, mmdc_base);
+- if (err)
++ err = imx_mmdc_perf_init(pdev, mmdc_base, mmdc_ipg_clk);
++ if (err) {
+ iounmap(mmdc_base);
++ clk_disable_unprepare(mmdc_ipg_clk);
++ }
+
+ return err;
+ }
--- /dev/null
+From 20fb73911fec01f06592de1cdbca00b66602ebd7 Mon Sep 17 00:00:00 2001
+From: Colin Ian King <colin.king@canonical.com>
+Date: Thu, 15 Jul 2021 14:23:21 +0100
+Subject: ARM: imx: fix missing 3rd argument in macro imx_mmdc_perf_init
+
+From: Colin Ian King <colin.king@canonical.com>
+
+commit 20fb73911fec01f06592de1cdbca00b66602ebd7 upstream.
+
+The function imx_mmdc_perf_init recently had a 3rd argument added to
+it but the equivalent macro was not updated and is still the older
+2 argument version. Fix this by adding in the missing 3rd argumement
+mmdc_ipg_clk.
+
+Fixes: f07ec8536580 ("ARM: imx: add missing clk_disable_unprepare()")
+Signed-off-by: Colin Ian King <colin.king@canonical.com>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+Signed-off-by: Nobuhiro Iwamatsu (CIP) <nobuhiro1.iwamatsu@toshiba.co.jp>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/arm/mach-imx/mmdc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/arm/mach-imx/mmdc.c
++++ b/arch/arm/mach-imx/mmdc.c
+@@ -545,7 +545,7 @@ pmu_free:
+
+ #else
+ #define imx_mmdc_remove NULL
+-#define imx_mmdc_perf_init(pdev, mmdc_base) 0
++#define imx_mmdc_perf_init(pdev, mmdc_base, mmdc_ipg_clk) 0
+ #endif
+
+ static int imx_mmdc_probe(struct platform_device *pdev)