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

Reply via email to