Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'drm-fixes-2020-10-09' of git://anongit.freedesktop.org/drm/drm

Pull amdgpu drm fixes from Dave Airlie:
"Fixes trickling in this week.

Alex had a final fix for the newest GPU they introduced in rc1, along
with one build regression and one crasher fix.

Cross my fingers that's it for 5.9:

- Fix a crash on renoir if you override the IP discovery parameter

- Fix the build on ARC platforms

- Display fix for Sienna Cichlid"

* tag 'drm-fixes-2020-10-09' of git://anongit.freedesktop.org/drm/drm:
drm/amd/display: Change ABM config init interface
drm/amdgpu/swsmu: fix ARC build errors
drm/amdgpu: fix NULL pointer dereference for Renoir

+48 -15
+5 -5
drivers/gpu/drm/amd/amdgpu/soc15.c
··· 694 694 * it doesn't support SRIOV. */ 695 695 if (amdgpu_discovery) { 696 696 r = amdgpu_discovery_reg_base_init(adev); 697 - if (r) { 698 - DRM_WARN("failed to init reg base from ip discovery table, " 699 - "fallback to legacy init method\n"); 700 - vega10_reg_base_init(adev); 701 - } 697 + if (r == 0) 698 + break; 699 + DRM_WARN("failed to init reg base from ip discovery table, " 700 + "fallback to legacy init method\n"); 702 701 } 702 + vega10_reg_base_init(adev); 703 703 break; 704 704 case CHIP_VEGA20: 705 705 vega20_reg_base_init(adev);
+1 -1
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
··· 1409 1409 if (dmcu) 1410 1410 ret = dmcu_load_iram(dmcu, params); 1411 1411 else if (adev->dm.dc->ctx->dmub_srv) 1412 - ret = dmub_init_abm_config(adev->dm.dc->res_pool->abm, params); 1412 + ret = dmub_init_abm_config(adev->dm.dc->res_pool, params); 1413 1413 1414 1414 if (!ret) 1415 1415 return -EINVAL;
+15 -4
drivers/gpu/drm/amd/display/modules/power/power_helpers.c
··· 657 657 params, ram_table, big_endian); 658 658 } 659 659 660 - bool dmub_init_abm_config(struct abm *abm, 660 + bool dmub_init_abm_config(struct resource_pool *res_pool, 661 661 struct dmcu_iram_parameters params) 662 662 { 663 663 struct iram_table_v_2_2 ram_table; ··· 665 665 bool result = false; 666 666 uint32_t i, j = 0; 667 667 668 - if (abm == NULL) 668 + #if defined(CONFIG_DRM_AMD_DC_DCN3_0) 669 + if (res_pool->abm == NULL && res_pool->multiple_abms[0] == NULL) 669 670 return false; 671 + #else 672 + if (res_pool->abm == NULL) 673 + return false; 674 + #endif 670 675 671 676 memset(&ram_table, 0, sizeof(ram_table)); 672 677 memset(&config, 0, sizeof(config)); ··· 712 707 713 708 config.min_abm_backlight = ram_table.min_abm_backlight; 714 709 715 - result = abm->funcs->init_abm_config( 716 - abm, (char *)(&config), sizeof(struct abm_config_table)); 710 + #if defined(CONFIG_DRM_AMD_DC_DCN3_0) 711 + if (res_pool->multiple_abms[0]) { 712 + result = res_pool->multiple_abms[0]->funcs->init_abm_config( 713 + res_pool->multiple_abms[0], (char *)(&config), sizeof(struct abm_config_table)); 714 + } else 715 + #endif 716 + result = res_pool->abm->funcs->init_abm_config( 717 + res_pool->abm, (char *)(&config), sizeof(struct abm_config_table)); 717 718 718 719 return result; 719 720 }
+3 -1
drivers/gpu/drm/amd/display/modules/power/power_helpers.h
··· 28 28 #include "dc/inc/hw/dmcu.h" 29 29 #include "dc/inc/hw/abm.h" 30 30 31 + struct resource_pool; 32 + 31 33 32 34 enum abm_defines { 33 35 abm_defines_max_level = 4, ··· 47 45 48 46 bool dmcu_load_iram(struct dmcu *dmcu, 49 47 struct dmcu_iram_parameters params); 50 - bool dmub_init_abm_config(struct abm *abm, 48 + bool dmub_init_abm_config(struct resource_pool *res_pool, 51 49 struct dmcu_iram_parameters params); 52 50 53 51 #endif /* MODULES_POWER_POWER_HELPERS_H_ */
+12 -2
drivers/gpu/drm/amd/powerplay/navi10_ppt.c
··· 2265 2265 { 2266 2266 int i; 2267 2267 2268 - BUG_ON(numbytes > MAX_SW_I2C_COMMANDS); 2269 - 2270 2268 req->I2CcontrollerPort = 0; 2271 2269 req->I2CSpeed = 2; 2272 2270 req->SlaveAddress = address; ··· 2302 2304 struct smu_table_context *smu_table = &adev->smu.smu_table; 2303 2305 struct smu_table *table = &smu_table->driver_table; 2304 2306 2307 + if (numbytes > MAX_SW_I2C_COMMANDS) { 2308 + dev_err(adev->dev, "numbytes requested %d is over max allowed %d\n", 2309 + numbytes, MAX_SW_I2C_COMMANDS); 2310 + return -EINVAL; 2311 + } 2312 + 2305 2313 memset(&req, 0, sizeof(req)); 2306 2314 navi10_fill_i2c_req(&req, false, address, numbytes, data); 2307 2315 ··· 2343 2339 uint32_t ret; 2344 2340 SwI2cRequest_t req; 2345 2341 struct amdgpu_device *adev = to_amdgpu_device(control); 2342 + 2343 + if (numbytes > MAX_SW_I2C_COMMANDS) { 2344 + dev_err(adev->dev, "numbytes requested %d is over max allowed %d\n", 2345 + numbytes, MAX_SW_I2C_COMMANDS); 2346 + return -EINVAL; 2347 + } 2346 2348 2347 2349 memset(&req, 0, sizeof(req)); 2348 2350 navi10_fill_i2c_req(&req, true, address, numbytes, data);
+12 -2
drivers/gpu/drm/amd/powerplay/sienna_cichlid_ppt.c
··· 2445 2445 { 2446 2446 int i; 2447 2447 2448 - BUG_ON(numbytes > MAX_SW_I2C_COMMANDS); 2449 - 2450 2448 req->I2CcontrollerPort = 0; 2451 2449 req->I2CSpeed = 2; 2452 2450 req->SlaveAddress = address; ··· 2482 2484 struct smu_table_context *smu_table = &adev->smu.smu_table; 2483 2485 struct smu_table *table = &smu_table->driver_table; 2484 2486 2487 + if (numbytes > MAX_SW_I2C_COMMANDS) { 2488 + dev_err(adev->dev, "numbytes requested %d is over max allowed %d\n", 2489 + numbytes, MAX_SW_I2C_COMMANDS); 2490 + return -EINVAL; 2491 + } 2492 + 2485 2493 memset(&req, 0, sizeof(req)); 2486 2494 sienna_cichlid_fill_i2c_req(&req, false, address, numbytes, data); 2487 2495 ··· 2523 2519 uint32_t ret; 2524 2520 SwI2cRequest_t req; 2525 2521 struct amdgpu_device *adev = to_amdgpu_device(control); 2522 + 2523 + if (numbytes > MAX_SW_I2C_COMMANDS) { 2524 + dev_err(adev->dev, "numbytes requested %d is over max allowed %d\n", 2525 + numbytes, MAX_SW_I2C_COMMANDS); 2526 + return -EINVAL; 2527 + } 2526 2528 2527 2529 memset(&req, 0, sizeof(req)); 2528 2530 sienna_cichlid_fill_i2c_req(&req, true, address, numbytes, data);