.. | .. |
---|
51 | 51 | static struct devfreq_simple_ondemand_data ondemand_data; |
---|
52 | 52 | |
---|
53 | 53 | static struct monitor_dev_profile mali_mdevp = { |
---|
54 | | - .type = MONITOR_TPYE_DEV, |
---|
| 54 | + .type = MONITOR_TYPE_DEV, |
---|
55 | 55 | .low_temp_adjust = rockchip_monitor_dev_low_temp_adjust, |
---|
56 | 56 | .high_temp_adjust = rockchip_monitor_dev_high_temp_adjust, |
---|
57 | 57 | }; |
---|
.. | .. |
---|
241 | 241 | |
---|
242 | 242 | static void kbase_devfreq_term_freq_table(struct kbase_device *kbdev) |
---|
243 | 243 | { |
---|
244 | | - struct devfreq_dev_profile *dp = kbdev->devfreq->profile; |
---|
| 244 | + struct devfreq_dev_profile *dp = &kbdev->devfreq_profile; |
---|
245 | 245 | |
---|
246 | 246 | 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; |
---|
247 | 254 | } |
---|
248 | 255 | |
---|
249 | 256 | static void kbase_devfreq_exit(struct device *dev) |
---|
250 | 257 | { |
---|
251 | 258 | struct kbase_device *kbdev = dev_get_drvdata(dev); |
---|
252 | 259 | |
---|
253 | | - kbase_devfreq_term_freq_table(kbdev); |
---|
| 260 | + if (kbdev) |
---|
| 261 | + kbase_devfreq_term_freq_table(kbdev); |
---|
254 | 262 | } |
---|
255 | 263 | |
---|
256 | 264 | static int kbase_devfreq_init_core_mask_table(struct kbase_device *kbdev) |
---|
.. | .. |
---|
358 | 366 | |
---|
359 | 367 | err = kbase_devfreq_init_core_mask_table(kbdev); |
---|
360 | 368 | if (err) |
---|
361 | | - return err; |
---|
| 369 | + goto init_core_mask_table_failed; |
---|
362 | 370 | |
---|
363 | 371 | of_property_read_u32(np, "upthreshold", |
---|
364 | 372 | &ondemand_data.upthreshold); |
---|
.. | .. |
---|
368 | 376 | kbdev->devfreq = devfreq_add_device(kbdev->dev, dp, |
---|
369 | 377 | "simple_ondemand", &ondemand_data); |
---|
370 | 378 | 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; |
---|
373 | 383 | } |
---|
374 | 384 | |
---|
375 | 385 | /* devfreq_add_device only copies a few of kbdev->dev's fields, so |
---|
.. | .. |
---|
429 | 439 | else |
---|
430 | 440 | kbdev->devfreq = NULL; |
---|
431 | 441 | |
---|
| 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 | + |
---|
432 | 448 | return err; |
---|
433 | 449 | } |
---|
434 | 450 | |
---|
.. | .. |
---|
454 | 470 | else |
---|
455 | 471 | kbdev->devfreq = NULL; |
---|
456 | 472 | |
---|
457 | | - kfree(kbdev->opp_table); |
---|
| 473 | + kbase_devfreq_term_core_mask_table(kbdev); |
---|
458 | 474 | } |
---|