Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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
...

+837 -602
+7
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
··· 706 706 707 707 void amdgpu_amdkfd_set_compute_idle(struct amdgpu_device *adev, bool idle) 708 708 { 709 + /* Temporary workaround to fix issues observed in some 710 + * compute applications when GFXOFF is enabled on GFX11. 711 + */ 712 + if (IP_VERSION_MAJ(adev->ip_versions[GC_HWIP][0]) == 11) { 713 + pr_debug("GFXOFF is %s\n", idle ? "enabled" : "disabled"); 714 + amdgpu_gfx_off_ctrl(adev, idle); 715 + } 709 716 amdgpu_dpm_switch_power_profile(adev, 710 717 PP_SMC_POWER_PROFILE_COMPUTE, 711 718 !idle);
+10 -5
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
··· 4060 4060 * at suspend time. 4061 4061 * 4062 4062 */ 4063 - static void amdgpu_device_evict_resources(struct amdgpu_device *adev) 4063 + static int amdgpu_device_evict_resources(struct amdgpu_device *adev) 4064 4064 { 4065 + int ret; 4066 + 4065 4067 /* No need to evict vram on APUs for suspend to ram or s2idle */ 4066 4068 if ((adev->in_s3 || adev->in_s0ix) && (adev->flags & AMD_IS_APU)) 4067 - return; 4069 + return 0; 4068 4070 4069 - if (amdgpu_ttm_evict_resources(adev, TTM_PL_VRAM)) 4071 + ret = amdgpu_ttm_evict_resources(adev, TTM_PL_VRAM); 4072 + if (ret) 4070 4073 DRM_WARN("evicting device resources failed\n"); 4071 - 4074 + return ret; 4072 4075 } 4073 4076 4074 4077 /* ··· 4121 4118 if (!adev->in_s0ix) 4122 4119 amdgpu_amdkfd_suspend(adev, adev->in_runpm); 4123 4120 4124 - amdgpu_device_evict_resources(adev); 4121 + r = amdgpu_device_evict_resources(adev); 4122 + if (r) 4123 + return r; 4125 4124 4126 4125 amdgpu_fence_driver_hw_fini(adev); 4127 4126
+2 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
··· 2201 2201 pm_runtime_forbid(dev->dev); 2202 2202 } 2203 2203 2204 - if (adev->ip_versions[MP1_HWIP][0] == IP_VERSION(13, 0, 2)) { 2204 + if (adev->ip_versions[MP1_HWIP][0] == IP_VERSION(13, 0, 2) && 2205 + !amdgpu_sriov_vf(adev)) { 2205 2206 bool need_to_reset_gpu = false; 2206 2207 2207 2208 if (adev->gmc.xgmi.num_physical_nodes > 1) {
+6 -4
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
··· 337 337 fw_info->feature = adev->psp.cap_feature_version; 338 338 break; 339 339 case AMDGPU_INFO_FW_MES_KIQ: 340 - fw_info->ver = adev->mes.ucode_fw_version[0]; 341 - fw_info->feature = 0; 340 + fw_info->ver = adev->mes.kiq_version & AMDGPU_MES_VERSION_MASK; 341 + fw_info->feature = (adev->mes.kiq_version & AMDGPU_MES_FEAT_VERSION_MASK) 342 + >> AMDGPU_MES_FEAT_VERSION_SHIFT; 342 343 break; 343 344 case AMDGPU_INFO_FW_MES: 344 - fw_info->ver = adev->mes.ucode_fw_version[1]; 345 - fw_info->feature = 0; 345 + fw_info->ver = adev->mes.sched_version & AMDGPU_MES_VERSION_MASK; 346 + fw_info->feature = (adev->mes.sched_version & AMDGPU_MES_FEAT_VERSION_MASK) 347 + >> AMDGPU_MES_FEAT_VERSION_SHIFT; 346 348 break; 347 349 case AMDGPU_INFO_FW_IMU: 348 350 fw_info->ver = adev->gfx.imu_fw_version;
+2
drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
··· 500 500 501 501 adev_to_drm(adev)->mode_config.fb_base = adev->gmc.aper_base; 502 502 503 + adev_to_drm(adev)->mode_config.fb_modifiers_not_supported = true; 504 + 503 505 r = amdgpu_display_modeset_create_props(adev); 504 506 if (r) 505 507 return r;
+397 -395
drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler.h
··· 2495 2495 0xbf9f0000, 0x00000000, 2496 2496 }; 2497 2497 static const uint32_t cwsr_trap_gfx11_hex[] = { 2498 - 0xbfa00001, 0xbfa0021e, 2498 + 0xbfa00001, 0xbfa00221, 2499 2499 0xb0804006, 0xb8f8f802, 2500 2500 0x9178ff78, 0x00020006, 2501 - 0xb8fbf803, 0xbf0d9f6d, 2502 - 0xbfa20006, 0x8b6eff78, 2503 - 0x00002000, 0xbfa10009, 2504 - 0x8b6eff6d, 0x00ff0000, 2505 - 0xbfa2001e, 0x8b6eff7b, 2506 - 0x00000400, 0xbfa20041, 2507 - 0xbf830010, 0xb8fbf803, 2508 - 0xbfa0fffa, 0x8b6eff7b, 2509 - 0x00000900, 0xbfa20015, 2510 - 0x8b6eff7b, 0x000071ff, 2511 - 0xbfa10008, 0x8b6fff7b, 2512 - 0x00007080, 0xbfa10001, 2513 - 0xbeee1287, 0xb8eff801, 2514 - 0x846e8c6e, 0x8b6e6f6e, 2515 - 0xbfa2000a, 0x8b6eff6d, 2516 - 0x00ff0000, 0xbfa20007, 2517 - 0xb8eef801, 0x8b6eff6e, 2518 - 0x00000800, 0xbfa20003, 2501 + 0xb8fbf803, 0xbf0d9e6d, 2502 + 0xbfa10001, 0xbfbd0000, 2503 + 0xbf0d9f6d, 0xbfa20006, 2504 + 0x8b6eff78, 0x00002000, 2505 + 0xbfa10009, 0x8b6eff6d, 2506 + 0x00ff0000, 0xbfa2001e, 2519 2507 0x8b6eff7b, 0x00000400, 2520 - 0xbfa20026, 0xbefa4d82, 2521 - 0xbf89fc07, 0x84fa887a, 2522 - 0xf4005bbd, 0xf8000010, 2523 - 0xbf89fc07, 0x846e976e, 2524 - 0x9177ff77, 0x00800000, 2525 - 0x8c776e77, 0xf4045bbd, 2526 - 0xf8000000, 0xbf89fc07, 2527 - 0xf4045ebd, 0xf8000008, 2528 - 0xbf89fc07, 0x8bee6e6e, 2529 - 0xbfa10001, 0xbe80486e, 2530 - 0x8b6eff6d, 0x01ff0000, 2531 - 0xbfa20005, 0x8c78ff78, 2532 - 0x00002000, 0x80ec886c, 2533 - 0x82ed806d, 0xbfa00005, 2534 - 0x8b6eff6d, 0x01000000, 2535 - 0xbfa20002, 0x806c846c, 2536 - 0x826d806d, 0x8b6dff6d, 2537 - 0x0000ffff, 0x8bfe7e7e, 2538 - 0x8bea6a6a, 0xb978f802, 2539 - 0xbe804a6c, 0x8b6dff6d, 2540 - 0x0000ffff, 0xbefa0080, 2541 - 0xb97a0283, 0xbeee007e, 2542 - 0xbeef007f, 0xbefe0180, 2543 - 0xbefe4d84, 0xbf89fc07, 2544 - 0x8b7aff7f, 0x04000000, 2545 - 0x847a857a, 0x8c6d7a6d, 2546 - 0xbefa007e, 0x8b7bff7f, 2547 - 0x0000ffff, 0xbefe00c1, 2548 - 0xbeff00c1, 0xdca6c000, 2549 - 0x007a0000, 0x7e000280, 2550 - 0xbefe007a, 0xbeff007b, 2551 - 0xb8fb02dc, 0x847b997b, 2552 - 0xb8fa3b05, 0x807a817a, 2553 - 0xbf0d997b, 0xbfa20002, 2554 - 0x847a897a, 0xbfa00001, 2555 - 0x847a8a7a, 0xb8fb1e06, 2556 - 0x847b8a7b, 0x807a7b7a, 2508 + 0xbfa20041, 0xbf830010, 2509 + 0xb8fbf803, 0xbfa0fffa, 2510 + 0x8b6eff7b, 0x00000900, 2511 + 0xbfa20015, 0x8b6eff7b, 2512 + 0x000071ff, 0xbfa10008, 2513 + 0x8b6fff7b, 0x00007080, 2514 + 0xbfa10001, 0xbeee1287, 2515 + 0xb8eff801, 0x846e8c6e, 2516 + 0x8b6e6f6e, 0xbfa2000a, 2517 + 0x8b6eff6d, 0x00ff0000, 2518 + 0xbfa20007, 0xb8eef801, 2519 + 0x8b6eff6e, 0x00000800, 2520 + 0xbfa20003, 0x8b6eff7b, 2521 + 0x00000400, 0xbfa20026, 2522 + 0xbefa4d82, 0xbf89fc07, 2523 + 0x84fa887a, 0xf4005bbd, 2524 + 0xf8000010, 0xbf89fc07, 2525 + 0x846e976e, 0x9177ff77, 2526 + 0x00800000, 0x8c776e77, 2527 + 0xf4045bbd, 0xf8000000, 2528 + 0xbf89fc07, 0xf4045ebd, 2529 + 0xf8000008, 0xbf89fc07, 2530 + 0x8bee6e6e, 0xbfa10001, 2531 + 0xbe80486e, 0x8b6eff6d, 2532 + 0x01ff0000, 0xbfa20005, 2533 + 0x8c78ff78, 0x00002000, 2534 + 0x80ec886c, 0x82ed806d, 2535 + 0xbfa00005, 0x8b6eff6d, 2536 + 0x01000000, 0xbfa20002, 2537 + 0x806c846c, 0x826d806d, 2538 + 0x8b6dff6d, 0x0000ffff, 2539 + 0x8bfe7e7e, 0x8bea6a6a, 2540 + 0xb978f802, 0xbe804a6c, 2541 + 0x8b6dff6d, 0x0000ffff, 2542 + 0xbefa0080, 0xb97a0283, 2543 + 0xbeee007e, 0xbeef007f, 2544 + 0xbefe0180, 0xbefe4d84, 2545 + 0xbf89fc07, 0x8b7aff7f, 2546 + 0x04000000, 0x847a857a, 2547 + 0x8c6d7a6d, 0xbefa007e, 2557 2548 0x8b7bff7f, 0x0000ffff, 2558 - 0x807aff7a, 0x00000200, 2559 - 0x807a7e7a, 0x827b807b, 2560 - 0xd7610000, 0x00010870, 2561 - 0xd7610000, 0x00010a71, 2562 - 0xd7610000, 0x00010c72, 2563 - 0xd7610000, 0x00010e73, 2564 - 0xd7610000, 0x00011074, 2565 - 0xd7610000, 0x00011275, 2566 - 0xd7610000, 0x00011476, 2567 - 0xd7610000, 0x00011677, 2568 - 0xd7610000, 0x00011a79, 2569 - 0xd7610000, 0x00011c7e, 2570 - 0xd7610000, 0x00011e7f, 2571 - 0xbefe00ff, 0x00003fff, 2572 - 0xbeff0080, 0xdca6c040, 2573 - 0x007a0000, 0xd760007a, 2574 - 0x00011d00, 0xd760007b, 2575 - 0x00011f00, 0xbefe007a, 2576 - 0xbeff007b, 0xbef4007e, 2577 - 0x8b75ff7f, 0x0000ffff, 2578 - 0x8c75ff75, 0x00040000, 2579 - 0xbef60080, 0xbef700ff, 2580 - 0x10807fac, 0xbef1007d, 2581 - 0xbef00080, 0xb8f302dc, 2582 - 0x84739973, 0xbefe00c1, 2583 - 0x857d9973, 0x8b7d817d, 2584 - 0xbf06817d, 0xbfa20002, 2585 - 0xbeff0080, 0xbfa00002, 2586 - 0xbeff00c1, 0xbfa00009, 2549 + 0xbefe00c1, 0xbeff00c1, 2550 + 0xdca6c000, 0x007a0000, 2551 + 0x7e000280, 0xbefe007a, 2552 + 0xbeff007b, 0xb8fb02dc, 2553 + 0x847b997b, 0xb8fa3b05, 2554 + 0x807a817a, 0xbf0d997b, 2555 + 0xbfa20002, 0x847a897a, 2556 + 0xbfa00001, 0x847a8a7a, 2557 + 0xb8fb1e06, 0x847b8a7b, 2558 + 0x807a7b7a, 0x8b7bff7f, 2559 + 0x0000ffff, 0x807aff7a, 2560 + 0x00000200, 0x807a7e7a, 2561 + 0x827b807b, 0xd7610000, 2562 + 0x00010870, 0xd7610000, 2563 + 0x00010a71, 0xd7610000, 2564 + 0x00010c72, 0xd7610000, 2565 + 0x00010e73, 0xd7610000, 2566 + 0x00011074, 0xd7610000, 2567 + 0x00011275, 0xd7610000, 2568 + 0x00011476, 0xd7610000, 2569 + 0x00011677, 0xd7610000, 2570 + 0x00011a79, 0xd7610000, 2571 + 0x00011c7e, 0xd7610000, 2572 + 0x00011e7f, 0xbefe00ff, 2573 + 0x00003fff, 0xbeff0080, 2574 + 0xdca6c040, 0x007a0000, 2575 + 0xd760007a, 0x00011d00, 2576 + 0xd760007b, 0x00011f00, 2577 + 0xbefe007a, 0xbeff007b, 2578 + 0xbef4007e, 0x8b75ff7f, 2579 + 0x0000ffff, 0x8c75ff75, 2580 + 0x00040000, 0xbef60080, 2581 + 0xbef700ff, 0x10807fac, 2582 + 0xbef1007d, 0xbef00080, 2583 + 0xb8f302dc, 0x84739973, 2584 + 0xbefe00c1, 0x857d9973, 2585 + 0x8b7d817d, 0xbf06817d, 2586 + 0xbfa20002, 0xbeff0080, 2587 + 0xbfa00002, 0xbeff00c1, 2588 + 0xbfa00009, 0xbef600ff, 2589 + 0x01000000, 0xe0685080, 2590 + 0x701d0100, 0xe0685100, 2591 + 0x701d0200, 0xe0685180, 2592 + 0x701d0300, 0xbfa00008, 2587 2593 0xbef600ff, 0x01000000, 2588 - 0xe0685080, 0x701d0100, 2589 - 0xe0685100, 0x701d0200, 2590 - 0xe0685180, 0x701d0300, 2591 - 0xbfa00008, 0xbef600ff, 2592 - 0x01000000, 0xe0685100, 2593 - 0x701d0100, 0xe0685200, 2594 - 0x701d0200, 0xe0685300, 2595 - 0x701d0300, 0xb8f03b05, 2596 - 0x80708170, 0xbf0d9973, 2597 - 0xbfa20002, 0x84708970, 2598 - 0xbfa00001, 0x84708a70, 2599 - 0xb8fa1e06, 0x847a8a7a, 2600 - 0x80707a70, 0x8070ff70, 2601 - 0x00000200, 0xbef600ff, 2602 - 0x01000000, 0x7e000280, 2603 - 0x7e020280, 0x7e040280, 2604 - 0xbefd0080, 0xd7610002, 2605 - 0x0000fa71, 0x807d817d, 2606 - 0xd7610002, 0x0000fa6c, 2607 - 0x807d817d, 0x917aff6d, 2608 - 0x80000000, 0xd7610002, 2609 - 0x0000fa7a, 0x807d817d, 2610 - 0xd7610002, 0x0000fa6e, 2611 - 0x807d817d, 0xd7610002, 2612 - 0x0000fa6f, 0x807d817d, 2613 - 0xd7610002, 0x0000fa78, 2614 - 0x807d817d, 0xb8faf803, 2615 - 0xd7610002, 0x0000fa7a, 2616 - 0x807d817d, 0xd7610002, 2617 - 0x0000fa7b, 0x807d817d, 2618 - 0xb8f1f801, 0xd7610002, 2619 - 0x0000fa71, 0x807d817d, 2620 - 0xb8f1f814, 0xd7610002, 2621 - 0x0000fa71, 0x807d817d, 2622 - 0xb8f1f815, 0xd7610002, 2623 - 0x0000fa71, 0x807d817d, 2624 - 0xbefe00ff, 0x0000ffff, 2625 - 0xbeff0080, 0xe0685000, 2626 - 0x701d0200, 0xbefe00c1, 2594 + 0xe0685100, 0x701d0100, 2595 + 0xe0685200, 0x701d0200, 2596 + 0xe0685300, 0x701d0300, 2627 2597 0xb8f03b05, 0x80708170, 2628 2598 0xbf0d9973, 0xbfa20002, 2629 2599 0x84708970, 0xbfa00001, 2630 2600 0x84708a70, 0xb8fa1e06, 2631 2601 0x847a8a7a, 0x80707a70, 2602 + 0x8070ff70, 0x00000200, 2632 2603 0xbef600ff, 0x01000000, 2633 - 0xbef90080, 0xbefd0080, 2634 - 0xbf800000, 0xbe804100, 2635 - 0xbe824102, 0xbe844104, 2636 - 0xbe864106, 0xbe884108, 2637 - 0xbe8a410a, 0xbe8c410c, 2638 - 0xbe8e410e, 0xd7610002, 2639 - 0x0000f200, 0x80798179, 2640 - 0xd7610002, 0x0000f201, 2641 - 0x80798179, 0xd7610002, 2642 - 0x0000f202, 0x80798179, 2643 - 0xd7610002, 0x0000f203, 2644 - 0x80798179, 0xd7610002, 2645 - 0x0000f204, 0x80798179, 2646 - 0xd7610002, 0x0000f205, 2647 - 0x80798179, 0xd7610002, 2648 - 0x0000f206, 0x80798179, 2649 - 0xd7610002, 0x0000f207, 2650 - 0x80798179, 0xd7610002, 2651 - 0x0000f208, 0x80798179, 2652 - 0xd7610002, 0x0000f209, 2653 - 0x80798179, 0xd7610002, 2654 - 0x0000f20a, 0x80798179, 2655 - 0xd7610002, 0x0000f20b, 2656 - 0x80798179, 0xd7610002, 2657 - 0x0000f20c, 0x80798179, 2658 - 0xd7610002, 0x0000f20d, 2659 - 0x80798179, 0xd7610002, 2660 - 0x0000f20e, 0x80798179, 2661 - 0xd7610002, 0x0000f20f, 2662 - 0x80798179, 0xbf06a079, 2663 - 0xbfa10006, 0xe0685000, 2664 - 0x701d0200, 0x8070ff70, 2665 - 0x00000080, 0xbef90080, 2666 - 0x7e040280, 0x807d907d, 2667 - 0xbf0aff7d, 0x00000060, 2668 - 0xbfa2ffbc, 0xbe804100, 2669 - 0xbe824102, 0xbe844104, 2670 - 0xbe864106, 0xbe884108, 2671 - 0xbe8a410a, 0xd7610002, 2672 - 0x0000f200, 0x80798179, 2673 - 0xd7610002, 0x0000f201, 2674 - 0x80798179, 0xd7610002, 2675 - 0x0000f202, 0x80798179, 2676 - 0xd7610002, 0x0000f203, 2677 - 0x80798179, 0xd7610002, 2678 - 0x0000f204, 0x80798179, 2679 - 0xd7610002, 0x0000f205, 2680 - 0x80798179, 0xd7610002, 2681 - 0x0000f206, 0x80798179, 2682 - 0xd7610002, 0x0000f207, 2683 - 0x80798179, 0xd7610002, 2684 - 0x0000f208, 0x80798179, 2685 - 0xd7610002, 0x0000f209, 2686 - 0x80798179, 0xd7610002, 2687 - 0x0000f20a, 0x80798179, 2688 - 0xd7610002, 0x0000f20b, 2689 - 0x80798179, 0xe0685000, 2690 - 0x701d0200, 0xbefe00c1, 2691 - 0x857d9973, 0x8b7d817d, 2692 - 0xbf06817d, 0xbfa20002, 2693 - 0xbeff0080, 0xbfa00001, 2694 - 0xbeff00c1, 0xb8fb4306, 2695 - 0x8b7bc17b, 0xbfa10044, 2696 - 0xbfbd0000, 0x8b7aff6d, 2697 - 0x80000000, 0xbfa10040, 2698 - 0x847b867b, 0x847b827b, 2699 - 0xbef6007b, 0xb8f03b05, 2604 + 0x7e000280, 0x7e020280, 2605 + 0x7e040280, 0xbefd0080, 2606 + 0xd7610002, 0x0000fa71, 2607 + 0x807d817d, 0xd7610002, 2608 + 0x0000fa6c, 0x807d817d, 2609 + 0x917aff6d, 0x80000000, 2610 + 0xd7610002, 0x0000fa7a, 2611 + 0x807d817d, 0xd7610002, 2612 + 0x0000fa6e, 0x807d817d, 2613 + 0xd7610002, 0x0000fa6f, 2614 + 0x807d817d, 0xd7610002, 2615 + 0x0000fa78, 0x807d817d, 2616 + 0xb8faf803, 0xd7610002, 2617 + 0x0000fa7a, 0x807d817d, 2618 + 0xd7610002, 0x0000fa7b, 2619 + 0x807d817d, 0xb8f1f801, 2620 + 0xd7610002, 0x0000fa71, 2621 + 0x807d817d, 0xb8f1f814, 2622 + 0xd7610002, 0x0000fa71, 2623 + 0x807d817d, 0xb8f1f815, 2624 + 0xd7610002, 0x0000fa71, 2625 + 0x807d817d, 0xbefe00ff, 2626 + 0x0000ffff, 0xbeff0080, 2627 + 0xe0685000, 0x701d0200, 2628 + 0xbefe00c1, 0xb8f03b05, 2700 2629 0x80708170, 0xbf0d9973, 2701 2630 0xbfa20002, 0x84708970, 2702 2631 0xbfa00001, 0x84708a70, 2703 2632 0xb8fa1e06, 0x847a8a7a, 2704 - 0x80707a70, 0x8070ff70, 2705 - 0x00000200, 0x8070ff70, 2706 - 0x00000080, 0xbef600ff, 2707 - 0x01000000, 0xd71f0000, 2708 - 0x000100c1, 0xd7200000, 2709 - 0x000200c1, 0x16000084, 2710 - 0x857d9973, 0x8b7d817d, 2711 - 0xbf06817d, 0xbefd0080, 2712 - 0xbfa20012, 0xbe8300ff, 2713 - 0x00000080, 0xbf800000, 2714 - 0xbf800000, 0xbf800000, 2715 - 0xd8d80000, 0x01000000, 2716 - 0xbf890000, 0xe0685000, 2717 - 0x701d0100, 0x807d037d, 2718 - 0x80700370, 0xd5250000, 2719 - 0x0001ff00, 0x00000080, 2720 - 0xbf0a7b7d, 0xbfa2fff4, 2721 - 0xbfa00011, 0xbe8300ff, 2722 - 0x00000100, 0xbf800000, 2723 - 0xbf800000, 0xbf800000, 2724 - 0xd8d80000, 0x01000000, 2725 - 0xbf890000, 0xe0685000, 2726 - 0x701d0100, 0x807d037d, 2727 - 0x80700370, 0xd5250000, 2728 - 0x0001ff00, 0x00000100, 2729 - 0xbf0a7b7d, 0xbfa2fff4, 2633 + 0x80707a70, 0xbef600ff, 2634 + 0x01000000, 0xbef90080, 2635 + 0xbefd0080, 0xbf800000, 2636 + 0xbe804100, 0xbe824102, 2637 + 0xbe844104, 0xbe864106, 2638 + 0xbe884108, 0xbe8a410a, 2639 + 0xbe8c410c, 0xbe8e410e, 2640 + 0xd7610002, 0x0000f200, 2641 + 0x80798179, 0xd7610002, 2642 + 0x0000f201, 0x80798179, 2643 + 0xd7610002, 0x0000f202, 2644 + 0x80798179, 0xd7610002, 2645 + 0x0000f203, 0x80798179, 2646 + 0xd7610002, 0x0000f204, 2647 + 0x80798179, 0xd7610002, 2648 + 0x0000f205, 0x80798179, 2649 + 0xd7610002, 0x0000f206, 2650 + 0x80798179, 0xd7610002, 2651 + 0x0000f207, 0x80798179, 2652 + 0xd7610002, 0x0000f208, 2653 + 0x80798179, 0xd7610002, 2654 + 0x0000f209, 0x80798179, 2655 + 0xd7610002, 0x0000f20a, 2656 + 0x80798179, 0xd7610002, 2657 + 0x0000f20b, 0x80798179, 2658 + 0xd7610002, 0x0000f20c, 2659 + 0x80798179, 0xd7610002, 2660 + 0x0000f20d, 0x80798179, 2661 + 0xd7610002, 0x0000f20e, 2662 + 0x80798179, 0xd7610002, 2663 + 0x0000f20f, 0x80798179, 2664 + 0xbf06a079, 0xbfa10006, 2665 + 0xe0685000, 0x701d0200, 2666 + 0x8070ff70, 0x00000080, 2667 + 0xbef90080, 0x7e040280, 2668 + 0x807d907d, 0xbf0aff7d, 2669 + 0x00000060, 0xbfa2ffbc, 2670 + 0xbe804100, 0xbe824102, 2671 + 0xbe844104, 0xbe864106, 2672 + 0xbe884108, 0xbe8a410a, 2673 + 0xd7610002, 0x0000f200, 2674 + 0x80798179, 0xd7610002, 2675 + 0x0000f201, 0x80798179, 2676 + 0xd7610002, 0x0000f202, 2677 + 0x80798179, 0xd7610002, 2678 + 0x0000f203, 0x80798179, 2679 + 0xd7610002, 0x0000f204, 2680 + 0x80798179, 0xd7610002, 2681 + 0x0000f205, 0x80798179, 2682 + 0xd7610002, 0x0000f206, 2683 + 0x80798179, 0xd7610002, 2684 + 0x0000f207, 0x80798179, 2685 + 0xd7610002, 0x0000f208, 2686 + 0x80798179, 0xd7610002, 2687 + 0x0000f209, 0x80798179, 2688 + 0xd7610002, 0x0000f20a, 2689 + 0x80798179, 0xd7610002, 2690 + 0x0000f20b, 0x80798179, 2691 + 0xe0685000, 0x701d0200, 2730 2692 0xbefe00c1, 0x857d9973, 2731 2693 0x8b7d817d, 0xbf06817d, 2732 - 0xbfa20004, 0xbef000ff, 2733 - 0x00000200, 0xbeff0080, 2734 - 0xbfa00003, 0xbef000ff, 2735 - 0x00000400, 0xbeff00c1, 2736 - 0xb8fb3b05, 0x807b817b, 2737 - 0x847b827b, 0x857d9973, 2694 + 0xbfa20002, 0xbeff0080, 2695 + 0xbfa00001, 0xbeff00c1, 2696 + 0xb8fb4306, 0x8b7bc17b, 2697 + 0xbfa10044, 0xbfbd0000, 2698 + 0x8b7aff6d, 0x80000000, 2699 + 0xbfa10040, 0x847b867b, 2700 + 0x847b827b, 0xbef6007b, 2701 + 0xb8f03b05, 0x80708170, 2702 + 0xbf0d9973, 0xbfa20002, 2703 + 0x84708970, 0xbfa00001, 2704 + 0x84708a70, 0xb8fa1e06, 2705 + 0x847a8a7a, 0x80707a70, 2706 + 0x8070ff70, 0x00000200, 2707 + 0x8070ff70, 0x00000080, 2708 + 0xbef600ff, 0x01000000, 2709 + 0xd71f0000, 0x000100c1, 2710 + 0xd7200000, 0x000200c1, 2711 + 0x16000084, 0x857d9973, 2738 2712 0x8b7d817d, 0xbf06817d, 2739 - 0xbfa20017, 0xbef600ff, 2713 + 0xbefd0080, 0xbfa20012, 2714 + 0xbe8300ff, 0x00000080, 2715 + 0xbf800000, 0xbf800000, 2716 + 0xbf800000, 0xd8d80000, 2717 + 0x01000000, 0xbf890000, 2718 + 0xe0685000, 0x701d0100, 2719 + 0x807d037d, 0x80700370, 2720 + 0xd5250000, 0x0001ff00, 2721 + 0x00000080, 0xbf0a7b7d, 2722 + 0xbfa2fff4, 0xbfa00011, 2723 + 0xbe8300ff, 0x00000100, 2724 + 0xbf800000, 0xbf800000, 2725 + 0xbf800000, 0xd8d80000, 2726 + 0x01000000, 0xbf890000, 2727 + 0xe0685000, 0x701d0100, 2728 + 0x807d037d, 0x80700370, 2729 + 0xd5250000, 0x0001ff00, 2730 + 0x00000100, 0xbf0a7b7d, 2731 + 0xbfa2fff4, 0xbefe00c1, 2732 + 0x857d9973, 0x8b7d817d, 2733 + 0xbf06817d, 0xbfa20004, 2734 + 0xbef000ff, 0x00000200, 2735 + 0xbeff0080, 0xbfa00003, 2736 + 0xbef000ff, 0x00000400, 2737 + 0xbeff00c1, 0xb8fb3b05, 2738 + 0x807b817b, 0x847b827b, 2739 + 0x857d9973, 0x8b7d817d, 2740 + 0xbf06817d, 0xbfa20017, 2741 + 0xbef600ff, 0x01000000, 2742 + 0xbefd0084, 0xbf0a7b7d, 2743 + 0xbfa10037, 0x7e008700, 2744 + 0x7e028701, 0x7e048702, 2745 + 0x7e068703, 0xe0685000, 2746 + 0x701d0000, 0xe0685080, 2747 + 0x701d0100, 0xe0685100, 2748 + 0x701d0200, 0xe0685180, 2749 + 0x701d0300, 0x807d847d, 2750 + 0x8070ff70, 0x00000200, 2751 + 0xbf0a7b7d, 0xbfa2ffef, 2752 + 0xbfa00025, 0xbef600ff, 2740 2753 0x01000000, 0xbefd0084, 2741 - 0xbf0a7b7d, 0xbfa10037, 2754 + 0xbf0a7b7d, 0xbfa10011, 2742 2755 0x7e008700, 0x7e028701, 2743 2756 0x7e048702, 0x7e068703, 2744 2757 0xe0685000, 0x701d0000, 2745 - 0xe0685080, 0x701d0100, 2746 - 0xe0685100, 0x701d0200, 2747 - 0xe0685180, 0x701d0300, 2758 + 0xe0685100, 0x701d0100, 2759 + 0xe0685200, 0x701d0200, 2760 + 0xe0685300, 0x701d0300, 2748 2761 0x807d847d, 0x8070ff70, 2749 - 0x00000200, 0xbf0a7b7d, 2750 - 0xbfa2ffef, 0xbfa00025, 2751 - 0xbef600ff, 0x01000000, 2752 - 0xbefd0084, 0xbf0a7b7d, 2753 - 0xbfa10011, 0x7e008700, 2754 - 0x7e028701, 0x7e048702, 2755 - 0x7e068703, 0xe0685000, 2756 - 0x701d0000, 0xe0685100, 2757 - 0x701d0100, 0xe0685200, 2758 - 0x701d0200, 0xe0685300, 2759 - 0x701d0300, 0x807d847d, 2760 - 0x8070ff70, 0x00000400, 2761 - 0xbf0a7b7d, 0xbfa2ffef, 2762 - 0xb8fb1e06, 0x8b7bc17b, 2763 - 0xbfa1000c, 0x847b837b, 2764 - 0x807b7d7b, 0xbefe00c1, 2765 - 0xbeff0080, 0x7e008700, 2766 - 0xe0685000, 0x701d0000, 2767 - 0x807d817d, 0x8070ff70, 2768 - 0x00000080, 0xbf0a7b7d, 2769 - 0xbfa2fff8, 0xbfa00146, 2770 - 0xbef4007e, 0x8b75ff7f, 2771 - 0x0000ffff, 0x8c75ff75, 2772 - 0x00040000, 0xbef60080, 2773 - 0xbef700ff, 0x10807fac, 2774 - 0xb8f202dc, 0x84729972, 2775 - 0x8b6eff7f, 0x04000000, 2776 - 0xbfa1003a, 0xbefe00c1, 2777 - 0x857d9972, 0x8b7d817d, 2778 - 0xbf06817d, 0xbfa20002, 2779 - 0xbeff0080, 0xbfa00001, 2780 - 0xbeff00c1, 0xb8ef4306, 2781 - 0x8b6fc16f, 0xbfa1002f, 2782 - 0x846f866f, 0x846f826f, 2783 - 0xbef6006f, 0xb8f83b05, 2784 - 0x80788178, 0xbf0d9972, 2785 - 0xbfa20002, 0x84788978, 2786 - 0xbfa00001, 0x84788a78, 2787 - 0xb8ee1e06, 0x846e8a6e, 2788 - 0x80786e78, 0x8078ff78, 2789 - 0x00000200, 0x8078ff78, 2790 - 0x00000080, 0xbef600ff, 2791 - 0x01000000, 0x857d9972, 2792 - 0x8b7d817d, 0xbf06817d, 2793 - 0xbefd0080, 0xbfa2000c, 2794 - 0xe0500000, 0x781d0000, 2795 - 0xbf8903f7, 0xdac00000, 2796 - 0x00000000, 0x807dff7d, 2797 - 0x00000080, 0x8078ff78, 2798 - 0x00000080, 0xbf0a6f7d, 2799 - 0xbfa2fff5, 0xbfa0000b, 2800 - 0xe0500000, 0x781d0000, 2801 - 0xbf8903f7, 0xdac00000, 2802 - 0x00000000, 0x807dff7d, 2803 - 0x00000100, 0x8078ff78, 2804 - 0x00000100, 0xbf0a6f7d, 2805 - 0xbfa2fff5, 0xbef80080, 2762 + 0x00000400, 0xbf0a7b7d, 2763 + 0xbfa2ffef, 0xb8fb1e06, 2764 + 0x8b7bc17b, 0xbfa1000c, 2765 + 0x847b837b, 0x807b7d7b, 2766 + 0xbefe00c1, 0xbeff0080, 2767 + 0x7e008700, 0xe0685000, 2768 + 0x701d0000, 0x807d817d, 2769 + 0x8070ff70, 0x00000080, 2770 + 0xbf0a7b7d, 0xbfa2fff8, 2771 + 0xbfa00146, 0xbef4007e, 2772 + 0x8b75ff7f, 0x0000ffff, 2773 + 0x8c75ff75, 0x00040000, 2774 + 0xbef60080, 0xbef700ff, 2775 + 0x10807fac, 0xb8f202dc, 2776 + 0x84729972, 0x8b6eff7f, 2777 + 0x04000000, 0xbfa1003a, 2806 2778 0xbefe00c1, 0x857d9972, 2807 2779 0x8b7d817d, 0xbf06817d, 2808 2780 0xbfa20002, 0xbeff0080, 2809 2781 0xbfa00001, 0xbeff00c1, 2810 - 0xb8ef3b05, 0x806f816f, 2811 - 0x846f826f, 0x857d9972, 2812 - 0x8b7d817d, 0xbf06817d, 2813 - 0xbfa20024, 0xbef600ff, 2814 - 0x01000000, 0xbeee0078, 2815 - 0x8078ff78, 0x00000200, 2816 - 0xbefd0084, 0xbf0a6f7d, 2817 - 0xbfa10050, 0xe0505000, 2818 - 0x781d0000, 0xe0505080, 2819 - 0x781d0100, 0xe0505100, 2820 - 0x781d0200, 0xe0505180, 2821 - 0x781d0300, 0xbf8903f7, 2822 - 0x7e008500, 0x7e028501, 2823 - 0x7e048502, 0x7e068503, 2824 - 0x807d847d, 0x8078ff78, 2825 - 0x00000200, 0xbf0a6f7d, 2826 - 0xbfa2ffee, 0xe0505000, 2827 - 0x6e1d0000, 0xe0505080, 2828 - 0x6e1d0100, 0xe0505100, 2829 - 0x6e1d0200, 0xe0505180, 2830 - 0x6e1d0300, 0xbf8903f7, 2831 - 0xbfa00034, 0xbef600ff, 2832 - 0x01000000, 0xbeee0078, 2833 - 0x8078ff78, 0x00000400, 2834 - 0xbefd0084, 0xbf0a6f7d, 2835 - 0xbfa10012, 0xe0505000, 2836 - 0x781d0000, 0xe0505100, 2837 - 0x781d0100, 0xe0505200, 2838 - 0x781d0200, 0xe0505300, 2839 - 0x781d0300, 0xbf8903f7, 2840 - 0x7e008500, 0x7e028501, 2841 - 0x7e048502, 0x7e068503, 2842 - 0x807d847d, 0x8078ff78, 2843 - 0x00000400, 0xbf0a6f7d, 2844 - 0xbfa2ffee, 0xb8ef1e06, 2845 - 0x8b6fc16f, 0xbfa1000e, 2846 - 0x846f836f, 0x806f7d6f, 2847 - 0xbefe00c1, 0xbeff0080, 2848 - 0xe0505000, 0x781d0000, 2849 - 0xbf8903f7, 0x7e008500, 2850 - 0x807d817d, 0x8078ff78, 2851 - 0x00000080, 0xbf0a6f7d, 2852 - 0xbfa2fff7, 0xbeff00c1, 2853 - 0xe0505000, 0x6e1d0000, 2854 - 0xe0505100, 0x6e1d0100, 2855 - 0xe0505200, 0x6e1d0200, 2856 - 0xe0505300, 0x6e1d0300, 2857 - 0xbf8903f7, 0xb8f83b05, 2858 - 0x80788178, 0xbf0d9972, 2859 - 0xbfa20002, 0x84788978, 2860 - 0xbfa00001, 0x84788a78, 2861 - 0xb8ee1e06, 0x846e8a6e, 2862 - 0x80786e78, 0x8078ff78, 2863 - 0x00000200, 0x80f8ff78, 2864 - 0x00000050, 0xbef600ff, 2865 - 0x01000000, 0xbefd00ff, 2866 - 0x0000006c, 0x80f89078, 2867 - 0xf428403a, 0xf0000000, 2868 - 0xbf89fc07, 0x80fd847d, 2869 - 0xbf800000, 0xbe804300, 2870 - 0xbe824302, 0x80f8a078, 2871 - 0xf42c403a, 0xf0000000, 2872 - 0xbf89fc07, 0x80fd887d, 2873 - 0xbf800000, 0xbe804300, 2874 - 0xbe824302, 0xbe844304, 2875 - 0xbe864306, 0x80f8c078, 2876 - 0xf430403a, 0xf0000000, 2877 - 0xbf89fc07, 0x80fd907d, 2878 - 0xbf800000, 0xbe804300, 2879 - 0xbe824302, 0xbe844304, 2880 - 0xbe864306, 0xbe884308, 2881 - 0xbe8a430a, 0xbe8c430c, 2882 - 0xbe8e430e, 0xbf06807d, 2883 - 0xbfa1fff0, 0xb980f801, 2884 - 0x00000000, 0xbfbd0000, 2782 + 0xb8ef4306, 0x8b6fc16f, 2783 + 0xbfa1002f, 0x846f866f, 2784 + 0x846f826f, 0xbef6006f, 2885 2785 0xb8f83b05, 0x80788178, 2886 2786 0xbf0d9972, 0xbfa20002, 2887 2787 0x84788978, 0xbfa00001, 2888 2788 0x84788a78, 0xb8ee1e06, 2889 2789 0x846e8a6e, 0x80786e78, 2890 2790 0x8078ff78, 0x00000200, 2791 + 0x8078ff78, 0x00000080, 2891 2792 0xbef600ff, 0x01000000, 2892 - 0xf4205bfa, 0xf0000000, 2893 - 0x80788478, 0xf4205b3a, 2793 + 0x857d9972, 0x8b7d817d, 2794 + 0xbf06817d, 0xbefd0080, 2795 + 0xbfa2000c, 0xe0500000, 2796 + 0x781d0000, 0xbf8903f7, 2797 + 0xdac00000, 0x00000000, 2798 + 0x807dff7d, 0x00000080, 2799 + 0x8078ff78, 0x00000080, 2800 + 0xbf0a6f7d, 0xbfa2fff5, 2801 + 0xbfa0000b, 0xe0500000, 2802 + 0x781d0000, 0xbf8903f7, 2803 + 0xdac00000, 0x00000000, 2804 + 0x807dff7d, 0x00000100, 2805 + 0x8078ff78, 0x00000100, 2806 + 0xbf0a6f7d, 0xbfa2fff5, 2807 + 0xbef80080, 0xbefe00c1, 2808 + 0x857d9972, 0x8b7d817d, 2809 + 0xbf06817d, 0xbfa20002, 2810 + 0xbeff0080, 0xbfa00001, 2811 + 0xbeff00c1, 0xb8ef3b05, 2812 + 0x806f816f, 0x846f826f, 2813 + 0x857d9972, 0x8b7d817d, 2814 + 0xbf06817d, 0xbfa20024, 2815 + 0xbef600ff, 0x01000000, 2816 + 0xbeee0078, 0x8078ff78, 2817 + 0x00000200, 0xbefd0084, 2818 + 0xbf0a6f7d, 0xbfa10050, 2819 + 0xe0505000, 0x781d0000, 2820 + 0xe0505080, 0x781d0100, 2821 + 0xe0505100, 0x781d0200, 2822 + 0xe0505180, 0x781d0300, 2823 + 0xbf8903f7, 0x7e008500, 2824 + 0x7e028501, 0x7e048502, 2825 + 0x7e068503, 0x807d847d, 2826 + 0x8078ff78, 0x00000200, 2827 + 0xbf0a6f7d, 0xbfa2ffee, 2828 + 0xe0505000, 0x6e1d0000, 2829 + 0xe0505080, 0x6e1d0100, 2830 + 0xe0505100, 0x6e1d0200, 2831 + 0xe0505180, 0x6e1d0300, 2832 + 0xbf8903f7, 0xbfa00034, 2833 + 0xbef600ff, 0x01000000, 2834 + 0xbeee0078, 0x8078ff78, 2835 + 0x00000400, 0xbefd0084, 2836 + 0xbf0a6f7d, 0xbfa10012, 2837 + 0xe0505000, 0x781d0000, 2838 + 0xe0505100, 0x781d0100, 2839 + 0xe0505200, 0x781d0200, 2840 + 0xe0505300, 0x781d0300, 2841 + 0xbf8903f7, 0x7e008500, 2842 + 0x7e028501, 0x7e048502, 2843 + 0x7e068503, 0x807d847d, 2844 + 0x8078ff78, 0x00000400, 2845 + 0xbf0a6f7d, 0xbfa2ffee, 2846 + 0xb8ef1e06, 0x8b6fc16f, 2847 + 0xbfa1000e, 0x846f836f, 2848 + 0x806f7d6f, 0xbefe00c1, 2849 + 0xbeff0080, 0xe0505000, 2850 + 0x781d0000, 0xbf8903f7, 2851 + 0x7e008500, 0x807d817d, 2852 + 0x8078ff78, 0x00000080, 2853 + 0xbf0a6f7d, 0xbfa2fff7, 2854 + 0xbeff00c1, 0xe0505000, 2855 + 0x6e1d0000, 0xe0505100, 2856 + 0x6e1d0100, 0xe0505200, 2857 + 0x6e1d0200, 0xe0505300, 2858 + 0x6e1d0300, 0xbf8903f7, 2859 + 0xb8f83b05, 0x80788178, 2860 + 0xbf0d9972, 0xbfa20002, 2861 + 0x84788978, 0xbfa00001, 2862 + 0x84788a78, 0xb8ee1e06, 2863 + 0x846e8a6e, 0x80786e78, 2864 + 0x8078ff78, 0x00000200, 2865 + 0x80f8ff78, 0x00000050, 2866 + 0xbef600ff, 0x01000000, 2867 + 0xbefd00ff, 0x0000006c, 2868 + 0x80f89078, 0xf428403a, 2869 + 0xf0000000, 0xbf89fc07, 2870 + 0x80fd847d, 0xbf800000, 2871 + 0xbe804300, 0xbe824302, 2872 + 0x80f8a078, 0xf42c403a, 2873 + 0xf0000000, 0xbf89fc07, 2874 + 0x80fd887d, 0xbf800000, 2875 + 0xbe804300, 0xbe824302, 2876 + 0xbe844304, 0xbe864306, 2877 + 0x80f8c078, 0xf430403a, 2878 + 0xf0000000, 0xbf89fc07, 2879 + 0x80fd907d, 0xbf800000, 2880 + 0xbe804300, 0xbe824302, 2881 + 0xbe844304, 0xbe864306, 2882 + 0xbe884308, 0xbe8a430a, 2883 + 0xbe8c430c, 0xbe8e430e, 2884 + 0xbf06807d, 0xbfa1fff0, 2885 + 0xb980f801, 0x00000000, 2886 + 0xbfbd0000, 0xb8f83b05, 2887 + 0x80788178, 0xbf0d9972, 2888 + 0xbfa20002, 0x84788978, 2889 + 0xbfa00001, 0x84788a78, 2890 + 0xb8ee1e06, 0x846e8a6e, 2891 + 0x80786e78, 0x8078ff78, 2892 + 0x00000200, 0xbef600ff, 2893 + 0x01000000, 0xf4205bfa, 2894 2894 0xf0000000, 0x80788478, 2895 - 0xf4205b7a, 0xf0000000, 2896 - 0x80788478, 0xf4205c3a, 2895 + 0xf4205b3a, 0xf0000000, 2896 + 0x80788478, 0xf4205b7a, 2897 2897 0xf0000000, 0x80788478, 2898 - 0xf4205c7a, 0xf0000000, 2899 - 0x80788478, 0xf4205eba, 2898 + 0xf4205c3a, 0xf0000000, 2899 + 0x80788478, 0xf4205c7a, 2900 2900 0xf0000000, 0x80788478, 2901 - 0xf4205efa, 0xf0000000, 2902 - 0x80788478, 0xf4205e7a, 2901 + 0xf4205eba, 0xf0000000, 2902 + 0x80788478, 0xf4205efa, 2903 2903 0xf0000000, 0x80788478, 2904 - 0xf4205cfa, 0xf0000000, 2905 - 0x80788478, 0xf4205bba, 2904 + 0xf4205e7a, 0xf0000000, 2905 + 0x80788478, 0xf4205cfa, 2906 2906 0xf0000000, 0x80788478, 2907 - 0xbf89fc07, 0xb96ef814, 2908 2907 0xf4205bba, 0xf0000000, 2909 2908 0x80788478, 0xbf89fc07, 2910 - 0xb96ef815, 0xbefd006f, 2911 - 0xbefe0070, 0xbeff0071, 2912 - 0x8b6f7bff, 0x000003ff, 2913 - 0xb96f4803, 0x8b6f7bff, 2914 - 0xfffff800, 0x856f8b6f, 2915 - 0xb96fa2c3, 0xb973f801, 2916 - 0xb8ee3b05, 0x806e816e, 2917 - 0xbf0d9972, 0xbfa20002, 2918 - 0x846e896e, 0xbfa00001, 2919 - 0x846e8a6e, 0xb8ef1e06, 2920 - 0x846f8a6f, 0x806e6f6e, 2921 - 0x806eff6e, 0x00000200, 2922 - 0x806e746e, 0x826f8075, 2923 - 0x8b6fff6f, 0x0000ffff, 2924 - 0xf4085c37, 0xf8000050, 2925 - 0xf4085d37, 0xf8000060, 2926 - 0xf4005e77, 0xf8000074, 2927 - 0xbf89fc07, 0x8b6dff6d, 2928 - 0x0000ffff, 0x8bfe7e7e, 2929 - 0x8bea6a6a, 0xb8eef802, 2930 - 0xbf0d866e, 0xbfa20002, 2931 - 0xb97af802, 0xbe80486c, 2932 - 0xb97af802, 0xbe804a6c, 2933 - 0xbfb00000, 0xbf9f0000, 2909 + 0xb96ef814, 0xf4205bba, 2910 + 0xf0000000, 0x80788478, 2911 + 0xbf89fc07, 0xb96ef815, 2912 + 0xbefd006f, 0xbefe0070, 2913 + 0xbeff0071, 0x8b6f7bff, 2914 + 0x000003ff, 0xb96f4803, 2915 + 0x8b6f7bff, 0xfffff800, 2916 + 0x856f8b6f, 0xb96fa2c3, 2917 + 0xb973f801, 0xb8ee3b05, 2918 + 0x806e816e, 0xbf0d9972, 2919 + 0xbfa20002, 0x846e896e, 2920 + 0xbfa00001, 0x846e8a6e, 2921 + 0xb8ef1e06, 0x846f8a6f, 2922 + 0x806e6f6e, 0x806eff6e, 2923 + 0x00000200, 0x806e746e, 2924 + 0x826f8075, 0x8b6fff6f, 2925 + 0x0000ffff, 0xf4085c37, 2926 + 0xf8000050, 0xf4085d37, 2927 + 0xf8000060, 0xf4005e77, 2928 + 0xf8000074, 0xbf89fc07, 2929 + 0x8b6dff6d, 0x0000ffff, 2930 + 0x8bfe7e7e, 0x8bea6a6a, 2931 + 0xb8eef802, 0xbf0d866e, 2932 + 0xbfa20002, 0xb97af802, 2933 + 0xbe80486c, 0xb97af802, 2934 + 0xbe804a6c, 0xbfb00000, 2934 2935 0xbf9f0000, 0xbf9f0000, 2935 2936 0xbf9f0000, 0xbf9f0000, 2937 + 0xbf9f0000, 0x00000000, 2936 2938 };
+6
drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler_gfx10.asm
··· 186 186 s_getreg_b32 s_save_trapsts, hwreg(HW_REG_TRAPSTS) 187 187 188 188 #if SW_SA_TRAP 189 + // If ttmp1[30] is set then issue s_barrier to unblock dependent waves. 190 + s_bitcmp1_b32 s_save_pc_hi, 30 191 + s_cbranch_scc0 L_TRAP_NO_BARRIER 192 + s_barrier 193 + 194 + L_TRAP_NO_BARRIER: 189 195 // If ttmp1[31] is set then trap may occur early. 190 196 // Spin wait until SAVECTX exception is raised. 191 197 s_bitcmp1_b32 s_save_pc_hi, 31
+1 -3
drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
··· 973 973 out_unlock_svms: 974 974 mutex_unlock(&p->svms.lock); 975 975 out_unref_process: 976 + pr_debug("CPU fault svms 0x%p address 0x%lx done\n", &p->svms, addr); 976 977 kfd_unref_process(p); 977 978 out_mmput: 978 979 mmput(mm); 979 - 980 - pr_debug("CPU fault svms 0x%p address 0x%lx done\n", &p->svms, addr); 981 - 982 980 return r ? VM_FAULT_SIGBUS : 0; 983 981 } 984 982
+3
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
··· 1549 1549 1550 1550 adev->dm.dc->debug.visual_confirm = amdgpu_dc_visual_confirm; 1551 1551 1552 + /* TODO: Remove after DP2 receiver gets proper support of Cable ID feature */ 1553 + adev->dm.dc->debug.ignore_cable_id = true; 1554 + 1552 1555 r = dm_dmub_hw_init(adev); 1553 1556 if (r) { 1554 1557 DRM_ERROR("DMUB interface failed to initialize: status=%d\n", r);
+7 -4
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c
··· 157 157 struct clk_mgr_internal *clk_mgr = TO_CLK_MGR_INTERNAL(clk_mgr_base); 158 158 unsigned int num_levels; 159 159 struct clk_limit_num_entries *num_entries_per_clk = &clk_mgr_base->bw_params->clk_table.num_entries_per_clk; 160 + unsigned int i; 160 161 161 162 memset(&(clk_mgr_base->clks), 0, sizeof(struct dc_clocks)); 162 163 clk_mgr_base->clks.p_state_change_support = true; ··· 206 205 clk_mgr->dpm_present = true; 207 206 208 207 if (clk_mgr_base->ctx->dc->debug.min_disp_clk_khz) { 209 - unsigned int i; 210 - 211 208 for (i = 0; i < num_levels; i++) 212 209 if (clk_mgr_base->bw_params->clk_table.entries[i].dispclk_mhz 213 210 < khz_to_mhz_ceil(clk_mgr_base->ctx->dc->debug.min_disp_clk_khz)) 214 211 clk_mgr_base->bw_params->clk_table.entries[i].dispclk_mhz 215 212 = khz_to_mhz_ceil(clk_mgr_base->ctx->dc->debug.min_disp_clk_khz); 216 213 } 214 + for (i = 0; i < num_levels; i++) 215 + if (clk_mgr_base->bw_params->clk_table.entries[i].dispclk_mhz > 1950) 216 + clk_mgr_base->bw_params->clk_table.entries[i].dispclk_mhz = 1950; 217 217 218 218 if (clk_mgr_base->ctx->dc->debug.min_dpp_clk_khz) { 219 - unsigned int i; 220 - 221 219 for (i = 0; i < num_levels; i++) 222 220 if (clk_mgr_base->bw_params->clk_table.entries[i].dppclk_mhz 223 221 < khz_to_mhz_ceil(clk_mgr_base->ctx->dc->debug.min_dpp_clk_khz)) ··· 668 668 dcn32_init_single_clock(clk_mgr, PPCLK_UCLK, 669 669 &clk_mgr_base->bw_params->clk_table.entries[0].memclk_mhz, 670 670 &num_entries_per_clk->num_memclk_levels); 671 + 672 + /* memclk must have at least one level */ 673 + num_entries_per_clk->num_memclk_levels = num_entries_per_clk->num_memclk_levels ? num_entries_per_clk->num_memclk_levels : 1; 671 674 672 675 dcn32_init_single_clock(clk_mgr, PPCLK_FCLK, 673 676 &clk_mgr_base->bw_params->clk_table.entries[0].fclk_mhz,
+1
drivers/gpu/drm/amd/display/dc/dc.h
··· 852 852 bool enable_double_buffered_dsc_pg_support; 853 853 bool enable_dp_dig_pixel_rate_div_policy; 854 854 enum lttpr_mode lttpr_mode_override; 855 + unsigned int dsc_delay_factor_wa_x1000; 855 856 }; 856 857 857 858 struct gpu_info_soc_bounding_box_v1_0;
+4
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hubp.c
··· 623 623 hubp->att.size.bits.width = attr->width; 624 624 hubp->att.size.bits.height = attr->height; 625 625 hubp->att.cur_ctl.bits.mode = attr->color_format; 626 + 627 + hubp->cur_rect.w = attr->width; 628 + hubp->cur_rect.h = attr->height; 629 + 626 630 hubp->att.cur_ctl.bits.pitch = hw_pitch; 627 631 hubp->att.cur_ctl.bits.line_per_chunk = lpc; 628 632 hubp->att.cur_ctl.bits.cur_2x_magnify = attr->attribute_flags.bits.ENABLE_MAGNIFICATION;
+1 -1
drivers/gpu/drm/amd/display/dc/dcn314/dcn314_resource.c
··· 847 847 .num_ddc = 5, 848 848 .num_vmid = 16, 849 849 .num_mpc_3dlut = 2, 850 - .num_dsc = 3, 850 + .num_dsc = 4, 851 851 }; 852 852 853 853 static const struct dc_plane_cap plane_cap = {
+1
drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c
··· 1228 1228 pipes[pipe_cnt].pipe.src.dcc = false; 1229 1229 pipes[pipe_cnt].pipe.src.dcc_rate = 1; 1230 1230 pipes[pipe_cnt].pipe.dest.synchronized_vblank_all_planes = synchronized_vblank; 1231 + pipes[pipe_cnt].pipe.dest.synchronize_timings = synchronized_vblank; 1231 1232 pipes[pipe_cnt].pipe.dest.hblank_start = timing->h_total - timing->h_front_porch; 1232 1233 pipes[pipe_cnt].pipe.dest.hblank_end = pipes[pipe_cnt].pipe.dest.hblank_start 1233 1234 - timing->h_addressable
+3 -1
drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c
··· 2359 2359 2360 2360 if (dc->ctx->dc_bios->vram_info.dram_channel_width_bytes) 2361 2361 dcn3_2_soc.dram_channel_width_bytes = dc->ctx->dc_bios->vram_info.dram_channel_width_bytes; 2362 - 2363 2362 } 2363 + 2364 + /* DML DSC delay factor workaround */ 2365 + dcn3_2_ip.dsc_delay_factor_wa = dc->debug.dsc_delay_factor_wa_x1000 / 1000.0; 2364 2366 2365 2367 /* Override dispclk_dppclk_vco_speed_mhz from Clk Mgr */ 2366 2368 dcn3_2_soc.dispclk_dppclk_vco_speed_mhz = dc->clk_mgr->dentist_vco_freq_khz / 1000.0;
+6 -4
drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_32.c
··· 364 364 for (k = 0; k < mode_lib->vba.NumberOfActiveSurfaces; ++k) { 365 365 v->DSCDelay[k] = dml32_DSCDelayRequirement(mode_lib->vba.DSCEnabled[k], 366 366 mode_lib->vba.ODMCombineEnabled[k], mode_lib->vba.DSCInputBitPerComponent[k], 367 - mode_lib->vba.OutputBpp[k], mode_lib->vba.HActive[k], mode_lib->vba.HTotal[k], 367 + mode_lib->vba.OutputBppPerState[mode_lib->vba.VoltageLevel][k], 368 + mode_lib->vba.HActive[k], mode_lib->vba.HTotal[k], 368 369 mode_lib->vba.NumberOfDSCSlices[k], mode_lib->vba.OutputFormat[k], 369 370 mode_lib->vba.Output[k], mode_lib->vba.PixelClock[k], 370 - mode_lib->vba.PixelClockBackEnd[k]); 371 + mode_lib->vba.PixelClockBackEnd[k], mode_lib->vba.ip.dsc_delay_factor_wa); 371 372 } 372 373 373 374 for (k = 0; k < mode_lib->vba.NumberOfActiveSurfaces; ++k) ··· 1628 1627 && !mode_lib->vba.MSOOrODMSplitWithNonDPLink 1629 1628 && !mode_lib->vba.NotEnoughLanesForMSO 1630 1629 && mode_lib->vba.LinkCapacitySupport[i] == true && !mode_lib->vba.P2IWith420 1631 - && !mode_lib->vba.DSCOnlyIfNecessaryWithBPP 1630 + //&& !mode_lib->vba.DSCOnlyIfNecessaryWithBPP 1632 1631 && !mode_lib->vba.DSC422NativeNotSupported 1633 1632 && !mode_lib->vba.MPCCombineMethodIncompatible 1634 1633 && mode_lib->vba.ODMCombine2To1SupportCheckOK[i] == true ··· 2476 2475 mode_lib->vba.OutputBppPerState[i][k], mode_lib->vba.HActive[k], 2477 2476 mode_lib->vba.HTotal[k], mode_lib->vba.NumberOfDSCSlices[k], 2478 2477 mode_lib->vba.OutputFormat[k], mode_lib->vba.Output[k], 2479 - mode_lib->vba.PixelClock[k], mode_lib->vba.PixelClockBackEnd[k]); 2478 + mode_lib->vba.PixelClock[k], mode_lib->vba.PixelClockBackEnd[k], 2479 + mode_lib->vba.ip.dsc_delay_factor_wa); 2480 2480 } 2481 2481 2482 2482 for (k = 0; k <= mode_lib->vba.NumberOfActiveSurfaces - 1; k++) {
+4 -3
drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.c
··· 1726 1726 enum output_format_class OutputFormat, 1727 1727 enum output_encoder_class Output, 1728 1728 double PixelClock, 1729 - double PixelClockBackEnd) 1729 + double PixelClockBackEnd, 1730 + double dsc_delay_factor_wa) 1730 1731 { 1731 1732 unsigned int DSCDelayRequirement_val; 1732 1733 ··· 1747 1746 } 1748 1747 1749 1748 DSCDelayRequirement_val = DSCDelayRequirement_val + (HTotal - HActive) * 1750 - dml_ceil(DSCDelayRequirement_val / HActive, 1); 1749 + dml_ceil((double)DSCDelayRequirement_val / HActive, 1); 1751 1750 1752 1751 DSCDelayRequirement_val = DSCDelayRequirement_val * PixelClock / PixelClockBackEnd; 1753 1752 ··· 1765 1764 dml_print("DML::%s: DSCDelayRequirement_val = %d\n", __func__, DSCDelayRequirement_val); 1766 1765 #endif 1767 1766 1768 - return DSCDelayRequirement_val; 1767 + return dml_ceil(DSCDelayRequirement_val * dsc_delay_factor_wa, 1); 1769 1768 } 1770 1769 1771 1770 void dml32_CalculateSurfaceSizeInMall(
+2 -1
drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.h
··· 327 327 enum output_format_class OutputFormat, 328 328 enum output_encoder_class Output, 329 329 double PixelClock, 330 - double PixelClockBackEnd); 330 + double PixelClockBackEnd, 331 + double dsc_delay_factor_wa); 331 332 332 333 void dml32_CalculateSurfaceSizeInMall( 333 334 unsigned int NumberOfActiveSurfaces,
+2 -2
drivers/gpu/drm/amd/display/dc/dml/dcn32/display_rq_dlg_calc_32.c
··· 291 291 292 292 dml_print("DML_DLG: %s: vready_after_vcount0 = %d\n", __func__, dlg_regs->vready_after_vcount0); 293 293 294 - dst_x_after_scaler = get_dst_x_after_scaler(mode_lib, e2e_pipe_param, num_pipes, pipe_idx); 295 - dst_y_after_scaler = get_dst_y_after_scaler(mode_lib, e2e_pipe_param, num_pipes, pipe_idx); 294 + dst_x_after_scaler = dml_ceil(get_dst_x_after_scaler(mode_lib, e2e_pipe_param, num_pipes, pipe_idx), 1); 295 + dst_y_after_scaler = dml_ceil(get_dst_y_after_scaler(mode_lib, e2e_pipe_param, num_pipes, pipe_idx), 1); 296 296 297 297 // do some adjustment on the dst_after scaler to account for odm combine mode 298 298 dml_print("DML_DLG: %s: input dst_x_after_scaler = %d\n", __func__, dst_x_after_scaler);
+9 -6
drivers/gpu/drm/amd/display/dc/dml/dcn321/dcn321_fpu.c
··· 29 29 #include "dcn321_fpu.h" 30 30 #include "dcn32/dcn32_resource.h" 31 31 #include "dcn321/dcn321_resource.h" 32 + #include "dml/dcn32/display_mode_vba_util_32.h" 32 33 33 34 #define DCN3_2_DEFAULT_DET_SIZE 256 34 35 ··· 120 119 }, 121 120 }, 122 121 .num_states = 1, 123 - .sr_exit_time_us = 12.36, 124 - .sr_enter_plus_exit_time_us = 16.72, 122 + .sr_exit_time_us = 19.95, 123 + .sr_enter_plus_exit_time_us = 24.36, 125 124 .sr_exit_z8_time_us = 285.0, 126 125 .sr_enter_plus_exit_z8_time_us = 320, 127 126 .writeback_latency_us = 12.0, 128 127 .round_trip_ping_latency_dcfclk_cycles = 263, 129 - .urgent_latency_pixel_data_only_us = 4.0, 130 - .urgent_latency_pixel_mixed_with_vm_data_us = 4.0, 131 - .urgent_latency_vm_data_only_us = 4.0, 128 + .urgent_latency_pixel_data_only_us = 9.35, 129 + .urgent_latency_pixel_mixed_with_vm_data_us = 9.35, 130 + .urgent_latency_vm_data_only_us = 9.35, 132 131 .fclk_change_latency_us = 20, 133 132 .usr_retraining_latency_us = 2, 134 133 .smn_latency_us = 2, ··· 539 538 540 539 if (dc->ctx->dc_bios->vram_info.dram_channel_width_bytes) 541 540 dcn3_21_soc.dram_channel_width_bytes = dc->ctx->dc_bios->vram_info.dram_channel_width_bytes; 542 - 543 541 } 542 + 543 + /* DML DSC delay factor workaround */ 544 + dcn3_21_ip.dsc_delay_factor_wa = dc->debug.dsc_delay_factor_wa_x1000 / 1000.0; 544 545 545 546 /* Override dispclk_dppclk_vco_speed_mhz from Clk Mgr */ 546 547 dcn3_21_soc.dispclk_dppclk_vco_speed_mhz = dc->clk_mgr->dentist_vco_freq_khz / 1000.0;
+3
drivers/gpu/drm/amd/display/dc/dml/display_mode_structs.h
··· 364 364 unsigned int max_num_dp2p0_outputs; 365 365 unsigned int max_num_dp2p0_streams; 366 366 unsigned int VBlankNomDefaultUS; 367 + 368 + /* DM workarounds */ 369 + double dsc_delay_factor_wa; // TODO: Remove after implementing root cause fix 367 370 }; 368 371 369 372 struct _vcs_dpi_display_xfc_params_st {
+1 -1
drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.c
··· 625 625 mode_lib->vba.skip_dio_check[mode_lib->vba.NumberOfActivePlanes] = 626 626 dout->is_virtual; 627 627 628 - if (!dout->dsc_enable) 628 + if (dout->dsc_enable) 629 629 mode_lib->vba.ForcedOutputLinkBPP[mode_lib->vba.NumberOfActivePlanes] = dout->output_bpp; 630 630 else 631 631 mode_lib->vba.ForcedOutputLinkBPP[mode_lib->vba.NumberOfActivePlanes] = 0.0;
+47 -19
drivers/gpu/drm/drm_format_helper.c
··· 807 807 return false; 808 808 } 809 809 810 + static const uint32_t conv_from_xrgb8888[] = { 811 + DRM_FORMAT_XRGB8888, 812 + DRM_FORMAT_ARGB8888, 813 + DRM_FORMAT_XRGB2101010, 814 + DRM_FORMAT_ARGB2101010, 815 + DRM_FORMAT_RGB565, 816 + DRM_FORMAT_RGB888, 817 + }; 818 + 819 + static const uint32_t conv_from_rgb565_888[] = { 820 + DRM_FORMAT_XRGB8888, 821 + DRM_FORMAT_ARGB8888, 822 + }; 823 + 824 + static bool is_conversion_supported(uint32_t from, uint32_t to) 825 + { 826 + switch (from) { 827 + case DRM_FORMAT_XRGB8888: 828 + case DRM_FORMAT_ARGB8888: 829 + return is_listed_fourcc(conv_from_xrgb8888, ARRAY_SIZE(conv_from_xrgb8888), to); 830 + case DRM_FORMAT_RGB565: 831 + case DRM_FORMAT_RGB888: 832 + return is_listed_fourcc(conv_from_rgb565_888, ARRAY_SIZE(conv_from_rgb565_888), to); 833 + case DRM_FORMAT_XRGB2101010: 834 + return to == DRM_FORMAT_ARGB2101010; 835 + case DRM_FORMAT_ARGB2101010: 836 + return to == DRM_FORMAT_XRGB2101010; 837 + default: 838 + return false; 839 + } 840 + } 841 + 810 842 /** 811 843 * drm_fb_build_fourcc_list - Filters a list of supported color formats against 812 844 * the device's native formats ··· 859 827 * be handed over to drm_universal_plane_init() et al. Native formats 860 828 * will go before emulated formats. Other heuristics might be applied 861 829 * to optimize the order. Formats near the beginning of the list are 862 - * usually preferred over formats near the end of the list. 830 + * usually preferred over formats near the end of the list. Formats 831 + * without conversion helpers will be skipped. New drivers should only 832 + * pass in XRGB8888 and avoid exposing additional emulated formats. 863 833 * 864 834 * Returns: 865 835 * The number of color-formats 4CC codes returned in @fourccs_out. ··· 873 839 { 874 840 u32 *fourccs = fourccs_out; 875 841 const u32 *fourccs_end = fourccs_out + nfourccs_out; 876 - bool found_native = false; 842 + uint32_t native_format = 0; 877 843 size_t i; 878 844 879 845 /* ··· 892 858 893 859 drm_dbg_kms(dev, "adding native format %p4cc\n", &fourcc); 894 860 895 - if (!found_native) 896 - found_native = is_listed_fourcc(driver_fourccs, driver_nfourccs, fourcc); 861 + /* 862 + * There should only be one native format with the current API. 863 + * This API needs to be refactored to correctly support arbitrary 864 + * sets of native formats, since it needs to report which native 865 + * format to use for each emulated format. 866 + */ 867 + if (!native_format) 868 + native_format = fourcc; 897 869 *fourccs = fourcc; 898 870 ++fourccs; 899 - } 900 - 901 - /* 902 - * The plane's atomic_update helper converts the framebuffer's color format 903 - * to a native format when copying to device memory. 904 - * 905 - * If there is not a single format supported by both, device and 906 - * driver, the native formats are likely not supported by the conversion 907 - * helpers. Therefore *only* support the native formats and add a 908 - * conversion helper ASAP. 909 - */ 910 - if (!found_native) { 911 - drm_warn(dev, "Format conversion helpers required to add extra formats.\n"); 912 - goto out; 913 871 } 914 872 915 873 /* ··· 916 890 } else if (fourccs == fourccs_end) { 917 891 drm_warn(dev, "Ignoring emulated format %p4cc\n", &fourcc); 918 892 continue; /* end of available output buffer */ 893 + } else if (!is_conversion_supported(fourcc, native_format)) { 894 + drm_dbg_kms(dev, "Unsupported emulated format %p4cc\n", &fourcc); 895 + continue; /* format is not supported for conversion */ 919 896 } 920 897 921 898 drm_dbg_kms(dev, "adding emulated format %p4cc\n", &fourcc); ··· 927 898 ++fourccs; 928 899 } 929 900 930 - out: 931 901 return fourccs - fourccs_out; 932 902 } 933 903 EXPORT_SYMBOL(drm_fb_build_fourcc_list);
+1
drivers/gpu/drm/i915/Makefile
··· 282 282 display/intel_ddi.o \ 283 283 display/intel_ddi_buf_trans.o \ 284 284 display/intel_display_trace.o \ 285 + display/intel_dkl_phy.o \ 285 286 display/intel_dp.o \ 286 287 display/intel_dp_aux.o \ 287 288 display/intel_dp_aux_backlight.o \
+28 -40
drivers/gpu/drm/i915/display/intel_ddi.c
··· 43 43 #include "intel_de.h" 44 44 #include "intel_display_power.h" 45 45 #include "intel_display_types.h" 46 + #include "intel_dkl_phy.h" 46 47 #include "intel_dp.h" 47 48 #include "intel_dp_link_training.h" 48 49 #include "intel_dp_mst.h" ··· 1263 1262 for (ln = 0; ln < 2; ln++) { 1264 1263 int level; 1265 1264 1266 - intel_de_write(dev_priv, HIP_INDEX_REG(tc_port), 1267 - HIP_INDEX_VAL(tc_port, ln)); 1268 - 1269 - intel_de_write(dev_priv, DKL_TX_PMD_LANE_SUS(tc_port), 0); 1265 + intel_dkl_phy_write(dev_priv, DKL_TX_PMD_LANE_SUS(tc_port), ln, 0); 1270 1266 1271 1267 level = intel_ddi_level(encoder, crtc_state, 2*ln+0); 1272 1268 1273 - intel_de_rmw(dev_priv, DKL_TX_DPCNTL0(tc_port), 1274 - DKL_TX_PRESHOOT_COEFF_MASK | 1275 - DKL_TX_DE_EMPAHSIS_COEFF_MASK | 1276 - DKL_TX_VSWING_CONTROL_MASK, 1277 - DKL_TX_PRESHOOT_COEFF(trans->entries[level].dkl.preshoot) | 1278 - DKL_TX_DE_EMPHASIS_COEFF(trans->entries[level].dkl.de_emphasis) | 1279 - DKL_TX_VSWING_CONTROL(trans->entries[level].dkl.vswing)); 1269 + intel_dkl_phy_rmw(dev_priv, DKL_TX_DPCNTL0(tc_port), ln, 1270 + DKL_TX_PRESHOOT_COEFF_MASK | 1271 + DKL_TX_DE_EMPAHSIS_COEFF_MASK | 1272 + DKL_TX_VSWING_CONTROL_MASK, 1273 + DKL_TX_PRESHOOT_COEFF(trans->entries[level].dkl.preshoot) | 1274 + DKL_TX_DE_EMPHASIS_COEFF(trans->entries[level].dkl.de_emphasis) | 1275 + DKL_TX_VSWING_CONTROL(trans->entries[level].dkl.vswing)); 1280 1276 1281 1277 level = intel_ddi_level(encoder, crtc_state, 2*ln+1); 1282 1278 1283 - intel_de_rmw(dev_priv, DKL_TX_DPCNTL1(tc_port), 1284 - DKL_TX_PRESHOOT_COEFF_MASK | 1285 - DKL_TX_DE_EMPAHSIS_COEFF_MASK | 1286 - DKL_TX_VSWING_CONTROL_MASK, 1287 - DKL_TX_PRESHOOT_COEFF(trans->entries[level].dkl.preshoot) | 1288 - DKL_TX_DE_EMPHASIS_COEFF(trans->entries[level].dkl.de_emphasis) | 1289 - DKL_TX_VSWING_CONTROL(trans->entries[level].dkl.vswing)); 1279 + intel_dkl_phy_rmw(dev_priv, DKL_TX_DPCNTL1(tc_port), ln, 1280 + DKL_TX_PRESHOOT_COEFF_MASK | 1281 + DKL_TX_DE_EMPAHSIS_COEFF_MASK | 1282 + DKL_TX_VSWING_CONTROL_MASK, 1283 + DKL_TX_PRESHOOT_COEFF(trans->entries[level].dkl.preshoot) | 1284 + DKL_TX_DE_EMPHASIS_COEFF(trans->entries[level].dkl.de_emphasis) | 1285 + DKL_TX_VSWING_CONTROL(trans->entries[level].dkl.vswing)); 1290 1286 1291 - intel_de_rmw(dev_priv, DKL_TX_DPCNTL2(tc_port), 1292 - DKL_TX_DP20BITMODE, 0); 1287 + intel_dkl_phy_rmw(dev_priv, DKL_TX_DPCNTL2(tc_port), ln, 1288 + DKL_TX_DP20BITMODE, 0); 1293 1289 1294 1290 if (IS_ALDERLAKE_P(dev_priv)) { 1295 1291 u32 val; ··· 1304 1306 val |= DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX2(0); 1305 1307 } 1306 1308 1307 - intel_de_rmw(dev_priv, DKL_TX_DPCNTL2(tc_port), 1308 - DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX1_MASK | 1309 - DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX2_MASK, 1310 - val); 1309 + intel_dkl_phy_rmw(dev_priv, DKL_TX_DPCNTL2(tc_port), ln, 1310 + DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX1_MASK | 1311 + DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX2_MASK, 1312 + val); 1311 1313 } 1312 1314 } 1313 1315 } ··· 2017 2019 return; 2018 2020 2019 2021 if (DISPLAY_VER(dev_priv) >= 12) { 2020 - intel_de_write(dev_priv, HIP_INDEX_REG(tc_port), 2021 - HIP_INDEX_VAL(tc_port, 0x0)); 2022 - ln0 = intel_de_read(dev_priv, DKL_DP_MODE(tc_port)); 2023 - intel_de_write(dev_priv, HIP_INDEX_REG(tc_port), 2024 - HIP_INDEX_VAL(tc_port, 0x1)); 2025 - ln1 = intel_de_read(dev_priv, DKL_DP_MODE(tc_port)); 2022 + ln0 = intel_dkl_phy_read(dev_priv, DKL_DP_MODE(tc_port), 0); 2023 + ln1 = intel_dkl_phy_read(dev_priv, DKL_DP_MODE(tc_port), 1); 2026 2024 } else { 2027 2025 ln0 = intel_de_read(dev_priv, MG_DP_MODE(0, tc_port)); 2028 2026 ln1 = intel_de_read(dev_priv, MG_DP_MODE(1, tc_port)); ··· 2079 2085 } 2080 2086 2081 2087 if (DISPLAY_VER(dev_priv) >= 12) { 2082 - intel_de_write(dev_priv, HIP_INDEX_REG(tc_port), 2083 - HIP_INDEX_VAL(tc_port, 0x0)); 2084 - intel_de_write(dev_priv, DKL_DP_MODE(tc_port), ln0); 2085 - intel_de_write(dev_priv, HIP_INDEX_REG(tc_port), 2086 - HIP_INDEX_VAL(tc_port, 0x1)); 2087 - intel_de_write(dev_priv, DKL_DP_MODE(tc_port), ln1); 2088 + intel_dkl_phy_write(dev_priv, DKL_DP_MODE(tc_port), 0, ln0); 2089 + intel_dkl_phy_write(dev_priv, DKL_DP_MODE(tc_port), 1, ln1); 2088 2090 } else { 2089 2091 intel_de_write(dev_priv, MG_DP_MODE(0, tc_port), ln0); 2090 2092 intel_de_write(dev_priv, MG_DP_MODE(1, tc_port), ln1); ··· 3084 3094 enum tc_port tc_port = intel_port_to_tc(i915, encoder->port); 3085 3095 int ln; 3086 3096 3087 - for (ln = 0; ln < 2; ln++) { 3088 - intel_de_write(i915, HIP_INDEX_REG(tc_port), HIP_INDEX_VAL(tc_port, ln)); 3089 - intel_de_rmw(i915, DKL_PCS_DW5(tc_port), DKL_PCS_DW5_CORE_SOFTRESET, 0); 3090 - } 3097 + for (ln = 0; ln < 2; ln++) 3098 + intel_dkl_phy_rmw(i915, DKL_PCS_DW5(tc_port), ln, DKL_PCS_DW5_CORE_SOFTRESET, 0); 3091 3099 } 3092 3100 3093 3101 static void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp,
+8
drivers/gpu/drm/i915/display/intel_display_core.h
··· 316 316 } dbuf; 317 317 318 318 struct { 319 + /* 320 + * dkl.phy_lock protects against concurrent access of the 321 + * Dekel TypeC PHYs. 322 + */ 323 + spinlock_t phy_lock; 324 + } dkl; 325 + 326 + struct { 319 327 /* VLV/CHV/BXT/GLK DSI MMIO register base address */ 320 328 u32 mmio_base; 321 329 } dsi;
+3 -4
drivers/gpu/drm/i915/display/intel_display_power_well.c
··· 12 12 #include "intel_de.h" 13 13 #include "intel_display_power_well.h" 14 14 #include "intel_display_types.h" 15 + #include "intel_dkl_phy.h" 15 16 #include "intel_dmc.h" 16 17 #include "intel_dpio_phy.h" 17 18 #include "intel_dpll.h" ··· 530 529 enum tc_port tc_port; 531 530 532 531 tc_port = TGL_AUX_PW_TO_TC_PORT(i915_power_well_instance(power_well)->hsw.idx); 533 - intel_de_write(dev_priv, HIP_INDEX_REG(tc_port), 534 - HIP_INDEX_VAL(tc_port, 0x2)); 535 532 536 - if (intel_de_wait_for_set(dev_priv, DKL_CMN_UC_DW_27(tc_port), 537 - DKL_CMN_UC_DW27_UC_HEALTH, 1)) 533 + if (wait_for(intel_dkl_phy_read(dev_priv, DKL_CMN_UC_DW_27(tc_port), 2) & 534 + DKL_CMN_UC_DW27_UC_HEALTH, 1)) 538 535 drm_warn(&dev_priv->drm, 539 536 "Timeout waiting TC uC health\n"); 540 537 }
+109
drivers/gpu/drm/i915/display/intel_dkl_phy.c
··· 1 + // SPDX-License-Identifier: MIT 2 + /* 3 + * Copyright © 2022 Intel Corporation 4 + */ 5 + 6 + #include "i915_drv.h" 7 + #include "i915_reg.h" 8 + 9 + #include "intel_de.h" 10 + #include "intel_display.h" 11 + #include "intel_dkl_phy.h" 12 + 13 + static void 14 + dkl_phy_set_hip_idx(struct drm_i915_private *i915, i915_reg_t reg, int idx) 15 + { 16 + enum tc_port tc_port = DKL_REG_TC_PORT(reg); 17 + 18 + drm_WARN_ON(&i915->drm, tc_port < TC_PORT_1 || tc_port >= I915_MAX_TC_PORTS); 19 + 20 + intel_de_write(i915, 21 + HIP_INDEX_REG(tc_port), 22 + HIP_INDEX_VAL(tc_port, idx)); 23 + } 24 + 25 + /** 26 + * intel_dkl_phy_read - read a Dekel PHY register 27 + * @i915: i915 device instance 28 + * @reg: Dekel PHY register 29 + * @ln: lane instance of @reg 30 + * 31 + * Read the @reg Dekel PHY register. 32 + * 33 + * Returns the read value. 34 + */ 35 + u32 36 + intel_dkl_phy_read(struct drm_i915_private *i915, i915_reg_t reg, int ln) 37 + { 38 + u32 val; 39 + 40 + spin_lock(&i915->display.dkl.phy_lock); 41 + 42 + dkl_phy_set_hip_idx(i915, reg, ln); 43 + val = intel_de_read(i915, reg); 44 + 45 + spin_unlock(&i915->display.dkl.phy_lock); 46 + 47 + return val; 48 + } 49 + 50 + /** 51 + * intel_dkl_phy_write - write a Dekel PHY register 52 + * @i915: i915 device instance 53 + * @reg: Dekel PHY register 54 + * @ln: lane instance of @reg 55 + * @val: value to write 56 + * 57 + * Write @val to the @reg Dekel PHY register. 58 + */ 59 + void 60 + intel_dkl_phy_write(struct drm_i915_private *i915, i915_reg_t reg, int ln, u32 val) 61 + { 62 + spin_lock(&i915->display.dkl.phy_lock); 63 + 64 + dkl_phy_set_hip_idx(i915, reg, ln); 65 + intel_de_write(i915, reg, val); 66 + 67 + spin_unlock(&i915->display.dkl.phy_lock); 68 + } 69 + 70 + /** 71 + * intel_dkl_phy_rmw - read-modify-write a Dekel PHY register 72 + * @i915: i915 device instance 73 + * @reg: Dekel PHY register 74 + * @ln: lane instance of @reg 75 + * @clear: mask to clear 76 + * @set: mask to set 77 + * 78 + * Read the @reg Dekel PHY register, clearing then setting the @clear/@set bits in it, and writing 79 + * this value back to the register if the value differs from the read one. 80 + */ 81 + void 82 + intel_dkl_phy_rmw(struct drm_i915_private *i915, i915_reg_t reg, int ln, u32 clear, u32 set) 83 + { 84 + spin_lock(&i915->display.dkl.phy_lock); 85 + 86 + dkl_phy_set_hip_idx(i915, reg, ln); 87 + intel_de_rmw(i915, reg, clear, set); 88 + 89 + spin_unlock(&i915->display.dkl.phy_lock); 90 + } 91 + 92 + /** 93 + * intel_dkl_phy_posting_read - do a posting read from a Dekel PHY register 94 + * @i915: i915 device instance 95 + * @reg: Dekel PHY register 96 + * @ln: lane instance of @reg 97 + * 98 + * Read the @reg Dekel PHY register without returning the read value. 99 + */ 100 + void 101 + intel_dkl_phy_posting_read(struct drm_i915_private *i915, i915_reg_t reg, int ln) 102 + { 103 + spin_lock(&i915->display.dkl.phy_lock); 104 + 105 + dkl_phy_set_hip_idx(i915, reg, ln); 106 + intel_de_posting_read(i915, reg); 107 + 108 + spin_unlock(&i915->display.dkl.phy_lock); 109 + }
+24
drivers/gpu/drm/i915/display/intel_dkl_phy.h
··· 1 + /* SPDX-License-Identifier: MIT */ 2 + /* 3 + * Copyright © 2022 Intel Corporation 4 + */ 5 + 6 + #ifndef __INTEL_DKL_PHY_H__ 7 + #define __INTEL_DKL_PHY_H__ 8 + 9 + #include <linux/types.h> 10 + 11 + #include "i915_reg_defs.h" 12 + 13 + struct drm_i915_private; 14 + 15 + u32 16 + intel_dkl_phy_read(struct drm_i915_private *i915, i915_reg_t reg, int ln); 17 + void 18 + intel_dkl_phy_write(struct drm_i915_private *i915, i915_reg_t reg, int ln, u32 val); 19 + void 20 + intel_dkl_phy_rmw(struct drm_i915_private *i915, i915_reg_t reg, int ln, u32 clear, u32 set); 21 + void 22 + intel_dkl_phy_posting_read(struct drm_i915_private *i915, i915_reg_t reg, int ln); 23 + 24 + #endif /* __INTEL_DKL_PHY_H__ */
+1 -1
drivers/gpu/drm/i915/display/intel_dp.c
··· 5276 5276 encoder->devdata, IS_ERR(edid) ? NULL : edid); 5277 5277 5278 5278 intel_panel_add_edid_fixed_modes(intel_connector, 5279 - intel_connector->panel.vbt.drrs_type != DRRS_TYPE_NONE, 5279 + intel_connector->panel.vbt.drrs_type != DRRS_TYPE_NONE || 5280 5280 intel_vrr_is_capable(intel_connector)); 5281 5281 5282 5282 /* MSO requires information from the EDID */
+27 -32
drivers/gpu/drm/i915/display/intel_dpll_mgr.c
··· 25 25 26 26 #include "intel_de.h" 27 27 #include "intel_display_types.h" 28 + #include "intel_dkl_phy.h" 28 29 #include "intel_dpio_phy.h" 29 30 #include "intel_dpll.h" 30 31 #include "intel_dpll_mgr.h" ··· 3509 3508 * All registers read here have the same HIP_INDEX_REG even though 3510 3509 * they are on different building blocks 3511 3510 */ 3512 - intel_de_write(dev_priv, HIP_INDEX_REG(tc_port), 3513 - HIP_INDEX_VAL(tc_port, 0x2)); 3514 - 3515 - hw_state->mg_refclkin_ctl = intel_de_read(dev_priv, 3516 - DKL_REFCLKIN_CTL(tc_port)); 3511 + hw_state->mg_refclkin_ctl = intel_dkl_phy_read(dev_priv, 3512 + DKL_REFCLKIN_CTL(tc_port), 2); 3517 3513 hw_state->mg_refclkin_ctl &= MG_REFCLKIN_CTL_OD_2_MUX_MASK; 3518 3514 3519 3515 hw_state->mg_clktop2_hsclkctl = 3520 - intel_de_read(dev_priv, DKL_CLKTOP2_HSCLKCTL(tc_port)); 3516 + intel_dkl_phy_read(dev_priv, DKL_CLKTOP2_HSCLKCTL(tc_port), 2); 3521 3517 hw_state->mg_clktop2_hsclkctl &= 3522 3518 MG_CLKTOP2_HSCLKCTL_TLINEDRV_CLKSEL_MASK | 3523 3519 MG_CLKTOP2_HSCLKCTL_CORE_INPUTSEL_MASK | ··· 3522 3524 MG_CLKTOP2_HSCLKCTL_DSDIV_RATIO_MASK; 3523 3525 3524 3526 hw_state->mg_clktop2_coreclkctl1 = 3525 - intel_de_read(dev_priv, DKL_CLKTOP2_CORECLKCTL1(tc_port)); 3527 + intel_dkl_phy_read(dev_priv, DKL_CLKTOP2_CORECLKCTL1(tc_port), 2); 3526 3528 hw_state->mg_clktop2_coreclkctl1 &= 3527 3529 MG_CLKTOP2_CORECLKCTL1_A_DIVRATIO_MASK; 3528 3530 3529 - hw_state->mg_pll_div0 = intel_de_read(dev_priv, DKL_PLL_DIV0(tc_port)); 3531 + hw_state->mg_pll_div0 = intel_dkl_phy_read(dev_priv, DKL_PLL_DIV0(tc_port), 2); 3530 3532 val = DKL_PLL_DIV0_MASK; 3531 3533 if (dev_priv->display.vbt.override_afc_startup) 3532 3534 val |= DKL_PLL_DIV0_AFC_STARTUP_MASK; 3533 3535 hw_state->mg_pll_div0 &= val; 3534 3536 3535 - hw_state->mg_pll_div1 = intel_de_read(dev_priv, DKL_PLL_DIV1(tc_port)); 3537 + hw_state->mg_pll_div1 = intel_dkl_phy_read(dev_priv, DKL_PLL_DIV1(tc_port), 2); 3536 3538 hw_state->mg_pll_div1 &= (DKL_PLL_DIV1_IREF_TRIM_MASK | 3537 3539 DKL_PLL_DIV1_TDC_TARGET_CNT_MASK); 3538 3540 3539 - hw_state->mg_pll_ssc = intel_de_read(dev_priv, DKL_PLL_SSC(tc_port)); 3541 + hw_state->mg_pll_ssc = intel_dkl_phy_read(dev_priv, DKL_PLL_SSC(tc_port), 2); 3540 3542 hw_state->mg_pll_ssc &= (DKL_PLL_SSC_IREF_NDIV_RATIO_MASK | 3541 3543 DKL_PLL_SSC_STEP_LEN_MASK | 3542 3544 DKL_PLL_SSC_STEP_NUM_MASK | 3543 3545 DKL_PLL_SSC_EN); 3544 3546 3545 - hw_state->mg_pll_bias = intel_de_read(dev_priv, DKL_PLL_BIAS(tc_port)); 3547 + hw_state->mg_pll_bias = intel_dkl_phy_read(dev_priv, DKL_PLL_BIAS(tc_port), 2); 3546 3548 hw_state->mg_pll_bias &= (DKL_PLL_BIAS_FRAC_EN_H | 3547 3549 DKL_PLL_BIAS_FBDIV_FRAC_MASK); 3548 3550 3549 3551 hw_state->mg_pll_tdc_coldst_bias = 3550 - intel_de_read(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port)); 3552 + intel_dkl_phy_read(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port), 2); 3551 3553 hw_state->mg_pll_tdc_coldst_bias &= (DKL_PLL_TDC_SSC_STEP_SIZE_MASK | 3552 3554 DKL_PLL_TDC_FEED_FWD_GAIN_MASK); 3553 3555 ··· 3735 3737 * All registers programmed here have the same HIP_INDEX_REG even 3736 3738 * though on different building block 3737 3739 */ 3738 - intel_de_write(dev_priv, HIP_INDEX_REG(tc_port), 3739 - HIP_INDEX_VAL(tc_port, 0x2)); 3740 - 3741 3740 /* All the registers are RMW */ 3742 - val = intel_de_read(dev_priv, DKL_REFCLKIN_CTL(tc_port)); 3741 + val = intel_dkl_phy_read(dev_priv, DKL_REFCLKIN_CTL(tc_port), 2); 3743 3742 val &= ~MG_REFCLKIN_CTL_OD_2_MUX_MASK; 3744 3743 val |= hw_state->mg_refclkin_ctl; 3745 - intel_de_write(dev_priv, DKL_REFCLKIN_CTL(tc_port), val); 3744 + intel_dkl_phy_write(dev_priv, DKL_REFCLKIN_CTL(tc_port), 2, val); 3746 3745 3747 - val = intel_de_read(dev_priv, DKL_CLKTOP2_CORECLKCTL1(tc_port)); 3746 + val = intel_dkl_phy_read(dev_priv, DKL_CLKTOP2_CORECLKCTL1(tc_port), 2); 3748 3747 val &= ~MG_CLKTOP2_CORECLKCTL1_A_DIVRATIO_MASK; 3749 3748 val |= hw_state->mg_clktop2_coreclkctl1; 3750 - intel_de_write(dev_priv, DKL_CLKTOP2_CORECLKCTL1(tc_port), val); 3749 + intel_dkl_phy_write(dev_priv, DKL_CLKTOP2_CORECLKCTL1(tc_port), 2, val); 3751 3750 3752 - val = intel_de_read(dev_priv, DKL_CLKTOP2_HSCLKCTL(tc_port)); 3751 + val = intel_dkl_phy_read(dev_priv, DKL_CLKTOP2_HSCLKCTL(tc_port), 2); 3753 3752 val &= ~(MG_CLKTOP2_HSCLKCTL_TLINEDRV_CLKSEL_MASK | 3754 3753 MG_CLKTOP2_HSCLKCTL_CORE_INPUTSEL_MASK | 3755 3754 MG_CLKTOP2_HSCLKCTL_HSDIV_RATIO_MASK | 3756 3755 MG_CLKTOP2_HSCLKCTL_DSDIV_RATIO_MASK); 3757 3756 val |= hw_state->mg_clktop2_hsclkctl; 3758 - intel_de_write(dev_priv, DKL_CLKTOP2_HSCLKCTL(tc_port), val); 3757 + intel_dkl_phy_write(dev_priv, DKL_CLKTOP2_HSCLKCTL(tc_port), 2, val); 3759 3758 3760 3759 val = DKL_PLL_DIV0_MASK; 3761 3760 if (dev_priv->display.vbt.override_afc_startup) 3762 3761 val |= DKL_PLL_DIV0_AFC_STARTUP_MASK; 3763 - intel_de_rmw(dev_priv, DKL_PLL_DIV0(tc_port), val, 3764 - hw_state->mg_pll_div0); 3762 + intel_dkl_phy_rmw(dev_priv, DKL_PLL_DIV0(tc_port), 2, val, 3763 + hw_state->mg_pll_div0); 3765 3764 3766 - val = intel_de_read(dev_priv, DKL_PLL_DIV1(tc_port)); 3765 + val = intel_dkl_phy_read(dev_priv, DKL_PLL_DIV1(tc_port), 2); 3767 3766 val &= ~(DKL_PLL_DIV1_IREF_TRIM_MASK | 3768 3767 DKL_PLL_DIV1_TDC_TARGET_CNT_MASK); 3769 3768 val |= hw_state->mg_pll_div1; 3770 - intel_de_write(dev_priv, DKL_PLL_DIV1(tc_port), val); 3769 + intel_dkl_phy_write(dev_priv, DKL_PLL_DIV1(tc_port), 2, val); 3771 3770 3772 - val = intel_de_read(dev_priv, DKL_PLL_SSC(tc_port)); 3771 + val = intel_dkl_phy_read(dev_priv, DKL_PLL_SSC(tc_port), 2); 3773 3772 val &= ~(DKL_PLL_SSC_IREF_NDIV_RATIO_MASK | 3774 3773 DKL_PLL_SSC_STEP_LEN_MASK | 3775 3774 DKL_PLL_SSC_STEP_NUM_MASK | 3776 3775 DKL_PLL_SSC_EN); 3777 3776 val |= hw_state->mg_pll_ssc; 3778 - intel_de_write(dev_priv, DKL_PLL_SSC(tc_port), val); 3777 + intel_dkl_phy_write(dev_priv, DKL_PLL_SSC(tc_port), 2, val); 3779 3778 3780 - val = intel_de_read(dev_priv, DKL_PLL_BIAS(tc_port)); 3779 + val = intel_dkl_phy_read(dev_priv, DKL_PLL_BIAS(tc_port), 2); 3781 3780 val &= ~(DKL_PLL_BIAS_FRAC_EN_H | 3782 3781 DKL_PLL_BIAS_FBDIV_FRAC_MASK); 3783 3782 val |= hw_state->mg_pll_bias; 3784 - intel_de_write(dev_priv, DKL_PLL_BIAS(tc_port), val); 3783 + intel_dkl_phy_write(dev_priv, DKL_PLL_BIAS(tc_port), 2, val); 3785 3784 3786 - val = intel_de_read(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port)); 3785 + val = intel_dkl_phy_read(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port), 2); 3787 3786 val &= ~(DKL_PLL_TDC_SSC_STEP_SIZE_MASK | 3788 3787 DKL_PLL_TDC_FEED_FWD_GAIN_MASK); 3789 3788 val |= hw_state->mg_pll_tdc_coldst_bias; 3790 - intel_de_write(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port), val); 3789 + intel_dkl_phy_write(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port), 2, val); 3791 3790 3792 - intel_de_posting_read(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port)); 3791 + intel_dkl_phy_posting_read(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port), 2); 3793 3792 } 3794 3793 3795 3794 static void icl_pll_power_enable(struct drm_i915_private *dev_priv,
+1 -2
drivers/gpu/drm/i915/display/intel_lvds.c
··· 972 972 973 973 /* Try EDID first */ 974 974 intel_panel_add_edid_fixed_modes(intel_connector, 975 - intel_connector->panel.vbt.drrs_type != DRRS_TYPE_NONE, 976 - false); 975 + intel_connector->panel.vbt.drrs_type != DRRS_TYPE_NONE); 977 976 978 977 /* Failed to get EDID, what about VBT? */ 979 978 if (!intel_panel_preferred_fixed_mode(intel_connector))
+2 -2
drivers/gpu/drm/i915/display/intel_panel.c
··· 254 254 } 255 255 256 256 void intel_panel_add_edid_fixed_modes(struct intel_connector *connector, 257 - bool has_drrs, bool has_vrr) 257 + bool use_alt_fixed_modes) 258 258 { 259 259 intel_panel_add_edid_preferred_mode(connector); 260 - if (intel_panel_preferred_fixed_mode(connector) && (has_drrs || has_vrr)) 260 + if (intel_panel_preferred_fixed_mode(connector) && use_alt_fixed_modes) 261 261 intel_panel_add_edid_alt_fixed_modes(connector); 262 262 intel_panel_destroy_probed_modes(connector); 263 263 }
+1 -1
drivers/gpu/drm/i915/display/intel_panel.h
··· 44 44 int intel_panel_compute_config(struct intel_connector *connector, 45 45 struct drm_display_mode *adjusted_mode); 46 46 void intel_panel_add_edid_fixed_modes(struct intel_connector *connector, 47 - bool has_drrs, bool has_vrr); 47 + bool use_alt_fixed_modes); 48 48 void intel_panel_add_vbt_lfp_fixed_mode(struct intel_connector *connector); 49 49 void intel_panel_add_vbt_sdvo_fixed_mode(struct intel_connector *connector); 50 50 void intel_panel_add_encoder_fixed_mode(struct intel_connector *connector,
+39 -25
drivers/gpu/drm/i915/display/intel_sdvo.c
··· 2747 2747 if (!intel_sdvo_connector) 2748 2748 return false; 2749 2749 2750 - if (device == 0) { 2751 - intel_sdvo->controlled_output |= SDVO_OUTPUT_TMDS0; 2750 + if (device == 0) 2752 2751 intel_sdvo_connector->output_flag = SDVO_OUTPUT_TMDS0; 2753 - } else if (device == 1) { 2754 - intel_sdvo->controlled_output |= SDVO_OUTPUT_TMDS1; 2752 + else if (device == 1) 2755 2753 intel_sdvo_connector->output_flag = SDVO_OUTPUT_TMDS1; 2756 - } 2757 2754 2758 2755 intel_connector = &intel_sdvo_connector->base; 2759 2756 connector = &intel_connector->base; ··· 2805 2808 encoder->encoder_type = DRM_MODE_ENCODER_TVDAC; 2806 2809 connector->connector_type = DRM_MODE_CONNECTOR_SVIDEO; 2807 2810 2808 - intel_sdvo->controlled_output |= type; 2809 2811 intel_sdvo_connector->output_flag = type; 2810 2812 2811 2813 if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) { ··· 2845 2849 encoder->encoder_type = DRM_MODE_ENCODER_DAC; 2846 2850 connector->connector_type = DRM_MODE_CONNECTOR_VGA; 2847 2851 2848 - if (device == 0) { 2849 - intel_sdvo->controlled_output |= SDVO_OUTPUT_RGB0; 2852 + if (device == 0) 2850 2853 intel_sdvo_connector->output_flag = SDVO_OUTPUT_RGB0; 2851 - } else if (device == 1) { 2852 - intel_sdvo->controlled_output |= SDVO_OUTPUT_RGB1; 2854 + else if (device == 1) 2853 2855 intel_sdvo_connector->output_flag = SDVO_OUTPUT_RGB1; 2854 - } 2855 2856 2856 2857 if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) { 2857 2858 kfree(intel_sdvo_connector); ··· 2878 2885 encoder->encoder_type = DRM_MODE_ENCODER_LVDS; 2879 2886 connector->connector_type = DRM_MODE_CONNECTOR_LVDS; 2880 2887 2881 - if (device == 0) { 2882 - intel_sdvo->controlled_output |= SDVO_OUTPUT_LVDS0; 2888 + if (device == 0) 2883 2889 intel_sdvo_connector->output_flag = SDVO_OUTPUT_LVDS0; 2884 - } else if (device == 1) { 2885 - intel_sdvo->controlled_output |= SDVO_OUTPUT_LVDS1; 2890 + else if (device == 1) 2886 2891 intel_sdvo_connector->output_flag = SDVO_OUTPUT_LVDS1; 2887 - } 2888 2892 2889 2893 if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) { 2890 2894 kfree(intel_sdvo_connector); ··· 2900 2910 intel_panel_add_vbt_sdvo_fixed_mode(intel_connector); 2901 2911 2902 2912 if (!intel_panel_preferred_fixed_mode(intel_connector)) { 2913 + mutex_lock(&i915->drm.mode_config.mutex); 2914 + 2903 2915 intel_ddc_get_modes(connector, &intel_sdvo->ddc); 2904 - intel_panel_add_edid_fixed_modes(intel_connector, false, false); 2916 + intel_panel_add_edid_fixed_modes(intel_connector, false); 2917 + 2918 + mutex_unlock(&i915->drm.mode_config.mutex); 2905 2919 } 2906 2920 2907 2921 intel_panel_init(intel_connector); ··· 2920 2926 return false; 2921 2927 } 2922 2928 2929 + static u16 intel_sdvo_filter_output_flags(u16 flags) 2930 + { 2931 + flags &= SDVO_OUTPUT_MASK; 2932 + 2933 + /* SDVO requires XXX1 function may not exist unless it has XXX0 function.*/ 2934 + if (!(flags & SDVO_OUTPUT_TMDS0)) 2935 + flags &= ~SDVO_OUTPUT_TMDS1; 2936 + 2937 + if (!(flags & SDVO_OUTPUT_RGB0)) 2938 + flags &= ~SDVO_OUTPUT_RGB1; 2939 + 2940 + if (!(flags & SDVO_OUTPUT_LVDS0)) 2941 + flags &= ~SDVO_OUTPUT_LVDS1; 2942 + 2943 + return flags; 2944 + } 2945 + 2923 2946 static bool 2924 2947 intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, u16 flags) 2925 2948 { 2926 - /* SDVO requires XXX1 function may not exist unless it has XXX0 function.*/ 2949 + struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev); 2950 + 2951 + flags = intel_sdvo_filter_output_flags(flags); 2952 + 2953 + intel_sdvo->controlled_output = flags; 2954 + 2955 + intel_sdvo_select_ddc_bus(i915, intel_sdvo); 2927 2956 2928 2957 if (flags & SDVO_OUTPUT_TMDS0) 2929 2958 if (!intel_sdvo_dvi_init(intel_sdvo, 0)) 2930 2959 return false; 2931 2960 2932 - if ((flags & SDVO_TMDS_MASK) == SDVO_TMDS_MASK) 2961 + if (flags & SDVO_OUTPUT_TMDS1) 2933 2962 if (!intel_sdvo_dvi_init(intel_sdvo, 1)) 2934 2963 return false; 2935 2964 ··· 2973 2956 if (!intel_sdvo_analog_init(intel_sdvo, 0)) 2974 2957 return false; 2975 2958 2976 - if ((flags & SDVO_RGB_MASK) == SDVO_RGB_MASK) 2959 + if (flags & SDVO_OUTPUT_RGB1) 2977 2960 if (!intel_sdvo_analog_init(intel_sdvo, 1)) 2978 2961 return false; 2979 2962 ··· 2981 2964 if (!intel_sdvo_lvds_init(intel_sdvo, 0)) 2982 2965 return false; 2983 2966 2984 - if ((flags & SDVO_LVDS_MASK) == SDVO_LVDS_MASK) 2967 + if (flags & SDVO_OUTPUT_LVDS1) 2985 2968 if (!intel_sdvo_lvds_init(intel_sdvo, 1)) 2986 2969 return false; 2987 2970 2988 - if ((flags & SDVO_OUTPUT_MASK) == 0) { 2971 + if (flags == 0) { 2989 2972 unsigned char bytes[2]; 2990 2973 2991 - intel_sdvo->controlled_output = 0; 2992 2974 memcpy(bytes, &intel_sdvo->caps.output_flags, 2); 2993 2975 DRM_DEBUG_KMS("%s: Unknown SDVO output type (0x%02x%02x)\n", 2994 2976 SDVO_NAME(intel_sdvo), ··· 3398 3382 * cloning for SDVO encoders. 3399 3383 */ 3400 3384 intel_sdvo->base.cloneable = 0; 3401 - 3402 - intel_sdvo_select_ddc_bus(dev_priv, intel_sdvo); 3403 3385 3404 3386 /* Set the input timing to the screen. Assume always input 0. */ 3405 3387 if (!intel_sdvo_set_target_input(intel_sdvo))
+4 -15
drivers/gpu/drm/i915/gem/i915_gem_internal.c
··· 6 6 7 7 #include <linux/scatterlist.h> 8 8 #include <linux/slab.h> 9 - #include <linux/swiotlb.h> 10 9 11 10 #include "i915_drv.h" 12 11 #include "i915_gem.h" ··· 37 38 struct scatterlist *sg; 38 39 unsigned int sg_page_sizes; 39 40 unsigned int npages; 40 - int max_order; 41 + int max_order = MAX_ORDER; 42 + unsigned int max_segment; 41 43 gfp_t gfp; 42 44 43 - max_order = MAX_ORDER; 44 - #ifdef CONFIG_SWIOTLB 45 - if (is_swiotlb_active(obj->base.dev->dev)) { 46 - unsigned int max_segment; 47 - 48 - max_segment = swiotlb_max_segment(); 49 - if (max_segment) { 50 - max_segment = max_t(unsigned int, max_segment, 51 - PAGE_SIZE) >> PAGE_SHIFT; 52 - max_order = min(max_order, ilog2(max_segment)); 53 - } 54 - } 55 - #endif 45 + max_segment = i915_sg_segment_size(i915->drm.dev) >> PAGE_SHIFT; 46 + max_order = min(max_order, get_order(max_segment)); 56 47 57 48 gfp = GFP_KERNEL | __GFP_HIGHMEM | __GFP_RECLAIMABLE; 58 49 if (IS_I965GM(i915) || IS_I965G(i915)) {
+1 -1
drivers/gpu/drm/i915/gem/i915_gem_shmem.c
··· 194 194 struct intel_memory_region *mem = obj->mm.region; 195 195 struct address_space *mapping = obj->base.filp->f_mapping; 196 196 const unsigned long page_count = obj->base.size / PAGE_SIZE; 197 - unsigned int max_segment = i915_sg_segment_size(); 197 + unsigned int max_segment = i915_sg_segment_size(i915->drm.dev); 198 198 struct sg_table *st; 199 199 struct sgt_iter sgt_iter; 200 200 struct page *page;
+2 -2
drivers/gpu/drm/i915/gem/i915_gem_ttm.c
··· 189 189 struct drm_i915_private *i915 = container_of(bdev, typeof(*i915), bdev); 190 190 struct intel_memory_region *mr = i915->mm.regions[INTEL_MEMORY_SYSTEM]; 191 191 struct i915_ttm_tt *i915_tt = container_of(ttm, typeof(*i915_tt), ttm); 192 - const unsigned int max_segment = i915_sg_segment_size(); 192 + const unsigned int max_segment = i915_sg_segment_size(i915->drm.dev); 193 193 const size_t size = (size_t)ttm->num_pages << PAGE_SHIFT; 194 194 struct file *filp = i915_tt->filp; 195 195 struct sgt_iter sgt_iter; ··· 538 538 ret = sg_alloc_table_from_pages_segment(st, 539 539 ttm->pages, ttm->num_pages, 540 540 0, (unsigned long)ttm->num_pages << PAGE_SHIFT, 541 - i915_sg_segment_size(), GFP_KERNEL); 541 + i915_sg_segment_size(i915_tt->dev), GFP_KERNEL); 542 542 if (ret) { 543 543 st->sgl = NULL; 544 544 return ERR_PTR(ret);
+1 -1
drivers/gpu/drm/i915/gem/i915_gem_userptr.c
··· 129 129 static int i915_gem_userptr_get_pages(struct drm_i915_gem_object *obj) 130 130 { 131 131 const unsigned long num_pages = obj->base.size >> PAGE_SHIFT; 132 - unsigned int max_segment = i915_sg_segment_size(); 132 + unsigned int max_segment = i915_sg_segment_size(obj->base.dev->dev); 133 133 struct sg_table *st; 134 134 unsigned int sg_page_sizes; 135 135 struct page **pvec;
+1
drivers/gpu/drm/i915/i915_driver.c
··· 353 353 mutex_init(&dev_priv->display.wm.wm_mutex); 354 354 mutex_init(&dev_priv->display.pps.mutex); 355 355 mutex_init(&dev_priv->display.hdcp.comp_mutex); 356 + spin_lock_init(&dev_priv->display.dkl.phy_lock); 356 357 357 358 i915_memcpy_init_early(dev_priv); 358 359 intel_runtime_pm_init_early(&dev_priv->runtime_pm);
+3
drivers/gpu/drm/i915/i915_reg.h
··· 7420 7420 #define _DKL_PHY5_BASE 0x16C000 7421 7421 #define _DKL_PHY6_BASE 0x16D000 7422 7422 7423 + #define DKL_REG_TC_PORT(__reg) \ 7424 + (TC_PORT_1 + ((__reg).reg - _DKL_PHY1_BASE) / (_DKL_PHY2_BASE - _DKL_PHY1_BASE)) 7425 + 7423 7426 /* DEKEL PHY MMIO Address = Phy base + (internal address & ~index_mask) */ 7424 7427 #define _DKL_PCS_DW5 0x14 7425 7428 #define DKL_PCS_DW5(tc_port) _MMIO(_PORT(tc_port, _DKL_PHY1_BASE, \
+20 -12
drivers/gpu/drm/i915/i915_scatterlist.h
··· 9 9 10 10 #include <linux/pfn.h> 11 11 #include <linux/scatterlist.h> 12 - #include <linux/swiotlb.h> 12 + #include <linux/dma-mapping.h> 13 + #include <xen/xen.h> 13 14 14 15 #include "i915_gem.h" 15 16 ··· 128 127 return page_sizes; 129 128 } 130 129 131 - static inline unsigned int i915_sg_segment_size(void) 130 + static inline unsigned int i915_sg_segment_size(struct device *dev) 132 131 { 133 - unsigned int size = swiotlb_max_segment(); 132 + size_t max = min_t(size_t, UINT_MAX, dma_max_mapping_size(dev)); 134 133 135 - if (size == 0) 136 - size = UINT_MAX; 137 - 138 - size = rounddown(size, PAGE_SIZE); 139 - /* swiotlb_max_segment_size can return 1 byte when it means one page. */ 140 - if (size < PAGE_SIZE) 141 - size = PAGE_SIZE; 142 - 143 - return size; 134 + /* 135 + * For Xen PV guests pages aren't contiguous in DMA (machine) address 136 + * space. The DMA API takes care of that both in dma_alloc_* (by 137 + * calling into the hypervisor to make the pages contiguous) and in 138 + * dma_map_* (by bounce buffering). But i915 abuses ignores the 139 + * coherency aspects of the DMA API and thus can't cope with bounce 140 + * buffering actually happening, so add a hack here to force small 141 + * allocations and mappings when running in PV mode on Xen. 142 + * 143 + * Note this will still break if bounce buffering is required for other 144 + * reasons, like confidential computing hypervisors or PCIe root ports 145 + * with addressing limitations. 146 + */ 147 + if (xen_pv_domain()) 148 + max = PAGE_SIZE; 149 + return round_down(max, PAGE_SIZE); 144 150 } 145 151 146 152 bool i915_sg_trim(struct sg_table *orig_st);
-1
drivers/gpu/drm/imx/Kconfig
··· 4 4 select DRM_KMS_HELPER 5 5 select VIDEOMODE_HELPERS 6 6 select DRM_GEM_DMA_HELPER 7 - select DRM_KMS_HELPER 8 7 depends on DRM && (ARCH_MXC || ARCH_MULTIPLATFORM || COMPILE_TEST) 9 8 depends on IMX_IPUV3_CORE 10 9 help
+3 -2
drivers/gpu/drm/imx/imx-tve.c
··· 218 218 return ret; 219 219 } 220 220 221 - static int imx_tve_connector_mode_valid(struct drm_connector *connector, 222 - struct drm_display_mode *mode) 221 + static enum drm_mode_status 222 + imx_tve_connector_mode_valid(struct drm_connector *connector, 223 + struct drm_display_mode *mode) 223 224 { 224 225 struct imx_tve *tve = con_to_tve(connector); 225 226 unsigned long rate;
+19 -7
drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c
··· 752 752 static void dw_mipi_dsi_rockchip_set_lcdsel(struct dw_mipi_dsi_rockchip *dsi, 753 753 int mux) 754 754 { 755 - if (dsi->cdata->lcdsel_grf_reg < 0) 755 + if (dsi->cdata->lcdsel_grf_reg) 756 756 regmap_write(dsi->grf_regmap, dsi->cdata->lcdsel_grf_reg, 757 757 mux ? dsi->cdata->lcdsel_lit : dsi->cdata->lcdsel_big); 758 758 } ··· 1051 1051 if (ret) { 1052 1052 DRM_DEV_ERROR(dsi->dev, "Failed to register component: %d\n", 1053 1053 ret); 1054 - return ret; 1054 + goto out; 1055 1055 } 1056 1056 1057 1057 second = dw_mipi_dsi_rockchip_find_second(dsi); 1058 - if (IS_ERR(second)) 1059 - return PTR_ERR(second); 1058 + if (IS_ERR(second)) { 1059 + ret = PTR_ERR(second); 1060 + goto out; 1061 + } 1060 1062 if (second) { 1061 1063 ret = component_add(second, &dw_mipi_dsi_rockchip_ops); 1062 1064 if (ret) { 1063 1065 DRM_DEV_ERROR(second, 1064 1066 "Failed to register component: %d\n", 1065 1067 ret); 1066 - return ret; 1068 + goto out; 1067 1069 } 1068 1070 } 1069 1071 1070 1072 return 0; 1073 + 1074 + out: 1075 + mutex_lock(&dsi->usage_mutex); 1076 + dsi->usage_mode = DW_DSI_USAGE_IDLE; 1077 + mutex_unlock(&dsi->usage_mutex); 1078 + return ret; 1071 1079 } 1072 1080 1073 1081 static int dw_mipi_dsi_rockchip_host_detach(void *priv_data, ··· 1643 1635 static const struct rockchip_dw_dsi_chip_data rk3568_chip_data[] = { 1644 1636 { 1645 1637 .reg = 0xfe060000, 1646 - .lcdsel_grf_reg = -1, 1647 1638 .lanecfg1_grf_reg = RK3568_GRF_VO_CON2, 1648 1639 .lanecfg1 = HIWORD_UPDATE(0, RK3568_DSI0_SKEWCALHS | 1649 1640 RK3568_DSI0_FORCETXSTOPMODE | ··· 1652 1645 }, 1653 1646 { 1654 1647 .reg = 0xfe070000, 1655 - .lcdsel_grf_reg = -1, 1656 1648 .lanecfg1_grf_reg = RK3568_GRF_VO_CON3, 1657 1649 .lanecfg1 = HIWORD_UPDATE(0, RK3568_DSI1_SKEWCALHS | 1658 1650 RK3568_DSI1_FORCETXSTOPMODE | ··· 1687 1681 .of_match_table = dw_mipi_dsi_rockchip_dt_ids, 1688 1682 .pm = &dw_mipi_dsi_rockchip_pm_ops, 1689 1683 .name = "dw-mipi-dsi-rockchip", 1684 + /* 1685 + * For dual-DSI display, one DSI pokes at the other DSI's 1686 + * drvdata in dw_mipi_dsi_rockchip_find_second(). This is not 1687 + * safe for asynchronous probe. 1688 + */ 1689 + .probe_type = PROBE_FORCE_SYNCHRONOUS, 1690 1690 }, 1691 1691 };
+2 -1
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
··· 565 565 566 566 ret = rockchip_hdmi_parse_dt(hdmi); 567 567 if (ret) { 568 - DRM_DEV_ERROR(hdmi->dev, "Unable to parse OF data\n"); 568 + if (ret != -EPROBE_DEFER) 569 + DRM_DEV_ERROR(hdmi->dev, "Unable to parse OF data\n"); 569 570 return ret; 570 571 } 571 572
+4 -1
drivers/gpu/drm/rockchip/rockchip_drm_gem.c
··· 364 364 { 365 365 struct rockchip_gem_object *rk_obj; 366 366 struct drm_gem_object *obj; 367 + bool is_framebuffer; 367 368 int ret; 368 369 369 - rk_obj = rockchip_gem_create_object(drm, size, false); 370 + is_framebuffer = drm->fb_helper && file_priv == drm->fb_helper->client.file; 371 + 372 + rk_obj = rockchip_gem_create_object(drm, size, is_framebuffer); 370 373 if (IS_ERR(rk_obj)) 371 374 return ERR_CAST(rk_obj); 372 375
+8 -2
drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
··· 877 877 { 878 878 struct vop2_video_port *vp = to_vop2_video_port(crtc); 879 879 struct vop2 *vop2 = vp->vop2; 880 + struct drm_crtc_state *old_crtc_state; 880 881 int ret; 881 882 882 883 vop2_lock(vop2); 884 + 885 + old_crtc_state = drm_atomic_get_old_crtc_state(state, crtc); 886 + drm_atomic_helper_disable_planes_on_crtc(old_crtc_state, false); 883 887 884 888 drm_crtc_vblank_off(crtc); 885 889 ··· 1000 996 static void vop2_plane_atomic_disable(struct drm_plane *plane, 1001 997 struct drm_atomic_state *state) 1002 998 { 1003 - struct drm_plane_state *old_pstate = drm_atomic_get_old_plane_state(state, plane); 999 + struct drm_plane_state *old_pstate = NULL; 1004 1000 struct vop2_win *win = to_vop2_win(plane); 1005 1001 struct vop2 *vop2 = win->vop2; 1006 1002 1007 1003 drm_dbg(vop2->drm, "%s disable\n", win->data->name); 1008 1004 1009 - if (!old_pstate->crtc) 1005 + if (state) 1006 + old_pstate = drm_atomic_get_old_plane_state(state, plane); 1007 + if (old_pstate && !old_pstate->crtc) 1010 1008 return; 1011 1009 1012 1010 vop2_win_disable(win);