From 102a0743326a03cd1a1202ceda21e175b7d3575c Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Tue, 20 Feb 2024 01:20:52 +0000
Subject: [PATCH] add new system file

---
 kernel/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_devfreq.c |   30 +++++++++++++++++++++++-------
 1 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/kernel/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_devfreq.c b/kernel/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_devfreq.c
index ab14bc2..4e8e56e 100644
--- a/kernel/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_devfreq.c
+++ b/kernel/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_devfreq.c
@@ -51,7 +51,7 @@
 static struct devfreq_simple_ondemand_data ondemand_data;
 
 static struct monitor_dev_profile mali_mdevp = {
-	.type = MONITOR_TPYE_DEV,
+	.type = MONITOR_TYPE_DEV,
 	.low_temp_adjust = rockchip_monitor_dev_low_temp_adjust,
 	.high_temp_adjust = rockchip_monitor_dev_high_temp_adjust,
 };
@@ -241,16 +241,24 @@
 
 static void kbase_devfreq_term_freq_table(struct kbase_device *kbdev)
 {
-	struct devfreq_dev_profile *dp = kbdev->devfreq->profile;
+	struct devfreq_dev_profile *dp = &kbdev->devfreq_profile;
 
 	kfree(dp->freq_table);
+	dp->freq_table = NULL;
+}
+
+static void kbase_devfreq_term_core_mask_table(struct kbase_device *kbdev)
+{
+	kfree(kbdev->opp_table);
+	kbdev->opp_table = NULL;
 }
 
 static void kbase_devfreq_exit(struct device *dev)
 {
 	struct kbase_device *kbdev = dev_get_drvdata(dev);
 
-	kbase_devfreq_term_freq_table(kbdev);
+	if (kbdev)
+		kbase_devfreq_term_freq_table(kbdev);
 }
 
 static int kbase_devfreq_init_core_mask_table(struct kbase_device *kbdev)
@@ -358,7 +366,7 @@
 
 	err = kbase_devfreq_init_core_mask_table(kbdev);
 	if (err)
-		return err;
+		goto init_core_mask_table_failed;
 
 	of_property_read_u32(np, "upthreshold",
 			     &ondemand_data.upthreshold);
@@ -368,8 +376,10 @@
 	kbdev->devfreq = devfreq_add_device(kbdev->dev, dp,
 				"simple_ondemand", &ondemand_data);
 	if (IS_ERR(kbdev->devfreq)) {
-		kbase_devfreq_term_freq_table(kbdev);
-		return PTR_ERR(kbdev->devfreq);
+		err = PTR_ERR(kbdev->devfreq);
+		kbdev->devfreq = NULL;
+		dev_err(kbdev->dev, "Fail to add devfreq device(%d)", err);
+		goto devfreq_add_dev_failed;
 	}
 
 	/* devfreq_add_device only copies a few of kbdev->dev's fields, so
@@ -429,6 +439,12 @@
 	else
 		kbdev->devfreq = NULL;
 
+devfreq_add_dev_failed:
+	kbase_devfreq_term_core_mask_table(kbdev);
+
+init_core_mask_table_failed:
+	kbase_devfreq_term_freq_table(kbdev);
+
 	return err;
 }
 
@@ -454,5 +470,5 @@
 	else
 		kbdev->devfreq = NULL;
 
-	kfree(kbdev->opp_table);
+	kbase_devfreq_term_core_mask_table(kbdev);
 }

--
Gitblit v1.6.2