On Wed, Oct 16, 2019 at 09:16:41AM +0200, Sebastien Marie wrote: > uvm_fault(0xffffffff82011010, 0x18, 0, 1) -> e > kernel: page fault trap, code=0 > Stopped at dc_link_aux_transfer+0x85: movq 0x18(%r14),%rax > ddb{0}> trace > dc_link_aux_transfer(ffff80000013c400,0,ffffffff822db9ad,ffffffff822dbb30,1,0) > at dc_link_aux_transfer+0x85 > dm_dp_aux_transfer(ffff800000a838a0,ffffffff822db9a8) at > dm_dp_aux_transfer+0xdc > drm_dp_dpcd_access(ffff800000a838a0,9,0,ffffffff822dbb30,1) at > drm_dp_dpcd_access+0x8d > drm_dp_dpcd_read(ffff800000a838a0,0,ffffffff822dbb30,10) at > drm_dp_dpcd_read+0x45 > dm_helpers_dp_read_dpcd(ffff800000a33000,ffff800000a79800,0,ffffffff822dbb30,10) > at dm_helpers_dp_read_dpcd+0x43 > core_link_read_dpcd(ffff800000a79800,0,ffffffff822dbb30,10) at > core_link_read_dpcd+0x2d > retrieve_link_cap(ffff800000a79800) at retrieve_link_cap+0x40 > dc_link_detect(ffff800000a79800,0) at dc_link_detect+0x99e > dm_hw_init(ffff80000036d000) at dm_hw_init+0xa96 > amdgpu_device_init(ffff80000036d000,ffff80000037b000,ffff80000037b018,20016) > at amdgpu_device_init+0x1159 > amdgpu_attachhook(ffff80000036d000) at amdgpu_attachhook+0x3b > config_process_deferred_mountroot() at config_process_deferred_mountroot+0x6b > main(0) at main+0x745 > end trace frame: 0x0, count: -13
it fails in dc_link_aux_transfer() function, when calling aux_engine->funcs->acquire(aux_engine, ddc_pin) because aux_engine is 0x0. with debug printf: > ddc = 0xffff80000013c400 > dcc_pin = 0xffff80000070e160 > ddc_pin->pin_data->en = 3 > ddc->ctx->dc->res_pool->engines = 0xffff80000013adb0 > aux_engine = 0x0 633 int dc_link_aux_transfer(struct ddc_service *ddc, 634 unsigned int address, 635 uint8_t *reply, 636 void *buffer, 637 unsigned int size, 638 enum aux_transaction_type type, 639 enum i2caux_transaction_action action) 640 { 641 struct ddc *ddc_pin = ddc->ddc_pin; 642 struct aux_engine *aux_engine; 643 enum aux_channel_operation_result operation_result; 644 struct aux_request_transaction_data aux_req; 645 struct aux_reply_transaction_data aux_rep; 646 uint8_t returned_bytes = 0; 647 int res = -1; 648 uint32_t status; 649 650 memset(&aux_req, 0, sizeof(aux_req)); 651 memset(&aux_rep, 0, sizeof(aux_rep)); 652 653 printf("> ddc = %p\n", ddc); 654 printf("> dcc_pin = %p\n", ddc_pin); 655 printf("> ddc_pin->pin_data->en = %d\n", ddc_pin->pin_data->en); 656 printf("> ddc->ctx->dc->res_pool->engines = %p\n", ddc->ctx->dc->res_pool->engines); 657 658 aux_engine = ddc->ctx->dc->res_pool->engines[ddc_pin->pin_data->en]; 659 660 printf("> aux_engine = %p\n", aux_engine); 661 printf("> aux_engine->funcs = %p\n", aux_engine->funcs); 662 printf("> aux_engine->funcs->acquire = %p\n", aux_engine->funcs->acquire); 663 664 aux_engine->funcs->acquire(aux_engine, ddc_pin); 665 -- Sebastien Marie