OSDN Git Service

drm/amd/display: correct rn NUM_VMID
authorDmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
Mon, 4 May 2020 19:34:30 +0000 (15:34 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 21 May 2020 16:48:43 +0000 (12:48 -0400)
Save the correct num vmid during resource creation and fix RN gpuvm
level from 1 to 16 vmid entries.

Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
Reviewed-by: Eric Bernstein <Eric.Bernstein@amd.com>
Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hubbub.h
drivers/gpu/drm/amd/display/dc/dcn21/dcn21_hubbub.c
drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c
drivers/gpu/drm/amd/display/modules/vmid/vmid.c

index 501532d..c478213 100644 (file)
@@ -80,6 +80,7 @@ struct dcn20_hubbub {
        const struct dcn_hubbub_mask *masks;
        unsigned int debug_test_index_pstate;
        struct dcn_watermark_set watermarks;
+       int num_vmid;
        struct dcn20_vmid vmid[16];
        unsigned int detile_buf_size;
 };
index 5e2d14b..129f0b6 100644 (file)
 #define FN(reg_name, field_name) \
        hubbub1->shifts->field_name, hubbub1->masks->field_name
 
-#ifdef NUM_VMID
-#undef NUM_VMID
-#endif
-#define NUM_VMID 16
-
 static uint32_t convert_and_clamp(
        uint32_t wm_ns,
        uint32_t refclk_mhz,
@@ -138,7 +133,7 @@ int hubbub21_init_dchub(struct hubbub *hubbub,
 
        dcn21_dchvm_init(hubbub);
 
-       return NUM_VMID;
+       return hubbub1->num_vmid;
 }
 
 bool hubbub21_program_urgent_watermarks(
index 419cdde..f00a568 100644 (file)
@@ -805,7 +805,7 @@ static const struct resource_caps res_cap_rn = {
                .num_pll = 5,  // maybe 3 because the last two used for USB-c
                .num_dwb = 1,
                .num_ddc = 5,
-               .num_vmid = 1,
+               .num_vmid = 16,
                .num_dsc = 3,
 };
 
@@ -1295,6 +1295,7 @@ static struct hubbub *dcn21_hubbub_create(struct dc_context *ctx)
                vmid->shifts = &vmid_shifts;
                vmid->masks = &vmid_masks;
        }
+       hubbub->num_vmid = res_cap_rn.num_vmid;
 
        return &hubbub->base;
 }
index 00f132f..61ee4be 100644 (file)
@@ -112,9 +112,12 @@ uint8_t mod_vmid_get_for_ptb(struct mod_vmid *mod_vmid, uint64_t ptb)
                        evict_vmids(core_vmid);
 
                vmid = get_next_available_vmid(core_vmid);
-               add_ptb_to_table(core_vmid, vmid, ptb);
+               if (vmid != -1) {
+                       add_ptb_to_table(core_vmid, vmid, ptb);
 
-               dc_setup_vm_context(core_vmid->dc, &va_config, vmid);
+                       dc_setup_vm_context(core_vmid->dc, &va_config, vmid);
+               } else
+                       ASSERT(0);
        }
 
        return vmid;