hc
2023-12-06 08f87f769b595151be1afeff53e144f543faa614
kernel/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_devfreq.c
....@@ -51,7 +51,7 @@
5151 static struct devfreq_simple_ondemand_data ondemand_data;
5252
5353 static struct monitor_dev_profile mali_mdevp = {
54
- .type = MONITOR_TPYE_DEV,
54
+ .type = MONITOR_TYPE_DEV,
5555 .low_temp_adjust = rockchip_monitor_dev_low_temp_adjust,
5656 .high_temp_adjust = rockchip_monitor_dev_high_temp_adjust,
5757 };
....@@ -241,16 +241,24 @@
241241
242242 static void kbase_devfreq_term_freq_table(struct kbase_device *kbdev)
243243 {
244
- struct devfreq_dev_profile *dp = kbdev->devfreq->profile;
244
+ struct devfreq_dev_profile *dp = &kbdev->devfreq_profile;
245245
246246 kfree(dp->freq_table);
247
+ dp->freq_table = NULL;
248
+}
249
+
250
+static void kbase_devfreq_term_core_mask_table(struct kbase_device *kbdev)
251
+{
252
+ kfree(kbdev->opp_table);
253
+ kbdev->opp_table = NULL;
247254 }
248255
249256 static void kbase_devfreq_exit(struct device *dev)
250257 {
251258 struct kbase_device *kbdev = dev_get_drvdata(dev);
252259
253
- kbase_devfreq_term_freq_table(kbdev);
260
+ if (kbdev)
261
+ kbase_devfreq_term_freq_table(kbdev);
254262 }
255263
256264 static int kbase_devfreq_init_core_mask_table(struct kbase_device *kbdev)
....@@ -358,7 +366,7 @@
358366
359367 err = kbase_devfreq_init_core_mask_table(kbdev);
360368 if (err)
361
- return err;
369
+ goto init_core_mask_table_failed;
362370
363371 of_property_read_u32(np, "upthreshold",
364372 &ondemand_data.upthreshold);
....@@ -368,8 +376,10 @@
368376 kbdev->devfreq = devfreq_add_device(kbdev->dev, dp,
369377 "simple_ondemand", &ondemand_data);
370378 if (IS_ERR(kbdev->devfreq)) {
371
- kbase_devfreq_term_freq_table(kbdev);
372
- return PTR_ERR(kbdev->devfreq);
379
+ err = PTR_ERR(kbdev->devfreq);
380
+ kbdev->devfreq = NULL;
381
+ dev_err(kbdev->dev, "Fail to add devfreq device(%d)", err);
382
+ goto devfreq_add_dev_failed;
373383 }
374384
375385 /* devfreq_add_device only copies a few of kbdev->dev's fields, so
....@@ -429,6 +439,12 @@
429439 else
430440 kbdev->devfreq = NULL;
431441
442
+devfreq_add_dev_failed:
443
+ kbase_devfreq_term_core_mask_table(kbdev);
444
+
445
+init_core_mask_table_failed:
446
+ kbase_devfreq_term_freq_table(kbdev);
447
+
432448 return err;
433449 }
434450
....@@ -454,5 +470,5 @@
454470 else
455471 kbdev->devfreq = NULL;
456472
457
- kfree(kbdev->opp_table);
473
+ kbase_devfreq_term_core_mask_table(kbdev);
458474 }