drm fixes for 6.14-rc3
amdgpu: - Fix shutdown regression on old APUs - Fix compute queue hang on gfx9 APUs - Fix possible invalid access in PSP failure path - Avoid possible buffer overflow in pptable override amdkfd: - Properly free gang bo in failure path - GFX12 trap handler fix i915: - selftest fix: avoid using uninitialized context xe: - Remove bo->clients out of bos_lock area - Carve out wopcm portion from the stolen memory tests: - fix lockdep with hdmi infrastructure tests host1x: - fix uninitialised mutex usage panthor: - fix uninit variable hibmc: - fix missing Kconfig select -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEEKbZHaGwW9KfbeusDHTzWXnEhr4FAmeuuOsACgkQDHTzWXnE hr6FpQ//U31/Gvz+T5l5+5mRy0QTsc8bJ0VECVIaFvhWvwsQP5ZAi4P/mPhsDbIP p/s5UQKRSFPpQDKXe862XBMec7ZY5pUQZVEx++BxrVOhCFmIqdghjdg+gGYs3M+S FN77HY+VFL7m3BrvOHXSfrFPmBtl4QZzqu0hKKgKvPt3mK0AzYjT6NFKpGudPxiW eD679F4L8zJDLfMNldFSdElft8Xe+VwYtoOJwPysM61e/f340k+byti4/sdtcQHX a90EBOzdEYaPhTFta5MWZmxyHdbiWNYwuG1j3K+PBY54HHmvqczoY6HCEwINYkDu 4IbNJI/LwGXXwjTJcVBfribnqj3rSzOIxVvjnDI8XfJ4MoQL4W/Ci1Mvui2SmSsn Px/f4E9BVBOQJo7X6vfK8ZzAHov70kTjcOtrdX3/Ve4TSuOzGzizHwb3/GpClNDK uvKr16kppfDTEfV74TaVS+Mkl4MBFFfY+lwaqg9KZa8b6/PfcvqX0o9W+75q0wAC U0vPmHwPWLfEFv/naOer3cUUY3p/3FujKyx8YlHuXNCi4DwvgCkxH3ouoKIAzMLo S6qw7ux/CbbCmZ1TvKtjU9egH5FYPskj5Rz5uSGMhvZBqgDFjsHZpmwX68sVUID7 LerfTfJxtIAHvh4HCoZmPu/KH/yLlOF5EyPBg+pyGtz8Dzh6lag= =p2pF -----END PGP SIGNATURE----- Merge tag 'drm-fixes-2025-02-14' of https://gitlab.freedesktop.org/drm/kernel Pull drm fixes from Dave Airlie: "Weekly drm fixes pull request, nothing too unusual, the hdmi tests needs a bit of refactoring after lockdep shouted at them, otherwise amdgpu and xe lead and a few misc otherwise. amdgpu: - Fix shutdown regression on old APUs - Fix compute queue hang on gfx9 APUs - Fix possible invalid access in PSP failure path - Avoid possible buffer overflow in pptable override amdkfd: - Properly free gang bo in failure path - GFX12 trap handler fix i915: - selftest fix: avoid using uninitialized context xe: - Remove bo->clients out of bos_lock area - Carve out wopcm portion from the stolen memory tests: - fix lockdep with hdmi infrastructure tests host1x: - fix uninitialised mutex usage panthor: - fix uninit variable hibmc: - fix missing Kconfig select" * tag 'drm-fixes-2025-02-14' of https://gitlab.freedesktop.org/drm/kernel: drm: Fix DSC BPP increment decoding drm/amdgpu: avoid buffer overflow attach in smu_sys_set_pp_table() drm/amdkfd: Ensure consistent barrier state saved in gfx12 trap handler drm/amdgpu: bail out when failed to load fw in psp_init_cap_microcode() amdkfd: properly free gang_ctx_bo when failed to init user queue drm/amdgpu: bump version for RV/PCO compute fix drm/amdgpu/gfx9: manually control gfxoff for CS on RV drm/amdgpu/pm: fix UVD handing in amdgpu_dpm_set_powergating_by_smu() drm/xe: Carve out wopcm portion from the stolen memory drm/i915/selftests: avoid using uninitialized context drm/xe/client: bo->client does not need bos_lock drm/hisilicon/hibmc: select CONFIG_DRM_DISPLAY_DP_HELPER drm/panthor: avoid garbage value in panthor_ioctl_dev_query() gpu: host1x: Fix a use of uninitialized mutex drm/tests: hdmi: Fix recursive locking drm/tests: hdmi: Reorder DRM entities variables assignment drm/tests: hdmi: Remove redundant assignments drm/tests: hdmi: Fix WW_MUTEX_SLOWPATH failures
This commit is contained in:
commit
128c8f96eb
18 changed files with 200 additions and 144 deletions
|
@ -120,9 +120,10 @@
|
|||
* - 3.58.0 - Add GFX12 DCC support
|
||||
* - 3.59.0 - Cleared VRAM
|
||||
* - 3.60.0 - Add AMDGPU_TILING_GFX12_DCC_WRITE_COMPRESS_DISABLE (Vulkan requirement)
|
||||
* - 3.61.0 - Contains fix for RV/PCO compute queues
|
||||
*/
|
||||
#define KMS_DRIVER_MAJOR 3
|
||||
#define KMS_DRIVER_MINOR 60
|
||||
#define KMS_DRIVER_MINOR 61
|
||||
#define KMS_DRIVER_PATCHLEVEL 0
|
||||
|
||||
/*
|
||||
|
|
|
@ -3815,9 +3815,10 @@ int psp_init_cap_microcode(struct psp_context *psp, const char *chip_name)
|
|||
if (err == -ENODEV) {
|
||||
dev_warn(adev->dev, "cap microcode does not exist, skip\n");
|
||||
err = 0;
|
||||
goto out;
|
||||
} else {
|
||||
dev_err(adev->dev, "fail to initialize cap microcode\n");
|
||||
}
|
||||
dev_err(adev->dev, "fail to initialize cap microcode\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
info = &adev->firmware.ucode[AMDGPU_UCODE_ID_CAP];
|
||||
|
|
|
@ -7437,6 +7437,38 @@ static void gfx_v9_0_ring_emit_cleaner_shader(struct amdgpu_ring *ring)
|
|||
amdgpu_ring_write(ring, 0); /* RESERVED field, programmed to zero */
|
||||
}
|
||||
|
||||
static void gfx_v9_0_ring_begin_use_compute(struct amdgpu_ring *ring)
|
||||
{
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
struct amdgpu_ip_block *gfx_block =
|
||||
amdgpu_device_ip_get_ip_block(adev, AMD_IP_BLOCK_TYPE_GFX);
|
||||
|
||||
amdgpu_gfx_enforce_isolation_ring_begin_use(ring);
|
||||
|
||||
/* Raven and PCO APUs seem to have stability issues
|
||||
* with compute and gfxoff and gfx pg. Disable gfx pg during
|
||||
* submission and allow again afterwards.
|
||||
*/
|
||||
if (gfx_block && amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 1, 0))
|
||||
gfx_v9_0_set_powergating_state(gfx_block, AMD_PG_STATE_UNGATE);
|
||||
}
|
||||
|
||||
static void gfx_v9_0_ring_end_use_compute(struct amdgpu_ring *ring)
|
||||
{
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
struct amdgpu_ip_block *gfx_block =
|
||||
amdgpu_device_ip_get_ip_block(adev, AMD_IP_BLOCK_TYPE_GFX);
|
||||
|
||||
/* Raven and PCO APUs seem to have stability issues
|
||||
* with compute and gfxoff and gfx pg. Disable gfx pg during
|
||||
* submission and allow again afterwards.
|
||||
*/
|
||||
if (gfx_block && amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 1, 0))
|
||||
gfx_v9_0_set_powergating_state(gfx_block, AMD_PG_STATE_GATE);
|
||||
|
||||
amdgpu_gfx_enforce_isolation_ring_end_use(ring);
|
||||
}
|
||||
|
||||
static const struct amd_ip_funcs gfx_v9_0_ip_funcs = {
|
||||
.name = "gfx_v9_0",
|
||||
.early_init = gfx_v9_0_early_init,
|
||||
|
@ -7613,8 +7645,8 @@ static const struct amdgpu_ring_funcs gfx_v9_0_ring_funcs_compute = {
|
|||
.emit_wave_limit = gfx_v9_0_emit_wave_limit,
|
||||
.reset = gfx_v9_0_reset_kcq,
|
||||
.emit_cleaner_shader = gfx_v9_0_ring_emit_cleaner_shader,
|
||||
.begin_use = amdgpu_gfx_enforce_isolation_ring_begin_use,
|
||||
.end_use = amdgpu_gfx_enforce_isolation_ring_end_use,
|
||||
.begin_use = gfx_v9_0_ring_begin_use_compute,
|
||||
.end_use = gfx_v9_0_ring_end_use_compute,
|
||||
};
|
||||
|
||||
static const struct amdgpu_ring_funcs gfx_v9_0_ring_funcs_kiq = {
|
||||
|
|
|
@ -4121,7 +4121,8 @@ static const uint32_t cwsr_trap_gfx12_hex[] = {
|
|||
0x0000ffff, 0x8bfe7e7e,
|
||||
0x8bea6a6a, 0xb97af804,
|
||||
0xbe804ec2, 0xbf94fffe,
|
||||
0xbe804a6c, 0xbfb10000,
|
||||
0xbe804a6c, 0xbe804ec2,
|
||||
0xbf94fffe, 0xbfb10000,
|
||||
0xbf9f0000, 0xbf9f0000,
|
||||
0xbf9f0000, 0xbf9f0000,
|
||||
0xbf9f0000, 0x00000000,
|
||||
|
|
|
@ -1049,6 +1049,10 @@ L_SKIP_BARRIER_RESTORE:
|
|||
s_rfe_b64 s_restore_pc_lo //Return to the main shader program and resume execution
|
||||
|
||||
L_END_PGM:
|
||||
// Make sure that no wave of the workgroup can exit the trap handler
|
||||
// before the workgroup barrier state is saved.
|
||||
s_barrier_signal -2
|
||||
s_barrier_wait -2
|
||||
s_endpgm_saved
|
||||
end
|
||||
|
||||
|
|
|
@ -300,7 +300,7 @@ static int init_user_queue(struct process_queue_manager *pqm,
|
|||
return 0;
|
||||
|
||||
free_gang_ctx_bo:
|
||||
amdgpu_amdkfd_free_gtt_mem(dev->adev, (*q)->gang_ctx_bo);
|
||||
amdgpu_amdkfd_free_gtt_mem(dev->adev, &(*q)->gang_ctx_bo);
|
||||
cleanup:
|
||||
uninit_queue(*q);
|
||||
*q = NULL;
|
||||
|
|
|
@ -78,7 +78,7 @@ int amdgpu_dpm_set_powergating_by_smu(struct amdgpu_device *adev,
|
|||
int ret = 0;
|
||||
const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs;
|
||||
enum ip_power_state pwr_state = gate ? POWER_STATE_OFF : POWER_STATE_ON;
|
||||
bool is_vcn = (block_type == AMD_IP_BLOCK_TYPE_UVD || block_type == AMD_IP_BLOCK_TYPE_VCN);
|
||||
bool is_vcn = block_type == AMD_IP_BLOCK_TYPE_VCN;
|
||||
|
||||
if (atomic_read(&adev->pm.pwr_state[block_type]) == pwr_state &&
|
||||
(!is_vcn || adev->vcn.num_vcn_inst == 1)) {
|
||||
|
|
|
@ -612,7 +612,8 @@ static int smu_sys_set_pp_table(void *handle,
|
|||
return -EIO;
|
||||
}
|
||||
|
||||
if (!smu_table->hardcode_pptable) {
|
||||
if (!smu_table->hardcode_pptable || smu_table->power_play_table_size < size) {
|
||||
kfree(smu_table->hardcode_pptable);
|
||||
smu_table->hardcode_pptable = kzalloc(size, GFP_KERNEL);
|
||||
if (!smu_table->hardcode_pptable)
|
||||
return -ENOMEM;
|
||||
|
|
|
@ -2544,7 +2544,7 @@ u8 drm_dp_dsc_sink_bpp_incr(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE])
|
|||
{
|
||||
u8 bpp_increment_dpcd = dsc_dpcd[DP_DSC_BITS_PER_PIXEL_INC - DP_DSC_SUPPORT];
|
||||
|
||||
switch (bpp_increment_dpcd) {
|
||||
switch (bpp_increment_dpcd & DP_DSC_BITS_PER_PIXEL_MASK) {
|
||||
case DP_DSC_BITS_PER_PIXEL_1_16:
|
||||
return 16;
|
||||
case DP_DSC_BITS_PER_PIXEL_1_8:
|
||||
|
|
|
@ -4,6 +4,8 @@ config DRM_HISI_HIBMC
|
|||
depends on DRM && PCI
|
||||
depends on MMU
|
||||
select DRM_CLIENT_SELECTION
|
||||
select DRM_DISPLAY_HELPER
|
||||
select DRM_DISPLAY_DP_HELPER
|
||||
select DRM_KMS_HELPER
|
||||
select DRM_VRAM_HELPER
|
||||
select DRM_TTM
|
||||
|
|
|
@ -168,7 +168,7 @@ static int igt_ppgtt_alloc(void *arg)
|
|||
return PTR_ERR(ppgtt);
|
||||
|
||||
if (!ppgtt->vm.allocate_va_range)
|
||||
goto err_ppgtt_cleanup;
|
||||
goto ppgtt_vm_put;
|
||||
|
||||
/*
|
||||
* While we only allocate the page tables here and so we could
|
||||
|
@ -236,7 +236,7 @@ err_ppgtt_cleanup:
|
|||
goto retry;
|
||||
}
|
||||
i915_gem_ww_ctx_fini(&ww);
|
||||
|
||||
ppgtt_vm_put:
|
||||
i915_vm_put(&ppgtt->vm);
|
||||
return err;
|
||||
}
|
||||
|
|
|
@ -802,6 +802,7 @@ static void panthor_query_group_priorities_info(struct drm_file *file,
|
|||
{
|
||||
int prio;
|
||||
|
||||
memset(arg, 0, sizeof(*arg));
|
||||
for (prio = PANTHOR_GROUP_PRIORITY_REALTIME; prio >= 0; prio--) {
|
||||
if (!group_priority_permit(file, prio))
|
||||
arg->allowed_mask |= BIT(prio);
|
||||
|
|
|
@ -70,10 +70,17 @@ static int light_up_connector(struct kunit *test,
|
|||
state = drm_kunit_helper_atomic_state_alloc(test, drm, ctx);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state);
|
||||
|
||||
retry:
|
||||
conn_state = drm_atomic_get_connector_state(state, connector);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state);
|
||||
|
||||
ret = drm_atomic_set_crtc_for_connector(conn_state, crtc);
|
||||
if (ret == -EDEADLK) {
|
||||
drm_atomic_state_clear(state);
|
||||
ret = drm_modeset_backoff(ctx);
|
||||
if (!ret)
|
||||
goto retry;
|
||||
}
|
||||
KUNIT_EXPECT_EQ(test, ret, 0);
|
||||
|
||||
crtc_state = drm_atomic_get_crtc_state(state, crtc);
|
||||
|
@ -282,15 +289,16 @@ static void drm_test_check_broadcast_rgb_crtc_mode_changed(struct kunit *test)
|
|||
8);
|
||||
KUNIT_ASSERT_NOT_NULL(test, priv);
|
||||
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
conn = &priv->connector;
|
||||
|
||||
preferred = find_preferred_mode(conn);
|
||||
KUNIT_ASSERT_NOT_NULL(test, preferred);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
|
||||
KUNIT_ASSERT_EQ(test, ret, 0);
|
||||
|
||||
|
@ -345,15 +353,16 @@ static void drm_test_check_broadcast_rgb_crtc_mode_not_changed(struct kunit *tes
|
|||
8);
|
||||
KUNIT_ASSERT_NOT_NULL(test, priv);
|
||||
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
conn = &priv->connector;
|
||||
|
||||
preferred = find_preferred_mode(conn);
|
||||
KUNIT_ASSERT_NOT_NULL(test, preferred);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
|
||||
KUNIT_ASSERT_EQ(test, ret, 0);
|
||||
|
||||
|
@ -408,18 +417,18 @@ static void drm_test_check_broadcast_rgb_auto_cea_mode(struct kunit *test)
|
|||
8);
|
||||
KUNIT_ASSERT_NOT_NULL(test, priv);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
conn = &priv->connector;
|
||||
KUNIT_ASSERT_TRUE(test, conn->display_info.is_hdmi);
|
||||
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
preferred = find_preferred_mode(conn);
|
||||
KUNIT_ASSERT_NOT_NULL(test, preferred);
|
||||
KUNIT_ASSERT_NE(test, drm_match_cea_mode(preferred), 1);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
|
||||
KUNIT_ASSERT_EQ(test, ret, 0);
|
||||
|
||||
|
@ -474,7 +483,6 @@ static void drm_test_check_broadcast_rgb_auto_cea_mode_vic_1(struct kunit *test)
|
|||
mode = drm_kunit_display_mode_from_cea_vic(test, drm, 1);
|
||||
KUNIT_ASSERT_NOT_NULL(test, mode);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
ret = light_up_connector(test, drm, crtc, conn, mode, ctx);
|
||||
KUNIT_ASSERT_EQ(test, ret, 0);
|
||||
|
@ -520,18 +528,18 @@ static void drm_test_check_broadcast_rgb_full_cea_mode(struct kunit *test)
|
|||
8);
|
||||
KUNIT_ASSERT_NOT_NULL(test, priv);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
conn = &priv->connector;
|
||||
KUNIT_ASSERT_TRUE(test, conn->display_info.is_hdmi);
|
||||
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
preferred = find_preferred_mode(conn);
|
||||
KUNIT_ASSERT_NOT_NULL(test, preferred);
|
||||
KUNIT_ASSERT_NE(test, drm_match_cea_mode(preferred), 1);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
|
||||
KUNIT_ASSERT_EQ(test, ret, 0);
|
||||
|
||||
|
@ -588,7 +596,6 @@ static void drm_test_check_broadcast_rgb_full_cea_mode_vic_1(struct kunit *test)
|
|||
mode = drm_kunit_display_mode_from_cea_vic(test, drm, 1);
|
||||
KUNIT_ASSERT_NOT_NULL(test, mode);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
ret = light_up_connector(test, drm, crtc, conn, mode, ctx);
|
||||
KUNIT_ASSERT_EQ(test, ret, 0);
|
||||
|
@ -636,18 +643,18 @@ static void drm_test_check_broadcast_rgb_limited_cea_mode(struct kunit *test)
|
|||
8);
|
||||
KUNIT_ASSERT_NOT_NULL(test, priv);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
conn = &priv->connector;
|
||||
KUNIT_ASSERT_TRUE(test, conn->display_info.is_hdmi);
|
||||
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
preferred = find_preferred_mode(conn);
|
||||
KUNIT_ASSERT_NOT_NULL(test, preferred);
|
||||
KUNIT_ASSERT_NE(test, drm_match_cea_mode(preferred), 1);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
|
||||
KUNIT_ASSERT_EQ(test, ret, 0);
|
||||
|
||||
|
@ -704,7 +711,6 @@ static void drm_test_check_broadcast_rgb_limited_cea_mode_vic_1(struct kunit *te
|
|||
mode = drm_kunit_display_mode_from_cea_vic(test, drm, 1);
|
||||
KUNIT_ASSERT_NOT_NULL(test, mode);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
ret = light_up_connector(test, drm, crtc, conn, mode, ctx);
|
||||
KUNIT_ASSERT_EQ(test, ret, 0);
|
||||
|
@ -754,20 +760,20 @@ static void drm_test_check_output_bpc_crtc_mode_changed(struct kunit *test)
|
|||
10);
|
||||
KUNIT_ASSERT_NOT_NULL(test, priv);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
conn = &priv->connector;
|
||||
ret = set_connector_edid(test, conn,
|
||||
test_edid_hdmi_1080p_rgb_yuv_dc_max_200mhz,
|
||||
ARRAY_SIZE(test_edid_hdmi_1080p_rgb_yuv_dc_max_200mhz));
|
||||
KUNIT_ASSERT_GT(test, ret, 0);
|
||||
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
preferred = find_preferred_mode(conn);
|
||||
KUNIT_ASSERT_NOT_NULL(test, preferred);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
|
||||
KUNIT_ASSERT_EQ(test, ret, 0);
|
||||
|
||||
|
@ -828,20 +834,20 @@ static void drm_test_check_output_bpc_crtc_mode_not_changed(struct kunit *test)
|
|||
10);
|
||||
KUNIT_ASSERT_NOT_NULL(test, priv);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
conn = &priv->connector;
|
||||
ret = set_connector_edid(test, conn,
|
||||
test_edid_hdmi_1080p_rgb_yuv_dc_max_200mhz,
|
||||
ARRAY_SIZE(test_edid_hdmi_1080p_rgb_yuv_dc_max_200mhz));
|
||||
KUNIT_ASSERT_GT(test, ret, 0);
|
||||
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
preferred = find_preferred_mode(conn);
|
||||
KUNIT_ASSERT_NOT_NULL(test, preferred);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
|
||||
KUNIT_ASSERT_EQ(test, ret, 0);
|
||||
|
||||
|
@ -899,6 +905,8 @@ static void drm_test_check_output_bpc_dvi(struct kunit *test)
|
|||
12);
|
||||
KUNIT_ASSERT_NOT_NULL(test, priv);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
conn = &priv->connector;
|
||||
ret = set_connector_edid(test, conn,
|
||||
test_edid_dvi_1080p,
|
||||
|
@ -908,14 +916,12 @@ static void drm_test_check_output_bpc_dvi(struct kunit *test)
|
|||
info = &conn->display_info;
|
||||
KUNIT_ASSERT_FALSE(test, info->is_hdmi);
|
||||
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
preferred = find_preferred_mode(conn);
|
||||
KUNIT_ASSERT_NOT_NULL(test, preferred);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
|
||||
KUNIT_ASSERT_EQ(test, ret, 0);
|
||||
|
||||
|
@ -946,21 +952,21 @@ static void drm_test_check_tmds_char_rate_rgb_8bpc(struct kunit *test)
|
|||
8);
|
||||
KUNIT_ASSERT_NOT_NULL(test, priv);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
conn = &priv->connector;
|
||||
ret = set_connector_edid(test, conn,
|
||||
test_edid_hdmi_1080p_rgb_max_200mhz,
|
||||
ARRAY_SIZE(test_edid_hdmi_1080p_rgb_max_200mhz));
|
||||
KUNIT_ASSERT_GT(test, ret, 0);
|
||||
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
preferred = find_preferred_mode(conn);
|
||||
KUNIT_ASSERT_NOT_NULL(test, preferred);
|
||||
KUNIT_ASSERT_FALSE(test, preferred->flags & DRM_MODE_FLAG_DBLCLK);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
|
||||
KUNIT_ASSERT_EQ(test, ret, 0);
|
||||
|
||||
|
@ -993,21 +999,21 @@ static void drm_test_check_tmds_char_rate_rgb_10bpc(struct kunit *test)
|
|||
10);
|
||||
KUNIT_ASSERT_NOT_NULL(test, priv);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
conn = &priv->connector;
|
||||
ret = set_connector_edid(test, conn,
|
||||
test_edid_hdmi_1080p_rgb_yuv_dc_max_340mhz,
|
||||
ARRAY_SIZE(test_edid_hdmi_1080p_rgb_yuv_dc_max_340mhz));
|
||||
KUNIT_ASSERT_GT(test, ret, 0);
|
||||
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
preferred = find_preferred_mode(conn);
|
||||
KUNIT_ASSERT_NOT_NULL(test, preferred);
|
||||
KUNIT_ASSERT_FALSE(test, preferred->flags & DRM_MODE_FLAG_DBLCLK);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
|
||||
KUNIT_ASSERT_EQ(test, ret, 0);
|
||||
|
||||
|
@ -1040,21 +1046,21 @@ static void drm_test_check_tmds_char_rate_rgb_12bpc(struct kunit *test)
|
|||
12);
|
||||
KUNIT_ASSERT_NOT_NULL(test, priv);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
conn = &priv->connector;
|
||||
ret = set_connector_edid(test, conn,
|
||||
test_edid_hdmi_1080p_rgb_yuv_dc_max_340mhz,
|
||||
ARRAY_SIZE(test_edid_hdmi_1080p_rgb_yuv_dc_max_340mhz));
|
||||
KUNIT_ASSERT_GT(test, ret, 0);
|
||||
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
preferred = find_preferred_mode(conn);
|
||||
KUNIT_ASSERT_NOT_NULL(test, preferred);
|
||||
KUNIT_ASSERT_FALSE(test, preferred->flags & DRM_MODE_FLAG_DBLCLK);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
|
||||
KUNIT_ASSERT_EQ(test, ret, 0);
|
||||
|
||||
|
@ -1091,15 +1097,16 @@ static void drm_test_check_hdmi_funcs_reject_rate(struct kunit *test)
|
|||
8);
|
||||
KUNIT_ASSERT_NOT_NULL(test, priv);
|
||||
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
conn = &priv->connector;
|
||||
|
||||
preferred = find_preferred_mode(conn);
|
||||
KUNIT_ASSERT_NOT_NULL(test, preferred);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
|
||||
KUNIT_ASSERT_EQ(test, ret, 0);
|
||||
|
||||
|
@ -1147,6 +1154,8 @@ static void drm_test_check_max_tmds_rate_bpc_fallback(struct kunit *test)
|
|||
12);
|
||||
KUNIT_ASSERT_NOT_NULL(test, priv);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
conn = &priv->connector;
|
||||
ret = set_connector_edid(test, conn,
|
||||
test_edid_hdmi_1080p_rgb_yuv_dc_max_200mhz,
|
||||
|
@ -1157,9 +1166,6 @@ static void drm_test_check_max_tmds_rate_bpc_fallback(struct kunit *test)
|
|||
KUNIT_ASSERT_TRUE(test, info->is_hdmi);
|
||||
KUNIT_ASSERT_GT(test, info->max_tmds_clock, 0);
|
||||
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
preferred = find_preferred_mode(conn);
|
||||
KUNIT_ASSERT_NOT_NULL(test, preferred);
|
||||
KUNIT_ASSERT_FALSE(test, preferred->flags & DRM_MODE_FLAG_DBLCLK);
|
||||
|
@ -1170,8 +1176,9 @@ static void drm_test_check_max_tmds_rate_bpc_fallback(struct kunit *test)
|
|||
rate = drm_hdmi_compute_mode_clock(preferred, 10, HDMI_COLORSPACE_RGB);
|
||||
KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
|
||||
KUNIT_EXPECT_EQ(test, ret, 0);
|
||||
|
||||
|
@ -1216,6 +1223,8 @@ static void drm_test_check_max_tmds_rate_format_fallback(struct kunit *test)
|
|||
12);
|
||||
KUNIT_ASSERT_NOT_NULL(test, priv);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
conn = &priv->connector;
|
||||
ret = set_connector_edid(test, conn,
|
||||
test_edid_hdmi_1080p_rgb_yuv_dc_max_200mhz,
|
||||
|
@ -1226,9 +1235,6 @@ static void drm_test_check_max_tmds_rate_format_fallback(struct kunit *test)
|
|||
KUNIT_ASSERT_TRUE(test, info->is_hdmi);
|
||||
KUNIT_ASSERT_GT(test, info->max_tmds_clock, 0);
|
||||
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
preferred = find_preferred_mode(conn);
|
||||
KUNIT_ASSERT_NOT_NULL(test, preferred);
|
||||
KUNIT_ASSERT_FALSE(test, preferred->flags & DRM_MODE_FLAG_DBLCLK);
|
||||
|
@ -1242,8 +1248,9 @@ static void drm_test_check_max_tmds_rate_format_fallback(struct kunit *test)
|
|||
rate = drm_hdmi_compute_mode_clock(preferred, 12, HDMI_COLORSPACE_YUV422);
|
||||
KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
|
||||
KUNIT_EXPECT_EQ(test, ret, 0);
|
||||
|
||||
|
@ -1290,9 +1297,6 @@ static void drm_test_check_output_bpc_format_vic_1(struct kunit *test)
|
|||
KUNIT_ASSERT_TRUE(test, info->is_hdmi);
|
||||
KUNIT_ASSERT_GT(test, info->max_tmds_clock, 0);
|
||||
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
mode = drm_kunit_display_mode_from_cea_vic(test, drm, 1);
|
||||
KUNIT_ASSERT_NOT_NULL(test, mode);
|
||||
|
||||
|
@ -1306,7 +1310,9 @@ static void drm_test_check_output_bpc_format_vic_1(struct kunit *test)
|
|||
rate = mode->clock * 1500;
|
||||
KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000);
|
||||
|
||||
drm = &priv->drm;
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
crtc = priv->crtc;
|
||||
ret = light_up_connector(test, drm, crtc, conn, mode, ctx);
|
||||
KUNIT_EXPECT_EQ(test, ret, 0);
|
||||
|
@ -1340,6 +1346,8 @@ static void drm_test_check_output_bpc_format_driver_rgb_only(struct kunit *test)
|
|||
12);
|
||||
KUNIT_ASSERT_NOT_NULL(test, priv);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
conn = &priv->connector;
|
||||
ret = set_connector_edid(test, conn,
|
||||
test_edid_hdmi_1080p_rgb_yuv_dc_max_200mhz,
|
||||
|
@ -1350,9 +1358,6 @@ static void drm_test_check_output_bpc_format_driver_rgb_only(struct kunit *test)
|
|||
KUNIT_ASSERT_TRUE(test, info->is_hdmi);
|
||||
KUNIT_ASSERT_GT(test, info->max_tmds_clock, 0);
|
||||
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
preferred = find_preferred_mode(conn);
|
||||
KUNIT_ASSERT_NOT_NULL(test, preferred);
|
||||
|
||||
|
@ -1371,8 +1376,9 @@ static void drm_test_check_output_bpc_format_driver_rgb_only(struct kunit *test)
|
|||
rate = drm_hdmi_compute_mode_clock(preferred, 12, HDMI_COLORSPACE_YUV422);
|
||||
KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
|
||||
KUNIT_EXPECT_EQ(test, ret, 0);
|
||||
|
||||
|
@ -1407,6 +1413,8 @@ static void drm_test_check_output_bpc_format_display_rgb_only(struct kunit *test
|
|||
12);
|
||||
KUNIT_ASSERT_NOT_NULL(test, priv);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
conn = &priv->connector;
|
||||
ret = set_connector_edid(test, conn,
|
||||
test_edid_hdmi_1080p_rgb_max_200mhz,
|
||||
|
@ -1417,9 +1425,6 @@ static void drm_test_check_output_bpc_format_display_rgb_only(struct kunit *test
|
|||
KUNIT_ASSERT_TRUE(test, info->is_hdmi);
|
||||
KUNIT_ASSERT_GT(test, info->max_tmds_clock, 0);
|
||||
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
preferred = find_preferred_mode(conn);
|
||||
KUNIT_ASSERT_NOT_NULL(test, preferred);
|
||||
|
||||
|
@ -1438,8 +1443,9 @@ static void drm_test_check_output_bpc_format_display_rgb_only(struct kunit *test
|
|||
rate = drm_hdmi_compute_mode_clock(preferred, 12, HDMI_COLORSPACE_YUV422);
|
||||
KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
|
||||
KUNIT_EXPECT_EQ(test, ret, 0);
|
||||
|
||||
|
@ -1473,6 +1479,8 @@ static void drm_test_check_output_bpc_format_driver_8bpc_only(struct kunit *test
|
|||
8);
|
||||
KUNIT_ASSERT_NOT_NULL(test, priv);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
conn = &priv->connector;
|
||||
ret = set_connector_edid(test, conn,
|
||||
test_edid_hdmi_1080p_rgb_yuv_dc_max_340mhz,
|
||||
|
@ -1483,9 +1491,6 @@ static void drm_test_check_output_bpc_format_driver_8bpc_only(struct kunit *test
|
|||
KUNIT_ASSERT_TRUE(test, info->is_hdmi);
|
||||
KUNIT_ASSERT_GT(test, info->max_tmds_clock, 0);
|
||||
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
preferred = find_preferred_mode(conn);
|
||||
KUNIT_ASSERT_NOT_NULL(test, preferred);
|
||||
|
||||
|
@ -1496,8 +1501,9 @@ static void drm_test_check_output_bpc_format_driver_8bpc_only(struct kunit *test
|
|||
rate = drm_hdmi_compute_mode_clock(preferred, 12, HDMI_COLORSPACE_RGB);
|
||||
KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
|
||||
KUNIT_EXPECT_EQ(test, ret, 0);
|
||||
|
||||
|
@ -1533,6 +1539,8 @@ static void drm_test_check_output_bpc_format_display_8bpc_only(struct kunit *tes
|
|||
12);
|
||||
KUNIT_ASSERT_NOT_NULL(test, priv);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
conn = &priv->connector;
|
||||
ret = set_connector_edid(test, conn,
|
||||
test_edid_hdmi_1080p_rgb_max_340mhz,
|
||||
|
@ -1543,9 +1551,6 @@ static void drm_test_check_output_bpc_format_display_8bpc_only(struct kunit *tes
|
|||
KUNIT_ASSERT_TRUE(test, info->is_hdmi);
|
||||
KUNIT_ASSERT_GT(test, info->max_tmds_clock, 0);
|
||||
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
preferred = find_preferred_mode(conn);
|
||||
KUNIT_ASSERT_NOT_NULL(test, preferred);
|
||||
|
||||
|
@ -1556,8 +1561,9 @@ static void drm_test_check_output_bpc_format_display_8bpc_only(struct kunit *tes
|
|||
rate = drm_hdmi_compute_mode_clock(preferred, 12, HDMI_COLORSPACE_RGB);
|
||||
KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000);
|
||||
|
||||
drm = &priv->drm;
|
||||
crtc = priv->crtc;
|
||||
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
|
||||
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
|
||||
KUNIT_EXPECT_EQ(test, ret, 0);
|
||||
|
||||
|
|
|
@ -135,8 +135,8 @@ void xe_drm_client_add_bo(struct xe_drm_client *client,
|
|||
XE_WARN_ON(bo->client);
|
||||
XE_WARN_ON(!list_empty(&bo->client_link));
|
||||
|
||||
spin_lock(&client->bos_lock);
|
||||
bo->client = xe_drm_client_get(client);
|
||||
spin_lock(&client->bos_lock);
|
||||
list_add_tail(&bo->client_link, &client->bos_list);
|
||||
spin_unlock(&client->bos_lock);
|
||||
}
|
||||
|
|
|
@ -57,38 +57,6 @@ bool xe_ttm_stolen_cpu_access_needs_ggtt(struct xe_device *xe)
|
|||
return GRAPHICS_VERx100(xe) < 1270 && !IS_DGFX(xe);
|
||||
}
|
||||
|
||||
static s64 detect_bar2_dgfx(struct xe_device *xe, struct xe_ttm_stolen_mgr *mgr)
|
||||
{
|
||||
struct xe_tile *tile = xe_device_get_root_tile(xe);
|
||||
struct xe_mmio *mmio = xe_root_tile_mmio(xe);
|
||||
struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
|
||||
u64 stolen_size;
|
||||
u64 tile_offset;
|
||||
u64 tile_size;
|
||||
|
||||
tile_offset = tile->mem.vram.io_start - xe->mem.vram.io_start;
|
||||
tile_size = tile->mem.vram.actual_physical_size;
|
||||
|
||||
/* Use DSM base address instead for stolen memory */
|
||||
mgr->stolen_base = (xe_mmio_read64_2x32(mmio, DSMBASE) & BDSM_MASK) - tile_offset;
|
||||
if (drm_WARN_ON(&xe->drm, tile_size < mgr->stolen_base))
|
||||
return 0;
|
||||
|
||||
stolen_size = tile_size - mgr->stolen_base;
|
||||
|
||||
/* Verify usage fits in the actual resource available */
|
||||
if (mgr->stolen_base + stolen_size <= pci_resource_len(pdev, LMEM_BAR))
|
||||
mgr->io_base = tile->mem.vram.io_start + mgr->stolen_base;
|
||||
|
||||
/*
|
||||
* There may be few KB of platform dependent reserved memory at the end
|
||||
* of vram which is not part of the DSM. Such reserved memory portion is
|
||||
* always less then DSM granularity so align down the stolen_size to DSM
|
||||
* granularity to accommodate such reserve vram portion.
|
||||
*/
|
||||
return ALIGN_DOWN(stolen_size, SZ_1M);
|
||||
}
|
||||
|
||||
static u32 get_wopcm_size(struct xe_device *xe)
|
||||
{
|
||||
u32 wopcm_size;
|
||||
|
@ -112,6 +80,44 @@ static u32 get_wopcm_size(struct xe_device *xe)
|
|||
return wopcm_size;
|
||||
}
|
||||
|
||||
static s64 detect_bar2_dgfx(struct xe_device *xe, struct xe_ttm_stolen_mgr *mgr)
|
||||
{
|
||||
struct xe_tile *tile = xe_device_get_root_tile(xe);
|
||||
struct xe_mmio *mmio = xe_root_tile_mmio(xe);
|
||||
struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
|
||||
u64 stolen_size, wopcm_size;
|
||||
u64 tile_offset;
|
||||
u64 tile_size;
|
||||
|
||||
tile_offset = tile->mem.vram.io_start - xe->mem.vram.io_start;
|
||||
tile_size = tile->mem.vram.actual_physical_size;
|
||||
|
||||
/* Use DSM base address instead for stolen memory */
|
||||
mgr->stolen_base = (xe_mmio_read64_2x32(mmio, DSMBASE) & BDSM_MASK) - tile_offset;
|
||||
if (drm_WARN_ON(&xe->drm, tile_size < mgr->stolen_base))
|
||||
return 0;
|
||||
|
||||
/* Carve out the top of DSM as it contains the reserved WOPCM region */
|
||||
wopcm_size = get_wopcm_size(xe);
|
||||
if (drm_WARN_ON(&xe->drm, !wopcm_size))
|
||||
return 0;
|
||||
|
||||
stolen_size = tile_size - mgr->stolen_base;
|
||||
stolen_size -= wopcm_size;
|
||||
|
||||
/* Verify usage fits in the actual resource available */
|
||||
if (mgr->stolen_base + stolen_size <= pci_resource_len(pdev, LMEM_BAR))
|
||||
mgr->io_base = tile->mem.vram.io_start + mgr->stolen_base;
|
||||
|
||||
/*
|
||||
* There may be few KB of platform dependent reserved memory at the end
|
||||
* of vram which is not part of the DSM. Such reserved memory portion is
|
||||
* always less then DSM granularity so align down the stolen_size to DSM
|
||||
* granularity to accommodate such reserve vram portion.
|
||||
*/
|
||||
return ALIGN_DOWN(stolen_size, SZ_1M);
|
||||
}
|
||||
|
||||
static u32 detect_bar2_integrated(struct xe_device *xe, struct xe_ttm_stolen_mgr *mgr)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
|
||||
|
|
|
@ -619,6 +619,8 @@ static int host1x_probe(struct platform_device *pdev)
|
|||
goto free_contexts;
|
||||
}
|
||||
|
||||
mutex_init(&host->intr_mutex);
|
||||
|
||||
pm_runtime_enable(&pdev->dev);
|
||||
|
||||
err = devm_tegra_core_dev_init_opp_table_common(&pdev->dev);
|
||||
|
|
|
@ -104,8 +104,6 @@ int host1x_intr_init(struct host1x *host)
|
|||
unsigned int id;
|
||||
int i, err;
|
||||
|
||||
mutex_init(&host->intr_mutex);
|
||||
|
||||
for (id = 0; id < host1x_syncpt_nb_pts(host); ++id) {
|
||||
struct host1x_syncpt *syncpt = &host->syncpt[id];
|
||||
|
||||
|
|
|
@ -359,6 +359,7 @@
|
|||
# define DP_DSC_BITS_PER_PIXEL_1_4 0x2
|
||||
# define DP_DSC_BITS_PER_PIXEL_1_2 0x3
|
||||
# define DP_DSC_BITS_PER_PIXEL_1_1 0x4
|
||||
# define DP_DSC_BITS_PER_PIXEL_MASK 0x7
|
||||
|
||||
#define DP_PSR_SUPPORT 0x070 /* XXX 1.2? */
|
||||
# define DP_PSR_IS_SUPPORTED 1
|
||||
|
|
Loading…
Add table
Reference in a new issue