| .. | .. |
|---|
| 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 | } |
|---|