mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-03 00:54:09 +08:00
drm fixes for 6.1-rc4
amdgpu: - DCN 3.1.4 fixes - DCN 3.2.x fixes - GC 11.x fixes - Virtual display fix - Fail suspend if resources can't be evicted - SR-IOV fix - Display PSR fix amdkfd: - Fix possible NULL pointer deref - GC 11.x trap handler fix i915: - Add locking around DKL PHY register accesses - Stop abusing swiotlb_max_segment - Filter out invalid outputs more sensibly - Setup DDC fully before output init - Simplify intel_panel_add_edid_alt_fixed_modes() - Grab mode_config.mutex during LVDS init to avoid WARNs rockchip: - fix probing issues - fix framebuffer without iommu - fix vop selection - fix NULL ptr access imx: - Fix Kconfig. - fix mode_valid function -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEEKbZHaGwW9KfbeusDHTzWXnEhr4FAmNkg60ACgkQDHTzWXnE hr6utQ/7Bmb0TtSTjgv2dTkHgSFfw2mmzBxkm6Xv2Lc03T+Iqqlr1XhbPVCUtfQs lWQUO79ELwr16hjKbGUR3WEyESez6M1RUN7MeevrZ4DCldliKh1MkFVEh3GdBCqk d5IQdJmSms+P7NpZxaLQ+ycwFtFZydRB1P//Kdq0BewzSWz4Fwh9QvlF6BSBmB0b TdDt1aVXxdzWaas65oAGrGY9Z+ESqe1D3g/VifbYeDSaSJaEJ/WO1ljZ3T8fNT79 ny3HYosNZN1ERjxlAvWzKNMoXXqcsMqGEvrFCYwRYirIS8rwtRsEXSt+s9fxzKPf 8J4kFrKUrAAbHUYKHYYn3lEngUa4N9TwQnmjb5T3Bcdiook29QGeJtR/lI3bQ77P CbotD5G31DCs6dHQgoYb3uN2KVS08PhC6L4+tGyo4UG/sh6ZnbqHDS4WKl9HtOQM cY1nIgdwYhMOBP2fATzI695T59fak6NrTHu8fcS+zLoaU+/yO+ugmfluklVNUsgJ oqZEmMZfB/YwpJNbSELNAiddrFfvjZ83ElXLYn48EP31O+D/rmmPf03KZolfVpNu WYHGNNDt7kUg7XCSiF+uzCtdigl89F831JnVW4bzW/1hokUuRgDYWXObPCbVJoor Z5I0q2SzdTt+c7ssPaQpJCtH2vb0TJj1OesR/b6hNoP4VLYrzL8= =adND -----END PGP SIGNATURE----- Merge tag 'drm-fixes-2022-11-04-1' of git://anongit.freedesktop.org/drm/drm Pull drm fixes from Dave Airlie: "This is the weekly fixes for rc4. Misc fixes across rockchip, imx, amdgpu and i915. The biggest change is for amdkfd where the trap handler needs an updated fw from a header which makes it a bit larger. I hadn't noticed this particular file before so I'm going to figure out what the magic is for, but the fix should be fine for now. amdgpu: - DCN 3.1.4 fixes - DCN 3.2.x fixes - GC 11.x fixes - Virtual display fix - Fail suspend if resources can't be evicted - SR-IOV fix - Display PSR fix amdkfd: - Fix possible NULL pointer deref - GC 11.x trap handler fix i915: - Add locking around DKL PHY register accesses - Stop abusing swiotlb_max_segment - Filter out invalid outputs more sensibly - Setup DDC fully before output init - Simplify intel_panel_add_edid_alt_fixed_modes() - Grab mode_config.mutex during LVDS init to avoid WARNs rockchip: - fix probing issues - fix framebuffer without iommu - fix vop selection - fix NULL ptr access imx: - Fix Kconfig - fix mode_valid function" * tag 'drm-fixes-2022-11-04-1' of git://anongit.freedesktop.org/drm/drm: (35 commits) drm/amdkfd: update GFX11 CWSR trap handler drm/amd/display: Investigate tool reported FCLK P-state deviations drm/amd/display: Add DSC delay factor workaround drm/amd/display: Round up DST_after_scaler to nearest int drm/amd/display: Use forced DSC bpp in DML drm/amd/display: Fix DCN32 DSC delay calculation drm/amdgpu: Disable GPU reset on SRIOV before remove pci. drm/amdgpu: disable GFXOFF during compute for GFX11 drm/amd: Fail the suspend if resources can't be evicted drm/amdkfd: Fix NULL pointer dereference in svm_migrate_to_ram() drm/amdgpu: correct MES debugfs versions drm/amdgpu: set fb_modifiers_not_supported in vkms drm/amd/display: cursor update command incomplete drm/amd/display: Enable timing sync on DCN32 drm/amd/display: Set memclk levels to be at least 1 for dcn32 drm/amd/display: Update latencies on DCN321 drm/amd/display: Limit dcn32 to 1950Mhz display clock drm/amd/display: Ignore Cable ID Feature drm/amd/display: Update DSC capabilitie for DCN314 drm/imx: imx-tve: Fix return type of imx_tve_connector_mode_valid ...
This commit is contained in:
commit
fde25beb38
@ -706,6 +706,13 @@ err:
|
||||
|
||||
void amdgpu_amdkfd_set_compute_idle(struct amdgpu_device *adev, bool idle)
|
||||
{
|
||||
/* Temporary workaround to fix issues observed in some
|
||||
* compute applications when GFXOFF is enabled on GFX11.
|
||||
*/
|
||||
if (IP_VERSION_MAJ(adev->ip_versions[GC_HWIP][0]) == 11) {
|
||||
pr_debug("GFXOFF is %s\n", idle ? "enabled" : "disabled");
|
||||
amdgpu_gfx_off_ctrl(adev, idle);
|
||||
}
|
||||
amdgpu_dpm_switch_power_profile(adev,
|
||||
PP_SMC_POWER_PROFILE_COMPUTE,
|
||||
!idle);
|
||||
|
@ -4060,15 +4060,18 @@ void amdgpu_device_fini_sw(struct amdgpu_device *adev)
|
||||
* at suspend time.
|
||||
*
|
||||
*/
|
||||
static void amdgpu_device_evict_resources(struct amdgpu_device *adev)
|
||||
static int amdgpu_device_evict_resources(struct amdgpu_device *adev)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* No need to evict vram on APUs for suspend to ram or s2idle */
|
||||
if ((adev->in_s3 || adev->in_s0ix) && (adev->flags & AMD_IS_APU))
|
||||
return;
|
||||
return 0;
|
||||
|
||||
if (amdgpu_ttm_evict_resources(adev, TTM_PL_VRAM))
|
||||
ret = amdgpu_ttm_evict_resources(adev, TTM_PL_VRAM);
|
||||
if (ret)
|
||||
DRM_WARN("evicting device resources failed\n");
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -4118,7 +4121,9 @@ int amdgpu_device_suspend(struct drm_device *dev, bool fbcon)
|
||||
if (!adev->in_s0ix)
|
||||
amdgpu_amdkfd_suspend(adev, adev->in_runpm);
|
||||
|
||||
amdgpu_device_evict_resources(adev);
|
||||
r = amdgpu_device_evict_resources(adev);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
amdgpu_fence_driver_hw_fini(adev);
|
||||
|
||||
|
@ -2201,7 +2201,8 @@ amdgpu_pci_remove(struct pci_dev *pdev)
|
||||
pm_runtime_forbid(dev->dev);
|
||||
}
|
||||
|
||||
if (adev->ip_versions[MP1_HWIP][0] == IP_VERSION(13, 0, 2)) {
|
||||
if (adev->ip_versions[MP1_HWIP][0] == IP_VERSION(13, 0, 2) &&
|
||||
!amdgpu_sriov_vf(adev)) {
|
||||
bool need_to_reset_gpu = false;
|
||||
|
||||
if (adev->gmc.xgmi.num_physical_nodes > 1) {
|
||||
|
@ -337,12 +337,14 @@ static int amdgpu_firmware_info(struct drm_amdgpu_info_firmware *fw_info,
|
||||
fw_info->feature = adev->psp.cap_feature_version;
|
||||
break;
|
||||
case AMDGPU_INFO_FW_MES_KIQ:
|
||||
fw_info->ver = adev->mes.ucode_fw_version[0];
|
||||
fw_info->feature = 0;
|
||||
fw_info->ver = adev->mes.kiq_version & AMDGPU_MES_VERSION_MASK;
|
||||
fw_info->feature = (adev->mes.kiq_version & AMDGPU_MES_FEAT_VERSION_MASK)
|
||||
>> AMDGPU_MES_FEAT_VERSION_SHIFT;
|
||||
break;
|
||||
case AMDGPU_INFO_FW_MES:
|
||||
fw_info->ver = adev->mes.ucode_fw_version[1];
|
||||
fw_info->feature = 0;
|
||||
fw_info->ver = adev->mes.sched_version & AMDGPU_MES_VERSION_MASK;
|
||||
fw_info->feature = (adev->mes.sched_version & AMDGPU_MES_FEAT_VERSION_MASK)
|
||||
>> AMDGPU_MES_FEAT_VERSION_SHIFT;
|
||||
break;
|
||||
case AMDGPU_INFO_FW_IMU:
|
||||
fw_info->ver = adev->gfx.imu_fw_version;
|
||||
|
@ -500,6 +500,8 @@ static int amdgpu_vkms_sw_init(void *handle)
|
||||
|
||||
adev_to_drm(adev)->mode_config.fb_base = adev->gmc.aper_base;
|
||||
|
||||
adev_to_drm(adev)->mode_config.fb_modifiers_not_supported = true;
|
||||
|
||||
r = amdgpu_display_modeset_create_props(adev);
|
||||
if (r)
|
||||
return r;
|
||||
|
@ -2495,442 +2495,444 @@ static const uint32_t cwsr_trap_gfx10_hex[] = {
|
||||
0xbf9f0000, 0x00000000,
|
||||
};
|
||||
static const uint32_t cwsr_trap_gfx11_hex[] = {
|
||||
0xbfa00001, 0xbfa0021e,
|
||||
0xbfa00001, 0xbfa00221,
|
||||
0xb0804006, 0xb8f8f802,
|
||||
0x9178ff78, 0x00020006,
|
||||
0xb8fbf803, 0xbf0d9f6d,
|
||||
0xbfa20006, 0x8b6eff78,
|
||||
0x00002000, 0xbfa10009,
|
||||
0x8b6eff6d, 0x00ff0000,
|
||||
0xbfa2001e, 0x8b6eff7b,
|
||||
0x00000400, 0xbfa20041,
|
||||
0xbf830010, 0xb8fbf803,
|
||||
0xbfa0fffa, 0x8b6eff7b,
|
||||
0x00000900, 0xbfa20015,
|
||||
0x8b6eff7b, 0x000071ff,
|
||||
0xbfa10008, 0x8b6fff7b,
|
||||
0x00007080, 0xbfa10001,
|
||||
0xbeee1287, 0xb8eff801,
|
||||
0x846e8c6e, 0x8b6e6f6e,
|
||||
0xbfa2000a, 0x8b6eff6d,
|
||||
0x00ff0000, 0xbfa20007,
|
||||
0xb8eef801, 0x8b6eff6e,
|
||||
0x00000800, 0xbfa20003,
|
||||
0xb8fbf803, 0xbf0d9e6d,
|
||||
0xbfa10001, 0xbfbd0000,
|
||||
0xbf0d9f6d, 0xbfa20006,
|
||||
0x8b6eff78, 0x00002000,
|
||||
0xbfa10009, 0x8b6eff6d,
|
||||
0x00ff0000, 0xbfa2001e,
|
||||
0x8b6eff7b, 0x00000400,
|
||||
0xbfa20026, 0xbefa4d82,
|
||||
0xbf89fc07, 0x84fa887a,
|
||||
0xf4005bbd, 0xf8000010,
|
||||
0xbf89fc07, 0x846e976e,
|
||||
0x9177ff77, 0x00800000,
|
||||
0x8c776e77, 0xf4045bbd,
|
||||
0xf8000000, 0xbf89fc07,
|
||||
0xf4045ebd, 0xf8000008,
|
||||
0xbf89fc07, 0x8bee6e6e,
|
||||
0xbfa10001, 0xbe80486e,
|
||||
0x8b6eff6d, 0x01ff0000,
|
||||
0xbfa20005, 0x8c78ff78,
|
||||
0x00002000, 0x80ec886c,
|
||||
0x82ed806d, 0xbfa00005,
|
||||
0x8b6eff6d, 0x01000000,
|
||||
0xbfa20002, 0x806c846c,
|
||||
0x826d806d, 0x8b6dff6d,
|
||||
0x0000ffff, 0x8bfe7e7e,
|
||||
0x8bea6a6a, 0xb978f802,
|
||||
0xbe804a6c, 0x8b6dff6d,
|
||||
0x0000ffff, 0xbefa0080,
|
||||
0xb97a0283, 0xbeee007e,
|
||||
0xbeef007f, 0xbefe0180,
|
||||
0xbefe4d84, 0xbf89fc07,
|
||||
0x8b7aff7f, 0x04000000,
|
||||
0x847a857a, 0x8c6d7a6d,
|
||||
0xbefa007e, 0x8b7bff7f,
|
||||
0x0000ffff, 0xbefe00c1,
|
||||
0xbeff00c1, 0xdca6c000,
|
||||
0x007a0000, 0x7e000280,
|
||||
0xbefe007a, 0xbeff007b,
|
||||
0xb8fb02dc, 0x847b997b,
|
||||
0xb8fa3b05, 0x807a817a,
|
||||
0xbf0d997b, 0xbfa20002,
|
||||
0x847a897a, 0xbfa00001,
|
||||
0x847a8a7a, 0xb8fb1e06,
|
||||
0x847b8a7b, 0x807a7b7a,
|
||||
0xbfa20041, 0xbf830010,
|
||||
0xb8fbf803, 0xbfa0fffa,
|
||||
0x8b6eff7b, 0x00000900,
|
||||
0xbfa20015, 0x8b6eff7b,
|
||||
0x000071ff, 0xbfa10008,
|
||||
0x8b6fff7b, 0x00007080,
|
||||
0xbfa10001, 0xbeee1287,
|
||||
0xb8eff801, 0x846e8c6e,
|
||||
0x8b6e6f6e, 0xbfa2000a,
|
||||
0x8b6eff6d, 0x00ff0000,
|
||||
0xbfa20007, 0xb8eef801,
|
||||
0x8b6eff6e, 0x00000800,
|
||||
0xbfa20003, 0x8b6eff7b,
|
||||
0x00000400, 0xbfa20026,
|
||||
0xbefa4d82, 0xbf89fc07,
|
||||
0x84fa887a, 0xf4005bbd,
|
||||
0xf8000010, 0xbf89fc07,
|
||||
0x846e976e, 0x9177ff77,
|
||||
0x00800000, 0x8c776e77,
|
||||
0xf4045bbd, 0xf8000000,
|
||||
0xbf89fc07, 0xf4045ebd,
|
||||
0xf8000008, 0xbf89fc07,
|
||||
0x8bee6e6e, 0xbfa10001,
|
||||
0xbe80486e, 0x8b6eff6d,
|
||||
0x01ff0000, 0xbfa20005,
|
||||
0x8c78ff78, 0x00002000,
|
||||
0x80ec886c, 0x82ed806d,
|
||||
0xbfa00005, 0x8b6eff6d,
|
||||
0x01000000, 0xbfa20002,
|
||||
0x806c846c, 0x826d806d,
|
||||
0x8b6dff6d, 0x0000ffff,
|
||||
0x8bfe7e7e, 0x8bea6a6a,
|
||||
0xb978f802, 0xbe804a6c,
|
||||
0x8b6dff6d, 0x0000ffff,
|
||||
0xbefa0080, 0xb97a0283,
|
||||
0xbeee007e, 0xbeef007f,
|
||||
0xbefe0180, 0xbefe4d84,
|
||||
0xbf89fc07, 0x8b7aff7f,
|
||||
0x04000000, 0x847a857a,
|
||||
0x8c6d7a6d, 0xbefa007e,
|
||||
0x8b7bff7f, 0x0000ffff,
|
||||
0x807aff7a, 0x00000200,
|
||||
0x807a7e7a, 0x827b807b,
|
||||
0xd7610000, 0x00010870,
|
||||
0xd7610000, 0x00010a71,
|
||||
0xd7610000, 0x00010c72,
|
||||
0xd7610000, 0x00010e73,
|
||||
0xd7610000, 0x00011074,
|
||||
0xd7610000, 0x00011275,
|
||||
0xd7610000, 0x00011476,
|
||||
0xd7610000, 0x00011677,
|
||||
0xd7610000, 0x00011a79,
|
||||
0xd7610000, 0x00011c7e,
|
||||
0xd7610000, 0x00011e7f,
|
||||
0xbefe00ff, 0x00003fff,
|
||||
0xbeff0080, 0xdca6c040,
|
||||
0x007a0000, 0xd760007a,
|
||||
0x00011d00, 0xd760007b,
|
||||
0x00011f00, 0xbefe007a,
|
||||
0xbeff007b, 0xbef4007e,
|
||||
0x8b75ff7f, 0x0000ffff,
|
||||
0x8c75ff75, 0x00040000,
|
||||
0xbef60080, 0xbef700ff,
|
||||
0x10807fac, 0xbef1007d,
|
||||
0xbef00080, 0xb8f302dc,
|
||||
0x84739973, 0xbefe00c1,
|
||||
0x857d9973, 0x8b7d817d,
|
||||
0xbf06817d, 0xbfa20002,
|
||||
0xbeff0080, 0xbfa00002,
|
||||
0xbeff00c1, 0xbfa00009,
|
||||
0xbefe00c1, 0xbeff00c1,
|
||||
0xdca6c000, 0x007a0000,
|
||||
0x7e000280, 0xbefe007a,
|
||||
0xbeff007b, 0xb8fb02dc,
|
||||
0x847b997b, 0xb8fa3b05,
|
||||
0x807a817a, 0xbf0d997b,
|
||||
0xbfa20002, 0x847a897a,
|
||||
0xbfa00001, 0x847a8a7a,
|
||||
0xb8fb1e06, 0x847b8a7b,
|
||||
0x807a7b7a, 0x8b7bff7f,
|
||||
0x0000ffff, 0x807aff7a,
|
||||
0x00000200, 0x807a7e7a,
|
||||
0x827b807b, 0xd7610000,
|
||||
0x00010870, 0xd7610000,
|
||||
0x00010a71, 0xd7610000,
|
||||
0x00010c72, 0xd7610000,
|
||||
0x00010e73, 0xd7610000,
|
||||
0x00011074, 0xd7610000,
|
||||
0x00011275, 0xd7610000,
|
||||
0x00011476, 0xd7610000,
|
||||
0x00011677, 0xd7610000,
|
||||
0x00011a79, 0xd7610000,
|
||||
0x00011c7e, 0xd7610000,
|
||||
0x00011e7f, 0xbefe00ff,
|
||||
0x00003fff, 0xbeff0080,
|
||||
0xdca6c040, 0x007a0000,
|
||||
0xd760007a, 0x00011d00,
|
||||
0xd760007b, 0x00011f00,
|
||||
0xbefe007a, 0xbeff007b,
|
||||
0xbef4007e, 0x8b75ff7f,
|
||||
0x0000ffff, 0x8c75ff75,
|
||||
0x00040000, 0xbef60080,
|
||||
0xbef700ff, 0x10807fac,
|
||||
0xbef1007d, 0xbef00080,
|
||||
0xb8f302dc, 0x84739973,
|
||||
0xbefe00c1, 0x857d9973,
|
||||
0x8b7d817d, 0xbf06817d,
|
||||
0xbfa20002, 0xbeff0080,
|
||||
0xbfa00002, 0xbeff00c1,
|
||||
0xbfa00009, 0xbef600ff,
|
||||
0x01000000, 0xe0685080,
|
||||
0x701d0100, 0xe0685100,
|
||||
0x701d0200, 0xe0685180,
|
||||
0x701d0300, 0xbfa00008,
|
||||
0xbef600ff, 0x01000000,
|
||||
0xe0685080, 0x701d0100,
|
||||
0xe0685100, 0x701d0200,
|
||||
0xe0685180, 0x701d0300,
|
||||
0xbfa00008, 0xbef600ff,
|
||||
0x01000000, 0xe0685100,
|
||||
0x701d0100, 0xe0685200,
|
||||
0x701d0200, 0xe0685300,
|
||||
0x701d0300, 0xb8f03b05,
|
||||
0x80708170, 0xbf0d9973,
|
||||
0xbfa20002, 0x84708970,
|
||||
0xbfa00001, 0x84708a70,
|
||||
0xb8fa1e06, 0x847a8a7a,
|
||||
0x80707a70, 0x8070ff70,
|
||||
0x00000200, 0xbef600ff,
|
||||
0x01000000, 0x7e000280,
|
||||
0x7e020280, 0x7e040280,
|
||||
0xbefd0080, 0xd7610002,
|
||||
0x0000fa71, 0x807d817d,
|
||||
0xd7610002, 0x0000fa6c,
|
||||
0x807d817d, 0x917aff6d,
|
||||
0x80000000, 0xd7610002,
|
||||
0x0000fa7a, 0x807d817d,
|
||||
0xd7610002, 0x0000fa6e,
|
||||
0x807d817d, 0xd7610002,
|
||||
0x0000fa6f, 0x807d817d,
|
||||
0xd7610002, 0x0000fa78,
|
||||
0x807d817d, 0xb8faf803,
|
||||
0xd7610002, 0x0000fa7a,
|
||||
0x807d817d, 0xd7610002,
|
||||
0x0000fa7b, 0x807d817d,
|
||||
0xb8f1f801, 0xd7610002,
|
||||
0x0000fa71, 0x807d817d,
|
||||
0xb8f1f814, 0xd7610002,
|
||||
0x0000fa71, 0x807d817d,
|
||||
0xb8f1f815, 0xd7610002,
|
||||
0x0000fa71, 0x807d817d,
|
||||
0xbefe00ff, 0x0000ffff,
|
||||
0xbeff0080, 0xe0685000,
|
||||
0x701d0200, 0xbefe00c1,
|
||||
0xe0685100, 0x701d0100,
|
||||
0xe0685200, 0x701d0200,
|
||||
0xe0685300, 0x701d0300,
|
||||
0xb8f03b05, 0x80708170,
|
||||
0xbf0d9973, 0xbfa20002,
|
||||
0x84708970, 0xbfa00001,
|
||||
0x84708a70, 0xb8fa1e06,
|
||||
0x847a8a7a, 0x80707a70,
|
||||
0x8070ff70, 0x00000200,
|
||||
0xbef600ff, 0x01000000,
|
||||
0xbef90080, 0xbefd0080,
|
||||
0xbf800000, 0xbe804100,
|
||||
0xbe824102, 0xbe844104,
|
||||
0xbe864106, 0xbe884108,
|
||||
0xbe8a410a, 0xbe8c410c,
|
||||
0xbe8e410e, 0xd7610002,
|
||||
0x0000f200, 0x80798179,
|
||||
0xd7610002, 0x0000f201,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f202, 0x80798179,
|
||||
0xd7610002, 0x0000f203,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f204, 0x80798179,
|
||||
0xd7610002, 0x0000f205,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f206, 0x80798179,
|
||||
0xd7610002, 0x0000f207,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f208, 0x80798179,
|
||||
0xd7610002, 0x0000f209,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f20a, 0x80798179,
|
||||
0xd7610002, 0x0000f20b,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f20c, 0x80798179,
|
||||
0xd7610002, 0x0000f20d,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f20e, 0x80798179,
|
||||
0xd7610002, 0x0000f20f,
|
||||
0x80798179, 0xbf06a079,
|
||||
0xbfa10006, 0xe0685000,
|
||||
0x701d0200, 0x8070ff70,
|
||||
0x00000080, 0xbef90080,
|
||||
0x7e040280, 0x807d907d,
|
||||
0xbf0aff7d, 0x00000060,
|
||||
0xbfa2ffbc, 0xbe804100,
|
||||
0xbe824102, 0xbe844104,
|
||||
0xbe864106, 0xbe884108,
|
||||
0xbe8a410a, 0xd7610002,
|
||||
0x0000f200, 0x80798179,
|
||||
0xd7610002, 0x0000f201,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f202, 0x80798179,
|
||||
0xd7610002, 0x0000f203,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f204, 0x80798179,
|
||||
0xd7610002, 0x0000f205,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f206, 0x80798179,
|
||||
0xd7610002, 0x0000f207,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f208, 0x80798179,
|
||||
0xd7610002, 0x0000f209,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f20a, 0x80798179,
|
||||
0xd7610002, 0x0000f20b,
|
||||
0x80798179, 0xe0685000,
|
||||
0x701d0200, 0xbefe00c1,
|
||||
0x857d9973, 0x8b7d817d,
|
||||
0xbf06817d, 0xbfa20002,
|
||||
0xbeff0080, 0xbfa00001,
|
||||
0xbeff00c1, 0xb8fb4306,
|
||||
0x8b7bc17b, 0xbfa10044,
|
||||
0xbfbd0000, 0x8b7aff6d,
|
||||
0x80000000, 0xbfa10040,
|
||||
0x847b867b, 0x847b827b,
|
||||
0xbef6007b, 0xb8f03b05,
|
||||
0x7e000280, 0x7e020280,
|
||||
0x7e040280, 0xbefd0080,
|
||||
0xd7610002, 0x0000fa71,
|
||||
0x807d817d, 0xd7610002,
|
||||
0x0000fa6c, 0x807d817d,
|
||||
0x917aff6d, 0x80000000,
|
||||
0xd7610002, 0x0000fa7a,
|
||||
0x807d817d, 0xd7610002,
|
||||
0x0000fa6e, 0x807d817d,
|
||||
0xd7610002, 0x0000fa6f,
|
||||
0x807d817d, 0xd7610002,
|
||||
0x0000fa78, 0x807d817d,
|
||||
0xb8faf803, 0xd7610002,
|
||||
0x0000fa7a, 0x807d817d,
|
||||
0xd7610002, 0x0000fa7b,
|
||||
0x807d817d, 0xb8f1f801,
|
||||
0xd7610002, 0x0000fa71,
|
||||
0x807d817d, 0xb8f1f814,
|
||||
0xd7610002, 0x0000fa71,
|
||||
0x807d817d, 0xb8f1f815,
|
||||
0xd7610002, 0x0000fa71,
|
||||
0x807d817d, 0xbefe00ff,
|
||||
0x0000ffff, 0xbeff0080,
|
||||
0xe0685000, 0x701d0200,
|
||||
0xbefe00c1, 0xb8f03b05,
|
||||
0x80708170, 0xbf0d9973,
|
||||
0xbfa20002, 0x84708970,
|
||||
0xbfa00001, 0x84708a70,
|
||||
0xb8fa1e06, 0x847a8a7a,
|
||||
0x80707a70, 0x8070ff70,
|
||||
0x00000200, 0x8070ff70,
|
||||
0x00000080, 0xbef600ff,
|
||||
0x01000000, 0xd71f0000,
|
||||
0x000100c1, 0xd7200000,
|
||||
0x000200c1, 0x16000084,
|
||||
0x857d9973, 0x8b7d817d,
|
||||
0xbf06817d, 0xbefd0080,
|
||||
0xbfa20012, 0xbe8300ff,
|
||||
0x00000080, 0xbf800000,
|
||||
0xbf800000, 0xbf800000,
|
||||
0xd8d80000, 0x01000000,
|
||||
0xbf890000, 0xe0685000,
|
||||
0x701d0100, 0x807d037d,
|
||||
0x80700370, 0xd5250000,
|
||||
0x0001ff00, 0x00000080,
|
||||
0xbf0a7b7d, 0xbfa2fff4,
|
||||
0xbfa00011, 0xbe8300ff,
|
||||
0x00000100, 0xbf800000,
|
||||
0xbf800000, 0xbf800000,
|
||||
0xd8d80000, 0x01000000,
|
||||
0xbf890000, 0xe0685000,
|
||||
0x701d0100, 0x807d037d,
|
||||
0x80700370, 0xd5250000,
|
||||
0x0001ff00, 0x00000100,
|
||||
0xbf0a7b7d, 0xbfa2fff4,
|
||||
0x80707a70, 0xbef600ff,
|
||||
0x01000000, 0xbef90080,
|
||||
0xbefd0080, 0xbf800000,
|
||||
0xbe804100, 0xbe824102,
|
||||
0xbe844104, 0xbe864106,
|
||||
0xbe884108, 0xbe8a410a,
|
||||
0xbe8c410c, 0xbe8e410e,
|
||||
0xd7610002, 0x0000f200,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f201, 0x80798179,
|
||||
0xd7610002, 0x0000f202,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f203, 0x80798179,
|
||||
0xd7610002, 0x0000f204,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f205, 0x80798179,
|
||||
0xd7610002, 0x0000f206,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f207, 0x80798179,
|
||||
0xd7610002, 0x0000f208,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f209, 0x80798179,
|
||||
0xd7610002, 0x0000f20a,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f20b, 0x80798179,
|
||||
0xd7610002, 0x0000f20c,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f20d, 0x80798179,
|
||||
0xd7610002, 0x0000f20e,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f20f, 0x80798179,
|
||||
0xbf06a079, 0xbfa10006,
|
||||
0xe0685000, 0x701d0200,
|
||||
0x8070ff70, 0x00000080,
|
||||
0xbef90080, 0x7e040280,
|
||||
0x807d907d, 0xbf0aff7d,
|
||||
0x00000060, 0xbfa2ffbc,
|
||||
0xbe804100, 0xbe824102,
|
||||
0xbe844104, 0xbe864106,
|
||||
0xbe884108, 0xbe8a410a,
|
||||
0xd7610002, 0x0000f200,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f201, 0x80798179,
|
||||
0xd7610002, 0x0000f202,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f203, 0x80798179,
|
||||
0xd7610002, 0x0000f204,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f205, 0x80798179,
|
||||
0xd7610002, 0x0000f206,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f207, 0x80798179,
|
||||
0xd7610002, 0x0000f208,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f209, 0x80798179,
|
||||
0xd7610002, 0x0000f20a,
|
||||
0x80798179, 0xd7610002,
|
||||
0x0000f20b, 0x80798179,
|
||||
0xe0685000, 0x701d0200,
|
||||
0xbefe00c1, 0x857d9973,
|
||||
0x8b7d817d, 0xbf06817d,
|
||||
0xbfa20004, 0xbef000ff,
|
||||
0x00000200, 0xbeff0080,
|
||||
0xbfa00003, 0xbef000ff,
|
||||
0x00000400, 0xbeff00c1,
|
||||
0xb8fb3b05, 0x807b817b,
|
||||
0x847b827b, 0x857d9973,
|
||||
0xbfa20002, 0xbeff0080,
|
||||
0xbfa00001, 0xbeff00c1,
|
||||
0xb8fb4306, 0x8b7bc17b,
|
||||
0xbfa10044, 0xbfbd0000,
|
||||
0x8b7aff6d, 0x80000000,
|
||||
0xbfa10040, 0x847b867b,
|
||||
0x847b827b, 0xbef6007b,
|
||||
0xb8f03b05, 0x80708170,
|
||||
0xbf0d9973, 0xbfa20002,
|
||||
0x84708970, 0xbfa00001,
|
||||
0x84708a70, 0xb8fa1e06,
|
||||
0x847a8a7a, 0x80707a70,
|
||||
0x8070ff70, 0x00000200,
|
||||
0x8070ff70, 0x00000080,
|
||||
0xbef600ff, 0x01000000,
|
||||
0xd71f0000, 0x000100c1,
|
||||
0xd7200000, 0x000200c1,
|
||||
0x16000084, 0x857d9973,
|
||||
0x8b7d817d, 0xbf06817d,
|
||||
0xbfa20017, 0xbef600ff,
|
||||
0xbefd0080, 0xbfa20012,
|
||||
0xbe8300ff, 0x00000080,
|
||||
0xbf800000, 0xbf800000,
|
||||
0xbf800000, 0xd8d80000,
|
||||
0x01000000, 0xbf890000,
|
||||
0xe0685000, 0x701d0100,
|
||||
0x807d037d, 0x80700370,
|
||||
0xd5250000, 0x0001ff00,
|
||||
0x00000080, 0xbf0a7b7d,
|
||||
0xbfa2fff4, 0xbfa00011,
|
||||
0xbe8300ff, 0x00000100,
|
||||
0xbf800000, 0xbf800000,
|
||||
0xbf800000, 0xd8d80000,
|
||||
0x01000000, 0xbf890000,
|
||||
0xe0685000, 0x701d0100,
|
||||
0x807d037d, 0x80700370,
|
||||
0xd5250000, 0x0001ff00,
|
||||
0x00000100, 0xbf0a7b7d,
|
||||
0xbfa2fff4, 0xbefe00c1,
|
||||
0x857d9973, 0x8b7d817d,
|
||||
0xbf06817d, 0xbfa20004,
|
||||
0xbef000ff, 0x00000200,
|
||||
0xbeff0080, 0xbfa00003,
|
||||
0xbef000ff, 0x00000400,
|
||||
0xbeff00c1, 0xb8fb3b05,
|
||||
0x807b817b, 0x847b827b,
|
||||
0x857d9973, 0x8b7d817d,
|
||||
0xbf06817d, 0xbfa20017,
|
||||
0xbef600ff, 0x01000000,
|
||||
0xbefd0084, 0xbf0a7b7d,
|
||||
0xbfa10037, 0x7e008700,
|
||||
0x7e028701, 0x7e048702,
|
||||
0x7e068703, 0xe0685000,
|
||||
0x701d0000, 0xe0685080,
|
||||
0x701d0100, 0xe0685100,
|
||||
0x701d0200, 0xe0685180,
|
||||
0x701d0300, 0x807d847d,
|
||||
0x8070ff70, 0x00000200,
|
||||
0xbf0a7b7d, 0xbfa2ffef,
|
||||
0xbfa00025, 0xbef600ff,
|
||||
0x01000000, 0xbefd0084,
|
||||
0xbf0a7b7d, 0xbfa10037,
|
||||
0xbf0a7b7d, 0xbfa10011,
|
||||
0x7e008700, 0x7e028701,
|
||||
0x7e048702, 0x7e068703,
|
||||
0xe0685000, 0x701d0000,
|
||||
0xe0685080, 0x701d0100,
|
||||
0xe0685100, 0x701d0200,
|
||||
0xe0685180, 0x701d0300,
|
||||
0xe0685100, 0x701d0100,
|
||||
0xe0685200, 0x701d0200,
|
||||
0xe0685300, 0x701d0300,
|
||||
0x807d847d, 0x8070ff70,
|
||||
0x00000200, 0xbf0a7b7d,
|
||||
0xbfa2ffef, 0xbfa00025,
|
||||
0xbef600ff, 0x01000000,
|
||||
0xbefd0084, 0xbf0a7b7d,
|
||||
0xbfa10011, 0x7e008700,
|
||||
0x7e028701, 0x7e048702,
|
||||
0x7e068703, 0xe0685000,
|
||||
0x701d0000, 0xe0685100,
|
||||
0x701d0100, 0xe0685200,
|
||||
0x701d0200, 0xe0685300,
|
||||
0x701d0300, 0x807d847d,
|
||||
0x8070ff70, 0x00000400,
|
||||
0xbf0a7b7d, 0xbfa2ffef,
|
||||
0xb8fb1e06, 0x8b7bc17b,
|
||||
0xbfa1000c, 0x847b837b,
|
||||
0x807b7d7b, 0xbefe00c1,
|
||||
0xbeff0080, 0x7e008700,
|
||||
0xe0685000, 0x701d0000,
|
||||
0x807d817d, 0x8070ff70,
|
||||
0x00000080, 0xbf0a7b7d,
|
||||
0xbfa2fff8, 0xbfa00146,
|
||||
0xbef4007e, 0x8b75ff7f,
|
||||
0x0000ffff, 0x8c75ff75,
|
||||
0x00040000, 0xbef60080,
|
||||
0xbef700ff, 0x10807fac,
|
||||
0xb8f202dc, 0x84729972,
|
||||
0x8b6eff7f, 0x04000000,
|
||||
0xbfa1003a, 0xbefe00c1,
|
||||
0x857d9972, 0x8b7d817d,
|
||||
0xbf06817d, 0xbfa20002,
|
||||
0xbeff0080, 0xbfa00001,
|
||||
0xbeff00c1, 0xb8ef4306,
|
||||
0x8b6fc16f, 0xbfa1002f,
|
||||
0x846f866f, 0x846f826f,
|
||||
0xbef6006f, 0xb8f83b05,
|
||||
0x80788178, 0xbf0d9972,
|
||||
0xbfa20002, 0x84788978,
|
||||
0xbfa00001, 0x84788a78,
|
||||
0xb8ee1e06, 0x846e8a6e,
|
||||
0x80786e78, 0x8078ff78,
|
||||
0x00000200, 0x8078ff78,
|
||||
0x00000080, 0xbef600ff,
|
||||
0x01000000, 0x857d9972,
|
||||
0x8b7d817d, 0xbf06817d,
|
||||
0xbefd0080, 0xbfa2000c,
|
||||
0xe0500000, 0x781d0000,
|
||||
0xbf8903f7, 0xdac00000,
|
||||
0x00000000, 0x807dff7d,
|
||||
0x00000080, 0x8078ff78,
|
||||
0x00000080, 0xbf0a6f7d,
|
||||
0xbfa2fff5, 0xbfa0000b,
|
||||
0xe0500000, 0x781d0000,
|
||||
0xbf8903f7, 0xdac00000,
|
||||
0x00000000, 0x807dff7d,
|
||||
0x00000100, 0x8078ff78,
|
||||
0x00000100, 0xbf0a6f7d,
|
||||
0xbfa2fff5, 0xbef80080,
|
||||
0x00000400, 0xbf0a7b7d,
|
||||
0xbfa2ffef, 0xb8fb1e06,
|
||||
0x8b7bc17b, 0xbfa1000c,
|
||||
0x847b837b, 0x807b7d7b,
|
||||
0xbefe00c1, 0xbeff0080,
|
||||
0x7e008700, 0xe0685000,
|
||||
0x701d0000, 0x807d817d,
|
||||
0x8070ff70, 0x00000080,
|
||||
0xbf0a7b7d, 0xbfa2fff8,
|
||||
0xbfa00146, 0xbef4007e,
|
||||
0x8b75ff7f, 0x0000ffff,
|
||||
0x8c75ff75, 0x00040000,
|
||||
0xbef60080, 0xbef700ff,
|
||||
0x10807fac, 0xb8f202dc,
|
||||
0x84729972, 0x8b6eff7f,
|
||||
0x04000000, 0xbfa1003a,
|
||||
0xbefe00c1, 0x857d9972,
|
||||
0x8b7d817d, 0xbf06817d,
|
||||
0xbfa20002, 0xbeff0080,
|
||||
0xbfa00001, 0xbeff00c1,
|
||||
0xb8ef3b05, 0x806f816f,
|
||||
0x846f826f, 0x857d9972,
|
||||
0x8b7d817d, 0xbf06817d,
|
||||
0xbfa20024, 0xbef600ff,
|
||||
0x01000000, 0xbeee0078,
|
||||
0x8078ff78, 0x00000200,
|
||||
0xbefd0084, 0xbf0a6f7d,
|
||||
0xbfa10050, 0xe0505000,
|
||||
0x781d0000, 0xe0505080,
|
||||
0x781d0100, 0xe0505100,
|
||||
0x781d0200, 0xe0505180,
|
||||
0x781d0300, 0xbf8903f7,
|
||||
0x7e008500, 0x7e028501,
|
||||
0x7e048502, 0x7e068503,
|
||||
0x807d847d, 0x8078ff78,
|
||||
0x00000200, 0xbf0a6f7d,
|
||||
0xbfa2ffee, 0xe0505000,
|
||||
0x6e1d0000, 0xe0505080,
|
||||
0x6e1d0100, 0xe0505100,
|
||||
0x6e1d0200, 0xe0505180,
|
||||
0x6e1d0300, 0xbf8903f7,
|
||||
0xbfa00034, 0xbef600ff,
|
||||
0x01000000, 0xbeee0078,
|
||||
0x8078ff78, 0x00000400,
|
||||
0xbefd0084, 0xbf0a6f7d,
|
||||
0xbfa10012, 0xe0505000,
|
||||
0x781d0000, 0xe0505100,
|
||||
0x781d0100, 0xe0505200,
|
||||
0x781d0200, 0xe0505300,
|
||||
0x781d0300, 0xbf8903f7,
|
||||
0x7e008500, 0x7e028501,
|
||||
0x7e048502, 0x7e068503,
|
||||
0x807d847d, 0x8078ff78,
|
||||
0x00000400, 0xbf0a6f7d,
|
||||
0xbfa2ffee, 0xb8ef1e06,
|
||||
0x8b6fc16f, 0xbfa1000e,
|
||||
0x846f836f, 0x806f7d6f,
|
||||
0xbefe00c1, 0xbeff0080,
|
||||
0xe0505000, 0x781d0000,
|
||||
0xbf8903f7, 0x7e008500,
|
||||
0x807d817d, 0x8078ff78,
|
||||
0x00000080, 0xbf0a6f7d,
|
||||
0xbfa2fff7, 0xbeff00c1,
|
||||
0xe0505000, 0x6e1d0000,
|
||||
0xe0505100, 0x6e1d0100,
|
||||
0xe0505200, 0x6e1d0200,
|
||||
0xe0505300, 0x6e1d0300,
|
||||
0xbf8903f7, 0xb8f83b05,
|
||||
0x80788178, 0xbf0d9972,
|
||||
0xbfa20002, 0x84788978,
|
||||
0xbfa00001, 0x84788a78,
|
||||
0xb8ee1e06, 0x846e8a6e,
|
||||
0x80786e78, 0x8078ff78,
|
||||
0x00000200, 0x80f8ff78,
|
||||
0x00000050, 0xbef600ff,
|
||||
0x01000000, 0xbefd00ff,
|
||||
0x0000006c, 0x80f89078,
|
||||
0xf428403a, 0xf0000000,
|
||||
0xbf89fc07, 0x80fd847d,
|
||||
0xbf800000, 0xbe804300,
|
||||
0xbe824302, 0x80f8a078,
|
||||
0xf42c403a, 0xf0000000,
|
||||
0xbf89fc07, 0x80fd887d,
|
||||
0xbf800000, 0xbe804300,
|
||||
0xbe824302, 0xbe844304,
|
||||
0xbe864306, 0x80f8c078,
|
||||
0xf430403a, 0xf0000000,
|
||||
0xbf89fc07, 0x80fd907d,
|
||||
0xbf800000, 0xbe804300,
|
||||
0xbe824302, 0xbe844304,
|
||||
0xbe864306, 0xbe884308,
|
||||
0xbe8a430a, 0xbe8c430c,
|
||||
0xbe8e430e, 0xbf06807d,
|
||||
0xbfa1fff0, 0xb980f801,
|
||||
0x00000000, 0xbfbd0000,
|
||||
0xb8ef4306, 0x8b6fc16f,
|
||||
0xbfa1002f, 0x846f866f,
|
||||
0x846f826f, 0xbef6006f,
|
||||
0xb8f83b05, 0x80788178,
|
||||
0xbf0d9972, 0xbfa20002,
|
||||
0x84788978, 0xbfa00001,
|
||||
0x84788a78, 0xb8ee1e06,
|
||||
0x846e8a6e, 0x80786e78,
|
||||
0x8078ff78, 0x00000200,
|
||||
0x8078ff78, 0x00000080,
|
||||
0xbef600ff, 0x01000000,
|
||||
0xf4205bfa, 0xf0000000,
|
||||
0x80788478, 0xf4205b3a,
|
||||
0x857d9972, 0x8b7d817d,
|
||||
0xbf06817d, 0xbefd0080,
|
||||
0xbfa2000c, 0xe0500000,
|
||||
0x781d0000, 0xbf8903f7,
|
||||
0xdac00000, 0x00000000,
|
||||
0x807dff7d, 0x00000080,
|
||||
0x8078ff78, 0x00000080,
|
||||
0xbf0a6f7d, 0xbfa2fff5,
|
||||
0xbfa0000b, 0xe0500000,
|
||||
0x781d0000, 0xbf8903f7,
|
||||
0xdac00000, 0x00000000,
|
||||
0x807dff7d, 0x00000100,
|
||||
0x8078ff78, 0x00000100,
|
||||
0xbf0a6f7d, 0xbfa2fff5,
|
||||
0xbef80080, 0xbefe00c1,
|
||||
0x857d9972, 0x8b7d817d,
|
||||
0xbf06817d, 0xbfa20002,
|
||||
0xbeff0080, 0xbfa00001,
|
||||
0xbeff00c1, 0xb8ef3b05,
|
||||
0x806f816f, 0x846f826f,
|
||||
0x857d9972, 0x8b7d817d,
|
||||
0xbf06817d, 0xbfa20024,
|
||||
0xbef600ff, 0x01000000,
|
||||
0xbeee0078, 0x8078ff78,
|
||||
0x00000200, 0xbefd0084,
|
||||
0xbf0a6f7d, 0xbfa10050,
|
||||
0xe0505000, 0x781d0000,
|
||||
0xe0505080, 0x781d0100,
|
||||
0xe0505100, 0x781d0200,
|
||||
0xe0505180, 0x781d0300,
|
||||
0xbf8903f7, 0x7e008500,
|
||||
0x7e028501, 0x7e048502,
|
||||
0x7e068503, 0x807d847d,
|
||||
0x8078ff78, 0x00000200,
|
||||
0xbf0a6f7d, 0xbfa2ffee,
|
||||
0xe0505000, 0x6e1d0000,
|
||||
0xe0505080, 0x6e1d0100,
|
||||
0xe0505100, 0x6e1d0200,
|
||||
0xe0505180, 0x6e1d0300,
|
||||
0xbf8903f7, 0xbfa00034,
|
||||
0xbef600ff, 0x01000000,
|
||||
0xbeee0078, 0x8078ff78,
|
||||
0x00000400, 0xbefd0084,
|
||||
0xbf0a6f7d, 0xbfa10012,
|
||||
0xe0505000, 0x781d0000,
|
||||
0xe0505100, 0x781d0100,
|
||||
0xe0505200, 0x781d0200,
|
||||
0xe0505300, 0x781d0300,
|
||||
0xbf8903f7, 0x7e008500,
|
||||
0x7e028501, 0x7e048502,
|
||||
0x7e068503, 0x807d847d,
|
||||
0x8078ff78, 0x00000400,
|
||||
0xbf0a6f7d, 0xbfa2ffee,
|
||||
0xb8ef1e06, 0x8b6fc16f,
|
||||
0xbfa1000e, 0x846f836f,
|
||||
0x806f7d6f, 0xbefe00c1,
|
||||
0xbeff0080, 0xe0505000,
|
||||
0x781d0000, 0xbf8903f7,
|
||||
0x7e008500, 0x807d817d,
|
||||
0x8078ff78, 0x00000080,
|
||||
0xbf0a6f7d, 0xbfa2fff7,
|
||||
0xbeff00c1, 0xe0505000,
|
||||
0x6e1d0000, 0xe0505100,
|
||||
0x6e1d0100, 0xe0505200,
|
||||
0x6e1d0200, 0xe0505300,
|
||||
0x6e1d0300, 0xbf8903f7,
|
||||
0xb8f83b05, 0x80788178,
|
||||
0xbf0d9972, 0xbfa20002,
|
||||
0x84788978, 0xbfa00001,
|
||||
0x84788a78, 0xb8ee1e06,
|
||||
0x846e8a6e, 0x80786e78,
|
||||
0x8078ff78, 0x00000200,
|
||||
0x80f8ff78, 0x00000050,
|
||||
0xbef600ff, 0x01000000,
|
||||
0xbefd00ff, 0x0000006c,
|
||||
0x80f89078, 0xf428403a,
|
||||
0xf0000000, 0xbf89fc07,
|
||||
0x80fd847d, 0xbf800000,
|
||||
0xbe804300, 0xbe824302,
|
||||
0x80f8a078, 0xf42c403a,
|
||||
0xf0000000, 0xbf89fc07,
|
||||
0x80fd887d, 0xbf800000,
|
||||
0xbe804300, 0xbe824302,
|
||||
0xbe844304, 0xbe864306,
|
||||
0x80f8c078, 0xf430403a,
|
||||
0xf0000000, 0xbf89fc07,
|
||||
0x80fd907d, 0xbf800000,
|
||||
0xbe804300, 0xbe824302,
|
||||
0xbe844304, 0xbe864306,
|
||||
0xbe884308, 0xbe8a430a,
|
||||
0xbe8c430c, 0xbe8e430e,
|
||||
0xbf06807d, 0xbfa1fff0,
|
||||
0xb980f801, 0x00000000,
|
||||
0xbfbd0000, 0xb8f83b05,
|
||||
0x80788178, 0xbf0d9972,
|
||||
0xbfa20002, 0x84788978,
|
||||
0xbfa00001, 0x84788a78,
|
||||
0xb8ee1e06, 0x846e8a6e,
|
||||
0x80786e78, 0x8078ff78,
|
||||
0x00000200, 0xbef600ff,
|
||||
0x01000000, 0xf4205bfa,
|
||||
0xf0000000, 0x80788478,
|
||||
0xf4205b7a, 0xf0000000,
|
||||
0x80788478, 0xf4205c3a,
|
||||
0xf4205b3a, 0xf0000000,
|
||||
0x80788478, 0xf4205b7a,
|
||||
0xf0000000, 0x80788478,
|
||||
0xf4205c7a, 0xf0000000,
|
||||
0x80788478, 0xf4205eba,
|
||||
0xf4205c3a, 0xf0000000,
|
||||
0x80788478, 0xf4205c7a,
|
||||
0xf0000000, 0x80788478,
|
||||
0xf4205efa, 0xf0000000,
|
||||
0x80788478, 0xf4205e7a,
|
||||
0xf4205eba, 0xf0000000,
|
||||
0x80788478, 0xf4205efa,
|
||||
0xf0000000, 0x80788478,
|
||||
0xf4205cfa, 0xf0000000,
|
||||
0x80788478, 0xf4205bba,
|
||||
0xf4205e7a, 0xf0000000,
|
||||
0x80788478, 0xf4205cfa,
|
||||
0xf0000000, 0x80788478,
|
||||
0xbf89fc07, 0xb96ef814,
|
||||
0xf4205bba, 0xf0000000,
|
||||
0x80788478, 0xbf89fc07,
|
||||
0xb96ef815, 0xbefd006f,
|
||||
0xbefe0070, 0xbeff0071,
|
||||
0x8b6f7bff, 0x000003ff,
|
||||
0xb96f4803, 0x8b6f7bff,
|
||||
0xfffff800, 0x856f8b6f,
|
||||
0xb96fa2c3, 0xb973f801,
|
||||
0xb8ee3b05, 0x806e816e,
|
||||
0xbf0d9972, 0xbfa20002,
|
||||
0x846e896e, 0xbfa00001,
|
||||
0x846e8a6e, 0xb8ef1e06,
|
||||
0x846f8a6f, 0x806e6f6e,
|
||||
0x806eff6e, 0x00000200,
|
||||
0x806e746e, 0x826f8075,
|
||||
0x8b6fff6f, 0x0000ffff,
|
||||
0xf4085c37, 0xf8000050,
|
||||
0xf4085d37, 0xf8000060,
|
||||
0xf4005e77, 0xf8000074,
|
||||
0xbf89fc07, 0x8b6dff6d,
|
||||
0x0000ffff, 0x8bfe7e7e,
|
||||
0x8bea6a6a, 0xb8eef802,
|
||||
0xbf0d866e, 0xbfa20002,
|
||||
0xb97af802, 0xbe80486c,
|
||||
0xb97af802, 0xbe804a6c,
|
||||
0xbfb00000, 0xbf9f0000,
|
||||
0xb96ef814, 0xf4205bba,
|
||||
0xf0000000, 0x80788478,
|
||||
0xbf89fc07, 0xb96ef815,
|
||||
0xbefd006f, 0xbefe0070,
|
||||
0xbeff0071, 0x8b6f7bff,
|
||||
0x000003ff, 0xb96f4803,
|
||||
0x8b6f7bff, 0xfffff800,
|
||||
0x856f8b6f, 0xb96fa2c3,
|
||||
0xb973f801, 0xb8ee3b05,
|
||||
0x806e816e, 0xbf0d9972,
|
||||
0xbfa20002, 0x846e896e,
|
||||
0xbfa00001, 0x846e8a6e,
|
||||
0xb8ef1e06, 0x846f8a6f,
|
||||
0x806e6f6e, 0x806eff6e,
|
||||
0x00000200, 0x806e746e,
|
||||
0x826f8075, 0x8b6fff6f,
|
||||
0x0000ffff, 0xf4085c37,
|
||||
0xf8000050, 0xf4085d37,
|
||||
0xf8000060, 0xf4005e77,
|
||||
0xf8000074, 0xbf89fc07,
|
||||
0x8b6dff6d, 0x0000ffff,
|
||||
0x8bfe7e7e, 0x8bea6a6a,
|
||||
0xb8eef802, 0xbf0d866e,
|
||||
0xbfa20002, 0xb97af802,
|
||||
0xbe80486c, 0xb97af802,
|
||||
0xbe804a6c, 0xbfb00000,
|
||||
0xbf9f0000, 0xbf9f0000,
|
||||
0xbf9f0000, 0xbf9f0000,
|
||||
0xbf9f0000, 0x00000000,
|
||||
};
|
||||
|
@ -186,6 +186,12 @@ L_SKIP_RESTORE:
|
||||
s_getreg_b32 s_save_trapsts, hwreg(HW_REG_TRAPSTS)
|
||||
|
||||
#if SW_SA_TRAP
|
||||
// If ttmp1[30] is set then issue s_barrier to unblock dependent waves.
|
||||
s_bitcmp1_b32 s_save_pc_hi, 30
|
||||
s_cbranch_scc0 L_TRAP_NO_BARRIER
|
||||
s_barrier
|
||||
|
||||
L_TRAP_NO_BARRIER:
|
||||
// If ttmp1[31] is set then trap may occur early.
|
||||
// Spin wait until SAVECTX exception is raised.
|
||||
s_bitcmp1_b32 s_save_pc_hi, 31
|
||||
|
@ -973,12 +973,10 @@ out_unlock_prange:
|
||||
out_unlock_svms:
|
||||
mutex_unlock(&p->svms.lock);
|
||||
out_unref_process:
|
||||
pr_debug("CPU fault svms 0x%p address 0x%lx done\n", &p->svms, addr);
|
||||
kfd_unref_process(p);
|
||||
out_mmput:
|
||||
mmput(mm);
|
||||
|
||||
pr_debug("CPU fault svms 0x%p address 0x%lx done\n", &p->svms, addr);
|
||||
|
||||
return r ? VM_FAULT_SIGBUS : 0;
|
||||
}
|
||||
|
||||
|
@ -1549,6 +1549,9 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
|
||||
|
||||
adev->dm.dc->debug.visual_confirm = amdgpu_dc_visual_confirm;
|
||||
|
||||
/* TODO: Remove after DP2 receiver gets proper support of Cable ID feature */
|
||||
adev->dm.dc->debug.ignore_cable_id = true;
|
||||
|
||||
r = dm_dmub_hw_init(adev);
|
||||
if (r) {
|
||||
DRM_ERROR("DMUB interface failed to initialize: status=%d\n", r);
|
||||
|
@ -157,6 +157,7 @@ void dcn32_init_clocks(struct clk_mgr *clk_mgr_base)
|
||||
struct clk_mgr_internal *clk_mgr = TO_CLK_MGR_INTERNAL(clk_mgr_base);
|
||||
unsigned int num_levels;
|
||||
struct clk_limit_num_entries *num_entries_per_clk = &clk_mgr_base->bw_params->clk_table.num_entries_per_clk;
|
||||
unsigned int i;
|
||||
|
||||
memset(&(clk_mgr_base->clks), 0, sizeof(struct dc_clocks));
|
||||
clk_mgr_base->clks.p_state_change_support = true;
|
||||
@ -205,18 +206,17 @@ void dcn32_init_clocks(struct clk_mgr *clk_mgr_base)
|
||||
clk_mgr->dpm_present = true;
|
||||
|
||||
if (clk_mgr_base->ctx->dc->debug.min_disp_clk_khz) {
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < num_levels; i++)
|
||||
if (clk_mgr_base->bw_params->clk_table.entries[i].dispclk_mhz
|
||||
< khz_to_mhz_ceil(clk_mgr_base->ctx->dc->debug.min_disp_clk_khz))
|
||||
clk_mgr_base->bw_params->clk_table.entries[i].dispclk_mhz
|
||||
= khz_to_mhz_ceil(clk_mgr_base->ctx->dc->debug.min_disp_clk_khz);
|
||||
}
|
||||
for (i = 0; i < num_levels; i++)
|
||||
if (clk_mgr_base->bw_params->clk_table.entries[i].dispclk_mhz > 1950)
|
||||
clk_mgr_base->bw_params->clk_table.entries[i].dispclk_mhz = 1950;
|
||||
|
||||
if (clk_mgr_base->ctx->dc->debug.min_dpp_clk_khz) {
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < num_levels; i++)
|
||||
if (clk_mgr_base->bw_params->clk_table.entries[i].dppclk_mhz
|
||||
< khz_to_mhz_ceil(clk_mgr_base->ctx->dc->debug.min_dpp_clk_khz))
|
||||
@ -669,6 +669,9 @@ static void dcn32_get_memclk_states_from_smu(struct clk_mgr *clk_mgr_base)
|
||||
&clk_mgr_base->bw_params->clk_table.entries[0].memclk_mhz,
|
||||
&num_entries_per_clk->num_memclk_levels);
|
||||
|
||||
/* memclk must have at least one level */
|
||||
num_entries_per_clk->num_memclk_levels = num_entries_per_clk->num_memclk_levels ? num_entries_per_clk->num_memclk_levels : 1;
|
||||
|
||||
dcn32_init_single_clock(clk_mgr, PPCLK_FCLK,
|
||||
&clk_mgr_base->bw_params->clk_table.entries[0].fclk_mhz,
|
||||
&num_entries_per_clk->num_fclk_levels);
|
||||
|
@ -852,6 +852,7 @@ struct dc_debug_options {
|
||||
bool enable_double_buffered_dsc_pg_support;
|
||||
bool enable_dp_dig_pixel_rate_div_policy;
|
||||
enum lttpr_mode lttpr_mode_override;
|
||||
unsigned int dsc_delay_factor_wa_x1000;
|
||||
};
|
||||
|
||||
struct gpu_info_soc_bounding_box_v1_0;
|
||||
|
@ -623,6 +623,10 @@ void hubp2_cursor_set_attributes(
|
||||
hubp->att.size.bits.width = attr->width;
|
||||
hubp->att.size.bits.height = attr->height;
|
||||
hubp->att.cur_ctl.bits.mode = attr->color_format;
|
||||
|
||||
hubp->cur_rect.w = attr->width;
|
||||
hubp->cur_rect.h = attr->height;
|
||||
|
||||
hubp->att.cur_ctl.bits.pitch = hw_pitch;
|
||||
hubp->att.cur_ctl.bits.line_per_chunk = lpc;
|
||||
hubp->att.cur_ctl.bits.cur_2x_magnify = attr->attribute_flags.bits.ENABLE_MAGNIFICATION;
|
||||
|
@ -847,7 +847,7 @@ static const struct resource_caps res_cap_dcn314 = {
|
||||
.num_ddc = 5,
|
||||
.num_vmid = 16,
|
||||
.num_mpc_3dlut = 2,
|
||||
.num_dsc = 3,
|
||||
.num_dsc = 4,
|
||||
};
|
||||
|
||||
static const struct dc_plane_cap plane_cap = {
|
||||
|
@ -1228,6 +1228,7 @@ int dcn20_populate_dml_pipes_from_context(
|
||||
pipes[pipe_cnt].pipe.src.dcc = false;
|
||||
pipes[pipe_cnt].pipe.src.dcc_rate = 1;
|
||||
pipes[pipe_cnt].pipe.dest.synchronized_vblank_all_planes = synchronized_vblank;
|
||||
pipes[pipe_cnt].pipe.dest.synchronize_timings = synchronized_vblank;
|
||||
pipes[pipe_cnt].pipe.dest.hblank_start = timing->h_total - timing->h_front_porch;
|
||||
pipes[pipe_cnt].pipe.dest.hblank_end = pipes[pipe_cnt].pipe.dest.hblank_start
|
||||
- timing->h_addressable
|
||||
|
@ -2359,9 +2359,11 @@ void dcn32_update_bw_bounding_box_fpu(struct dc *dc, struct clk_bw_params *bw_pa
|
||||
|
||||
if (dc->ctx->dc_bios->vram_info.dram_channel_width_bytes)
|
||||
dcn3_2_soc.dram_channel_width_bytes = dc->ctx->dc_bios->vram_info.dram_channel_width_bytes;
|
||||
|
||||
}
|
||||
|
||||
/* DML DSC delay factor workaround */
|
||||
dcn3_2_ip.dsc_delay_factor_wa = dc->debug.dsc_delay_factor_wa_x1000 / 1000.0;
|
||||
|
||||
/* Override dispclk_dppclk_vco_speed_mhz from Clk Mgr */
|
||||
dcn3_2_soc.dispclk_dppclk_vco_speed_mhz = dc->clk_mgr->dentist_vco_freq_khz / 1000.0;
|
||||
dc->dml.soc.dispclk_dppclk_vco_speed_mhz = dc->clk_mgr->dentist_vco_freq_khz / 1000.0;
|
||||
|
@ -364,10 +364,11 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
|
||||
for (k = 0; k < mode_lib->vba.NumberOfActiveSurfaces; ++k) {
|
||||
v->DSCDelay[k] = dml32_DSCDelayRequirement(mode_lib->vba.DSCEnabled[k],
|
||||
mode_lib->vba.ODMCombineEnabled[k], mode_lib->vba.DSCInputBitPerComponent[k],
|
||||
mode_lib->vba.OutputBpp[k], mode_lib->vba.HActive[k], mode_lib->vba.HTotal[k],
|
||||
mode_lib->vba.OutputBppPerState[mode_lib->vba.VoltageLevel][k],
|
||||
mode_lib->vba.HActive[k], mode_lib->vba.HTotal[k],
|
||||
mode_lib->vba.NumberOfDSCSlices[k], mode_lib->vba.OutputFormat[k],
|
||||
mode_lib->vba.Output[k], mode_lib->vba.PixelClock[k],
|
||||
mode_lib->vba.PixelClockBackEnd[k]);
|
||||
mode_lib->vba.PixelClockBackEnd[k], mode_lib->vba.ip.dsc_delay_factor_wa);
|
||||
}
|
||||
|
||||
for (k = 0; k < mode_lib->vba.NumberOfActiveSurfaces; ++k)
|
||||
@ -1627,7 +1628,7 @@ static void mode_support_configuration(struct vba_vars_st *v,
|
||||
&& !mode_lib->vba.MSOOrODMSplitWithNonDPLink
|
||||
&& !mode_lib->vba.NotEnoughLanesForMSO
|
||||
&& mode_lib->vba.LinkCapacitySupport[i] == true && !mode_lib->vba.P2IWith420
|
||||
&& !mode_lib->vba.DSCOnlyIfNecessaryWithBPP
|
||||
//&& !mode_lib->vba.DSCOnlyIfNecessaryWithBPP
|
||||
&& !mode_lib->vba.DSC422NativeNotSupported
|
||||
&& !mode_lib->vba.MPCCombineMethodIncompatible
|
||||
&& mode_lib->vba.ODMCombine2To1SupportCheckOK[i] == true
|
||||
@ -2475,7 +2476,8 @@ void dml32_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l
|
||||
mode_lib->vba.OutputBppPerState[i][k], mode_lib->vba.HActive[k],
|
||||
mode_lib->vba.HTotal[k], mode_lib->vba.NumberOfDSCSlices[k],
|
||||
mode_lib->vba.OutputFormat[k], mode_lib->vba.Output[k],
|
||||
mode_lib->vba.PixelClock[k], mode_lib->vba.PixelClockBackEnd[k]);
|
||||
mode_lib->vba.PixelClock[k], mode_lib->vba.PixelClockBackEnd[k],
|
||||
mode_lib->vba.ip.dsc_delay_factor_wa);
|
||||
}
|
||||
|
||||
for (k = 0; k <= mode_lib->vba.NumberOfActiveSurfaces - 1; k++) {
|
||||
|
@ -1726,7 +1726,8 @@ unsigned int dml32_DSCDelayRequirement(bool DSCEnabled,
|
||||
enum output_format_class OutputFormat,
|
||||
enum output_encoder_class Output,
|
||||
double PixelClock,
|
||||
double PixelClockBackEnd)
|
||||
double PixelClockBackEnd,
|
||||
double dsc_delay_factor_wa)
|
||||
{
|
||||
unsigned int DSCDelayRequirement_val;
|
||||
|
||||
@ -1746,7 +1747,7 @@ unsigned int dml32_DSCDelayRequirement(bool DSCEnabled,
|
||||
}
|
||||
|
||||
DSCDelayRequirement_val = DSCDelayRequirement_val + (HTotal - HActive) *
|
||||
dml_ceil(DSCDelayRequirement_val / HActive, 1);
|
||||
dml_ceil((double)DSCDelayRequirement_val / HActive, 1);
|
||||
|
||||
DSCDelayRequirement_val = DSCDelayRequirement_val * PixelClock / PixelClockBackEnd;
|
||||
|
||||
@ -1764,7 +1765,7 @@ unsigned int dml32_DSCDelayRequirement(bool DSCEnabled,
|
||||
dml_print("DML::%s: DSCDelayRequirement_val = %d\n", __func__, DSCDelayRequirement_val);
|
||||
#endif
|
||||
|
||||
return DSCDelayRequirement_val;
|
||||
return dml_ceil(DSCDelayRequirement_val * dsc_delay_factor_wa, 1);
|
||||
}
|
||||
|
||||
void dml32_CalculateSurfaceSizeInMall(
|
||||
|
@ -327,7 +327,8 @@ unsigned int dml32_DSCDelayRequirement(bool DSCEnabled,
|
||||
enum output_format_class OutputFormat,
|
||||
enum output_encoder_class Output,
|
||||
double PixelClock,
|
||||
double PixelClockBackEnd);
|
||||
double PixelClockBackEnd,
|
||||
double dsc_delay_factor_wa);
|
||||
|
||||
void dml32_CalculateSurfaceSizeInMall(
|
||||
unsigned int NumberOfActiveSurfaces,
|
||||
|
@ -291,8 +291,8 @@ void dml32_rq_dlg_get_dlg_reg(struct display_mode_lib *mode_lib,
|
||||
|
||||
dml_print("DML_DLG: %s: vready_after_vcount0 = %d\n", __func__, dlg_regs->vready_after_vcount0);
|
||||
|
||||
dst_x_after_scaler = get_dst_x_after_scaler(mode_lib, e2e_pipe_param, num_pipes, pipe_idx);
|
||||
dst_y_after_scaler = get_dst_y_after_scaler(mode_lib, e2e_pipe_param, num_pipes, pipe_idx);
|
||||
dst_x_after_scaler = dml_ceil(get_dst_x_after_scaler(mode_lib, e2e_pipe_param, num_pipes, pipe_idx), 1);
|
||||
dst_y_after_scaler = dml_ceil(get_dst_y_after_scaler(mode_lib, e2e_pipe_param, num_pipes, pipe_idx), 1);
|
||||
|
||||
// do some adjustment on the dst_after scaler to account for odm combine mode
|
||||
dml_print("DML_DLG: %s: input dst_x_after_scaler = %d\n", __func__, dst_x_after_scaler);
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include "dcn321_fpu.h"
|
||||
#include "dcn32/dcn32_resource.h"
|
||||
#include "dcn321/dcn321_resource.h"
|
||||
#include "dml/dcn32/display_mode_vba_util_32.h"
|
||||
|
||||
#define DCN3_2_DEFAULT_DET_SIZE 256
|
||||
|
||||
@ -119,15 +120,15 @@ struct _vcs_dpi_soc_bounding_box_st dcn3_21_soc = {
|
||||
},
|
||||
},
|
||||
.num_states = 1,
|
||||
.sr_exit_time_us = 12.36,
|
||||
.sr_enter_plus_exit_time_us = 16.72,
|
||||
.sr_exit_time_us = 19.95,
|
||||
.sr_enter_plus_exit_time_us = 24.36,
|
||||
.sr_exit_z8_time_us = 285.0,
|
||||
.sr_enter_plus_exit_z8_time_us = 320,
|
||||
.writeback_latency_us = 12.0,
|
||||
.round_trip_ping_latency_dcfclk_cycles = 263,
|
||||
.urgent_latency_pixel_data_only_us = 4.0,
|
||||
.urgent_latency_pixel_mixed_with_vm_data_us = 4.0,
|
||||
.urgent_latency_vm_data_only_us = 4.0,
|
||||
.urgent_latency_pixel_data_only_us = 9.35,
|
||||
.urgent_latency_pixel_mixed_with_vm_data_us = 9.35,
|
||||
.urgent_latency_vm_data_only_us = 9.35,
|
||||
.fclk_change_latency_us = 20,
|
||||
.usr_retraining_latency_us = 2,
|
||||
.smn_latency_us = 2,
|
||||
@ -538,9 +539,11 @@ void dcn321_update_bw_bounding_box_fpu(struct dc *dc, struct clk_bw_params *bw_p
|
||||
|
||||
if (dc->ctx->dc_bios->vram_info.dram_channel_width_bytes)
|
||||
dcn3_21_soc.dram_channel_width_bytes = dc->ctx->dc_bios->vram_info.dram_channel_width_bytes;
|
||||
|
||||
}
|
||||
|
||||
/* DML DSC delay factor workaround */
|
||||
dcn3_21_ip.dsc_delay_factor_wa = dc->debug.dsc_delay_factor_wa_x1000 / 1000.0;
|
||||
|
||||
/* Override dispclk_dppclk_vco_speed_mhz from Clk Mgr */
|
||||
dcn3_21_soc.dispclk_dppclk_vco_speed_mhz = dc->clk_mgr->dentist_vco_freq_khz / 1000.0;
|
||||
dc->dml.soc.dispclk_dppclk_vco_speed_mhz = dc->clk_mgr->dentist_vco_freq_khz / 1000.0;
|
||||
|
@ -364,6 +364,9 @@ struct _vcs_dpi_ip_params_st {
|
||||
unsigned int max_num_dp2p0_outputs;
|
||||
unsigned int max_num_dp2p0_streams;
|
||||
unsigned int VBlankNomDefaultUS;
|
||||
|
||||
/* DM workarounds */
|
||||
double dsc_delay_factor_wa; // TODO: Remove after implementing root cause fix
|
||||
};
|
||||
|
||||
struct _vcs_dpi_display_xfc_params_st {
|
||||
|
@ -625,7 +625,7 @@ static void fetch_pipe_params(struct display_mode_lib *mode_lib)
|
||||
mode_lib->vba.skip_dio_check[mode_lib->vba.NumberOfActivePlanes] =
|
||||
dout->is_virtual;
|
||||
|
||||
if (!dout->dsc_enable)
|
||||
if (dout->dsc_enable)
|
||||
mode_lib->vba.ForcedOutputLinkBPP[mode_lib->vba.NumberOfActivePlanes] = dout->output_bpp;
|
||||
else
|
||||
mode_lib->vba.ForcedOutputLinkBPP[mode_lib->vba.NumberOfActivePlanes] = 0.0;
|
||||
|
@ -807,6 +807,38 @@ static bool is_listed_fourcc(const uint32_t *fourccs, size_t nfourccs, uint32_t
|
||||
return false;
|
||||
}
|
||||
|
||||
static const uint32_t conv_from_xrgb8888[] = {
|
||||
DRM_FORMAT_XRGB8888,
|
||||
DRM_FORMAT_ARGB8888,
|
||||
DRM_FORMAT_XRGB2101010,
|
||||
DRM_FORMAT_ARGB2101010,
|
||||
DRM_FORMAT_RGB565,
|
||||
DRM_FORMAT_RGB888,
|
||||
};
|
||||
|
||||
static const uint32_t conv_from_rgb565_888[] = {
|
||||
DRM_FORMAT_XRGB8888,
|
||||
DRM_FORMAT_ARGB8888,
|
||||
};
|
||||
|
||||
static bool is_conversion_supported(uint32_t from, uint32_t to)
|
||||
{
|
||||
switch (from) {
|
||||
case DRM_FORMAT_XRGB8888:
|
||||
case DRM_FORMAT_ARGB8888:
|
||||
return is_listed_fourcc(conv_from_xrgb8888, ARRAY_SIZE(conv_from_xrgb8888), to);
|
||||
case DRM_FORMAT_RGB565:
|
||||
case DRM_FORMAT_RGB888:
|
||||
return is_listed_fourcc(conv_from_rgb565_888, ARRAY_SIZE(conv_from_rgb565_888), to);
|
||||
case DRM_FORMAT_XRGB2101010:
|
||||
return to == DRM_FORMAT_ARGB2101010;
|
||||
case DRM_FORMAT_ARGB2101010:
|
||||
return to == DRM_FORMAT_XRGB2101010;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* drm_fb_build_fourcc_list - Filters a list of supported color formats against
|
||||
* the device's native formats
|
||||
@ -827,7 +859,9 @@ static bool is_listed_fourcc(const uint32_t *fourccs, size_t nfourccs, uint32_t
|
||||
* be handed over to drm_universal_plane_init() et al. Native formats
|
||||
* will go before emulated formats. Other heuristics might be applied
|
||||
* to optimize the order. Formats near the beginning of the list are
|
||||
* usually preferred over formats near the end of the list.
|
||||
* usually preferred over formats near the end of the list. Formats
|
||||
* without conversion helpers will be skipped. New drivers should only
|
||||
* pass in XRGB8888 and avoid exposing additional emulated formats.
|
||||
*
|
||||
* Returns:
|
||||
* The number of color-formats 4CC codes returned in @fourccs_out.
|
||||
@ -839,7 +873,7 @@ size_t drm_fb_build_fourcc_list(struct drm_device *dev,
|
||||
{
|
||||
u32 *fourccs = fourccs_out;
|
||||
const u32 *fourccs_end = fourccs_out + nfourccs_out;
|
||||
bool found_native = false;
|
||||
uint32_t native_format = 0;
|
||||
size_t i;
|
||||
|
||||
/*
|
||||
@ -858,26 +892,18 @@ size_t drm_fb_build_fourcc_list(struct drm_device *dev,
|
||||
|
||||
drm_dbg_kms(dev, "adding native format %p4cc\n", &fourcc);
|
||||
|
||||
if (!found_native)
|
||||
found_native = is_listed_fourcc(driver_fourccs, driver_nfourccs, fourcc);
|
||||
/*
|
||||
* There should only be one native format with the current API.
|
||||
* This API needs to be refactored to correctly support arbitrary
|
||||
* sets of native formats, since it needs to report which native
|
||||
* format to use for each emulated format.
|
||||
*/
|
||||
if (!native_format)
|
||||
native_format = fourcc;
|
||||
*fourccs = fourcc;
|
||||
++fourccs;
|
||||
}
|
||||
|
||||
/*
|
||||
* The plane's atomic_update helper converts the framebuffer's color format
|
||||
* to a native format when copying to device memory.
|
||||
*
|
||||
* If there is not a single format supported by both, device and
|
||||
* driver, the native formats are likely not supported by the conversion
|
||||
* helpers. Therefore *only* support the native formats and add a
|
||||
* conversion helper ASAP.
|
||||
*/
|
||||
if (!found_native) {
|
||||
drm_warn(dev, "Format conversion helpers required to add extra formats.\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* The extra formats, emulated by the driver, go second.
|
||||
*/
|
||||
@ -890,6 +916,9 @@ size_t drm_fb_build_fourcc_list(struct drm_device *dev,
|
||||
} else if (fourccs == fourccs_end) {
|
||||
drm_warn(dev, "Ignoring emulated format %p4cc\n", &fourcc);
|
||||
continue; /* end of available output buffer */
|
||||
} else if (!is_conversion_supported(fourcc, native_format)) {
|
||||
drm_dbg_kms(dev, "Unsupported emulated format %p4cc\n", &fourcc);
|
||||
continue; /* format is not supported for conversion */
|
||||
}
|
||||
|
||||
drm_dbg_kms(dev, "adding emulated format %p4cc\n", &fourcc);
|
||||
@ -898,7 +927,6 @@ size_t drm_fb_build_fourcc_list(struct drm_device *dev,
|
||||
++fourccs;
|
||||
}
|
||||
|
||||
out:
|
||||
return fourccs - fourccs_out;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_fb_build_fourcc_list);
|
||||
|
@ -282,6 +282,7 @@ i915-y += \
|
||||
display/intel_ddi.o \
|
||||
display/intel_ddi_buf_trans.o \
|
||||
display/intel_display_trace.o \
|
||||
display/intel_dkl_phy.o \
|
||||
display/intel_dp.o \
|
||||
display/intel_dp_aux.o \
|
||||
display/intel_dp_aux_backlight.o \
|
||||
|
@ -43,6 +43,7 @@
|
||||
#include "intel_de.h"
|
||||
#include "intel_display_power.h"
|
||||
#include "intel_display_types.h"
|
||||
#include "intel_dkl_phy.h"
|
||||
#include "intel_dp.h"
|
||||
#include "intel_dp_link_training.h"
|
||||
#include "intel_dp_mst.h"
|
||||
@ -1262,33 +1263,30 @@ static void tgl_dkl_phy_set_signal_levels(struct intel_encoder *encoder,
|
||||
for (ln = 0; ln < 2; ln++) {
|
||||
int level;
|
||||
|
||||
intel_de_write(dev_priv, HIP_INDEX_REG(tc_port),
|
||||
HIP_INDEX_VAL(tc_port, ln));
|
||||
|
||||
intel_de_write(dev_priv, DKL_TX_PMD_LANE_SUS(tc_port), 0);
|
||||
intel_dkl_phy_write(dev_priv, DKL_TX_PMD_LANE_SUS(tc_port), ln, 0);
|
||||
|
||||
level = intel_ddi_level(encoder, crtc_state, 2*ln+0);
|
||||
|
||||
intel_de_rmw(dev_priv, DKL_TX_DPCNTL0(tc_port),
|
||||
DKL_TX_PRESHOOT_COEFF_MASK |
|
||||
DKL_TX_DE_EMPAHSIS_COEFF_MASK |
|
||||
DKL_TX_VSWING_CONTROL_MASK,
|
||||
DKL_TX_PRESHOOT_COEFF(trans->entries[level].dkl.preshoot) |
|
||||
DKL_TX_DE_EMPHASIS_COEFF(trans->entries[level].dkl.de_emphasis) |
|
||||
DKL_TX_VSWING_CONTROL(trans->entries[level].dkl.vswing));
|
||||
intel_dkl_phy_rmw(dev_priv, DKL_TX_DPCNTL0(tc_port), ln,
|
||||
DKL_TX_PRESHOOT_COEFF_MASK |
|
||||
DKL_TX_DE_EMPAHSIS_COEFF_MASK |
|
||||
DKL_TX_VSWING_CONTROL_MASK,
|
||||
DKL_TX_PRESHOOT_COEFF(trans->entries[level].dkl.preshoot) |
|
||||
DKL_TX_DE_EMPHASIS_COEFF(trans->entries[level].dkl.de_emphasis) |
|
||||
DKL_TX_VSWING_CONTROL(trans->entries[level].dkl.vswing));
|
||||
|
||||
level = intel_ddi_level(encoder, crtc_state, 2*ln+1);
|
||||
|
||||
intel_de_rmw(dev_priv, DKL_TX_DPCNTL1(tc_port),
|
||||
DKL_TX_PRESHOOT_COEFF_MASK |
|
||||
DKL_TX_DE_EMPAHSIS_COEFF_MASK |
|
||||
DKL_TX_VSWING_CONTROL_MASK,
|
||||
DKL_TX_PRESHOOT_COEFF(trans->entries[level].dkl.preshoot) |
|
||||
DKL_TX_DE_EMPHASIS_COEFF(trans->entries[level].dkl.de_emphasis) |
|
||||
DKL_TX_VSWING_CONTROL(trans->entries[level].dkl.vswing));
|
||||
intel_dkl_phy_rmw(dev_priv, DKL_TX_DPCNTL1(tc_port), ln,
|
||||
DKL_TX_PRESHOOT_COEFF_MASK |
|
||||
DKL_TX_DE_EMPAHSIS_COEFF_MASK |
|
||||
DKL_TX_VSWING_CONTROL_MASK,
|
||||
DKL_TX_PRESHOOT_COEFF(trans->entries[level].dkl.preshoot) |
|
||||
DKL_TX_DE_EMPHASIS_COEFF(trans->entries[level].dkl.de_emphasis) |
|
||||
DKL_TX_VSWING_CONTROL(trans->entries[level].dkl.vswing));
|
||||
|
||||
intel_de_rmw(dev_priv, DKL_TX_DPCNTL2(tc_port),
|
||||
DKL_TX_DP20BITMODE, 0);
|
||||
intel_dkl_phy_rmw(dev_priv, DKL_TX_DPCNTL2(tc_port), ln,
|
||||
DKL_TX_DP20BITMODE, 0);
|
||||
|
||||
if (IS_ALDERLAKE_P(dev_priv)) {
|
||||
u32 val;
|
||||
@ -1306,10 +1304,10 @@ static void tgl_dkl_phy_set_signal_levels(struct intel_encoder *encoder,
|
||||
val |= DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX2(0);
|
||||
}
|
||||
|
||||
intel_de_rmw(dev_priv, DKL_TX_DPCNTL2(tc_port),
|
||||
DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX1_MASK |
|
||||
DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX2_MASK,
|
||||
val);
|
||||
intel_dkl_phy_rmw(dev_priv, DKL_TX_DPCNTL2(tc_port), ln,
|
||||
DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX1_MASK |
|
||||
DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX2_MASK,
|
||||
val);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2019,12 +2017,8 @@ icl_program_mg_dp_mode(struct intel_digital_port *dig_port,
|
||||
return;
|
||||
|
||||
if (DISPLAY_VER(dev_priv) >= 12) {
|
||||
intel_de_write(dev_priv, HIP_INDEX_REG(tc_port),
|
||||
HIP_INDEX_VAL(tc_port, 0x0));
|
||||
ln0 = intel_de_read(dev_priv, DKL_DP_MODE(tc_port));
|
||||
intel_de_write(dev_priv, HIP_INDEX_REG(tc_port),
|
||||
HIP_INDEX_VAL(tc_port, 0x1));
|
||||
ln1 = intel_de_read(dev_priv, DKL_DP_MODE(tc_port));
|
||||
ln0 = intel_dkl_phy_read(dev_priv, DKL_DP_MODE(tc_port), 0);
|
||||
ln1 = intel_dkl_phy_read(dev_priv, DKL_DP_MODE(tc_port), 1);
|
||||
} else {
|
||||
ln0 = intel_de_read(dev_priv, MG_DP_MODE(0, tc_port));
|
||||
ln1 = intel_de_read(dev_priv, MG_DP_MODE(1, tc_port));
|
||||
@ -2085,12 +2079,8 @@ icl_program_mg_dp_mode(struct intel_digital_port *dig_port,
|
||||
}
|
||||
|
||||
if (DISPLAY_VER(dev_priv) >= 12) {
|
||||
intel_de_write(dev_priv, HIP_INDEX_REG(tc_port),
|
||||
HIP_INDEX_VAL(tc_port, 0x0));
|
||||
intel_de_write(dev_priv, DKL_DP_MODE(tc_port), ln0);
|
||||
intel_de_write(dev_priv, HIP_INDEX_REG(tc_port),
|
||||
HIP_INDEX_VAL(tc_port, 0x1));
|
||||
intel_de_write(dev_priv, DKL_DP_MODE(tc_port), ln1);
|
||||
intel_dkl_phy_write(dev_priv, DKL_DP_MODE(tc_port), 0, ln0);
|
||||
intel_dkl_phy_write(dev_priv, DKL_DP_MODE(tc_port), 1, ln1);
|
||||
} else {
|
||||
intel_de_write(dev_priv, MG_DP_MODE(0, tc_port), ln0);
|
||||
intel_de_write(dev_priv, MG_DP_MODE(1, tc_port), ln1);
|
||||
@ -3094,10 +3084,8 @@ static void adlp_tbt_to_dp_alt_switch_wa(struct intel_encoder *encoder)
|
||||
enum tc_port tc_port = intel_port_to_tc(i915, encoder->port);
|
||||
int ln;
|
||||
|
||||
for (ln = 0; ln < 2; ln++) {
|
||||
intel_de_write(i915, HIP_INDEX_REG(tc_port), HIP_INDEX_VAL(tc_port, ln));
|
||||
intel_de_rmw(i915, DKL_PCS_DW5(tc_port), DKL_PCS_DW5_CORE_SOFTRESET, 0);
|
||||
}
|
||||
for (ln = 0; ln < 2; ln++)
|
||||
intel_dkl_phy_rmw(i915, DKL_PCS_DW5(tc_port), ln, DKL_PCS_DW5_CORE_SOFTRESET, 0);
|
||||
}
|
||||
|
||||
static void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp,
|
||||
|
@ -315,6 +315,14 @@ struct intel_display {
|
||||
struct intel_global_obj obj;
|
||||
} dbuf;
|
||||
|
||||
struct {
|
||||
/*
|
||||
* dkl.phy_lock protects against concurrent access of the
|
||||
* Dekel TypeC PHYs.
|
||||
*/
|
||||
spinlock_t phy_lock;
|
||||
} dkl;
|
||||
|
||||
struct {
|
||||
/* VLV/CHV/BXT/GLK DSI MMIO register base address */
|
||||
u32 mmio_base;
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include "intel_de.h"
|
||||
#include "intel_display_power_well.h"
|
||||
#include "intel_display_types.h"
|
||||
#include "intel_dkl_phy.h"
|
||||
#include "intel_dmc.h"
|
||||
#include "intel_dpio_phy.h"
|
||||
#include "intel_dpll.h"
|
||||
@ -529,11 +530,9 @@ icl_tc_phy_aux_power_well_enable(struct drm_i915_private *dev_priv,
|
||||
enum tc_port tc_port;
|
||||
|
||||
tc_port = TGL_AUX_PW_TO_TC_PORT(i915_power_well_instance(power_well)->hsw.idx);
|
||||
intel_de_write(dev_priv, HIP_INDEX_REG(tc_port),
|
||||
HIP_INDEX_VAL(tc_port, 0x2));
|
||||
|
||||
if (intel_de_wait_for_set(dev_priv, DKL_CMN_UC_DW_27(tc_port),
|
||||
DKL_CMN_UC_DW27_UC_HEALTH, 1))
|
||||
if (wait_for(intel_dkl_phy_read(dev_priv, DKL_CMN_UC_DW_27(tc_port), 2) &
|
||||
DKL_CMN_UC_DW27_UC_HEALTH, 1))
|
||||
drm_warn(&dev_priv->drm,
|
||||
"Timeout waiting TC uC health\n");
|
||||
}
|
||||
|
109
drivers/gpu/drm/i915/display/intel_dkl_phy.c
Normal file
109
drivers/gpu/drm/i915/display/intel_dkl_phy.c
Normal file
@ -0,0 +1,109 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
/*
|
||||
* Copyright © 2022 Intel Corporation
|
||||
*/
|
||||
|
||||
#include "i915_drv.h"
|
||||
#include "i915_reg.h"
|
||||
|
||||
#include "intel_de.h"
|
||||
#include "intel_display.h"
|
||||
#include "intel_dkl_phy.h"
|
||||
|
||||
static void
|
||||
dkl_phy_set_hip_idx(struct drm_i915_private *i915, i915_reg_t reg, int idx)
|
||||
{
|
||||
enum tc_port tc_port = DKL_REG_TC_PORT(reg);
|
||||
|
||||
drm_WARN_ON(&i915->drm, tc_port < TC_PORT_1 || tc_port >= I915_MAX_TC_PORTS);
|
||||
|
||||
intel_de_write(i915,
|
||||
HIP_INDEX_REG(tc_port),
|
||||
HIP_INDEX_VAL(tc_port, idx));
|
||||
}
|
||||
|
||||
/**
|
||||
* intel_dkl_phy_read - read a Dekel PHY register
|
||||
* @i915: i915 device instance
|
||||
* @reg: Dekel PHY register
|
||||
* @ln: lane instance of @reg
|
||||
*
|
||||
* Read the @reg Dekel PHY register.
|
||||
*
|
||||
* Returns the read value.
|
||||
*/
|
||||
u32
|
||||
intel_dkl_phy_read(struct drm_i915_private *i915, i915_reg_t reg, int ln)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
spin_lock(&i915->display.dkl.phy_lock);
|
||||
|
||||
dkl_phy_set_hip_idx(i915, reg, ln);
|
||||
val = intel_de_read(i915, reg);
|
||||
|
||||
spin_unlock(&i915->display.dkl.phy_lock);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
/**
|
||||
* intel_dkl_phy_write - write a Dekel PHY register
|
||||
* @i915: i915 device instance
|
||||
* @reg: Dekel PHY register
|
||||
* @ln: lane instance of @reg
|
||||
* @val: value to write
|
||||
*
|
||||
* Write @val to the @reg Dekel PHY register.
|
||||
*/
|
||||
void
|
||||
intel_dkl_phy_write(struct drm_i915_private *i915, i915_reg_t reg, int ln, u32 val)
|
||||
{
|
||||
spin_lock(&i915->display.dkl.phy_lock);
|
||||
|
||||
dkl_phy_set_hip_idx(i915, reg, ln);
|
||||
intel_de_write(i915, reg, val);
|
||||
|
||||
spin_unlock(&i915->display.dkl.phy_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* intel_dkl_phy_rmw - read-modify-write a Dekel PHY register
|
||||
* @i915: i915 device instance
|
||||
* @reg: Dekel PHY register
|
||||
* @ln: lane instance of @reg
|
||||
* @clear: mask to clear
|
||||
* @set: mask to set
|
||||
*
|
||||
* Read the @reg Dekel PHY register, clearing then setting the @clear/@set bits in it, and writing
|
||||
* this value back to the register if the value differs from the read one.
|
||||
*/
|
||||
void
|
||||
intel_dkl_phy_rmw(struct drm_i915_private *i915, i915_reg_t reg, int ln, u32 clear, u32 set)
|
||||
{
|
||||
spin_lock(&i915->display.dkl.phy_lock);
|
||||
|
||||
dkl_phy_set_hip_idx(i915, reg, ln);
|
||||
intel_de_rmw(i915, reg, clear, set);
|
||||
|
||||
spin_unlock(&i915->display.dkl.phy_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* intel_dkl_phy_posting_read - do a posting read from a Dekel PHY register
|
||||
* @i915: i915 device instance
|
||||
* @reg: Dekel PHY register
|
||||
* @ln: lane instance of @reg
|
||||
*
|
||||
* Read the @reg Dekel PHY register without returning the read value.
|
||||
*/
|
||||
void
|
||||
intel_dkl_phy_posting_read(struct drm_i915_private *i915, i915_reg_t reg, int ln)
|
||||
{
|
||||
spin_lock(&i915->display.dkl.phy_lock);
|
||||
|
||||
dkl_phy_set_hip_idx(i915, reg, ln);
|
||||
intel_de_posting_read(i915, reg);
|
||||
|
||||
spin_unlock(&i915->display.dkl.phy_lock);
|
||||
}
|
24
drivers/gpu/drm/i915/display/intel_dkl_phy.h
Normal file
24
drivers/gpu/drm/i915/display/intel_dkl_phy.h
Normal file
@ -0,0 +1,24 @@
|
||||
/* SPDX-License-Identifier: MIT */
|
||||
/*
|
||||
* Copyright © 2022 Intel Corporation
|
||||
*/
|
||||
|
||||
#ifndef __INTEL_DKL_PHY_H__
|
||||
#define __INTEL_DKL_PHY_H__
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#include "i915_reg_defs.h"
|
||||
|
||||
struct drm_i915_private;
|
||||
|
||||
u32
|
||||
intel_dkl_phy_read(struct drm_i915_private *i915, i915_reg_t reg, int ln);
|
||||
void
|
||||
intel_dkl_phy_write(struct drm_i915_private *i915, i915_reg_t reg, int ln, u32 val);
|
||||
void
|
||||
intel_dkl_phy_rmw(struct drm_i915_private *i915, i915_reg_t reg, int ln, u32 clear, u32 set);
|
||||
void
|
||||
intel_dkl_phy_posting_read(struct drm_i915_private *i915, i915_reg_t reg, int ln);
|
||||
|
||||
#endif /* __INTEL_DKL_PHY_H__ */
|
@ -5276,7 +5276,7 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
|
||||
encoder->devdata, IS_ERR(edid) ? NULL : edid);
|
||||
|
||||
intel_panel_add_edid_fixed_modes(intel_connector,
|
||||
intel_connector->panel.vbt.drrs_type != DRRS_TYPE_NONE,
|
||||
intel_connector->panel.vbt.drrs_type != DRRS_TYPE_NONE ||
|
||||
intel_vrr_is_capable(intel_connector));
|
||||
|
||||
/* MSO requires information from the EDID */
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
#include "intel_de.h"
|
||||
#include "intel_display_types.h"
|
||||
#include "intel_dkl_phy.h"
|
||||
#include "intel_dpio_phy.h"
|
||||
#include "intel_dpll.h"
|
||||
#include "intel_dpll_mgr.h"
|
||||
@ -3508,15 +3509,12 @@ static bool dkl_pll_get_hw_state(struct drm_i915_private *dev_priv,
|
||||
* All registers read here have the same HIP_INDEX_REG even though
|
||||
* they are on different building blocks
|
||||
*/
|
||||
intel_de_write(dev_priv, HIP_INDEX_REG(tc_port),
|
||||
HIP_INDEX_VAL(tc_port, 0x2));
|
||||
|
||||
hw_state->mg_refclkin_ctl = intel_de_read(dev_priv,
|
||||
DKL_REFCLKIN_CTL(tc_port));
|
||||
hw_state->mg_refclkin_ctl = intel_dkl_phy_read(dev_priv,
|
||||
DKL_REFCLKIN_CTL(tc_port), 2);
|
||||
hw_state->mg_refclkin_ctl &= MG_REFCLKIN_CTL_OD_2_MUX_MASK;
|
||||
|
||||
hw_state->mg_clktop2_hsclkctl =
|
||||
intel_de_read(dev_priv, DKL_CLKTOP2_HSCLKCTL(tc_port));
|
||||
intel_dkl_phy_read(dev_priv, DKL_CLKTOP2_HSCLKCTL(tc_port), 2);
|
||||
hw_state->mg_clktop2_hsclkctl &=
|
||||
MG_CLKTOP2_HSCLKCTL_TLINEDRV_CLKSEL_MASK |
|
||||
MG_CLKTOP2_HSCLKCTL_CORE_INPUTSEL_MASK |
|
||||
@ -3524,32 +3522,32 @@ static bool dkl_pll_get_hw_state(struct drm_i915_private *dev_priv,
|
||||
MG_CLKTOP2_HSCLKCTL_DSDIV_RATIO_MASK;
|
||||
|
||||
hw_state->mg_clktop2_coreclkctl1 =
|
||||
intel_de_read(dev_priv, DKL_CLKTOP2_CORECLKCTL1(tc_port));
|
||||
intel_dkl_phy_read(dev_priv, DKL_CLKTOP2_CORECLKCTL1(tc_port), 2);
|
||||
hw_state->mg_clktop2_coreclkctl1 &=
|
||||
MG_CLKTOP2_CORECLKCTL1_A_DIVRATIO_MASK;
|
||||
|
||||
hw_state->mg_pll_div0 = intel_de_read(dev_priv, DKL_PLL_DIV0(tc_port));
|
||||
hw_state->mg_pll_div0 = intel_dkl_phy_read(dev_priv, DKL_PLL_DIV0(tc_port), 2);
|
||||
val = DKL_PLL_DIV0_MASK;
|
||||
if (dev_priv->display.vbt.override_afc_startup)
|
||||
val |= DKL_PLL_DIV0_AFC_STARTUP_MASK;
|
||||
hw_state->mg_pll_div0 &= val;
|
||||
|
||||
hw_state->mg_pll_div1 = intel_de_read(dev_priv, DKL_PLL_DIV1(tc_port));
|
||||
hw_state->mg_pll_div1 = intel_dkl_phy_read(dev_priv, DKL_PLL_DIV1(tc_port), 2);
|
||||
hw_state->mg_pll_div1 &= (DKL_PLL_DIV1_IREF_TRIM_MASK |
|
||||
DKL_PLL_DIV1_TDC_TARGET_CNT_MASK);
|
||||
|
||||
hw_state->mg_pll_ssc = intel_de_read(dev_priv, DKL_PLL_SSC(tc_port));
|
||||
hw_state->mg_pll_ssc = intel_dkl_phy_read(dev_priv, DKL_PLL_SSC(tc_port), 2);
|
||||
hw_state->mg_pll_ssc &= (DKL_PLL_SSC_IREF_NDIV_RATIO_MASK |
|
||||
DKL_PLL_SSC_STEP_LEN_MASK |
|
||||
DKL_PLL_SSC_STEP_NUM_MASK |
|
||||
DKL_PLL_SSC_EN);
|
||||
|
||||
hw_state->mg_pll_bias = intel_de_read(dev_priv, DKL_PLL_BIAS(tc_port));
|
||||
hw_state->mg_pll_bias = intel_dkl_phy_read(dev_priv, DKL_PLL_BIAS(tc_port), 2);
|
||||
hw_state->mg_pll_bias &= (DKL_PLL_BIAS_FRAC_EN_H |
|
||||
DKL_PLL_BIAS_FBDIV_FRAC_MASK);
|
||||
|
||||
hw_state->mg_pll_tdc_coldst_bias =
|
||||
intel_de_read(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port));
|
||||
intel_dkl_phy_read(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port), 2);
|
||||
hw_state->mg_pll_tdc_coldst_bias &= (DKL_PLL_TDC_SSC_STEP_SIZE_MASK |
|
||||
DKL_PLL_TDC_FEED_FWD_GAIN_MASK);
|
||||
|
||||
@ -3737,61 +3735,58 @@ static void dkl_pll_write(struct drm_i915_private *dev_priv,
|
||||
* All registers programmed here have the same HIP_INDEX_REG even
|
||||
* though on different building block
|
||||
*/
|
||||
intel_de_write(dev_priv, HIP_INDEX_REG(tc_port),
|
||||
HIP_INDEX_VAL(tc_port, 0x2));
|
||||
|
||||
/* All the registers are RMW */
|
||||
val = intel_de_read(dev_priv, DKL_REFCLKIN_CTL(tc_port));
|
||||
val = intel_dkl_phy_read(dev_priv, DKL_REFCLKIN_CTL(tc_port), 2);
|
||||
val &= ~MG_REFCLKIN_CTL_OD_2_MUX_MASK;
|
||||
val |= hw_state->mg_refclkin_ctl;
|
||||
intel_de_write(dev_priv, DKL_REFCLKIN_CTL(tc_port), val);
|
||||
intel_dkl_phy_write(dev_priv, DKL_REFCLKIN_CTL(tc_port), 2, val);
|
||||
|
||||
val = intel_de_read(dev_priv, DKL_CLKTOP2_CORECLKCTL1(tc_port));
|
||||
val = intel_dkl_phy_read(dev_priv, DKL_CLKTOP2_CORECLKCTL1(tc_port), 2);
|
||||
val &= ~MG_CLKTOP2_CORECLKCTL1_A_DIVRATIO_MASK;
|
||||
val |= hw_state->mg_clktop2_coreclkctl1;
|
||||
intel_de_write(dev_priv, DKL_CLKTOP2_CORECLKCTL1(tc_port), val);
|
||||
intel_dkl_phy_write(dev_priv, DKL_CLKTOP2_CORECLKCTL1(tc_port), 2, val);
|
||||
|
||||
val = intel_de_read(dev_priv, DKL_CLKTOP2_HSCLKCTL(tc_port));
|
||||
val = intel_dkl_phy_read(dev_priv, DKL_CLKTOP2_HSCLKCTL(tc_port), 2);
|
||||
val &= ~(MG_CLKTOP2_HSCLKCTL_TLINEDRV_CLKSEL_MASK |
|
||||
MG_CLKTOP2_HSCLKCTL_CORE_INPUTSEL_MASK |
|
||||
MG_CLKTOP2_HSCLKCTL_HSDIV_RATIO_MASK |
|
||||
MG_CLKTOP2_HSCLKCTL_DSDIV_RATIO_MASK);
|
||||
val |= hw_state->mg_clktop2_hsclkctl;
|
||||
intel_de_write(dev_priv, DKL_CLKTOP2_HSCLKCTL(tc_port), val);
|
||||
intel_dkl_phy_write(dev_priv, DKL_CLKTOP2_HSCLKCTL(tc_port), 2, val);
|
||||
|
||||
val = DKL_PLL_DIV0_MASK;
|
||||
if (dev_priv->display.vbt.override_afc_startup)
|
||||
val |= DKL_PLL_DIV0_AFC_STARTUP_MASK;
|
||||
intel_de_rmw(dev_priv, DKL_PLL_DIV0(tc_port), val,
|
||||
hw_state->mg_pll_div0);
|
||||
intel_dkl_phy_rmw(dev_priv, DKL_PLL_DIV0(tc_port), 2, val,
|
||||
hw_state->mg_pll_div0);
|
||||
|
||||
val = intel_de_read(dev_priv, DKL_PLL_DIV1(tc_port));
|
||||
val = intel_dkl_phy_read(dev_priv, DKL_PLL_DIV1(tc_port), 2);
|
||||
val &= ~(DKL_PLL_DIV1_IREF_TRIM_MASK |
|
||||
DKL_PLL_DIV1_TDC_TARGET_CNT_MASK);
|
||||
val |= hw_state->mg_pll_div1;
|
||||
intel_de_write(dev_priv, DKL_PLL_DIV1(tc_port), val);
|
||||
intel_dkl_phy_write(dev_priv, DKL_PLL_DIV1(tc_port), 2, val);
|
||||
|
||||
val = intel_de_read(dev_priv, DKL_PLL_SSC(tc_port));
|
||||
val = intel_dkl_phy_read(dev_priv, DKL_PLL_SSC(tc_port), 2);
|
||||
val &= ~(DKL_PLL_SSC_IREF_NDIV_RATIO_MASK |
|
||||
DKL_PLL_SSC_STEP_LEN_MASK |
|
||||
DKL_PLL_SSC_STEP_NUM_MASK |
|
||||
DKL_PLL_SSC_EN);
|
||||
val |= hw_state->mg_pll_ssc;
|
||||
intel_de_write(dev_priv, DKL_PLL_SSC(tc_port), val);
|
||||
intel_dkl_phy_write(dev_priv, DKL_PLL_SSC(tc_port), 2, val);
|
||||
|
||||
val = intel_de_read(dev_priv, DKL_PLL_BIAS(tc_port));
|
||||
val = intel_dkl_phy_read(dev_priv, DKL_PLL_BIAS(tc_port), 2);
|
||||
val &= ~(DKL_PLL_BIAS_FRAC_EN_H |
|
||||
DKL_PLL_BIAS_FBDIV_FRAC_MASK);
|
||||
val |= hw_state->mg_pll_bias;
|
||||
intel_de_write(dev_priv, DKL_PLL_BIAS(tc_port), val);
|
||||
intel_dkl_phy_write(dev_priv, DKL_PLL_BIAS(tc_port), 2, val);
|
||||
|
||||
val = intel_de_read(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port));
|
||||
val = intel_dkl_phy_read(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port), 2);
|
||||
val &= ~(DKL_PLL_TDC_SSC_STEP_SIZE_MASK |
|
||||
DKL_PLL_TDC_FEED_FWD_GAIN_MASK);
|
||||
val |= hw_state->mg_pll_tdc_coldst_bias;
|
||||
intel_de_write(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port), val);
|
||||
intel_dkl_phy_write(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port), 2, val);
|
||||
|
||||
intel_de_posting_read(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port));
|
||||
intel_dkl_phy_posting_read(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port), 2);
|
||||
}
|
||||
|
||||
static void icl_pll_power_enable(struct drm_i915_private *dev_priv,
|
||||
|
@ -972,8 +972,7 @@ void intel_lvds_init(struct drm_i915_private *dev_priv)
|
||||
|
||||
/* Try EDID first */
|
||||
intel_panel_add_edid_fixed_modes(intel_connector,
|
||||
intel_connector->panel.vbt.drrs_type != DRRS_TYPE_NONE,
|
||||
false);
|
||||
intel_connector->panel.vbt.drrs_type != DRRS_TYPE_NONE);
|
||||
|
||||
/* Failed to get EDID, what about VBT? */
|
||||
if (!intel_panel_preferred_fixed_mode(intel_connector))
|
||||
|
@ -254,10 +254,10 @@ static void intel_panel_destroy_probed_modes(struct intel_connector *connector)
|
||||
}
|
||||
|
||||
void intel_panel_add_edid_fixed_modes(struct intel_connector *connector,
|
||||
bool has_drrs, bool has_vrr)
|
||||
bool use_alt_fixed_modes)
|
||||
{
|
||||
intel_panel_add_edid_preferred_mode(connector);
|
||||
if (intel_panel_preferred_fixed_mode(connector) && (has_drrs || has_vrr))
|
||||
if (intel_panel_preferred_fixed_mode(connector) && use_alt_fixed_modes)
|
||||
intel_panel_add_edid_alt_fixed_modes(connector);
|
||||
intel_panel_destroy_probed_modes(connector);
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ int intel_panel_fitting(struct intel_crtc_state *crtc_state,
|
||||
int intel_panel_compute_config(struct intel_connector *connector,
|
||||
struct drm_display_mode *adjusted_mode);
|
||||
void intel_panel_add_edid_fixed_modes(struct intel_connector *connector,
|
||||
bool has_drrs, bool has_vrr);
|
||||
bool use_alt_fixed_modes);
|
||||
void intel_panel_add_vbt_lfp_fixed_mode(struct intel_connector *connector);
|
||||
void intel_panel_add_vbt_sdvo_fixed_mode(struct intel_connector *connector);
|
||||
void intel_panel_add_encoder_fixed_mode(struct intel_connector *connector,
|
||||
|
@ -2747,13 +2747,10 @@ intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device)
|
||||
if (!intel_sdvo_connector)
|
||||
return false;
|
||||
|
||||
if (device == 0) {
|
||||
intel_sdvo->controlled_output |= SDVO_OUTPUT_TMDS0;
|
||||
if (device == 0)
|
||||
intel_sdvo_connector->output_flag = SDVO_OUTPUT_TMDS0;
|
||||
} else if (device == 1) {
|
||||
intel_sdvo->controlled_output |= SDVO_OUTPUT_TMDS1;
|
||||
else if (device == 1)
|
||||
intel_sdvo_connector->output_flag = SDVO_OUTPUT_TMDS1;
|
||||
}
|
||||
|
||||
intel_connector = &intel_sdvo_connector->base;
|
||||
connector = &intel_connector->base;
|
||||
@ -2808,7 +2805,6 @@ intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, int type)
|
||||
encoder->encoder_type = DRM_MODE_ENCODER_TVDAC;
|
||||
connector->connector_type = DRM_MODE_CONNECTOR_SVIDEO;
|
||||
|
||||
intel_sdvo->controlled_output |= type;
|
||||
intel_sdvo_connector->output_flag = type;
|
||||
|
||||
if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) {
|
||||
@ -2849,13 +2845,10 @@ intel_sdvo_analog_init(struct intel_sdvo *intel_sdvo, int device)
|
||||
encoder->encoder_type = DRM_MODE_ENCODER_DAC;
|
||||
connector->connector_type = DRM_MODE_CONNECTOR_VGA;
|
||||
|
||||
if (device == 0) {
|
||||
intel_sdvo->controlled_output |= SDVO_OUTPUT_RGB0;
|
||||
if (device == 0)
|
||||
intel_sdvo_connector->output_flag = SDVO_OUTPUT_RGB0;
|
||||
} else if (device == 1) {
|
||||
intel_sdvo->controlled_output |= SDVO_OUTPUT_RGB1;
|
||||
else if (device == 1)
|
||||
intel_sdvo_connector->output_flag = SDVO_OUTPUT_RGB1;
|
||||
}
|
||||
|
||||
if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) {
|
||||
kfree(intel_sdvo_connector);
|
||||
@ -2885,13 +2878,10 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device)
|
||||
encoder->encoder_type = DRM_MODE_ENCODER_LVDS;
|
||||
connector->connector_type = DRM_MODE_CONNECTOR_LVDS;
|
||||
|
||||
if (device == 0) {
|
||||
intel_sdvo->controlled_output |= SDVO_OUTPUT_LVDS0;
|
||||
if (device == 0)
|
||||
intel_sdvo_connector->output_flag = SDVO_OUTPUT_LVDS0;
|
||||
} else if (device == 1) {
|
||||
intel_sdvo->controlled_output |= SDVO_OUTPUT_LVDS1;
|
||||
else if (device == 1)
|
||||
intel_sdvo_connector->output_flag = SDVO_OUTPUT_LVDS1;
|
||||
}
|
||||
|
||||
if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) {
|
||||
kfree(intel_sdvo_connector);
|
||||
@ -2910,8 +2900,12 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device)
|
||||
intel_panel_add_vbt_sdvo_fixed_mode(intel_connector);
|
||||
|
||||
if (!intel_panel_preferred_fixed_mode(intel_connector)) {
|
||||
mutex_lock(&i915->drm.mode_config.mutex);
|
||||
|
||||
intel_ddc_get_modes(connector, &intel_sdvo->ddc);
|
||||
intel_panel_add_edid_fixed_modes(intel_connector, false, false);
|
||||
intel_panel_add_edid_fixed_modes(intel_connector, false);
|
||||
|
||||
mutex_unlock(&i915->drm.mode_config.mutex);
|
||||
}
|
||||
|
||||
intel_panel_init(intel_connector);
|
||||
@ -2926,16 +2920,39 @@ err:
|
||||
return false;
|
||||
}
|
||||
|
||||
static u16 intel_sdvo_filter_output_flags(u16 flags)
|
||||
{
|
||||
flags &= SDVO_OUTPUT_MASK;
|
||||
|
||||
/* SDVO requires XXX1 function may not exist unless it has XXX0 function.*/
|
||||
if (!(flags & SDVO_OUTPUT_TMDS0))
|
||||
flags &= ~SDVO_OUTPUT_TMDS1;
|
||||
|
||||
if (!(flags & SDVO_OUTPUT_RGB0))
|
||||
flags &= ~SDVO_OUTPUT_RGB1;
|
||||
|
||||
if (!(flags & SDVO_OUTPUT_LVDS0))
|
||||
flags &= ~SDVO_OUTPUT_LVDS1;
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
static bool
|
||||
intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, u16 flags)
|
||||
{
|
||||
/* SDVO requires XXX1 function may not exist unless it has XXX0 function.*/
|
||||
struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev);
|
||||
|
||||
flags = intel_sdvo_filter_output_flags(flags);
|
||||
|
||||
intel_sdvo->controlled_output = flags;
|
||||
|
||||
intel_sdvo_select_ddc_bus(i915, intel_sdvo);
|
||||
|
||||
if (flags & SDVO_OUTPUT_TMDS0)
|
||||
if (!intel_sdvo_dvi_init(intel_sdvo, 0))
|
||||
return false;
|
||||
|
||||
if ((flags & SDVO_TMDS_MASK) == SDVO_TMDS_MASK)
|
||||
if (flags & SDVO_OUTPUT_TMDS1)
|
||||
if (!intel_sdvo_dvi_init(intel_sdvo, 1))
|
||||
return false;
|
||||
|
||||
@ -2956,7 +2973,7 @@ intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, u16 flags)
|
||||
if (!intel_sdvo_analog_init(intel_sdvo, 0))
|
||||
return false;
|
||||
|
||||
if ((flags & SDVO_RGB_MASK) == SDVO_RGB_MASK)
|
||||
if (flags & SDVO_OUTPUT_RGB1)
|
||||
if (!intel_sdvo_analog_init(intel_sdvo, 1))
|
||||
return false;
|
||||
|
||||
@ -2964,14 +2981,13 @@ intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, u16 flags)
|
||||
if (!intel_sdvo_lvds_init(intel_sdvo, 0))
|
||||
return false;
|
||||
|
||||
if ((flags & SDVO_LVDS_MASK) == SDVO_LVDS_MASK)
|
||||
if (flags & SDVO_OUTPUT_LVDS1)
|
||||
if (!intel_sdvo_lvds_init(intel_sdvo, 1))
|
||||
return false;
|
||||
|
||||
if ((flags & SDVO_OUTPUT_MASK) == 0) {
|
||||
if (flags == 0) {
|
||||
unsigned char bytes[2];
|
||||
|
||||
intel_sdvo->controlled_output = 0;
|
||||
memcpy(bytes, &intel_sdvo->caps.output_flags, 2);
|
||||
DRM_DEBUG_KMS("%s: Unknown SDVO output type (0x%02x%02x)\n",
|
||||
SDVO_NAME(intel_sdvo),
|
||||
@ -3383,8 +3399,6 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv,
|
||||
*/
|
||||
intel_sdvo->base.cloneable = 0;
|
||||
|
||||
intel_sdvo_select_ddc_bus(dev_priv, intel_sdvo);
|
||||
|
||||
/* Set the input timing to the screen. Assume always input 0. */
|
||||
if (!intel_sdvo_set_target_input(intel_sdvo))
|
||||
goto err_output;
|
||||
|
@ -6,7 +6,6 @@
|
||||
|
||||
#include <linux/scatterlist.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/swiotlb.h>
|
||||
|
||||
#include "i915_drv.h"
|
||||
#include "i915_gem.h"
|
||||
@ -38,22 +37,12 @@ static int i915_gem_object_get_pages_internal(struct drm_i915_gem_object *obj)
|
||||
struct scatterlist *sg;
|
||||
unsigned int sg_page_sizes;
|
||||
unsigned int npages;
|
||||
int max_order;
|
||||
int max_order = MAX_ORDER;
|
||||
unsigned int max_segment;
|
||||
gfp_t gfp;
|
||||
|
||||
max_order = MAX_ORDER;
|
||||
#ifdef CONFIG_SWIOTLB
|
||||
if (is_swiotlb_active(obj->base.dev->dev)) {
|
||||
unsigned int max_segment;
|
||||
|
||||
max_segment = swiotlb_max_segment();
|
||||
if (max_segment) {
|
||||
max_segment = max_t(unsigned int, max_segment,
|
||||
PAGE_SIZE) >> PAGE_SHIFT;
|
||||
max_order = min(max_order, ilog2(max_segment));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
max_segment = i915_sg_segment_size(i915->drm.dev) >> PAGE_SHIFT;
|
||||
max_order = min(max_order, get_order(max_segment));
|
||||
|
||||
gfp = GFP_KERNEL | __GFP_HIGHMEM | __GFP_RECLAIMABLE;
|
||||
if (IS_I965GM(i915) || IS_I965G(i915)) {
|
||||
|
@ -194,7 +194,7 @@ static int shmem_get_pages(struct drm_i915_gem_object *obj)
|
||||
struct intel_memory_region *mem = obj->mm.region;
|
||||
struct address_space *mapping = obj->base.filp->f_mapping;
|
||||
const unsigned long page_count = obj->base.size / PAGE_SIZE;
|
||||
unsigned int max_segment = i915_sg_segment_size();
|
||||
unsigned int max_segment = i915_sg_segment_size(i915->drm.dev);
|
||||
struct sg_table *st;
|
||||
struct sgt_iter sgt_iter;
|
||||
struct page *page;
|
||||
|
@ -189,7 +189,7 @@ static int i915_ttm_tt_shmem_populate(struct ttm_device *bdev,
|
||||
struct drm_i915_private *i915 = container_of(bdev, typeof(*i915), bdev);
|
||||
struct intel_memory_region *mr = i915->mm.regions[INTEL_MEMORY_SYSTEM];
|
||||
struct i915_ttm_tt *i915_tt = container_of(ttm, typeof(*i915_tt), ttm);
|
||||
const unsigned int max_segment = i915_sg_segment_size();
|
||||
const unsigned int max_segment = i915_sg_segment_size(i915->drm.dev);
|
||||
const size_t size = (size_t)ttm->num_pages << PAGE_SHIFT;
|
||||
struct file *filp = i915_tt->filp;
|
||||
struct sgt_iter sgt_iter;
|
||||
@ -538,7 +538,7 @@ static struct i915_refct_sgt *i915_ttm_tt_get_st(struct ttm_tt *ttm)
|
||||
ret = sg_alloc_table_from_pages_segment(st,
|
||||
ttm->pages, ttm->num_pages,
|
||||
0, (unsigned long)ttm->num_pages << PAGE_SHIFT,
|
||||
i915_sg_segment_size(), GFP_KERNEL);
|
||||
i915_sg_segment_size(i915_tt->dev), GFP_KERNEL);
|
||||
if (ret) {
|
||||
st->sgl = NULL;
|
||||
return ERR_PTR(ret);
|
||||
|
@ -129,7 +129,7 @@ static void i915_gem_object_userptr_drop_ref(struct drm_i915_gem_object *obj)
|
||||
static int i915_gem_userptr_get_pages(struct drm_i915_gem_object *obj)
|
||||
{
|
||||
const unsigned long num_pages = obj->base.size >> PAGE_SHIFT;
|
||||
unsigned int max_segment = i915_sg_segment_size();
|
||||
unsigned int max_segment = i915_sg_segment_size(obj->base.dev->dev);
|
||||
struct sg_table *st;
|
||||
unsigned int sg_page_sizes;
|
||||
struct page **pvec;
|
||||
|
@ -353,6 +353,7 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
|
||||
mutex_init(&dev_priv->display.wm.wm_mutex);
|
||||
mutex_init(&dev_priv->display.pps.mutex);
|
||||
mutex_init(&dev_priv->display.hdcp.comp_mutex);
|
||||
spin_lock_init(&dev_priv->display.dkl.phy_lock);
|
||||
|
||||
i915_memcpy_init_early(dev_priv);
|
||||
intel_runtime_pm_init_early(&dev_priv->runtime_pm);
|
||||
|
@ -7420,6 +7420,9 @@ enum skl_power_gate {
|
||||
#define _DKL_PHY5_BASE 0x16C000
|
||||
#define _DKL_PHY6_BASE 0x16D000
|
||||
|
||||
#define DKL_REG_TC_PORT(__reg) \
|
||||
(TC_PORT_1 + ((__reg).reg - _DKL_PHY1_BASE) / (_DKL_PHY2_BASE - _DKL_PHY1_BASE))
|
||||
|
||||
/* DEKEL PHY MMIO Address = Phy base + (internal address & ~index_mask) */
|
||||
#define _DKL_PCS_DW5 0x14
|
||||
#define DKL_PCS_DW5(tc_port) _MMIO(_PORT(tc_port, _DKL_PHY1_BASE, \
|
||||
|
@ -9,7 +9,8 @@
|
||||
|
||||
#include <linux/pfn.h>
|
||||
#include <linux/scatterlist.h>
|
||||
#include <linux/swiotlb.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <xen/xen.h>
|
||||
|
||||
#include "i915_gem.h"
|
||||
|
||||
@ -127,19 +128,26 @@ static inline unsigned int i915_sg_dma_sizes(struct scatterlist *sg)
|
||||
return page_sizes;
|
||||
}
|
||||
|
||||
static inline unsigned int i915_sg_segment_size(void)
|
||||
static inline unsigned int i915_sg_segment_size(struct device *dev)
|
||||
{
|
||||
unsigned int size = swiotlb_max_segment();
|
||||
size_t max = min_t(size_t, UINT_MAX, dma_max_mapping_size(dev));
|
||||
|
||||
if (size == 0)
|
||||
size = UINT_MAX;
|
||||
|
||||
size = rounddown(size, PAGE_SIZE);
|
||||
/* swiotlb_max_segment_size can return 1 byte when it means one page. */
|
||||
if (size < PAGE_SIZE)
|
||||
size = PAGE_SIZE;
|
||||
|
||||
return size;
|
||||
/*
|
||||
* For Xen PV guests pages aren't contiguous in DMA (machine) address
|
||||
* space. The DMA API takes care of that both in dma_alloc_* (by
|
||||
* calling into the hypervisor to make the pages contiguous) and in
|
||||
* dma_map_* (by bounce buffering). But i915 abuses ignores the
|
||||
* coherency aspects of the DMA API and thus can't cope with bounce
|
||||
* buffering actually happening, so add a hack here to force small
|
||||
* allocations and mappings when running in PV mode on Xen.
|
||||
*
|
||||
* Note this will still break if bounce buffering is required for other
|
||||
* reasons, like confidential computing hypervisors or PCIe root ports
|
||||
* with addressing limitations.
|
||||
*/
|
||||
if (xen_pv_domain())
|
||||
max = PAGE_SIZE;
|
||||
return round_down(max, PAGE_SIZE);
|
||||
}
|
||||
|
||||
bool i915_sg_trim(struct sg_table *orig_st);
|
||||
|
@ -4,7 +4,6 @@ config DRM_IMX
|
||||
select DRM_KMS_HELPER
|
||||
select VIDEOMODE_HELPERS
|
||||
select DRM_GEM_DMA_HELPER
|
||||
select DRM_KMS_HELPER
|
||||
depends on DRM && (ARCH_MXC || ARCH_MULTIPLATFORM || COMPILE_TEST)
|
||||
depends on IMX_IPUV3_CORE
|
||||
help
|
||||
|
@ -218,8 +218,9 @@ static int imx_tve_connector_get_modes(struct drm_connector *connector)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int imx_tve_connector_mode_valid(struct drm_connector *connector,
|
||||
struct drm_display_mode *mode)
|
||||
static enum drm_mode_status
|
||||
imx_tve_connector_mode_valid(struct drm_connector *connector,
|
||||
struct drm_display_mode *mode)
|
||||
{
|
||||
struct imx_tve *tve = con_to_tve(connector);
|
||||
unsigned long rate;
|
||||
|
@ -752,7 +752,7 @@ static void dw_mipi_dsi_rockchip_config(struct dw_mipi_dsi_rockchip *dsi)
|
||||
static void dw_mipi_dsi_rockchip_set_lcdsel(struct dw_mipi_dsi_rockchip *dsi,
|
||||
int mux)
|
||||
{
|
||||
if (dsi->cdata->lcdsel_grf_reg < 0)
|
||||
if (dsi->cdata->lcdsel_grf_reg)
|
||||
regmap_write(dsi->grf_regmap, dsi->cdata->lcdsel_grf_reg,
|
||||
mux ? dsi->cdata->lcdsel_lit : dsi->cdata->lcdsel_big);
|
||||
}
|
||||
@ -1051,23 +1051,31 @@ static int dw_mipi_dsi_rockchip_host_attach(void *priv_data,
|
||||
if (ret) {
|
||||
DRM_DEV_ERROR(dsi->dev, "Failed to register component: %d\n",
|
||||
ret);
|
||||
return ret;
|
||||
goto out;
|
||||
}
|
||||
|
||||
second = dw_mipi_dsi_rockchip_find_second(dsi);
|
||||
if (IS_ERR(second))
|
||||
return PTR_ERR(second);
|
||||
if (IS_ERR(second)) {
|
||||
ret = PTR_ERR(second);
|
||||
goto out;
|
||||
}
|
||||
if (second) {
|
||||
ret = component_add(second, &dw_mipi_dsi_rockchip_ops);
|
||||
if (ret) {
|
||||
DRM_DEV_ERROR(second,
|
||||
"Failed to register component: %d\n",
|
||||
ret);
|
||||
return ret;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
out:
|
||||
mutex_lock(&dsi->usage_mutex);
|
||||
dsi->usage_mode = DW_DSI_USAGE_IDLE;
|
||||
mutex_unlock(&dsi->usage_mutex);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int dw_mipi_dsi_rockchip_host_detach(void *priv_data,
|
||||
@ -1635,7 +1643,6 @@ static const struct rockchip_dw_dsi_chip_data rk3399_chip_data[] = {
|
||||
static const struct rockchip_dw_dsi_chip_data rk3568_chip_data[] = {
|
||||
{
|
||||
.reg = 0xfe060000,
|
||||
.lcdsel_grf_reg = -1,
|
||||
.lanecfg1_grf_reg = RK3568_GRF_VO_CON2,
|
||||
.lanecfg1 = HIWORD_UPDATE(0, RK3568_DSI0_SKEWCALHS |
|
||||
RK3568_DSI0_FORCETXSTOPMODE |
|
||||
@ -1645,7 +1652,6 @@ static const struct rockchip_dw_dsi_chip_data rk3568_chip_data[] = {
|
||||
},
|
||||
{
|
||||
.reg = 0xfe070000,
|
||||
.lcdsel_grf_reg = -1,
|
||||
.lanecfg1_grf_reg = RK3568_GRF_VO_CON3,
|
||||
.lanecfg1 = HIWORD_UPDATE(0, RK3568_DSI1_SKEWCALHS |
|
||||
RK3568_DSI1_FORCETXSTOPMODE |
|
||||
@ -1681,5 +1687,11 @@ struct platform_driver dw_mipi_dsi_rockchip_driver = {
|
||||
.of_match_table = dw_mipi_dsi_rockchip_dt_ids,
|
||||
.pm = &dw_mipi_dsi_rockchip_pm_ops,
|
||||
.name = "dw-mipi-dsi-rockchip",
|
||||
/*
|
||||
* For dual-DSI display, one DSI pokes at the other DSI's
|
||||
* drvdata in dw_mipi_dsi_rockchip_find_second(). This is not
|
||||
* safe for asynchronous probe.
|
||||
*/
|
||||
.probe_type = PROBE_FORCE_SYNCHRONOUS,
|
||||
},
|
||||
};
|
||||
|
@ -565,7 +565,8 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
|
||||
|
||||
ret = rockchip_hdmi_parse_dt(hdmi);
|
||||
if (ret) {
|
||||
DRM_DEV_ERROR(hdmi->dev, "Unable to parse OF data\n");
|
||||
if (ret != -EPROBE_DEFER)
|
||||
DRM_DEV_ERROR(hdmi->dev, "Unable to parse OF data\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -364,9 +364,12 @@ rockchip_gem_create_with_handle(struct drm_file *file_priv,
|
||||
{
|
||||
struct rockchip_gem_object *rk_obj;
|
||||
struct drm_gem_object *obj;
|
||||
bool is_framebuffer;
|
||||
int ret;
|
||||
|
||||
rk_obj = rockchip_gem_create_object(drm, size, false);
|
||||
is_framebuffer = drm->fb_helper && file_priv == drm->fb_helper->client.file;
|
||||
|
||||
rk_obj = rockchip_gem_create_object(drm, size, is_framebuffer);
|
||||
if (IS_ERR(rk_obj))
|
||||
return ERR_CAST(rk_obj);
|
||||
|
||||
|
@ -877,10 +877,14 @@ static void vop2_crtc_atomic_disable(struct drm_crtc *crtc,
|
||||
{
|
||||
struct vop2_video_port *vp = to_vop2_video_port(crtc);
|
||||
struct vop2 *vop2 = vp->vop2;
|
||||
struct drm_crtc_state *old_crtc_state;
|
||||
int ret;
|
||||
|
||||
vop2_lock(vop2);
|
||||
|
||||
old_crtc_state = drm_atomic_get_old_crtc_state(state, crtc);
|
||||
drm_atomic_helper_disable_planes_on_crtc(old_crtc_state, false);
|
||||
|
||||
drm_crtc_vblank_off(crtc);
|
||||
|
||||
/*
|
||||
@ -996,13 +1000,15 @@ static int vop2_plane_atomic_check(struct drm_plane *plane,
|
||||
static void vop2_plane_atomic_disable(struct drm_plane *plane,
|
||||
struct drm_atomic_state *state)
|
||||
{
|
||||
struct drm_plane_state *old_pstate = drm_atomic_get_old_plane_state(state, plane);
|
||||
struct drm_plane_state *old_pstate = NULL;
|
||||
struct vop2_win *win = to_vop2_win(plane);
|
||||
struct vop2 *vop2 = win->vop2;
|
||||
|
||||
drm_dbg(vop2->drm, "%s disable\n", win->data->name);
|
||||
|
||||
if (!old_pstate->crtc)
|
||||
if (state)
|
||||
old_pstate = drm_atomic_get_old_plane_state(state, plane);
|
||||
if (old_pstate && !old_pstate->crtc)
|
||||
return;
|
||||
|
||||
vop2_win_disable(win);
|
||||
|
Loading…
Reference in New Issue
Block a user