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

Merge tag 'amd-drm-next-6.20-2026-01-23' of https://gitlab.freedesktop.org/agd5f/linux into drm-next

amd-drm-next-6.20-2026-01-23:

amdgpu:
- GC 12 fix
- UserQ fixes
- Misc error path fixes
- IP discovery fixes
- Misc cleanups
- HDMI fixes
- Documentation update
- Panel replay fixes
- Panel type handling fixes
- DCN 3.1.x fixes
- DC analog display fix
- SMU 6 fixes
- VCN 4.0.3 queue reset fix
- VCN 5.0.1 queue reset fix
- GPUVM TLB flush fix
- RAS fixes
- DC idle optimization fix

amdkfd:
- MQD fix for GC 9.4.3 and 9.5
- GC 11 cooperative launch fix
- GC 12.1 trap handler fixes
- Misc cleanups

radeon:
- Use drm_* logging helpers for VCE

Signed-off-by: Dave Airlie <airlied@redhat.com>

From: Alex Deucher <alexander.deucher@amd.com>
Link: https://patch.msgid.link/20260123173537.17221-1-alexander.deucher@amd.com

+1440 -1194
+3
Documentation/gpu/amdgpu/apu-asic-info-table.csv
··· 16 16 Ryzen AI 330 series, Krackan Point, 3.6.0, 11.5.3, 4.0.5, 6.1.3, 14.0.5, 14.0.5 17 17 Ryzen AI 350 series, Krackan Point, 3.5.0, 11.5.2, 4.0.5, 6.1.2, 14.0.4, 14.0.4 18 18 Ryzen AI Max 300 series, Strix Halo, 3.5.1, 11.5.1, 4.0.6, 6.1.1, 14.0.1, 14.0.1 19 + Ryzen AI 9 475 / 470 / 465, Gorgon Point, 3.5.0, 11.5.0, 4.0.5, 6.1.0, 14.0.0, 14.0.0 20 + Ryzen AI 7 450, Gorgon Point, 3.5.0, 11.5.2, 4.0.5, 6.1.2, 14.0.4, 14.0.4 21 + Ryzen AI 5 440 / 435, Gorgon Point, 3.6.0, 11.5.3, 4.0.5, 6.1.3, 14.0.5, 14.0.5
+2 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
··· 334 334 bp.size = size; 335 335 bp.byte_align = PAGE_SIZE; 336 336 bp.domain = domain; 337 - bp.flags = AMDGPU_GEM_CREATE_CPU_GTT_USWC; 337 + bp.flags = AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS | 338 + AMDGPU_GEM_CREATE_CPU_GTT_USWC; 338 339 bp.type = ttm_bo_type_kernel; 339 340 bp.resv = NULL; 340 341 bp.bo_ptr_size = sizeof(struct amdgpu_bo);
+21 -10
drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
··· 380 380 return checksum; 381 381 } 382 382 383 - static inline bool amdgpu_discovery_verify_checksum(uint8_t *data, uint32_t size, 383 + static inline bool amdgpu_discovery_verify_checksum(struct amdgpu_device *adev, 384 + uint8_t *data, uint32_t size, 384 385 uint16_t expected) 385 386 { 386 - return !!(amdgpu_discovery_calculate_checksum(data, size) == expected); 387 + uint16_t calculated; 388 + 389 + calculated = amdgpu_discovery_calculate_checksum(data, size); 390 + 391 + if (calculated != expected) { 392 + dev_err(adev->dev, "Discovery checksum failed: calc 0x%04x != exp 0x%04x, size %u.\n", 393 + calculated, expected, size); 394 + return false; 395 + } 396 + 397 + return true; 387 398 } 388 399 389 400 static inline bool amdgpu_discovery_verify_binary_signature(uint8_t *binary) ··· 450 439 return -EINVAL; 451 440 } 452 441 453 - if (!amdgpu_discovery_verify_checksum(discovery_bin + offset, 442 + if (!amdgpu_discovery_verify_checksum(adev, discovery_bin + offset, 454 443 le32_to_cpu(nhdr->size_bytes), 455 444 checksum)) { 456 445 dev_dbg(adev->dev, "invalid nps info data table checksum\n"); ··· 540 529 size = le16_to_cpu(bhdr->binary_size) - offset; 541 530 checksum = le16_to_cpu(bhdr->binary_checksum); 542 531 543 - if (!amdgpu_discovery_verify_checksum(discovery_bin + offset, size, 532 + if (!amdgpu_discovery_verify_checksum(adev, discovery_bin + offset, size, 544 533 checksum)) { 545 534 dev_err(adev->dev, "invalid ip discovery binary checksum\n"); 546 535 r = -EINVAL; ··· 560 549 goto out; 561 550 } 562 551 563 - if (!amdgpu_discovery_verify_checksum(discovery_bin + offset, 552 + if (!amdgpu_discovery_verify_checksum(adev, discovery_bin + offset, 564 553 le16_to_cpu(ihdr->size), 565 554 checksum)) { 566 555 dev_err(adev->dev, "invalid ip discovery data table checksum\n"); ··· 583 572 goto out; 584 573 } 585 574 586 - if (!amdgpu_discovery_verify_checksum(discovery_bin + offset, 575 + if (!amdgpu_discovery_verify_checksum(adev, discovery_bin + offset, 587 576 le32_to_cpu(ghdr->size), 588 577 checksum)) { 589 578 dev_err(adev->dev, "invalid gc data table checksum\n"); ··· 606 595 goto out; 607 596 } 608 597 609 - if (!amdgpu_discovery_verify_checksum( 598 + if (!amdgpu_discovery_verify_checksum(adev, 610 599 discovery_bin + offset, 611 600 sizeof(struct harvest_table), checksum)) { 612 601 dev_err(adev->dev, "invalid harvest data table checksum\n"); ··· 629 618 goto out; 630 619 } 631 620 632 - if (!amdgpu_discovery_verify_checksum( 621 + if (!amdgpu_discovery_verify_checksum(adev, 633 622 discovery_bin + offset, 634 623 le32_to_cpu(vhdr->size_bytes), checksum)) { 635 624 dev_err(adev->dev, "invalid vcn data table checksum\n"); ··· 652 641 goto out; 653 642 } 654 643 655 - if (!amdgpu_discovery_verify_checksum( 644 + if (!amdgpu_discovery_verify_checksum(adev, 656 645 discovery_bin + offset, 657 646 le32_to_cpu(mhdr->size_bytes), checksum)) { 658 647 dev_err(adev->dev, "invalid mall data table checksum\n"); ··· 1878 1867 sizeof(*nps_data), false); 1879 1868 1880 1869 nhdr = (struct nps_info_header *)(nps_data); 1881 - if (!amdgpu_discovery_verify_checksum((uint8_t *)nps_data, 1870 + if (!amdgpu_discovery_verify_checksum(adev, (uint8_t *)nps_data, 1882 1871 le32_to_cpu(nhdr->size_bytes), 1883 1872 checksum)) { 1884 1873 dev_err(adev->dev, "nps data refresh, checksum mismatch\n");
+4 -4
drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
··· 708 708 */ 709 709 710 710 /** 711 - * amdgpu_fence_driver_guilty_force_completion - force signal of specified sequence 711 + * amdgpu_fence_driver_update_timedout_fence_state - Update fence state and set errors 712 712 * 713 - * @af: fence of the ring to signal 713 + * @af: fence of the ring to update 714 714 * 715 715 */ 716 - void amdgpu_fence_driver_guilty_force_completion(struct amdgpu_fence *af) 716 + void amdgpu_fence_driver_update_timedout_fence_state(struct amdgpu_fence *af) 717 717 { 718 718 struct dma_fence *unprocessed; 719 719 struct dma_fence __rcu **ptr; ··· 763 763 } 764 764 765 765 static void amdgpu_ring_backup_unprocessed_command(struct amdgpu_ring *ring, 766 - u64 start_wptr, u32 end_wptr) 766 + u64 start_wptr, u64 end_wptr) 767 767 { 768 768 unsigned int first_idx = start_wptr & ring->buf_mask; 769 769 unsigned int last_idx = end_wptr & ring->buf_mask;
+2 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
··· 1298 1298 failed_unlock: 1299 1299 spin_unlock_irqrestore(&kiq->ring_lock, flags); 1300 1300 failed_kiq_hdp_flush: 1301 - dev_err(adev->dev, "failed to flush HDP via KIQ\n"); 1301 + if (!amdgpu_in_reset(adev)) 1302 + dev_err(adev->dev, "failed to flush HDP via KIQ\n"); 1302 1303 return r < 0 ? r : -EIO; 1303 1304 } 1304 1305
+4 -2
drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
··· 781 781 782 782 if (!adev->gmc.flush_pasid_uses_kiq || !ring->sched.ready) { 783 783 784 - if (!adev->gmc.gmc_funcs->flush_gpu_tlb_pasid) 785 - return 0; 784 + if (!adev->gmc.gmc_funcs->flush_gpu_tlb_pasid) { 785 + r = 0; 786 + goto error_unlock_reset; 787 + } 786 788 787 789 if (adev->gmc.flush_tlb_needs_extra_type_2) 788 790 adev->gmc.gmc_funcs->flush_gpu_tlb_pasid(adev, pasid,
+1 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
··· 302 302 if (job && job->vmid) 303 303 amdgpu_vmid_reset(adev, ring->vm_hub, job->vmid); 304 304 amdgpu_ring_undo(ring); 305 - return r; 305 + goto free_fence; 306 306 } 307 307 *f = &af->base; 308 308 /* get a ref for the job */
+5 -2
drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
··· 218 218 if (!entity) 219 219 return 0; 220 220 221 - return drm_sched_job_init(&(*job)->base, entity, 1, owner, 222 - drm_client_id); 221 + r = drm_sched_job_init(&(*job)->base, entity, 1, owner, drm_client_id); 222 + if (!r) 223 + return 0; 224 + 225 + kfree((*job)->hw_vm_fence); 223 226 224 227 err_fence: 225 228 kfree((*job)->hw_fence);
+4
drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
··· 59 59 #define AMDGPU_KERNEL_JOB_ID_FLUSH_GPU_TLB (18446744073709551604ULL) 60 60 #define AMDGPU_KERNEL_JOB_ID_KFD_GART_MAP (18446744073709551603ULL) 61 61 #define AMDGPU_KERNEL_JOB_ID_VCN_RING_TEST (18446744073709551602ULL) 62 + #define AMDGPU_KERNEL_JOB_ID_GFX_RING_TEST (18446744073709551601ULL) 63 + #define AMDGPU_KERNEL_JOB_ID_SDMA_RING_TEST (18446744073709551600ULL) 64 + #define AMDGPU_KERNEL_JOB_ID_VPE_RING_TEST (18446744073709551599ULL) 65 + #define AMDGPU_KERNEL_JOB_ID_RUN_SHADER (18446744073709551598ULL) 62 66 63 67 struct amdgpu_job { 64 68 struct drm_sched_job base;
+6
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
··· 2784 2784 if (!data->bps[i].ts) 2785 2785 continue; 2786 2786 2787 + /* U64_MAX is used to mark the record as invalid */ 2788 + if (data->bps[i].retired_page == U64_MAX) 2789 + continue; 2790 + 2787 2791 bps[r].bp = data->bps[i].retired_page; 2788 2792 r++; 2789 2793 if (r >= count) ··· 3094 3090 3095 3091 if (amdgpu_ras_check_bad_page_unlock(con, 3096 3092 bps[j].retired_page << AMDGPU_GPU_PAGE_SHIFT)) { 3093 + /* set to U64_MAX to mark it as invalid */ 3094 + data->bps[data->count].retired_page = U64_MAX; 3097 3095 data->count++; 3098 3096 data->space_left--; 3099 3097 continue;
+2 -2
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
··· 885 885 if (r) 886 886 return r; 887 887 888 - /* signal the guilty fence and set an error on all fences from the context */ 888 + /* set an error on all fences from the context */ 889 889 if (guilty_fence) 890 - amdgpu_fence_driver_guilty_force_completion(guilty_fence); 890 + amdgpu_fence_driver_update_timedout_fence_state(guilty_fence); 891 891 /* Re-emit the non-guilty commands */ 892 892 if (ring->ring_backup_entries_to_copy) { 893 893 amdgpu_ring_alloc_reemit(ring, ring->ring_backup_entries_to_copy);
+1 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
··· 161 161 162 162 void amdgpu_fence_driver_set_error(struct amdgpu_ring *ring, int error); 163 163 void amdgpu_fence_driver_force_completion(struct amdgpu_ring *ring); 164 - void amdgpu_fence_driver_guilty_force_completion(struct amdgpu_fence *af); 164 + void amdgpu_fence_driver_update_timedout_fence_state(struct amdgpu_fence *af); 165 165 void amdgpu_fence_save_wptr(struct amdgpu_fence *af); 166 166 167 167 int amdgpu_fence_driver_init_ring(struct amdgpu_ring *ring);
+69 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
··· 148 148 return r; 149 149 } 150 150 151 + static void amdgpu_userq_hang_detect_work(struct work_struct *work) 152 + { 153 + struct amdgpu_usermode_queue *queue = container_of(work, 154 + struct amdgpu_usermode_queue, 155 + hang_detect_work.work); 156 + struct dma_fence *fence; 157 + struct amdgpu_userq_mgr *uq_mgr; 158 + 159 + if (!queue || !queue->userq_mgr) 160 + return; 161 + 162 + uq_mgr = queue->userq_mgr; 163 + fence = READ_ONCE(queue->hang_detect_fence); 164 + /* Fence already signaled – no action needed */ 165 + if (!fence || dma_fence_is_signaled(fence)) 166 + return; 167 + 168 + mutex_lock(&uq_mgr->userq_mutex); 169 + amdgpu_userq_detect_and_reset_queues(uq_mgr); 170 + mutex_unlock(&uq_mgr->userq_mutex); 171 + } 172 + 173 + /* 174 + * Start hang detection for a user queue fence. A delayed work will be scheduled 175 + * to check if the fence is still pending after the timeout period. 176 + */ 177 + void amdgpu_userq_start_hang_detect_work(struct amdgpu_usermode_queue *queue) 178 + { 179 + struct amdgpu_device *adev; 180 + unsigned long timeout_ms; 181 + 182 + if (!queue || !queue->userq_mgr || !queue->userq_mgr->adev) 183 + return; 184 + 185 + adev = queue->userq_mgr->adev; 186 + /* Determine timeout based on queue type */ 187 + switch (queue->queue_type) { 188 + case AMDGPU_RING_TYPE_GFX: 189 + timeout_ms = adev->gfx_timeout; 190 + break; 191 + case AMDGPU_RING_TYPE_COMPUTE: 192 + timeout_ms = adev->compute_timeout; 193 + break; 194 + case AMDGPU_RING_TYPE_SDMA: 195 + timeout_ms = adev->sdma_timeout; 196 + break; 197 + default: 198 + timeout_ms = adev->gfx_timeout; 199 + break; 200 + } 201 + 202 + /* Store the fence to monitor and schedule hang detection */ 203 + WRITE_ONCE(queue->hang_detect_fence, queue->last_fence); 204 + schedule_delayed_work(&queue->hang_detect_work, 205 + msecs_to_jiffies(timeout_ms)); 206 + } 207 + 208 + static void amdgpu_userq_init_hang_detect_work(struct amdgpu_usermode_queue *queue) 209 + { 210 + INIT_DELAYED_WORK(&queue->hang_detect_work, amdgpu_userq_hang_detect_work); 211 + queue->hang_detect_fence = NULL; 212 + } 213 + 151 214 static int amdgpu_userq_buffer_va_list_add(struct amdgpu_usermode_queue *queue, 152 215 struct amdgpu_bo_va_mapping *va_map, u64 addr) 153 216 { ··· 635 572 636 573 cancel_delayed_work_sync(&uq_mgr->resume_work); 637 574 mutex_lock(&uq_mgr->userq_mutex); 638 - 639 575 queue = amdgpu_userq_find(uq_mgr, queue_id); 640 576 if (!queue) { 641 577 drm_dbg_driver(adev_to_drm(uq_mgr->adev), "Invalid queue id to destroy\n"); ··· 642 580 return -EINVAL; 643 581 } 644 582 amdgpu_userq_wait_for_last_fence(queue); 583 + /* Cancel any pending hang detection work and cleanup */ 584 + if (queue->hang_detect_fence) { 585 + cancel_delayed_work_sync(&queue->hang_detect_work); 586 + queue->hang_detect_fence = NULL; 587 + } 645 588 r = amdgpu_bo_reserve(queue->db_obj.obj, true); 646 589 if (!r) { 647 590 amdgpu_bo_unpin(queue->db_obj.obj); ··· 886 819 queue->debugfs_queue = debugfs_create_dir(queue_name, filp->debugfs_client); 887 820 debugfs_create_file("mqd_info", 0444, queue->debugfs_queue, queue, &amdgpu_mqd_info_fops); 888 821 #endif 822 + amdgpu_userq_init_hang_detect_work(queue); 889 823 kfree(queue_name); 890 824 891 825 args->out.queue_id = qid;
+3
drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h
··· 72 72 u32 xcp_id; 73 73 int priority; 74 74 struct dentry *debugfs_queue; 75 + struct delayed_work hang_detect_work; 76 + struct dma_fence *hang_detect_fence; 75 77 76 78 struct list_head userq_va_list; 77 79 }; ··· 149 147 void amdgpu_userq_reset_work(struct work_struct *work); 150 148 void amdgpu_userq_pre_reset(struct amdgpu_device *adev); 151 149 int amdgpu_userq_post_reset(struct amdgpu_device *adev, bool vram_lost); 150 + void amdgpu_userq_start_hang_detect_work(struct amdgpu_usermode_queue *queue); 152 151 153 152 int amdgpu_userq_input_va_validate(struct amdgpu_device *adev, 154 153 struct amdgpu_usermode_queue *queue,
+1
drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c
··· 574 574 575 575 dma_fence_put(queue->last_fence); 576 576 queue->last_fence = dma_fence_get(fence); 577 + amdgpu_userq_start_hang_detect_work(queue); 577 578 mutex_unlock(&userq_mgr->userq_mutex); 578 579 579 580 drm_exec_init(&exec, DRM_EXEC_INTERRUPTIBLE_WAIT,
-12
drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
··· 278 278 u32 sh_num, u32 instance, int xcc_id); 279 279 static u32 gfx_v12_0_get_wgp_active_bitmap_per_sh(struct amdgpu_device *adev); 280 280 281 - static void gfx_v12_0_ring_emit_frame_cntl(struct amdgpu_ring *ring, bool start, bool secure); 282 281 static void gfx_v12_0_ring_emit_wreg(struct amdgpu_ring *ring, uint32_t reg, 283 282 uint32_t val); 284 283 static int gfx_v12_0_wait_for_rlc_autoload_complete(struct amdgpu_device *adev); ··· 4628 4629 return r; 4629 4630 } 4630 4631 4631 - static void gfx_v12_0_ring_emit_frame_cntl(struct amdgpu_ring *ring, 4632 - bool start, 4633 - bool secure) 4634 - { 4635 - uint32_t v = secure ? FRAME_TMZ : 0; 4636 - 4637 - amdgpu_ring_write(ring, PACKET3(PACKET3_FRAME_CONTROL, 0)); 4638 - amdgpu_ring_write(ring, v | FRAME_CMD(start ? 0 : 1)); 4639 - } 4640 - 4641 4632 static void gfx_v12_0_ring_emit_rreg(struct amdgpu_ring *ring, uint32_t reg, 4642 4633 uint32_t reg_val_offs) 4643 4634 { ··· 5504 5515 .emit_cntxcntl = gfx_v12_0_ring_emit_cntxcntl, 5505 5516 .init_cond_exec = gfx_v12_0_ring_emit_init_cond_exec, 5506 5517 .preempt_ib = gfx_v12_0_ring_preempt_ib, 5507 - .emit_frame_cntl = gfx_v12_0_ring_emit_frame_cntl, 5508 5518 .emit_wreg = gfx_v12_0_ring_emit_wreg, 5509 5519 .emit_reg_wait = gfx_v12_0_ring_emit_reg_wait, 5510 5520 .emit_reg_write_reg_wait = gfx_v12_0_ring_emit_reg_write_reg_wait,
+8 -3
drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c
··· 1145 1145 unsigned int vmid, 1146 1146 struct amdgpu_fence *timedout_fence) 1147 1147 { 1148 - if (amdgpu_sriov_vf(ring->adev)) 1149 - return -EOPNOTSUPP; 1148 + struct amdgpu_device *adev = ring->adev; 1149 + struct amdgpu_vcn_inst *vinst = &adev->vcn.inst[ring->me]; 1150 + int r; 1150 1151 1152 + /* take the vcn reset mutex here because resetting VCN will reset jpeg as well */ 1153 + mutex_lock(&vinst->engine_reset_mutex); 1151 1154 amdgpu_ring_reset_helper_begin(ring, timedout_fence); 1152 1155 jpeg_v4_0_3_core_stall_reset(ring); 1153 1156 jpeg_v4_0_3_start_jrbc(ring); 1154 - return amdgpu_ring_reset_helper_end(ring, timedout_fence); 1157 + r = amdgpu_ring_reset_helper_end(ring, timedout_fence); 1158 + mutex_unlock(&vinst->engine_reset_mutex); 1159 + return r; 1155 1160 } 1156 1161 1157 1162 static const struct amd_ip_funcs jpeg_v4_0_3_ip_funcs = {
+10 -1
drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_1.c
··· 844 844 unsigned int vmid, 845 845 struct amdgpu_fence *timedout_fence) 846 846 { 847 + struct amdgpu_device *adev = ring->adev; 848 + struct amdgpu_vcn_inst *vinst = &adev->vcn.inst[ring->me]; 849 + int r; 850 + 851 + /* take the vcn reset mutex here because resetting VCN will reset jpeg as well */ 852 + mutex_lock(&vinst->engine_reset_mutex); 853 + 847 854 amdgpu_ring_reset_helper_begin(ring, timedout_fence); 848 855 jpeg_v5_0_1_core_stall_reset(ring); 849 856 jpeg_v5_0_1_init_jrbc(ring); 850 - return amdgpu_ring_reset_helper_end(ring, timedout_fence); 857 + r = amdgpu_ring_reset_helper_end(ring, timedout_fence); 858 + mutex_unlock(&vinst->engine_reset_mutex); 859 + return r; 851 860 } 852 861 853 862 static const struct amd_ip_funcs jpeg_v5_0_1_ip_funcs = {
+132 -2
drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c
··· 847 847 int inst_idx = vinst->inst; 848 848 struct amdgpu_vcn4_fw_shared *fw_shared = 849 849 adev->vcn.inst[inst_idx].fw_shared.cpu_addr; 850 + struct dpg_pause_state state = {.fw_based = VCN_DPG_STATE__PAUSE}; 850 851 struct amdgpu_ring *ring; 851 852 int vcn_inst, ret; 852 853 uint32_t tmp; ··· 951 950 } 952 951 953 952 ring = &adev->vcn.inst[inst_idx].ring_enc[0]; 953 + 954 + /* Pause dpg */ 955 + vcn_v4_0_3_pause_dpg_mode(vinst, &state); 954 956 955 957 /* program the RB_BASE for ring buffer */ 956 958 WREG32_SOC15(VCN, vcn_inst, regUVD_RB_BASE_LO, ··· 1364 1360 int inst_idx = vinst->inst; 1365 1361 uint32_t tmp; 1366 1362 int vcn_inst; 1363 + struct dpg_pause_state state = {.fw_based = VCN_DPG_STATE__UNPAUSE}; 1367 1364 1368 1365 vcn_inst = GET_INST(VCN, inst_idx); 1366 + 1367 + /* Unpause dpg */ 1368 + vcn_v4_0_3_pause_dpg_mode(vinst, &state); 1369 1369 1370 1370 /* Wait for power status to be 1 */ 1371 1371 SOC15_WAIT_ON_RREG(VCN, vcn_inst, regUVD_POWER_STATUS, 1, ··· 1494 1486 static int vcn_v4_0_3_pause_dpg_mode(struct amdgpu_vcn_inst *vinst, 1495 1487 struct dpg_pause_state *new_state) 1496 1488 { 1489 + struct amdgpu_device *adev = vinst->adev; 1490 + int inst_idx = vinst->inst; 1491 + uint32_t reg_data = 0; 1492 + int ret_code; 1493 + 1494 + /* pause/unpause if state is changed */ 1495 + if (adev->vcn.inst[inst_idx].pause_state.fw_based != new_state->fw_based) { 1496 + DRM_DEV_DEBUG(adev->dev, "dpg pause state changed %d -> %d", 1497 + adev->vcn.inst[inst_idx].pause_state.fw_based, new_state->fw_based); 1498 + reg_data = RREG32_SOC15(VCN, inst_idx, regUVD_DPG_PAUSE) & 1499 + (~UVD_DPG_PAUSE__NJ_PAUSE_DPG_ACK_MASK); 1500 + 1501 + if (new_state->fw_based == VCN_DPG_STATE__PAUSE) { 1502 + ret_code = SOC15_WAIT_ON_RREG(VCN, inst_idx, regUVD_POWER_STATUS, 0x1, 1503 + UVD_POWER_STATUS__UVD_POWER_STATUS_MASK); 1504 + 1505 + if (!ret_code) { 1506 + /* pause DPG */ 1507 + reg_data |= UVD_DPG_PAUSE__NJ_PAUSE_DPG_REQ_MASK; 1508 + WREG32_SOC15(VCN, inst_idx, regUVD_DPG_PAUSE, reg_data); 1509 + 1510 + /* wait for ACK */ 1511 + SOC15_WAIT_ON_RREG(VCN, inst_idx, regUVD_DPG_PAUSE, 1512 + UVD_DPG_PAUSE__NJ_PAUSE_DPG_ACK_MASK, 1513 + UVD_DPG_PAUSE__NJ_PAUSE_DPG_ACK_MASK); 1514 + } 1515 + } else { 1516 + /* unpause dpg, no need to wait */ 1517 + reg_data &= ~UVD_DPG_PAUSE__NJ_PAUSE_DPG_REQ_MASK; 1518 + WREG32_SOC15(VCN, inst_idx, regUVD_DPG_PAUSE, reg_data); 1519 + } 1520 + adev->vcn.inst[inst_idx].pause_state.fw_based = new_state->fw_based; 1521 + } 1497 1522 1498 1523 return 0; 1499 1524 } ··· 1637 1596 } 1638 1597 } 1639 1598 1599 + static int vcn_v4_0_3_reset_jpeg_pre_helper(struct amdgpu_device *adev, int inst) 1600 + { 1601 + struct amdgpu_ring *ring; 1602 + uint32_t wait_seq = 0; 1603 + int i; 1604 + 1605 + for (i = 0; i < adev->jpeg.num_jpeg_rings; ++i) { 1606 + ring = &adev->jpeg.inst[inst].ring_dec[i]; 1607 + 1608 + drm_sched_wqueue_stop(&ring->sched); 1609 + /* Get the last emitted fence sequence */ 1610 + wait_seq = atomic_read(&ring->fence_drv.last_seq); 1611 + if (wait_seq) 1612 + continue; 1613 + 1614 + /* if Jobs are still pending after timeout, 1615 + * We'll handle them in the bottom helper 1616 + */ 1617 + amdgpu_fence_wait_polling(ring, wait_seq, adev->video_timeout); 1618 + } 1619 + 1620 + return 0; 1621 + } 1622 + 1623 + static int vcn_v4_0_3_reset_jpeg_post_helper(struct amdgpu_device *adev, int inst) 1624 + { 1625 + struct amdgpu_ring *ring; 1626 + int i, r = 0; 1627 + 1628 + for (i = 0; i < adev->jpeg.num_jpeg_rings; ++i) { 1629 + ring = &adev->jpeg.inst[inst].ring_dec[i]; 1630 + /* Force completion of any remaining jobs */ 1631 + amdgpu_fence_driver_force_completion(ring); 1632 + 1633 + if (ring->use_doorbell) 1634 + WREG32_SOC15_OFFSET( 1635 + VCN, GET_INST(VCN, inst), 1636 + regVCN_JPEG_DB_CTRL, 1637 + (ring->pipe ? (ring->pipe - 0x15) : 0), 1638 + ring->doorbell_index << VCN_JPEG_DB_CTRL__OFFSET__SHIFT | 1639 + VCN_JPEG_DB_CTRL__EN_MASK); 1640 + 1641 + r = amdgpu_ring_test_helper(ring); 1642 + if (r) 1643 + return r; 1644 + 1645 + drm_sched_wqueue_start(&ring->sched); 1646 + 1647 + DRM_DEV_DEBUG(adev->dev, "JPEG ring %d (inst %d) restored and sched restarted\n", 1648 + i, inst); 1649 + } 1650 + return 0; 1651 + } 1652 + 1640 1653 static int vcn_v4_0_3_ring_reset(struct amdgpu_ring *ring, 1641 1654 unsigned int vmid, 1642 1655 struct amdgpu_fence *timedout_fence) ··· 1699 1604 int vcn_inst; 1700 1605 struct amdgpu_device *adev = ring->adev; 1701 1606 struct amdgpu_vcn_inst *vinst = &adev->vcn.inst[ring->me]; 1607 + bool pg_state = false; 1702 1608 1609 + /* take the vcn reset mutex here because resetting VCN will reset jpeg as well */ 1610 + mutex_lock(&vinst->engine_reset_mutex); 1611 + mutex_lock(&adev->jpeg.jpeg_pg_lock); 1612 + /* Ensure JPEG is powered on during reset if currently gated */ 1613 + if (adev->jpeg.cur_state == AMD_PG_STATE_GATE) { 1614 + amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_JPEG, 1615 + AMD_PG_STATE_UNGATE); 1616 + pg_state = true; 1617 + } 1618 + 1619 + vcn_v4_0_3_reset_jpeg_pre_helper(adev, ring->me); 1703 1620 amdgpu_ring_reset_helper_begin(ring, timedout_fence); 1704 1621 1705 1622 vcn_inst = GET_INST(VCN, ring->me); ··· 1719 1612 1720 1613 if (r) { 1721 1614 DRM_DEV_ERROR(adev->dev, "VCN reset fail : %d\n", r); 1722 - return r; 1615 + /* Restore JPEG power gating state if it was originally gated */ 1616 + if (pg_state) 1617 + amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_JPEG, 1618 + AMD_PG_STATE_GATE); 1619 + mutex_unlock(&adev->jpeg.jpeg_pg_lock); 1620 + goto unlock; 1723 1621 } 1724 1622 1725 1623 /* This flag is not set for VF, assumed to be disabled always */ ··· 1733 1621 vcn_v4_0_3_hw_init_inst(vinst); 1734 1622 vcn_v4_0_3_start_dpg_mode(vinst, adev->vcn.inst[ring->me].indirect_sram); 1735 1623 1736 - return amdgpu_ring_reset_helper_end(ring, timedout_fence); 1624 + r = amdgpu_ring_reset_helper_end(ring, timedout_fence); 1625 + if (r) { 1626 + if (pg_state) 1627 + amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_JPEG, 1628 + AMD_PG_STATE_GATE); 1629 + mutex_unlock(&adev->jpeg.jpeg_pg_lock); 1630 + goto unlock; 1631 + } 1632 + 1633 + r = vcn_v4_0_3_reset_jpeg_post_helper(adev, ring->me); 1634 + if (pg_state) 1635 + amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_JPEG, 1636 + AMD_PG_STATE_GATE); 1637 + mutex_unlock(&adev->jpeg.jpeg_pg_lock); 1638 + 1639 + unlock: 1640 + mutex_unlock(&vinst->engine_reset_mutex); 1641 + 1642 + return r; 1737 1643 } 1738 1644 1739 1645 static const struct amdgpu_ring_funcs vcn_v4_0_3_unified_ring_vm_funcs = {
+91 -2
drivers/gpu/drm/amd/amdgpu/vcn_v5_0_1.c
··· 1301 1301 } 1302 1302 } 1303 1303 1304 + static int vcn_v5_0_1_reset_jpeg_pre_helper(struct amdgpu_device *adev, int inst) 1305 + { 1306 + struct amdgpu_ring *ring; 1307 + uint32_t wait_seq = 0; 1308 + int i; 1309 + 1310 + for (i = 0; i < adev->jpeg.num_jpeg_rings; ++i) { 1311 + ring = &adev->jpeg.inst[inst].ring_dec[i]; 1312 + 1313 + drm_sched_wqueue_stop(&ring->sched); 1314 + wait_seq = atomic_read(&ring->fence_drv.last_seq); 1315 + if (wait_seq) 1316 + continue; 1317 + 1318 + /* if Jobs are still pending after timeout, 1319 + * We'll handle them in the bottom helper 1320 + */ 1321 + amdgpu_fence_wait_polling(ring, wait_seq, adev->video_timeout); 1322 + } 1323 + 1324 + return 0; 1325 + } 1326 + 1327 + static int vcn_v5_0_1_reset_jpeg_post_helper(struct amdgpu_device *adev, int inst) 1328 + { 1329 + struct amdgpu_ring *ring; 1330 + int i, r = 0; 1331 + 1332 + for (i = 0; i < adev->jpeg.num_jpeg_rings; ++i) { 1333 + ring = &adev->jpeg.inst[inst].ring_dec[i]; 1334 + /* Force completion of any remaining jobs */ 1335 + amdgpu_fence_driver_force_completion(ring); 1336 + 1337 + if (ring->use_doorbell) 1338 + WREG32_SOC15_OFFSET( 1339 + VCN, GET_INST(VCN, inst), 1340 + regVCN_JPEG_DB_CTRL, 1341 + (ring->pipe ? (ring->pipe - 0x15) : 0), 1342 + ring->doorbell_index << VCN_JPEG_DB_CTRL__OFFSET__SHIFT | 1343 + VCN_JPEG_DB_CTRL__EN_MASK); 1344 + 1345 + r = amdgpu_ring_test_helper(ring); 1346 + if (r) 1347 + return r; 1348 + 1349 + drm_sched_wqueue_start(&ring->sched); 1350 + 1351 + DRM_DEV_DEBUG(adev->dev, "JPEG ring %d (inst %d) restored and sched restarted\n", 1352 + i, inst); 1353 + } 1354 + return 0; 1355 + } 1356 + 1304 1357 static int vcn_v5_0_1_ring_reset(struct amdgpu_ring *ring, 1305 1358 unsigned int vmid, 1306 1359 struct amdgpu_fence *timedout_fence) ··· 1362 1309 int vcn_inst; 1363 1310 struct amdgpu_device *adev = ring->adev; 1364 1311 struct amdgpu_vcn_inst *vinst = &adev->vcn.inst[ring->me]; 1312 + bool pg_state = false; 1313 + 1314 + /* take the vcn reset mutex here because resetting VCN will reset jpeg as well */ 1315 + mutex_lock(&vinst->engine_reset_mutex); 1316 + vcn_v5_0_1_reset_jpeg_pre_helper(adev, ring->me); 1317 + mutex_lock(&adev->jpeg.jpeg_pg_lock); 1318 + /* Ensure JPEG is powered on during reset if currently gated */ 1319 + if (adev->jpeg.cur_state == AMD_PG_STATE_GATE) { 1320 + amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_JPEG, 1321 + AMD_PG_STATE_UNGATE); 1322 + pg_state = true; 1323 + } 1365 1324 1366 1325 amdgpu_ring_reset_helper_begin(ring, timedout_fence); 1367 1326 ··· 1382 1317 1383 1318 if (r) { 1384 1319 DRM_DEV_ERROR(adev->dev, "VCN reset fail : %d\n", r); 1385 - return r; 1320 + /* Restore JPEG power gating state if it was originally gated */ 1321 + if (pg_state) 1322 + amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_JPEG, 1323 + AMD_PG_STATE_GATE); 1324 + mutex_unlock(&adev->jpeg.jpeg_pg_lock); 1325 + goto unlock; 1386 1326 } 1387 1327 1388 1328 vcn_v5_0_1_hw_init_inst(adev, ring->me); 1389 1329 vcn_v5_0_1_start_dpg_mode(vinst, vinst->indirect_sram); 1390 1330 1391 - return amdgpu_ring_reset_helper_end(ring, timedout_fence); 1331 + r = amdgpu_ring_reset_helper_end(ring, timedout_fence); 1332 + if (r) { 1333 + if (pg_state) 1334 + amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_JPEG, 1335 + AMD_PG_STATE_GATE); 1336 + mutex_unlock(&adev->jpeg.jpeg_pg_lock); 1337 + goto unlock; 1338 + } 1339 + 1340 + if (pg_state) 1341 + amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_JPEG, 1342 + AMD_PG_STATE_GATE); 1343 + mutex_unlock(&adev->jpeg.jpeg_pg_lock); 1344 + 1345 + r = vcn_v5_0_1_reset_jpeg_post_helper(adev, ring->me); 1346 + 1347 + unlock: 1348 + mutex_unlock(&vinst->engine_reset_mutex); 1349 + 1350 + return r; 1392 1351 } 1393 1352 1394 1353 static const struct amdgpu_ring_funcs vcn_v5_0_1_unified_ring_vm_funcs = {
+688 -759
drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler.h
··· 3644 3644 }; 3645 3645 3646 3646 static const uint32_t cwsr_trap_gfx12_hex[] = { 3647 - 0xbfa00001, 0xbfa002b2, 3647 + 0xbfa00001, 0xbfa00239, 3648 3648 0xb0804009, 0xb8eef81a, 3649 3649 0xbf880000, 0xb980081a, 3650 3650 0x00000000, 0xb8f8f804, ··· 3711 3711 0x807a817a, 0xbf0d997b, 3712 3712 0xbfa20002, 0x847a897a, 3713 3713 0xbfa00001, 0x847a8a7a, 3714 - 0xb8fb1e06, 0x847b8a7b, 3715 - 0x807a7b7a, 0x8b7bff7f, 3716 - 0x0000ffff, 0x807aff7a, 3717 - 0x00000200, 0x807a7e7a, 3718 - 0x827b807b, 0xd7610000, 3719 - 0x00010870, 0xd7610000, 3720 - 0x00010a71, 0xd7610000, 3721 - 0x00010c72, 0xd7610000, 3722 - 0x00010e73, 0xd7610000, 3723 - 0x00011074, 0xd7610000, 3724 - 0x00011275, 0xd7610000, 3725 - 0x00011476, 0xd7610000, 3726 - 0x00011677, 0xd7610000, 3727 - 0x00011a79, 0xd7610000, 3728 - 0x00011c7e, 0xd7610000, 3729 - 0x00011e7f, 0xd8500000, 3730 - 0x00000000, 0xd8500000, 3731 - 0x00000000, 0xd8500000, 3732 - 0x00000000, 0xd8500000, 3733 - 0x00000000, 0xd8500000, 3734 - 0x00000000, 0xd8500000, 3735 - 0x00000000, 0xd8500000, 3736 - 0x00000000, 0xd8500000, 3737 - 0x00000000, 0xbefe00ff, 3738 - 0x00003fff, 0xbeff0080, 3739 - 0xee0a407a, 0x000c0000, 3740 - 0x00004000, 0xd760007a, 3741 - 0x00011d00, 0xd760007b, 3742 - 0x00011f00, 0xbefe007a, 3743 - 0xbeff007b, 0xbef4007e, 3744 - 0x8b75ff7f, 0x0000ffff, 3745 - 0x8c75ff75, 0x00040000, 3746 - 0xbef60080, 0xbef700ff, 3747 - 0x10807fac, 0xbef1007d, 3748 - 0xbef00080, 0xb8f30742, 3749 - 0x84739973, 0xbefe00c1, 3750 - 0x857d9973, 0x8b7d817d, 3751 - 0xbf06817d, 0xbfa20002, 3752 - 0xbeff0080, 0xbfa00002, 3753 - 0xbeff00c1, 0xbfa0000c, 3754 - 0xbef600ff, 0x01000000, 3755 - 0xc4068070, 0x008ce801, 3756 - 0x00008000, 0xc4068070, 3757 - 0x008ce802, 0x00010000, 3758 - 0xc4068070, 0x008ce803, 3759 - 0x00018000, 0xbfa0000b, 3760 - 0xbef600ff, 0x01000000, 3761 - 0xc4068070, 0x008ce801, 3762 - 0x00010000, 0xc4068070, 3763 - 0x008ce802, 0x00020000, 3764 - 0xc4068070, 0x008ce803, 3765 - 0x00030000, 0xb8f03b05, 3766 - 0x80708170, 0xbf0d9973, 3767 - 0xbfa20002, 0x84708970, 3768 - 0xbfa00001, 0x84708a70, 3769 - 0xb8fa1e06, 0x847a8a7a, 3770 - 0x80707a70, 0x8070ff70, 3771 - 0x00000200, 0xbef600ff, 3772 - 0x01000000, 0x7e000280, 3773 - 0x7e020280, 0x7e040280, 3774 - 0xbe804ec2, 0xbf94fffe, 3775 - 0xb8faf804, 0x8b7a847a, 3776 - 0x91788478, 0x8c787a78, 3777 - 0x917aff6d, 0x80000000, 3778 - 0xd7610002, 0x00010071, 3779 - 0xd7610002, 0x0001026c, 3780 - 0xd7610002, 0x0001047a, 3781 - 0xd7610002, 0x0001066e, 3782 - 0xd7610002, 0x0001086f, 3783 - 0xd7610002, 0x00010a78, 3784 - 0xd7610002, 0x00010e7b, 3785 - 0xd8500000, 0x00000000, 3786 - 0xd8500000, 0x00000000, 3787 - 0xd8500000, 0x00000000, 3788 - 0xd8500000, 0x00000000, 3789 - 0xd8500000, 0x00000000, 3790 - 0xd8500000, 0x00000000, 3791 - 0xd8500000, 0x00000000, 3792 - 0xd8500000, 0x00000000, 3793 - 0xb8faf811, 0xd7610002, 3794 - 0x00010c7a, 0xb8faf801, 3795 - 0xd7610002, 0x0001107a, 3796 - 0xb8faf814, 0xd7610002, 3797 - 0x0001127a, 0xb8faf815, 3798 - 0xd7610002, 0x0001147a, 3799 - 0xb8faf812, 0xd7610002, 3800 - 0x0001167a, 0xb8faf813, 3801 - 0xd7610002, 0x0001187a, 3802 - 0xb8faf802, 0xd7610002, 3803 - 0x00011a7a, 0xbefa50c1, 3804 - 0xbfc70000, 0xd7610002, 3805 - 0x00011c7a, 0xd8500000, 3806 - 0x00000000, 0xd8500000, 3807 - 0x00000000, 0xd8500000, 3808 - 0x00000000, 0xd8500000, 3809 - 0x00000000, 0xd8500000, 3810 - 0x00000000, 0xd8500000, 3811 - 0x00000000, 0xd8500000, 3812 - 0x00000000, 0xd8500000, 3813 - 0x00000000, 0xbefe00ff, 3814 - 0x0000ffff, 0xbeff0080, 3815 - 0xc4068070, 0x008ce802, 3816 - 0x00000000, 0xbefe00c1, 3714 + 0x8b7bff7f, 0x0000ffff, 3715 + 0x807aff7a, 0x00000240, 3716 + 0x807a7e7a, 0x827b807b, 3717 + 0xd7610000, 0x00010870, 3718 + 0xd7610000, 0x00010a71, 3719 + 0xd7610000, 0x00010c72, 3720 + 0xd7610000, 0x00010e73, 3721 + 0xd7610000, 0x00011074, 3722 + 0xd7610000, 0x00011275, 3723 + 0xd7610000, 0x00011476, 3724 + 0xd7610000, 0x00011677, 3725 + 0xd7610000, 0x00011a79, 3726 + 0xd7610000, 0x00011c7e, 3727 + 0xd7610000, 0x00011e7f, 3728 + 0xbefe00ff, 0x00003fff, 3729 + 0xbeff0080, 0xee0a407a, 3730 + 0x000c0000, 0x00000000, 3731 + 0xd760007a, 0x00011d00, 3732 + 0xd760007b, 0x00011f00, 3733 + 0xbefe007a, 0xbeff007b, 3734 + 0xbef4007e, 0x8b75ff7f, 3735 + 0x0000ffff, 0xbef1007d, 3736 + 0xb8f30742, 0x84739973, 3737 + 0xbefe00c1, 0x857d9973, 3738 + 0x8b7d817d, 0xbf06817d, 3739 + 0xbfa20002, 0xbeff0080, 3740 + 0xbfa00002, 0xbeff00c1, 3741 + 0xbfa0000a, 0xee0a4074, 3742 + 0x008c0000, 0x00008000, 3743 + 0xee0a4074, 0x010c0000, 3744 + 0x00010000, 0xee0a4074, 3745 + 0x018c0000, 0x00018000, 3746 + 0xbfa00009, 0xee0a4074, 3747 + 0x008c0000, 0x00010000, 3748 + 0xee0a4074, 0x010c0000, 3749 + 0x00020000, 0xee0a4074, 3750 + 0x018c0000, 0x00030000, 3817 3751 0xb8f03b05, 0x80708170, 3818 3752 0xbf0d9973, 0xbfa20002, 3819 3753 0x84708970, 0xbfa00001, 3820 - 0x84708a70, 0xb8fa1e06, 3821 - 0x847a8a7a, 0x80707a70, 3822 - 0xbef600ff, 0x01000000, 3754 + 0x84708a70, 0x8070ff70, 3755 + 0x00000200, 0x7e000280, 3756 + 0x7e020280, 0x7e040280, 3757 + 0xbefd0080, 0xd7610002, 3758 + 0x0000fa71, 0x807d817d, 3759 + 0xbe804ec2, 0xbf94fffe, 3760 + 0xb8faf804, 0x8b7a847a, 3761 + 0x91788478, 0x8c787a78, 3762 + 0xd7610002, 0x0000fa6c, 3763 + 0x807d817d, 0x8b7aff6d, 3764 + 0x0000ffff, 0xd7610002, 3765 + 0x0000fa7a, 0x807d817d, 3766 + 0xd7610002, 0x0000fa6e, 3767 + 0x807d817d, 0xd7610002, 3768 + 0x0000fa6f, 0x807d817d, 3769 + 0xd7610002, 0x0000fa78, 3770 + 0x807d817d, 0xb8faf811, 3771 + 0xd7610002, 0x0000fa7a, 3772 + 0x807d817d, 0xbefa0080, 3773 + 0xd7610002, 0x0000fa7a, 3774 + 0x807d817d, 0xb8f1f801, 3775 + 0xd7610002, 0x0000fa71, 3776 + 0x807d817d, 0xb8f1f814, 3777 + 0xd7610002, 0x0000fa71, 3778 + 0x807d817d, 0xb8f1f815, 3779 + 0xd7610002, 0x0000fa71, 3780 + 0x807d817d, 0xb8f1f812, 3781 + 0xd7610002, 0x0000fa71, 3782 + 0x807d817d, 0xb8f1f813, 3783 + 0xd7610002, 0x0000fa71, 3784 + 0x807d817d, 0xb8faf802, 3785 + 0xd7610002, 0x0000fa7a, 3786 + 0x807d817d, 0xbefa50c1, 3787 + 0xbfc70000, 0xd7610002, 3788 + 0x0000fa7a, 0x807d817d, 3789 + 0xbefe00ff, 0x0000ffff, 3790 + 0xbeff0080, 0x80767074, 3791 + 0x82778075, 0xee0a4076, 3792 + 0x010c0000, 0x00000000, 3793 + 0xbefe00c1, 0xb8f03b05, 3794 + 0x80708170, 0xbf0d9973, 3795 + 0xbfa20002, 0x84708970, 3796 + 0xbfa00001, 0x84708a70, 3823 3797 0xbef90080, 0xbefd0080, 3824 3798 0xbf800000, 0xbe804100, 3825 3799 0xbe824102, 0xbe844104, 3826 3800 0xbe864106, 0xbe884108, 3827 3801 0xbe8a410a, 0xbe8c410c, 3828 - 0xbe8e410e, 0xbf068079, 3829 - 0xbfa10032, 0xd7610002, 3830 - 0x00010000, 0xd7610002, 3831 - 0x00010201, 0xd7610002, 3832 - 0x00010402, 0xd7610002, 3833 - 0x00010603, 0xd7610002, 3834 - 0x00010804, 0xd7610002, 3835 - 0x00010a05, 0xd7610002, 3836 - 0x00010c06, 0xd7610002, 3837 - 0x00010e07, 0xd7610002, 3838 - 0x00011008, 0xd7610002, 3839 - 0x00011209, 0xd7610002, 3840 - 0x0001140a, 0xd7610002, 3841 - 0x0001160b, 0xd7610002, 3842 - 0x0001180c, 0xd7610002, 3843 - 0x00011a0d, 0xd7610002, 3844 - 0x00011c0e, 0xd7610002, 3845 - 0x00011e0f, 0xd8500000, 3846 - 0x00000000, 0xd8500000, 3847 - 0x00000000, 0xd8500000, 3848 - 0x00000000, 0xd8500000, 3849 - 0x00000000, 0xd8500000, 3850 - 0x00000000, 0xd8500000, 3851 - 0x00000000, 0xd8500000, 3852 - 0x00000000, 0xd8500000, 3853 - 0x00000000, 0x80799079, 3854 - 0xbfa00038, 0xd7610002, 3855 - 0x00012000, 0xd7610002, 3856 - 0x00012201, 0xd7610002, 3857 - 0x00012402, 0xd7610002, 3858 - 0x00012603, 0xd7610002, 3859 - 0x00012804, 0xd7610002, 3860 - 0x00012a05, 0xd7610002, 3861 - 0x00012c06, 0xd7610002, 3862 - 0x00012e07, 0xd7610002, 3863 - 0x00013008, 0xd7610002, 3864 - 0x00013209, 0xd7610002, 3865 - 0x0001340a, 0xd7610002, 3866 - 0x0001360b, 0xd7610002, 3867 - 0x0001380c, 0xd7610002, 3868 - 0x00013a0d, 0xd7610002, 3869 - 0x00013c0e, 0xd7610002, 3870 - 0x00013e0f, 0xd8500000, 3871 - 0x00000000, 0xd8500000, 3872 - 0x00000000, 0xd8500000, 3873 - 0x00000000, 0xd8500000, 3874 - 0x00000000, 0xd8500000, 3875 - 0x00000000, 0xd8500000, 3876 - 0x00000000, 0xd8500000, 3877 - 0x00000000, 0xd8500000, 3878 - 0x00000000, 0x80799079, 3879 - 0xc4068070, 0x008ce802, 3880 - 0x00000000, 0x8070ff70, 3881 - 0x00000080, 0xbef90080, 3882 - 0x7e040280, 0x807d907d, 3883 - 0xbf0aff7d, 0x00000060, 3884 - 0xbfa2ff88, 0xbe804100, 3885 - 0xbe824102, 0xbe844104, 3886 - 0xbe864106, 0xbe884108, 3887 - 0xbe8a410a, 0xd7610002, 3888 - 0x00010000, 0xd7610002, 3889 - 0x00010201, 0xd7610002, 3890 - 0x00010402, 0xd7610002, 3891 - 0x00010603, 0xd7610002, 3892 - 0x00010804, 0xd7610002, 3893 - 0x00010a05, 0xd7610002, 3894 - 0x00010c06, 0xd7610002, 3895 - 0x00010e07, 0xd7610002, 3896 - 0x00011008, 0xd7610002, 3897 - 0x00011209, 0xd7610002, 3898 - 0x0001140a, 0xd7610002, 3899 - 0x0001160b, 0xd8500000, 3900 - 0x00000000, 0xd8500000, 3901 - 0x00000000, 0xd8500000, 3902 - 0x00000000, 0xd8500000, 3903 - 0x00000000, 0xd8500000, 3904 - 0x00000000, 0xd8500000, 3905 - 0x00000000, 0xd8500000, 3906 - 0x00000000, 0xd8500000, 3907 - 0x00000000, 0xc4068070, 3908 - 0x008ce802, 0x00000000, 3909 - 0xbefe00c1, 0x857d9973, 3910 - 0x8b7d817d, 0xbf06817d, 3911 - 0xbfa20002, 0xbeff0080, 3912 - 0xbfa00001, 0xbeff00c1, 3913 - 0xb8fb4306, 0x8b7bc17b, 3914 - 0xbfa10044, 0x8b7aff6d, 3915 - 0x80000000, 0xbfa10041, 3916 - 0x847b897b, 0xbef6007b, 3802 + 0xbe8e410e, 0xd7610002, 3803 + 0x0000f200, 0x80798179, 3804 + 0xd7610002, 0x0000f201, 3805 + 0x80798179, 0xd7610002, 3806 + 0x0000f202, 0x80798179, 3807 + 0xd7610002, 0x0000f203, 3808 + 0x80798179, 0xd7610002, 3809 + 0x0000f204, 0x80798179, 3810 + 0xd7610002, 0x0000f205, 3811 + 0x80798179, 0xd7610002, 3812 + 0x0000f206, 0x80798179, 3813 + 0xd7610002, 0x0000f207, 3814 + 0x80798179, 0xd7610002, 3815 + 0x0000f208, 0x80798179, 3816 + 0xd7610002, 0x0000f209, 3817 + 0x80798179, 0xd7610002, 3818 + 0x0000f20a, 0x80798179, 3819 + 0xd7610002, 0x0000f20b, 3820 + 0x80798179, 0xd7610002, 3821 + 0x0000f20c, 0x80798179, 3822 + 0xd7610002, 0x0000f20d, 3823 + 0x80798179, 0xd7610002, 3824 + 0x0000f20e, 0x80798179, 3825 + 0xd7610002, 0x0000f20f, 3826 + 0x80798179, 0xbf06a079, 3827 + 0xbfa10009, 0x80767074, 3828 + 0x82778075, 0xee0a4076, 3829 + 0x010c0000, 0x00000000, 3830 + 0x8070ff70, 0x00000080, 3831 + 0xbef90080, 0x7e040280, 3832 + 0x807d907d, 0xbf0aff7d, 3833 + 0x00000060, 0xbfa2ffb9, 3834 + 0xbe804100, 0xbe824102, 3835 + 0xbe844104, 0xbe864106, 3836 + 0xbe884108, 0xbe8a410a, 3837 + 0xd7610002, 0x0000f200, 3838 + 0x80798179, 0xd7610002, 3839 + 0x0000f201, 0x80798179, 3840 + 0xd7610002, 0x0000f202, 3841 + 0x80798179, 0xd7610002, 3842 + 0x0000f203, 0x80798179, 3843 + 0xd7610002, 0x0000f204, 3844 + 0x80798179, 0xd7610002, 3845 + 0x0000f205, 0x80798179, 3846 + 0xd7610002, 0x0000f206, 3847 + 0x80798179, 0xd7610002, 3848 + 0x0000f207, 0x80798179, 3849 + 0xd7610002, 0x0000f208, 3850 + 0x80798179, 0xd7610002, 3851 + 0x0000f209, 0x80798179, 3852 + 0xd7610002, 0x0000f20a, 3853 + 0x80798179, 0xd7610002, 3854 + 0x0000f20b, 0x80798179, 3855 + 0x80767074, 0x82778075, 3856 + 0xee0a4076, 0x010c0000, 3857 + 0x00000000, 0xbefe00c1, 3858 + 0x857d9973, 0x8b7d817d, 3859 + 0xbf06817d, 0xbfa20002, 3860 + 0xbeff0080, 0xbfa00001, 3861 + 0xbeff00c1, 0xb8fb4306, 3862 + 0x8b7bc17b, 0xbfa10042, 3863 + 0x8b7aff6d, 0x80000000, 3864 + 0xbfa1003f, 0x847b897b, 3917 3865 0xb8f03b05, 0x80708170, 3918 3866 0xbf0d9973, 0xbfa20002, 3919 3867 0x84708970, 0xbfa00001, 3920 - 0x84708a70, 0xb8fa1e06, 3921 - 0x847a8a7a, 0x80707a70, 3922 - 0x8070ff70, 0x00000200, 3923 - 0x8070ff70, 0x00000080, 3924 - 0xbef600ff, 0x01000000, 3925 - 0xd71f0000, 0x000100c1, 3926 - 0xd7200000, 0x000200c1, 3927 - 0x16000084, 0x857d9973, 3928 - 0x8b7d817d, 0xbf06817d, 3929 - 0xbefd0080, 0xbfa20013, 3930 - 0xbe8300ff, 0x00000080, 3868 + 0x84708a70, 0x8070ff70, 3869 + 0x00000200, 0x8070ff70, 3870 + 0x00000080, 0xd71f0000, 3871 + 0x000100c1, 0xd7200000, 3872 + 0x000200c1, 0x16000084, 3873 + 0x857d9973, 0x8b7d817d, 3874 + 0xbf06817d, 0xbefd0080, 3875 + 0xbfa20015, 0xbe8300ff, 3876 + 0x00000080, 0xbf800000, 3877 + 0xbf800000, 0xbf800000, 3878 + 0xd8d80000, 0x01000000, 3879 + 0xbf8a0000, 0x80767074, 3880 + 0x82778075, 0xee0a4076, 3881 + 0x008c0000, 0x00000000, 3882 + 0x807d037d, 0x80700370, 3883 + 0xd5250000, 0x0001ff00, 3884 + 0x00000080, 0xbf0a7b7d, 3885 + 0xbfa2fff1, 0xbfa00014, 3886 + 0xbe8300ff, 0x00000100, 3931 3887 0xbf800000, 0xbf800000, 3932 3888 0xbf800000, 0xd8d80000, 3933 3889 0x01000000, 0xbf8a0000, 3934 - 0xc4068070, 0x008ce801, 3890 + 0x80767074, 0x82778075, 3891 + 0xee0a4076, 0x008c0000, 3935 3892 0x00000000, 0x807d037d, 3936 3893 0x80700370, 0xd5250000, 3937 - 0x0001ff00, 0x00000080, 3938 - 0xbf0a7b7d, 0xbfa2fff3, 3939 - 0xbfa00012, 0xbe8300ff, 3940 - 0x00000100, 0xbf800000, 3941 - 0xbf800000, 0xbf800000, 3942 - 0xd8d80000, 0x01000000, 3943 - 0xbf8a0000, 0xc4068070, 3944 - 0x008ce801, 0x00000000, 3945 - 0x807d037d, 0x80700370, 3946 - 0xd5250000, 0x0001ff00, 3947 - 0x00000100, 0xbf0a7b7d, 3948 - 0xbfa2fff3, 0xbefe00c1, 3949 - 0x857d9973, 0x8b7d817d, 3950 - 0xbf06817d, 0xbfa20004, 3951 - 0xbef000ff, 0x00000200, 3952 - 0xbeff0080, 0xbfa00003, 3953 - 0xbef000ff, 0x00000400, 3954 - 0xbeff00c1, 0xb8fb3b05, 3955 - 0x807b817b, 0x847b827b, 3956 - 0x857d9973, 0x8b7d817d, 3957 - 0xbf06817d, 0xbfa2001b, 3958 - 0xbef600ff, 0x01000000, 3959 - 0xbefd0084, 0xbf0a7b7d, 3960 - 0xbfa10040, 0x7e008700, 3961 - 0x7e028701, 0x7e048702, 3962 - 0x7e068703, 0xc4068070, 3963 - 0x008ce800, 0x00000000, 3964 - 0xc4068070, 0x008ce801, 3965 - 0x00008000, 0xc4068070, 3966 - 0x008ce802, 0x00010000, 3967 - 0xc4068070, 0x008ce803, 3968 - 0x00018000, 0x807d847d, 3969 - 0x8070ff70, 0x00000200, 3970 - 0xbf0a7b7d, 0xbfa2ffeb, 3971 - 0xbfa0002a, 0xbef600ff, 3972 - 0x01000000, 0xbefd0084, 3973 - 0xbf0a7b7d, 0xbfa10015, 3894 + 0x0001ff00, 0x00000100, 3895 + 0xbf0a7b7d, 0xbfa2fff1, 3896 + 0xbefe00c1, 0x857d9973, 3897 + 0x8b7d817d, 0xbf06817d, 3898 + 0xbfa20004, 0xbef000ff, 3899 + 0x00000200, 0xbeff0080, 3900 + 0xbfa00003, 0xbef000ff, 3901 + 0x00000400, 0xbeff00c1, 3902 + 0xb8fb3b05, 0x807b817b, 3903 + 0x847b827b, 0x857d9973, 3904 + 0x8b7d817d, 0xbf06817d, 3905 + 0xbfa2001b, 0xbefd0084, 3906 + 0xbf0a7b7d, 0xbfa10032, 3974 3907 0x7e008700, 0x7e028701, 3975 3908 0x7e048702, 0x7e068703, 3976 - 0xc4068070, 0x008ce800, 3977 - 0x00000000, 0xc4068070, 3978 - 0x008ce801, 0x00010000, 3979 - 0xc4068070, 0x008ce802, 3980 - 0x00020000, 0xc4068070, 3981 - 0x008ce803, 0x00030000, 3909 + 0x80767074, 0x82778075, 3910 + 0xee0a4076, 0x000c0000, 3911 + 0x00000000, 0xee0a4076, 3912 + 0x008c0000, 0x00008000, 3913 + 0xee0a4076, 0x010c0000, 3914 + 0x00010000, 0xee0a4076, 3915 + 0x018c0000, 0x00018000, 3982 3916 0x807d847d, 0x8070ff70, 3983 - 0x00000400, 0xbf0a7b7d, 3984 - 0xbfa2ffeb, 0xb8fb1e06, 3985 - 0x8b7bc17b, 0xbfa1000d, 3986 - 0x847b837b, 0x807b7d7b, 3987 - 0xbefe00c1, 0xbeff0080, 3988 - 0x7e008700, 0xc4068070, 3989 - 0x008ce800, 0x00000000, 3990 - 0x807d817d, 0x8070ff70, 3991 - 0x00000080, 0xbf0a7b7d, 3992 - 0xbfa2fff7, 0xbfa00171, 3993 - 0xbef4007e, 0x8b75ff7f, 3994 - 0x0000ffff, 0x8c75ff75, 3995 - 0x00040000, 0xbef60080, 3996 - 0xbef700ff, 0x10807fac, 3917 + 0x00000200, 0xbf0a7b7d, 3918 + 0xbfa2ffe9, 0xbfa0001a, 3919 + 0xbefd0084, 0xbf0a7b7d, 3920 + 0xbfa10017, 0x7e008700, 3921 + 0x7e028701, 0x7e048702, 3922 + 0x7e068703, 0x80767074, 3923 + 0x82778075, 0xee0a4076, 3924 + 0x000c0000, 0x00000000, 3925 + 0xee0a4076, 0x008c0000, 3926 + 0x00010000, 0xee0a4076, 3927 + 0x010c0000, 0x00020000, 3928 + 0xee0a4076, 0x018c0000, 3929 + 0x00030000, 0x807d847d, 3930 + 0x8070ff70, 0x00000400, 3931 + 0xbf0a7b7d, 0xbfa2ffe9, 3932 + 0xbfa0014c, 0xbef4007e, 3933 + 0x8b75ff7f, 0x0000ffff, 3997 3934 0xbef1007f, 0xb8f20742, 3998 3935 0x84729972, 0x8b6eff7f, 3999 - 0x04000000, 0xbfa1003b, 3936 + 0x04000000, 0xbfa10044, 4000 3937 0xbefe00c1, 0x857d9972, 4001 3938 0x8b7d817d, 0xbf06817d, 4002 3939 0xbfa20002, 0xbeff0080, 4003 3940 0xbfa00001, 0xbeff00c1, 4004 3941 0xb8ef4306, 0x8b6fc16f, 4005 - 0xbfa10030, 0x846f896f, 4006 - 0xbef6006f, 0xb8f83b05, 3942 + 0xbfa10039, 0x846f896f, 3943 + 0xb8f83b05, 0x80788178, 3944 + 0xbf0d9972, 0xbfa20002, 3945 + 0x84788978, 0xbfa00001, 3946 + 0x84788a78, 0x8078ff78, 3947 + 0x00000200, 0x8078ff78, 3948 + 0x00000080, 0x857d9972, 3949 + 0x8b7d817d, 0xbf06817d, 3950 + 0xbefd0080, 0xd71f0001, 3951 + 0x000100c1, 0xd7200001, 3952 + 0x000202c1, 0x30020282, 3953 + 0xbfa20012, 0x80767874, 3954 + 0x82778075, 0xee0a0076, 3955 + 0x000c0000, 0x00000000, 3956 + 0xbf8a0000, 0xd8340000, 3957 + 0x00000001, 0xd5250001, 3958 + 0x0001ff01, 0x00000080, 3959 + 0x807dff7d, 0x00000080, 3960 + 0x8078ff78, 0x00000080, 3961 + 0xbf0a6f7d, 0xbfa2ffef, 3962 + 0xbfa00011, 0x80767874, 3963 + 0x82778075, 0xee0a0076, 3964 + 0x000c0000, 0x00000000, 3965 + 0xbf8a0000, 0xd8340000, 3966 + 0x00000001, 0xd5250001, 3967 + 0x0001ff01, 0x00000100, 3968 + 0x807dff7d, 0x00000100, 3969 + 0x8078ff78, 0x00000100, 3970 + 0xbf0a6f7d, 0xbfa2ffef, 3971 + 0xbef80080, 0xbefe00c1, 3972 + 0x857d9972, 0x8b7d817d, 3973 + 0xbf06817d, 0xbfa20002, 3974 + 0xbeff0080, 0xbfa00001, 3975 + 0xbeff00c1, 0xb8ef3b05, 3976 + 0x806f816f, 0x846f826f, 3977 + 0x857d9972, 0x8b7d817d, 3978 + 0xbf06817d, 0xbfa2002c, 3979 + 0xbeee0078, 0x8078ff78, 3980 + 0x00000200, 0xbefd0084, 3981 + 0x80767874, 0x82778075, 3982 + 0xee0a0076, 0x000c0000, 3983 + 0x00000000, 0xee0a0076, 3984 + 0x000c0001, 0x00008000, 3985 + 0xee0a0076, 0x000c0002, 3986 + 0x00010000, 0xee0a0076, 3987 + 0x000c0003, 0x00018000, 3988 + 0xbf8a0000, 0x7e008500, 3989 + 0x7e028501, 0x7e048502, 3990 + 0x7e068503, 0x807d847d, 3991 + 0x8078ff78, 0x00000200, 3992 + 0xbf0a6f7d, 0xbfa2ffe8, 3993 + 0x80766e74, 0x82778075, 3994 + 0xee0a0076, 0x000c0000, 3995 + 0x00000000, 0xee0a0076, 3996 + 0x000c0001, 0x00008000, 3997 + 0xee0a0076, 0x000c0002, 3998 + 0x00010000, 0xee0a0076, 3999 + 0x000c0003, 0x00018000, 4000 + 0xbf8a0000, 0xbfa0002d, 4001 + 0xbeee0078, 0x8078ff78, 4002 + 0x00000400, 0xbefd0084, 4003 + 0xbf0a6f7d, 0xbfa10018, 4004 + 0x80767874, 0x82778075, 4005 + 0xee0a0076, 0x000c0000, 4006 + 0x00000000, 0xee0a0076, 4007 + 0x000c0001, 0x00010000, 4008 + 0xee0a0076, 0x000c0002, 4009 + 0x00020000, 0xee0a0076, 4010 + 0x000c0003, 0x00030000, 4011 + 0xbf8a0000, 0x7e008500, 4012 + 0x7e028501, 0x7e048502, 4013 + 0x7e068503, 0x807d847d, 4014 + 0x8078ff78, 0x00000400, 4015 + 0xbf0a6f7d, 0xbfa2ffe8, 4016 + 0x80766e74, 0x82778075, 4017 + 0xee0a0076, 0x000c0000, 4018 + 0x00000000, 0xee0a0076, 4019 + 0x000c0001, 0x00010000, 4020 + 0xee0a0076, 0x000c0002, 4021 + 0x00020000, 0xee0a0076, 4022 + 0x000c0003, 0x00030000, 4023 + 0xbf8a0000, 0xb8f83b05, 4007 4024 0x80788178, 0xbf0d9972, 4008 4025 0xbfa20002, 0x84788978, 4009 4026 0xbfa00001, 0x84788a78, 4010 - 0xb8ee1e06, 0x846e8a6e, 4011 - 0x80786e78, 0x8078ff78, 4012 - 0x00000200, 0x8078ff78, 4013 - 0x00000080, 0xbef600ff, 4014 - 0x01000000, 0x857d9972, 4015 - 0x8b7d817d, 0xbf06817d, 4016 - 0xbefd0080, 0xbfa2000d, 4017 - 0xc4050078, 0x0080e800, 4018 - 0x00000000, 0xbf8a0000, 4019 - 0xdac00000, 0x00000000, 4020 - 0x807dff7d, 0x00000080, 4021 - 0x8078ff78, 0x00000080, 4022 - 0xbf0a6f7d, 0xbfa2fff4, 4023 - 0xbfa0000c, 0xc4050078, 4024 - 0x0080e800, 0x00000000, 4025 - 0xbf8a0000, 0xdac00000, 4026 - 0x00000000, 0x807dff7d, 4027 - 0x00000100, 0x8078ff78, 4028 - 0x00000100, 0xbf0a6f7d, 4029 - 0xbfa2fff4, 0xbef80080, 4030 - 0xbefe00c1, 0x857d9972, 4031 - 0x8b7d817d, 0xbf06817d, 4032 - 0xbfa20002, 0xbeff0080, 4033 - 0xbfa00001, 0xbeff00c1, 4034 - 0xb8ef3b05, 0x806f816f, 4035 - 0x846f826f, 0x857d9972, 4036 - 0x8b7d817d, 0xbf06817d, 4037 - 0xbfa2002c, 0xbef600ff, 4038 - 0x01000000, 0xbeee0078, 4039 4027 0x8078ff78, 0x00000200, 4040 - 0xbefd0084, 0xbf0a6f7d, 4041 - 0xbfa10061, 0xc4050078, 4042 - 0x008ce800, 0x00000000, 4043 - 0xc4050078, 0x008ce801, 4044 - 0x00008000, 0xc4050078, 4045 - 0x008ce802, 0x00010000, 4046 - 0xc4050078, 0x008ce803, 4047 - 0x00018000, 0xbf8a0000, 4048 - 0x7e008500, 0x7e028501, 4049 - 0x7e048502, 0x7e068503, 4050 - 0x807d847d, 0x8078ff78, 4051 - 0x00000200, 0xbf0a6f7d, 4052 - 0xbfa2ffea, 0xc405006e, 4053 - 0x008ce800, 0x00000000, 4054 - 0xc405006e, 0x008ce801, 4055 - 0x00008000, 0xc405006e, 4056 - 0x008ce802, 0x00010000, 4057 - 0xc405006e, 0x008ce803, 4058 - 0x00018000, 0xbf8a0000, 4059 - 0xbfa0003d, 0xbef600ff, 4060 - 0x01000000, 0xbeee0078, 4061 - 0x8078ff78, 0x00000400, 4062 - 0xbefd0084, 0xbf0a6f7d, 4063 - 0xbfa10016, 0xc4050078, 4064 - 0x008ce800, 0x00000000, 4065 - 0xc4050078, 0x008ce801, 4066 - 0x00010000, 0xc4050078, 4067 - 0x008ce802, 0x00020000, 4068 - 0xc4050078, 0x008ce803, 4069 - 0x00030000, 0xbf8a0000, 4070 - 0x7e008500, 0x7e028501, 4071 - 0x7e048502, 0x7e068503, 4072 - 0x807d847d, 0x8078ff78, 4073 - 0x00000400, 0xbf0a6f7d, 4074 - 0xbfa2ffea, 0xb8ef1e06, 4075 - 0x8b6fc16f, 0xbfa1000f, 4076 - 0x846f836f, 0x806f7d6f, 4077 - 0xbefe00c1, 0xbeff0080, 4078 - 0xc4050078, 0x008ce800, 4079 - 0x00000000, 0xbf8a0000, 4080 - 0x7e008500, 0x807d817d, 4081 - 0x8078ff78, 0x00000080, 4082 - 0xbf0a6f7d, 0xbfa2fff6, 4083 - 0xbeff00c1, 0xc405006e, 4084 - 0x008ce800, 0x00000000, 4085 - 0xc405006e, 0x008ce801, 4086 - 0x00010000, 0xc405006e, 4087 - 0x008ce802, 0x00020000, 4088 - 0xc405006e, 0x008ce803, 4089 - 0x00030000, 0xbf8a0000, 4090 - 0xb8f83b05, 0x80788178, 4091 - 0xbf0d9972, 0xbfa20002, 4092 - 0x84788978, 0xbfa00001, 4093 - 0x84788a78, 0xb8ee1e06, 4094 - 0x846e8a6e, 0x80786e78, 4095 - 0x8078ff78, 0x00000200, 4096 - 0x80f8ff78, 0x00000050, 4097 - 0xbef600ff, 0x01000000, 4028 + 0x80f8ff78, 0x00000060, 4029 + 0x80767874, 0x82778075, 4098 4030 0xbefd00ff, 0x0000006c, 4099 - 0x80f89078, 0xf462403a, 4100 - 0xf0000000, 0xbf8a0000, 4101 - 0x80fd847d, 0xbf800000, 4102 - 0xbe804300, 0xbe824302, 4103 - 0x80f8a078, 0xf462603a, 4104 - 0xf0000000, 0xbf8a0000, 4031 + 0xf460403b, 0xf8000000, 4032 + 0xbf8a0000, 0x80fd847d, 4033 + 0xbf800000, 0xbe804300, 4034 + 0xbe824302, 0x80f6a076, 4035 + 0x82f78077, 0xf460603b, 4036 + 0xf8000000, 0xbf8a0000, 4105 4037 0x80fd887d, 0xbf800000, 4106 4038 0xbe804300, 0xbe824302, 4107 4039 0xbe844304, 0xbe864306, 4108 - 0x80f8c078, 0xf462803a, 4109 - 0xf0000000, 0xbf8a0000, 4110 - 0x80fd907d, 0xbf800000, 4111 - 0xbe804300, 0xbe824302, 4112 - 0xbe844304, 0xbe864306, 4113 - 0xbe884308, 0xbe8a430a, 4114 - 0xbe8c430c, 0xbe8e430e, 4115 - 0xbf06807d, 0xbfa1fff0, 4116 - 0xb980f801, 0x00000000, 4117 - 0xb8f83b05, 0x80788178, 4118 - 0xbf0d9972, 0xbfa20002, 4119 - 0x84788978, 0xbfa00001, 4120 - 0x84788a78, 0xb8ee1e06, 4121 - 0x846e8a6e, 0x80786e78, 4040 + 0x80f6c076, 0x82f78077, 4041 + 0xf460803b, 0xf8000000, 4042 + 0xbf8a0000, 0x80fd907d, 4043 + 0xbf800000, 0xbe804300, 4044 + 0xbe824302, 0xbe844304, 4045 + 0xbe864306, 0xbe884308, 4046 + 0xbe8a430a, 0xbe8c430c, 4047 + 0xbe8e430e, 0xbf06807d, 4048 + 0xbfa1ffef, 0xb980f801, 4049 + 0x00000000, 0xb8f83b05, 4050 + 0x80788178, 0xbf0d9972, 4051 + 0xbfa20002, 0x84788978, 4052 + 0xbfa00001, 0x84788a78, 4122 4053 0x8078ff78, 0x00000200, 4123 - 0xbef600ff, 0x01000000, 4124 - 0xbeff0071, 0xf4621bfa, 4125 - 0xf0000000, 0x80788478, 4126 - 0xf4621b3a, 0xf0000000, 4127 - 0x80788478, 0xf4621b7a, 4128 - 0xf0000000, 0x80788478, 4129 - 0xf4621c3a, 0xf0000000, 4130 - 0x80788478, 0xf4621c7a, 4131 - 0xf0000000, 0x80788478, 4132 - 0xf4621eba, 0xf0000000, 4133 - 0x80788478, 0xf4621efa, 4134 - 0xf0000000, 0x80788478, 4135 - 0xf4621e7a, 0xf0000000, 4136 - 0x80788478, 0xf4621cfa, 4137 - 0xf0000000, 0x80788478, 4138 - 0xf4621bba, 0xf0000000, 4139 - 0x80788478, 0xbf8a0000, 4140 - 0xb96ef814, 0xf4621bba, 4141 - 0xf0000000, 0x80788478, 4142 - 0xbf8a0000, 0xb96ef815, 4143 - 0xf4621bba, 0xf0000000, 4144 - 0x80788478, 0xbf8a0000, 4145 - 0xb96ef812, 0xf4621bba, 4146 - 0xf0000000, 0x80788478, 4147 - 0xbf8a0000, 0xb96ef813, 4148 - 0x8b6eff7f, 0x04000000, 4149 - 0xbfa1000d, 0x80788478, 4150 - 0xf4621bba, 0xf0000000, 4151 - 0x80788478, 0xbf8a0000, 4152 - 0xbf0d806e, 0xbfa10006, 4153 - 0x856e906e, 0x8b6e6e6e, 4154 - 0xbfa10003, 0xbe804ec1, 4155 - 0x816ec16e, 0xbfa0fffb, 4156 - 0xbefd006f, 0xbefe0070, 4157 - 0xbeff0071, 0xb97b2011, 4158 - 0x857b867b, 0xb97b0191, 4159 - 0x857b827b, 0xb97bba11, 4160 - 0xb973f801, 0xb8ee3b05, 4161 - 0x806e816e, 0xbf0d9972, 4162 - 0xbfa20002, 0x846e896e, 4163 - 0xbfa00001, 0x846e8a6e, 4164 - 0xb8ef1e06, 0x846f8a6f, 4165 - 0x806e6f6e, 0x806eff6e, 4166 - 0x00000200, 0x806e746e, 4167 - 0x826f8075, 0x8b6fff6f, 4168 - 0x0000ffff, 0xf4605c37, 4169 - 0xf8000050, 0xf4605d37, 4170 - 0xf8000060, 0xf4601e77, 4171 - 0xf8000074, 0xbf8a0000, 4054 + 0x80767874, 0x82778075, 4055 + 0xbeff0071, 0xf4601bfb, 4056 + 0xf8000000, 0xf4601b3b, 4057 + 0xf8000004, 0xf4601b7b, 4058 + 0xf8000008, 0xf4601c3b, 4059 + 0xf800000c, 0xf4601c7b, 4060 + 0xf8000010, 0xf4601ebb, 4061 + 0xf8000014, 0xf4601efb, 4062 + 0xf8000018, 0xf4601e7b, 4063 + 0xf800001c, 0xf4601cfb, 4064 + 0xf8000020, 0xf4601bbb, 4065 + 0xf8000024, 0xbf8a0000, 4066 + 0xb96ef814, 0xf4601bbb, 4067 + 0xf8000028, 0xbf8a0000, 4068 + 0xb96ef815, 0xf4601bbb, 4069 + 0xf800002c, 0xbf8a0000, 4070 + 0xb96ef812, 0xf4601bbb, 4071 + 0xf8000030, 0xbf8a0000, 4072 + 0xb96ef813, 0x8b6eff7f, 4073 + 0x04000000, 0xbfa1000b, 4074 + 0xf4601bbb, 0xf8000038, 4075 + 0xbf8a0000, 0xbf0d806e, 4076 + 0xbfa10006, 0x856e906e, 4077 + 0x8b6e6e6e, 0xbfa10003, 4078 + 0xbe804ec1, 0x816ec16e, 4079 + 0xbfa0fffb, 0xbefd006f, 4080 + 0xbefe0070, 0xbeff0071, 4081 + 0xb97b2011, 0x857b867b, 4082 + 0xb97b0191, 0x857b827b, 4083 + 0xb97bba11, 0xb973f801, 4084 + 0xb8ee3b05, 0x806e816e, 4085 + 0xbf0d9972, 0xbfa20002, 4086 + 0x846e896e, 0xbfa00001, 4087 + 0x846e8a6e, 0x806eff6e, 4088 + 0x00000240, 0x806e746e, 4089 + 0x826f8075, 0xf4605c37, 4090 + 0xf8000010, 0xf4605d37, 4091 + 0xf8000020, 0xf4601e77, 4092 + 0xf8000034, 0xbf8a0000, 4172 4093 0x8b6dff6d, 0x0000ffff, 4173 4094 0x8bfe7e7e, 0x8bea6a6a, 4174 4095 0x936eff77, 0x0002001a, ··· 4587 4666 }; 4588 4667 4589 4668 static const uint32_t cwsr_trap_gfx12_1_0_hex[] = { 4590 - 0xbfa00001, 0xbfa003b7, 4669 + 0xbfa00001, 0xbfa003ac, 4591 4670 0xb0804009, 0xb8f8f804, 4592 4671 0x9178ff78, 0x00008c00, 4593 4672 0xb8fbf811, 0x8b6eff78, 4594 4673 0x00004000, 0xbfa10008, 4595 4674 0x8b6eff7b, 0x00000080, 4596 4675 0xbfa20018, 0x8b6ea07b, 4597 - 0xbfa200e1, 0xbf830010, 4676 + 0xbfa200d1, 0xbf830010, 4598 4677 0xb8fbf811, 0xbfa0fffb, 4599 4678 0x8b6eff7b, 0x00000bd0, 4600 4679 0xbfa20010, 0xb8eef812, ··· 4605 4684 0xf0000000, 0xbfa20005, 4606 4685 0x8b6fff6f, 0x00000200, 4607 4686 0xbfa20002, 0x8b6ea07b, 4608 - 0xbfa200cb, 0x9177ff77, 4687 + 0xbfa200bb, 0x9177ff77, 4609 4688 0x007fc000, 0xb8fa04a1, 4610 4689 0x847a967a, 0x8c777a77, 4611 4690 0xb8fa0421, 0x847a957a, ··· 4634 4713 0x01ffffff, 0xb8fbf811, 4635 4714 0xbf0d847b, 0xbfa20078, 4636 4715 0xf4003eb6, 0xf8000000, 4637 - 0xf4003bb6, 0xf8000008, 4638 - 0xbfc70001, 0x8b76ff7a, 4716 + 0xbfc70000, 0xf4003bb6, 4717 + 0xf8000008, 0x8b76ff7a, 4639 4718 0x80000000, 0xbfa20027, 4640 4719 0x9376ff7a, 0x00060019, 4641 4720 0x81f9a376, 0xbf0b8179, ··· 4711 4790 0x8c777a77, 0xb980f821, 4712 4791 0x00000000, 0xbf0d847b, 4713 4792 0xbfa20078, 0xf4003eb6, 4714 - 0xf8000000, 0xf4003bb6, 4715 - 0xf8000008, 0xbfc70001, 4793 + 0xf8000000, 0xbfc70000, 4794 + 0xf4003bb6, 0xf8000008, 4716 4795 0x8b76ff7a, 0x80000000, 4717 4796 0xbfa20027, 0x9376ff7a, 4718 4797 0x00060019, 0x81f9a376, ··· 4833 4912 0x8070ff70, 0x00000200, 4834 4913 0x7e000280, 0x7e020280, 4835 4914 0x7e040280, 0xbefd0080, 4836 - 0xb8faf802, 0xbf0c8b7a, 4837 - 0xbfa20003, 0xbe804fc2, 4838 - 0xbf94fffe, 0xbfa10001, 4839 - 0xbe804ec4, 0xbf94fffc, 4840 - 0xb8faf804, 0x8b7aff7a, 4841 - 0x0001000c, 0x9178ff78, 4842 - 0x0001000c, 0x8c787a78, 4843 4915 0xd7610002, 0x0000fa71, 4844 - 0x807d817d, 0xd7610002, 4916 + 0x807d817d, 0xb8faf802, 4917 + 0xbf0c8b7a, 0xbfa20003, 4918 + 0xbe804fc2, 0xbf94fffe, 4919 + 0xbfa10001, 0xbe804ec4, 4920 + 0xbf94fffc, 0xbefa4c88, 4921 + 0xbfc70000, 0xbf0c807a, 4922 + 0xbfa20006, 0x9371ff7a, 4923 + 0x00070004, 0x937aff7a, 4924 + 0x00070010, 0xbf06717a, 4925 + 0xbfa2fff6, 0xb8faf804, 4926 + 0x8b7aff7a, 0x0001000c, 4927 + 0x9178ff78, 0x0001000c, 4928 + 0x8c787a78, 0xd7610002, 4845 4929 0x0000fa6c, 0x807d817d, 4846 - 0x917aff6d, 0x80000000, 4930 + 0x8b7aff6d, 0x01ffffff, 4847 4931 0xd7610002, 0x0000fa7a, 4848 4932 0x807d817d, 0xd7610002, 4849 4933 0x0000fa6e, 0x807d817d, ··· 4878 4952 0x807d817d, 0xbefa4c88, 4879 4953 0xbfc70000, 0xd7610002, 4880 4954 0x0000fa7a, 0x807d817d, 4881 - 0xbefe00ff, 0x0000ffff, 4882 - 0xbeff0080, 0x80767074, 4883 - 0x82778075, 0xee0a4076, 4884 - 0x010c0000, 0x00000000, 4885 - 0xbefe00c1, 0x7e040280, 4886 - 0xbefa5081, 0xbfc70000, 4887 - 0xd7610002, 0x0001007a, 4888 - 0xbefa5082, 0xbfc70000, 4889 - 0xd7610002, 0x0001027a, 4890 - 0xbefa5083, 0xbfc70000, 4891 - 0xd7610002, 0x0001047a, 4892 - 0xbefa5084, 0xbfc70000, 4893 - 0xd7610002, 0x0001067a, 4894 - 0xbefa5085, 0xbfc70000, 4895 - 0xd7610002, 0x0001087a, 4896 - 0xbefa5086, 0xbfc70000, 4897 - 0xd7610002, 0x00010a7a, 4898 - 0xbefa5087, 0xbfc70000, 4899 - 0xd7610002, 0x00010c7a, 4900 - 0xbefa5088, 0xbfc70000, 4901 - 0xd7610002, 0x00010e7a, 4902 - 0xbefa5089, 0xbfc70000, 4903 - 0xd7610002, 0x0001107a, 4904 - 0xbefa508a, 0xbfc70000, 4905 - 0xd7610002, 0x0001127a, 4906 - 0xbefa508b, 0xbfc70000, 4907 - 0xd7610002, 0x0001147a, 4908 - 0xbefa508c, 0xbfc70000, 4909 - 0xd7610002, 0x0001167a, 4910 - 0xbefa508d, 0xbfc70000, 4911 - 0xd7610002, 0x0001187a, 4912 - 0xbefa508e, 0xbfc70000, 4913 - 0xd7610002, 0x00011a7a, 4914 - 0xbefa508f, 0xbfc70000, 4915 - 0xd7610002, 0x00011c7a, 4916 - 0xbefa5090, 0xbfc70000, 4917 - 0xd7610002, 0x00011e7a, 4955 + 0xb8faf81a, 0xd7610002, 4956 + 0x0000fa7a, 0x807d817d, 4957 + 0xbefe00c1, 0xbeff0080, 4958 + 0x80767074, 0x82778075, 4918 4959 0xee0a4076, 0x010c0000, 4919 - 0x00008000, 0xb8f03b05, 4920 - 0x80708170, 0xbf0d9973, 4921 - 0xbfa20002, 0x84708970, 4922 - 0xbfa00001, 0x84708a70, 4923 - 0xbef90080, 0xbefd0080, 4924 - 0xbf800000, 0xbe804100, 4925 - 0xbe824102, 0xbe844104, 4926 - 0xbe864106, 0xbe884108, 4927 - 0xbe8a410a, 0xbe8c410c, 4928 - 0xbe8e410e, 0xd7610002, 4929 - 0x0000f200, 0x80798179, 4930 - 0xd7610002, 0x0000f201, 4931 - 0x80798179, 0xd7610002, 4932 - 0x0000f202, 0x80798179, 4933 - 0xd7610002, 0x0000f203, 4934 - 0x80798179, 0xd7610002, 4935 - 0x0000f204, 0x80798179, 4936 - 0xd7610002, 0x0000f205, 4937 - 0x80798179, 0xd7610002, 4938 - 0x0000f206, 0x80798179, 4939 - 0xd7610002, 0x0000f207, 4940 - 0x80798179, 0xd7610002, 4941 - 0x0000f208, 0x80798179, 4942 - 0xd7610002, 0x0000f209, 4943 - 0x80798179, 0xd7610002, 4944 - 0x0000f20a, 0x80798179, 4945 - 0xd7610002, 0x0000f20b, 4946 - 0x80798179, 0xd7610002, 4947 - 0x0000f20c, 0x80798179, 4948 - 0xd7610002, 0x0000f20d, 4949 - 0x80798179, 0xd7610002, 4950 - 0x0000f20e, 0x80798179, 4951 - 0xd7610002, 0x0000f20f, 4952 - 0x80798179, 0xbf06a079, 4953 - 0xbfa10009, 0x80767074, 4954 - 0x82778075, 0xee0a4076, 4955 - 0x010c0000, 0x00000000, 4956 - 0x8070ff70, 0x00000080, 4957 - 0xbef90080, 0x7e040280, 4958 - 0x807d907d, 0xbf0aff7d, 4959 - 0x00000060, 0xbfa2ffb9, 4960 + 0x00000000, 0xbefe00c1, 4961 + 0x7e040280, 0xbefa5081, 4962 + 0xbfc70000, 0xd7610002, 4963 + 0x0001007a, 0xbefa5082, 4964 + 0xbfc70000, 0xd7610002, 4965 + 0x0001027a, 0xbefa5083, 4966 + 0xbfc70000, 0xd7610002, 4967 + 0x0001047a, 0xbefa5084, 4968 + 0xbfc70000, 0xd7610002, 4969 + 0x0001067a, 0xbefa5085, 4970 + 0xbfc70000, 0xd7610002, 4971 + 0x0001087a, 0xbefa5086, 4972 + 0xbfc70000, 0xd7610002, 4973 + 0x00010a7a, 0xbefa5087, 4974 + 0xbfc70000, 0xd7610002, 4975 + 0x00010c7a, 0xbefa5088, 4976 + 0xbfc70000, 0xd7610002, 4977 + 0x00010e7a, 0xbefa5089, 4978 + 0xbfc70000, 0xd7610002, 4979 + 0x0001107a, 0xbefa508a, 4980 + 0xbfc70000, 0xd7610002, 4981 + 0x0001127a, 0xbefa508b, 4982 + 0xbfc70000, 0xd7610002, 4983 + 0x0001147a, 0xbefa508c, 4984 + 0xbfc70000, 0xd7610002, 4985 + 0x0001167a, 0xbefa508d, 4986 + 0xbfc70000, 0xd7610002, 4987 + 0x0001187a, 0xbefa508e, 4988 + 0xbfc70000, 0xd7610002, 4989 + 0x00011a7a, 0xbefa508f, 4990 + 0xbfc70000, 0xd7610002, 4991 + 0x00011c7a, 0xbefa5090, 4992 + 0xbfc70000, 0xd7610002, 4993 + 0x00011e7a, 0xee0a4076, 4994 + 0x010c0000, 0x00008000, 4995 + 0xb8f03b05, 0x80708170, 4996 + 0xbf0d9973, 0xbfa20002, 4997 + 0x84708970, 0xbfa00001, 4998 + 0x84708a70, 0xbef90080, 4999 + 0xbefd0080, 0xbf800000, 4960 5000 0xbe804100, 0xbe824102, 4961 5001 0xbe844104, 0xbe864106, 4962 5002 0xbe884108, 0xbe8a410a, 5003 + 0xbe8c410c, 0xbe8e410e, 4963 5004 0xd7610002, 0x0000f200, 4964 5005 0x80798179, 0xd7610002, 4965 5006 0x0000f201, 0x80798179, ··· 4945 5052 0xd7610002, 0x0000f20a, 4946 5053 0x80798179, 0xd7610002, 4947 5054 0x0000f20b, 0x80798179, 4948 - 0xbefe00ff, 0x0000ffff, 5055 + 0xd7610002, 0x0000f20c, 5056 + 0x80798179, 0xd7610002, 5057 + 0x0000f20d, 0x80798179, 5058 + 0xd7610002, 0x0000f20e, 5059 + 0x80798179, 0xd7610002, 5060 + 0x0000f20f, 0x80798179, 5061 + 0xbf06a079, 0xbfa10009, 4949 5062 0x80767074, 0x82778075, 4950 5063 0xee0a4076, 0x010c0000, 4951 - 0x00000000, 0xbefe00c1, 4952 - 0x857d9973, 0x8b7d817d, 4953 - 0xbf06817d, 0xbfa20002, 4954 - 0xbeff0080, 0xbfa00001, 4955 - 0xbeff00c1, 0xb8fb4306, 4956 - 0x8b7bc17b, 0xbfa10042, 4957 - 0x8b7aff6d, 0x80000000, 4958 - 0xbfa1003f, 0x847b8a7b, 4959 - 0xb8f03b05, 0x80708170, 4960 - 0xbf0d9973, 0xbfa20002, 4961 - 0x84708970, 0xbfa00001, 4962 - 0x84708a70, 0x8070ff70, 4963 - 0x00000200, 0x8070ff70, 4964 - 0x00000200, 0xd71f0000, 4965 - 0x000100c1, 0xd7200000, 4966 - 0x000200c1, 0x16000084, 4967 - 0x857d9973, 0x8b7d817d, 4968 - 0xbf06817d, 0xbefd0080, 4969 - 0xbfa20015, 0xbe8300ff, 4970 - 0x00000080, 0xbf800000, 4971 - 0xbf800000, 0xbf800000, 4972 - 0xd8d80000, 0x01000000, 4973 - 0xbf8a0000, 0x80767074, 5064 + 0x00000000, 0x8070ff70, 5065 + 0x00000080, 0xbef90080, 5066 + 0x7e040280, 0x807d907d, 5067 + 0xbf0aff7d, 0x00000060, 5068 + 0xbfa2ffb9, 0xbe804100, 5069 + 0xbe824102, 0xbe844104, 5070 + 0xbe864106, 0xbe884108, 5071 + 0xbe8a410a, 0xd7610002, 5072 + 0x0000f200, 0x80798179, 5073 + 0xd7610002, 0x0000f201, 5074 + 0x80798179, 0xd7610002, 5075 + 0x0000f202, 0x80798179, 5076 + 0xd7610002, 0x0000f203, 5077 + 0x80798179, 0xd7610002, 5078 + 0x0000f204, 0x80798179, 5079 + 0xd7610002, 0x0000f205, 5080 + 0x80798179, 0xd7610002, 5081 + 0x0000f206, 0x80798179, 5082 + 0xd7610002, 0x0000f207, 5083 + 0x80798179, 0xd7610002, 5084 + 0x0000f208, 0x80798179, 5085 + 0xd7610002, 0x0000f209, 5086 + 0x80798179, 0xd7610002, 5087 + 0x0000f20a, 0x80798179, 5088 + 0xd7610002, 0x0000f20b, 5089 + 0x80798179, 0xbefe00ff, 5090 + 0x0000ffff, 0x80767074, 4974 5091 0x82778075, 0xee0a4076, 4975 - 0x008c0000, 0x00000000, 4976 - 0x807d037d, 0x80700370, 4977 - 0xd5250000, 0x0001ff00, 4978 - 0x00000080, 0xbf0a7b7d, 4979 - 0xbfa2fff1, 0xbfa00014, 4980 - 0xbe8300ff, 0x00000100, 5092 + 0x010c0000, 0x00000000, 5093 + 0xbefe00c1, 0x857d9973, 5094 + 0x8b7d817d, 0xbf06817d, 5095 + 0xbfa20002, 0xbeff0080, 5096 + 0xbfa00001, 0xbeff00c1, 5097 + 0xb8fb4306, 0x8b7bc17b, 5098 + 0xbfa10042, 0x8b7aff6d, 5099 + 0x80000000, 0xbfa1003f, 5100 + 0x847b8a7b, 0xb8f03b05, 5101 + 0x80708170, 0xbf0d9973, 5102 + 0xbfa20002, 0x84708970, 5103 + 0xbfa00001, 0x84708a70, 5104 + 0x8070ff70, 0x00000200, 5105 + 0x8070ff70, 0x00000200, 5106 + 0xd71f0000, 0x000100c1, 5107 + 0xd7200000, 0x000200c1, 5108 + 0x16000084, 0x857d9973, 5109 + 0x8b7d817d, 0xbf06817d, 5110 + 0xbefd0080, 0xbfa20015, 5111 + 0xbe8300ff, 0x00000080, 4981 5112 0xbf800000, 0xbf800000, 4982 5113 0xbf800000, 0xd8d80000, 4983 5114 0x01000000, 0xbf8a0000, ··· 5009 5092 0xee0a4076, 0x008c0000, 5010 5093 0x00000000, 0x807d037d, 5011 5094 0x80700370, 0xd5250000, 5012 - 0x0001ff00, 0x00000100, 5095 + 0x0001ff00, 0x00000080, 5013 5096 0xbf0a7b7d, 0xbfa2fff1, 5014 - 0xbefe00c1, 0x857d9973, 5015 - 0x8b7d817d, 0xbf06817d, 5016 - 0xbfa20004, 0xbef000ff, 5017 - 0x00000200, 0xbeff0080, 5018 - 0xbfa00003, 0xbef000ff, 5019 - 0x00000400, 0xbeff00c1, 5020 - 0xb8fb3b05, 0x807b817b, 5021 - 0x847b827b, 0x857d9973, 5022 - 0x8b7d817d, 0xbf06817d, 5023 - 0xbfa2001b, 0xbefd0084, 5024 - 0xbf0a7b7d, 0xbfa10032, 5025 - 0x7e008700, 0x7e028701, 5026 - 0x7e048702, 0x7e068703, 5027 - 0x80767074, 0x82778075, 5028 - 0xee0a4076, 0x000c0000, 5029 - 0x00000000, 0xee0a4076, 5030 - 0x008c0000, 0x00008000, 5031 - 0xee0a4076, 0x010c0000, 5032 - 0x00010000, 0xee0a4076, 5033 - 0x018c0000, 0x00018000, 5034 - 0x807d847d, 0x8070ff70, 5035 - 0x00000200, 0xbf0a7b7d, 5036 - 0xbfa2ffe9, 0xbfa0001a, 5097 + 0xbfa00014, 0xbe8300ff, 5098 + 0x00000100, 0xbf800000, 5099 + 0xbf800000, 0xbf800000, 5100 + 0xd8d80000, 0x01000000, 5101 + 0xbf8a0000, 0x80767074, 5102 + 0x82778075, 0xee0a4076, 5103 + 0x008c0000, 0x00000000, 5104 + 0x807d037d, 0x80700370, 5105 + 0xd5250000, 0x0001ff00, 5106 + 0x00000100, 0xbf0a7b7d, 5107 + 0xbfa2fff1, 0xbefe00c1, 5108 + 0x857d9973, 0x8b7d817d, 5109 + 0xbf06817d, 0xbfa20004, 5110 + 0xbef000ff, 0x00000200, 5111 + 0xbeff0080, 0xbfa00003, 5112 + 0xbef000ff, 0x00000400, 5113 + 0xbeff00c1, 0xb8fb3b05, 5114 + 0x807b817b, 0x847b827b, 5115 + 0x857d9973, 0x8b7d817d, 5116 + 0xbf06817d, 0xbfa2001b, 5037 5117 0xbefd0084, 0xbf0a7b7d, 5038 - 0xbfa10017, 0x7e008700, 5118 + 0xbfa10032, 0x7e008700, 5039 5119 0x7e028701, 0x7e048702, 5040 5120 0x7e068703, 0x80767074, 5041 5121 0x82778075, 0xee0a4076, 5042 5122 0x000c0000, 0x00000000, 5043 5123 0xee0a4076, 0x008c0000, 5044 - 0x00010000, 0xee0a4076, 5045 - 0x010c0000, 0x00020000, 5124 + 0x00008000, 0xee0a4076, 5125 + 0x010c0000, 0x00010000, 5046 5126 0xee0a4076, 0x018c0000, 5047 - 0x00030000, 0x807d847d, 5048 - 0x8070ff70, 0x00000400, 5127 + 0x00018000, 0x807d847d, 5128 + 0x8070ff70, 0x00000200, 5049 5129 0xbf0a7b7d, 0xbfa2ffe9, 5050 - 0xbfa00180, 0xbef4007e, 5051 - 0x8b75ff7f, 0x01ffffff, 5052 - 0xbef1007f, 0xb8f20742, 5053 - 0x84729972, 0x8b6eff7f, 5054 - 0x04000000, 0xbfa10044, 5130 + 0xbfa0001a, 0xbefd0084, 5131 + 0xbf0a7b7d, 0xbfa10017, 5132 + 0x7e008700, 0x7e028701, 5133 + 0x7e048702, 0x7e068703, 5134 + 0x80767074, 0x82778075, 5135 + 0xee0a4076, 0x000c0000, 5136 + 0x00000000, 0xee0a4076, 5137 + 0x008c0000, 0x00010000, 5138 + 0xee0a4076, 0x010c0000, 5139 + 0x00020000, 0xee0a4076, 5140 + 0x018c0000, 0x00030000, 5141 + 0x807d847d, 0x8070ff70, 5142 + 0x00000400, 0xbf0a7b7d, 5143 + 0xbfa2ffe9, 0xbfa00184, 5144 + 0xbef4007e, 0x8b75ff7f, 5145 + 0x01ffffff, 0xbef1007f, 5146 + 0xb8f20742, 0x84729972, 5147 + 0x8b6eff7f, 0x04000000, 5148 + 0xbfa10044, 0xbefe00c1, 5149 + 0x857d9972, 0x8b7d817d, 5150 + 0xbf06817d, 0xbfa20002, 5151 + 0xbeff0080, 0xbfa00001, 5152 + 0xbeff00c1, 0xb8ef4306, 5153 + 0x8b6fc16f, 0xbfa10039, 5154 + 0x846f8a6f, 0xb8f83b05, 5155 + 0x80788178, 0xbf0d9972, 5156 + 0xbfa20002, 0x84788978, 5157 + 0xbfa00001, 0x84788a78, 5158 + 0x8078ff78, 0x00000200, 5159 + 0x8078ff78, 0x00000200, 5160 + 0x857d9972, 0x8b7d817d, 5161 + 0xbf06817d, 0xbefd0080, 5162 + 0xd71f0001, 0x000100c1, 5163 + 0xd7200001, 0x000202c1, 5164 + 0x30020282, 0xbfa20012, 5165 + 0x80767874, 0x82778075, 5166 + 0xee0a0076, 0x000c0000, 5167 + 0x00000000, 0xbf8a0000, 5168 + 0xd8340000, 0x00000001, 5169 + 0xd5250001, 0x0001ff01, 5170 + 0x00000080, 0x807dff7d, 5171 + 0x00000080, 0x8078ff78, 5172 + 0x00000080, 0xbf0a6f7d, 5173 + 0xbfa2ffef, 0xbfa00011, 5174 + 0x80767874, 0x82778075, 5175 + 0xee0a0076, 0x000c0000, 5176 + 0x00000000, 0xbf8a0000, 5177 + 0xd8340000, 0x00000001, 5178 + 0xd5250001, 0x0001ff01, 5179 + 0x00000100, 0x807dff7d, 5180 + 0x00000100, 0x8078ff78, 5181 + 0x00000100, 0xbf0a6f7d, 5182 + 0xbfa2ffef, 0xbef80080, 5055 5183 0xbefe00c1, 0x857d9972, 5056 5184 0x8b7d817d, 0xbf06817d, 5057 5185 0xbfa20002, 0xbeff0080, 5058 5186 0xbfa00001, 0xbeff00c1, 5059 - 0xb8ef4306, 0x8b6fc16f, 5060 - 0xbfa10039, 0x846f8a6f, 5187 + 0xb8ef3b05, 0x806f816f, 5188 + 0x846f826f, 0x857d9972, 5189 + 0x8b7d817d, 0xbf06817d, 5190 + 0xbfa2002c, 0xbeee0078, 5191 + 0x8078ff78, 0x00000200, 5192 + 0xbefd0084, 0x80767874, 5193 + 0x82778075, 0xee0a0076, 5194 + 0x000c0000, 0x00000000, 5195 + 0xee0a0076, 0x000c0001, 5196 + 0x00008000, 0xee0a0076, 5197 + 0x000c0002, 0x00010000, 5198 + 0xee0a0076, 0x000c0003, 5199 + 0x00018000, 0xbf8a0000, 5200 + 0x7e008500, 0x7e028501, 5201 + 0x7e048502, 0x7e068503, 5202 + 0x807d847d, 0x8078ff78, 5203 + 0x00000200, 0xbf0a6f7d, 5204 + 0xbfa2ffe8, 0x80766e74, 5205 + 0x82778075, 0xee0a0076, 5206 + 0x000c0000, 0x00000000, 5207 + 0xee0a0076, 0x000c0001, 5208 + 0x00008000, 0xee0a0076, 5209 + 0x000c0002, 0x00010000, 5210 + 0xee0a0076, 0x000c0003, 5211 + 0x00018000, 0xbf8a0000, 5212 + 0xbfa0002d, 0xbeee0078, 5213 + 0x8078ff78, 0x00000400, 5214 + 0xbefd0084, 0xbf0a6f7d, 5215 + 0xbfa10018, 0x80767874, 5216 + 0x82778075, 0xee0a0076, 5217 + 0x000c0000, 0x00000000, 5218 + 0xee0a0076, 0x000c0001, 5219 + 0x00010000, 0xee0a0076, 5220 + 0x000c0002, 0x00020000, 5221 + 0xee0a0076, 0x000c0003, 5222 + 0x00030000, 0xbf8a0000, 5223 + 0x7e008500, 0x7e028501, 5224 + 0x7e048502, 0x7e068503, 5225 + 0x807d847d, 0x8078ff78, 5226 + 0x00000400, 0xbf0a6f7d, 5227 + 0xbfa2ffe8, 0x80766e74, 5228 + 0x82778075, 0xee0a0076, 5229 + 0x000c0000, 0x00000000, 5230 + 0xee0a0076, 0x000c0001, 5231 + 0x00010000, 0xee0a0076, 5232 + 0x000c0002, 0x00020000, 5233 + 0xee0a0076, 0x000c0003, 5234 + 0x00030000, 0xbf8a0000, 5061 5235 0xb8f83b05, 0x80788178, 5062 5236 0xbf0d9972, 0xbfa20002, 5063 5237 0x84788978, 0xbfa00001, 5064 5238 0x84788a78, 0x8078ff78, 5065 - 0x00000200, 0x8078ff78, 5066 - 0x00000200, 0x857d9972, 5067 - 0x8b7d817d, 0xbf06817d, 5068 - 0xbefd0080, 0xd71f0001, 5069 - 0x000100c1, 0xd7200001, 5070 - 0x000202c1, 0x30020282, 5071 - 0xbfa20012, 0x80767874, 5072 - 0x82778075, 0xee0a0076, 5073 - 0x000c0000, 0x00000000, 5074 - 0xbf8a0000, 0xd8340000, 5075 - 0x00000001, 0xd5250001, 5076 - 0x0001ff01, 0x00000080, 5077 - 0x807dff7d, 0x00000080, 5078 - 0x8078ff78, 0x00000080, 5079 - 0xbf0a6f7d, 0xbfa2ffef, 5080 - 0xbfa00011, 0x80767874, 5081 - 0x82778075, 0xee0a0076, 5082 - 0x000c0000, 0x00000000, 5083 - 0xbf8a0000, 0xd8340000, 5084 - 0x00000001, 0xd5250001, 5085 - 0x0001ff01, 0x00000100, 5086 - 0x807dff7d, 0x00000100, 5087 - 0x8078ff78, 0x00000100, 5088 - 0xbf0a6f7d, 0xbfa2ffef, 5089 - 0xbef80080, 0xbefe00c1, 5090 - 0x857d9972, 0x8b7d817d, 5091 - 0xbf06817d, 0xbfa20002, 5092 - 0xbeff0080, 0xbfa00001, 5093 - 0xbeff00c1, 0xb8ef3b05, 5094 - 0x806f816f, 0x846f826f, 5095 - 0x857d9972, 0x8b7d817d, 5096 - 0xbf06817d, 0xbfa2002c, 5097 - 0xbeee0078, 0x8078ff78, 5098 - 0x00000200, 0xbefd0084, 5099 - 0x80767874, 0x82778075, 5100 - 0xee0a0076, 0x000c0000, 5101 - 0x00000000, 0xee0a0076, 5102 - 0x000c0001, 0x00008000, 5103 - 0xee0a0076, 0x000c0002, 5104 - 0x00010000, 0xee0a0076, 5105 - 0x000c0003, 0x00018000, 5106 - 0xbf8a0000, 0x7e008500, 5107 - 0x7e028501, 0x7e048502, 5108 - 0x7e068503, 0x807d847d, 5109 - 0x8078ff78, 0x00000200, 5110 - 0xbf0a6f7d, 0xbfa2ffe8, 5111 - 0x80766e74, 0x82778075, 5112 - 0xee0a0076, 0x000c0000, 5113 - 0x00000000, 0xee0a0076, 5114 - 0x000c0001, 0x00008000, 5115 - 0xee0a0076, 0x000c0002, 5116 - 0x00010000, 0xee0a0076, 5117 - 0x000c0003, 0x00018000, 5118 - 0xbf8a0000, 0xbfa0002d, 5119 - 0xbeee0078, 0x8078ff78, 5120 - 0x00000400, 0xbefd0084, 5121 - 0xbf0a6f7d, 0xbfa10018, 5122 - 0x80767874, 0x82778075, 5123 - 0xee0a0076, 0x000c0000, 5124 - 0x00000000, 0xee0a0076, 5125 - 0x000c0001, 0x00010000, 5126 - 0xee0a0076, 0x000c0002, 5127 - 0x00020000, 0xee0a0076, 5128 - 0x000c0003, 0x00030000, 5129 - 0xbf8a0000, 0x7e008500, 5130 - 0x7e028501, 0x7e048502, 5131 - 0x7e068503, 0x807d847d, 5132 - 0x8078ff78, 0x00000400, 5133 - 0xbf0a6f7d, 0xbfa2ffe8, 5134 - 0x80766e74, 0x82778075, 5135 - 0xee0a0076, 0x000c0000, 5136 - 0x00000000, 0xee0a0076, 5137 - 0x000c0001, 0x00010000, 5138 - 0xee0a0076, 0x000c0002, 5139 - 0x00020000, 0xee0a0076, 5140 - 0x000c0003, 0x00030000, 5141 - 0xbf8a0000, 0xb8f83b05, 5142 - 0x80788178, 0xbf0d9972, 5143 - 0xbfa20002, 0x84788978, 5144 - 0xbfa00001, 0x84788a78, 5145 - 0x8078ff78, 0x00000200, 5146 - 0x80f8ff78, 0x00000060, 5147 - 0x80767874, 0x82778075, 5148 - 0xbefd00ff, 0x0000006c, 5149 - 0xf460403b, 0xf8000000, 5150 - 0xbf8a0000, 0x80fd847d, 5151 - 0xbf800000, 0xbe804300, 5152 - 0xbe824302, 0x80f6a076, 5153 - 0x82f78077, 0xf460603b, 5239 + 0x00000200, 0x80f8ff78, 5240 + 0x00000060, 0x80767874, 5241 + 0x82778075, 0xbefd00ff, 5242 + 0x0000006c, 0xf460403b, 5154 5243 0xf8000000, 0xbf8a0000, 5155 - 0x80fd887d, 0xbf800000, 5244 + 0x80fd847d, 0xbf800000, 5156 5245 0xbe804300, 0xbe824302, 5157 - 0xbe844304, 0xbe864306, 5158 - 0x80f6c076, 0x82f78077, 5159 - 0xf460803b, 0xf8000000, 5160 - 0xbf8a0000, 0x80fd907d, 5246 + 0x80f6a076, 0x82f78077, 5247 + 0xf460603b, 0xf8000000, 5248 + 0xbf8a0000, 0x80fd887d, 5161 5249 0xbf800000, 0xbe804300, 5162 5250 0xbe824302, 0xbe844304, 5163 - 0xbe864306, 0xbe884308, 5164 - 0xbe8a430a, 0xbe8c430c, 5165 - 0xbe8e430e, 0xbf06807d, 5166 - 0xbfa1ffef, 0xb980f801, 5167 - 0x00000000, 0xb8f83b05, 5168 - 0x80788178, 0xbf0d9972, 5169 - 0xbfa20002, 0x84788978, 5170 - 0xbfa00001, 0x84788a78, 5171 - 0x8078ff78, 0x00000200, 5172 - 0x80767874, 0x82778075, 5173 - 0xbeff0071, 0xf4601bfb, 5174 - 0xf8000000, 0xf4601b3b, 5175 - 0xf8000004, 0xf4601b7b, 5176 - 0xf8000008, 0xf4601c3b, 5177 - 0xf800000c, 0xf4601c7b, 5178 - 0xf8000010, 0xf4601ebb, 5179 - 0xf8000014, 0xf4601efb, 5180 - 0xf8000018, 0xf4601e7b, 5181 - 0xf800001c, 0xf4601cfb, 5182 - 0xf8000020, 0xf4601bbb, 5183 - 0xf8000024, 0xbf8a0000, 5184 - 0xb96ef814, 0xf4601bbb, 5185 - 0xf8000028, 0xbf8a0000, 5186 - 0xb96ef815, 0xf4601bbb, 5187 - 0xf800002c, 0xbf8a0000, 5188 - 0xb96ef812, 0xf4601bbb, 5189 - 0xf8000030, 0xbf8a0000, 5190 - 0xb96ef813, 0x8b6eff7f, 5191 - 0x04000000, 0xbfa10022, 5192 - 0xf4601bbb, 0xf8000038, 5193 - 0xbf8a0000, 0xbf0d806e, 5194 - 0xbfa1001d, 0x856e906e, 5195 - 0x8b6e6e6e, 0xbfa10003, 5196 - 0xbe804ec1, 0x816ec16e, 5197 - 0xbfa0fffb, 0xbef800ff, 5198 - 0x00000080, 0xbefd0081, 5199 - 0xf4601bbb, 0xf0000000, 5200 - 0xbfc70000, 0x80788478, 5201 - 0x937eff6e, 0x00070004, 5202 - 0x847e907e, 0x8c7d7e7d, 5203 - 0xbe80517d, 0x917dff7d, 5204 - 0x007f0000, 0x856e906e, 5205 - 0x8b6e6e6e, 0xbfa10003, 5206 - 0xbe804e7d, 0x816ec16e, 5207 - 0xbfa0fffb, 0x807d817d, 5208 - 0xbf08907d, 0xbfa1ffec, 5209 - 0xf4601bbb, 0xf800003c, 5210 - 0xbfc70000, 0xbf0d806e, 5211 - 0xbfa1000c, 0xbf0d9a7f, 5212 - 0xbfa10002, 0xbf068180, 5213 - 0xbe804fc4, 0xbf94fffc, 5214 - 0xbfa10006, 0x856e906e, 5215 - 0x8b6e6e6e, 0xbfa10003, 5216 - 0xbe804ec3, 0x816ec16e, 5217 - 0xbfa0fffb, 0xbefd006f, 5218 - 0xbefe0070, 0xbeff0071, 5219 - 0xb979f822, 0xb97b2011, 5220 - 0x857b867b, 0xb97b0191, 5221 - 0x857b827b, 0xb97bba11, 5222 - 0xb973f801, 0xb8ee3b05, 5223 - 0x806e816e, 0xbf0d9972, 5224 - 0xbfa20002, 0x846e896e, 5225 - 0xbfa00001, 0x846e8a6e, 5226 - 0x806eff6e, 0x000001c0, 5227 - 0x806e746e, 0x826f8075, 5228 - 0xf4605c37, 0xf8000010, 5229 - 0xf4605d37, 0xf8000020, 5230 - 0xf4601e77, 0xf8000034, 5231 - 0xbf8a0000, 0x856e9677, 5232 - 0xb96e04a1, 0x856e9577, 5233 - 0xb96e0421, 0x856e8e77, 5234 - 0xb96e3021, 0x8b6dff6d, 5235 - 0x01ffffff, 0x8bfe7e7e, 5236 - 0x8bea6a6a, 0xb97af804, 5251 + 0xbe864306, 0x80f6c076, 5252 + 0x82f78077, 0xf460803b, 5253 + 0xf8000000, 0xbf8a0000, 5254 + 0x80fd907d, 0xbf800000, 5255 + 0xbe804300, 0xbe824302, 5256 + 0xbe844304, 0xbe864306, 5257 + 0xbe884308, 0xbe8a430a, 5258 + 0xbe8c430c, 0xbe8e430e, 5259 + 0xbf06807d, 0xbfa1ffef, 5260 + 0xb980f801, 0x00000000, 5261 + 0xb8f83b05, 0x80788178, 5262 + 0xbf0d9972, 0xbfa20002, 5263 + 0x84788978, 0xbfa00001, 5264 + 0x84788a78, 0x8078ff78, 5265 + 0x00000200, 0x80767874, 5266 + 0x82778075, 0xbeff0071, 5267 + 0xf4601bfb, 0xf8000000, 5268 + 0xf4601b3b, 0xf8000004, 5269 + 0xf4601b7b, 0xf8000008, 5270 + 0xf4601c3b, 0xf800000c, 5271 + 0xf4601c7b, 0xf8000010, 5272 + 0xf4601ebb, 0xf8000014, 5273 + 0xf4601efb, 0xf8000018, 5274 + 0xf4601e7b, 0xf800001c, 5275 + 0xf4601cfb, 0xf8000020, 5276 + 0xf4601bbb, 0xf8000024, 5277 + 0xbf8a0000, 0xb96ef814, 5278 + 0xf4601bbb, 0xf8000028, 5279 + 0xbf8a0000, 0xb96ef815, 5280 + 0xf4601bbb, 0xf800002c, 5281 + 0xbf8a0000, 0xb96ef812, 5282 + 0xf4601bbb, 0xf8000030, 5283 + 0xbf8a0000, 0xb96ef813, 5284 + 0x8b6eff7f, 0x04000000, 5285 + 0xbfa10022, 0xf4601bbb, 5286 + 0xf8000038, 0xbf8a0000, 5287 + 0xbf0d806e, 0xbfa1001d, 5288 + 0x856e906e, 0x8b6e6e6e, 5289 + 0xbfa10003, 0xbe804ec1, 5290 + 0x816ec16e, 0xbfa0fffb, 5291 + 0xbef800ff, 0x00000080, 5292 + 0xbefd0081, 0xf4601bbb, 5293 + 0xf0000000, 0xbfc70000, 5294 + 0x80788478, 0x937eff6e, 5295 + 0x00070004, 0x847e907e, 5296 + 0x8c7d7e7d, 0xbe80517d, 5297 + 0x917dff7d, 0x007f0000, 5298 + 0x856e906e, 0x8b6e6e6e, 5299 + 0xbfa10003, 0xbe804e7d, 5300 + 0x816ec16e, 0xbfa0fffb, 5301 + 0x807d817d, 0xbf08907d, 5302 + 0xbfa1ffec, 0xf4601bbb, 5303 + 0xf800003c, 0xbfc70000, 5304 + 0xbf0d806e, 0xbfa1000c, 5305 + 0xbf0d9a7f, 0xbfa10002, 5306 + 0xbf068180, 0xbe804fc4, 5307 + 0xbf94fffc, 0xbfa10006, 5308 + 0x856e906e, 0x8b6e6e6e, 5309 + 0xbfa10003, 0xbe804ec3, 5310 + 0x816ec16e, 0xbfa0fffb, 5311 + 0xf4601bbb, 0xf8000040, 5312 + 0xbfc70000, 0xb96ef81a, 5313 + 0xbefd006f, 0xbefe0070, 5314 + 0xbeff0071, 0xb979f822, 5315 + 0xb97b2011, 0x857b867b, 5316 + 0xb97b0191, 0x857b827b, 5317 + 0xb97bba11, 0xb973f801, 5318 + 0xb8ee3b05, 0x806e816e, 5319 + 0xbf0d9972, 0xbfa20002, 5320 + 0x846e896e, 0xbfa00001, 5321 + 0x846e8a6e, 0x806eff6e, 5322 + 0x000001c0, 0x806e746e, 5323 + 0x826f8075, 0xf4605c37, 5324 + 0xf8000010, 0xf4605d37, 5325 + 0xf8000020, 0xf4601e77, 5326 + 0xf8000034, 0xbf8a0000, 5327 + 0x856e9677, 0xb96e04a1, 5328 + 0x856e9577, 0xb96e0421, 5329 + 0x856e8e77, 0xb96e3021, 5330 + 0x8b6dff6d, 0x01ffffff, 5331 + 0x8bfe7e7e, 0x8bea6a6a, 5332 + 0xb97af804, 0xb8eef802, 5333 + 0xbf0c8b6e, 0xbfa20003, 5334 + 0xbe804fc2, 0xbf94fffe, 5335 + 0xbfa10001, 0xbe804ec4, 5336 + 0xbf94fffc, 0x857a897a, 5337 + 0xb97a0244, 0xbe804a6c, 5237 5338 0xb8eef802, 0xbf0c8b6e, 5238 5339 0xbfa20003, 0xbe804fc2, 5239 5340 0xbf94fffe, 0xbfa10001, 5240 5341 0xbe804ec4, 0xbf94fffc, 5241 - 0x857a897a, 0xb97a0244, 5242 - 0xbe804a6c, 0xb8eef802, 5243 - 0xbf0c8b6e, 0xbfa20003, 5244 - 0xbe804fc2, 0xbf94fffe, 5245 - 0xbfa10001, 0xbe804ec4, 5246 - 0xbf94fffc, 0xbfb10000, 5342 + 0xbfb10000, 0xbf9f0000, 5247 5343 0xbf9f0000, 0xbf9f0000, 5248 5344 0xbf9f0000, 0xbf9f0000, 5249 - 0xbf9f0000, 0x00000000, 5250 5345 };
+66 -10
drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler_gfx12.asm
··· 35 35 #define HAVE_BANKED_VGPRS (ASIC_FAMILY == CHIP_GC_12_0_3) 36 36 #define NUM_NAMED_BARRIERS (ASIC_FAMILY == CHIP_GC_12_0_3 ? 0x10 : 0) 37 37 #define HAVE_CLUSTER_BARRIER (ASIC_FAMILY == CHIP_GC_12_0_3) 38 + #define CLUSTER_BARRIER_SERIALIZE_WORKAROUND (ASIC_FAMILY == CHIP_GC_12_0_3) 39 + #define RELAXED_SCHEDULING_IN_TRAP (ASIC_FAMILY == CHIP_GFX12) 38 40 39 41 #define SINGLE_STEP_MISSED_WORKAROUND 1 //workaround for lost TRAP_AFTER_INST exception when SAVECTX raised 40 42 #define HAVE_VALU_SGPR_HAZARD (ASIC_FAMILY == CHIP_GFX12) ··· 106 104 var SQ_WAVE_SCHED_MODE_DEP_MODE_SIZE = 2 107 105 108 106 var BARRIER_STATE_SIGNAL_OFFSET = 16 107 + var BARRIER_STATE_SIGNAL_SIZE = 7 109 108 var BARRIER_STATE_MEMBER_OFFSET = 4 110 109 var BARRIER_STATE_MEMBER_SIZE = 7 111 110 var BARRIER_STATE_VALID_OFFSET = 0 111 + 112 + #if RELAXED_SCHEDULING_IN_TRAP 113 + var TTMP11_SCHED_MODE_SHIFT = 26 114 + var TTMP11_SCHED_MODE_SIZE = 2 115 + var TTMP11_SCHED_MODE_MASK = 0xC000000 116 + #endif 112 117 113 118 var NAMED_BARRIERS_SR_OFFSET_FROM_HWREG = 0x80 114 119 var S_BARRIER_INIT_MEMBERCNT_MASK = 0x7F0000 ··· 229 220 s_branch L_RESTORE 230 221 231 222 L_SKIP_RESTORE: 223 + #if RELAXED_SCHEDULING_IN_TRAP 232 224 // Assume most relaxed scheduling mode is set. Save and revert to normal mode. 233 225 s_getreg_b32 ttmp2, hwreg(HW_REG_WAVE_SCHED_MODE) 234 226 s_wait_alu 0 235 227 s_setreg_imm32_b32 hwreg(HW_REG_WAVE_SCHED_MODE, \ 236 228 SQ_WAVE_SCHED_MODE_DEP_MODE_SHIFT, SQ_WAVE_SCHED_MODE_DEP_MODE_SIZE), 0 229 + #endif 237 230 238 231 s_getreg_b32 s_save_state_priv, hwreg(HW_REG_WAVE_STATE_PRIV) //save STATUS since we will change SCC 239 232 233 + #if RELAXED_SCHEDULING_IN_TRAP 240 234 // Save SCHED_MODE[1:0] into ttmp11[27:26]. 241 235 s_andn2_b32 ttmp11, ttmp11, TTMP11_SCHED_MODE_MASK 242 236 s_lshl_b32 ttmp2, ttmp2, TTMP11_SCHED_MODE_SHIFT 243 237 s_or_b32 ttmp11, ttmp11, ttmp2 238 + #endif 244 239 245 240 // Clear SPI_PRIO: do not save with elevated priority. 246 241 // Clear ECC_ERR: prevents SQC store and triggers FATAL_HALT if setreg'd. ··· 326 313 s_cbranch_scc0 L_NO_SIGN_EXTEND_TMA 327 314 s_or_b32 ttmp15, ttmp15, ~ADDRESS_HI32_MASK 328 315 L_NO_SIGN_EXTEND_TMA: 329 - #if ASIC_FAMILY == CHIP_GFX12 316 + #if RELAXED_SCHEDULING_IN_TRAP 330 317 // Move SCHED_MODE[1:0] from ttmp11 to unused bits in ttmp1[27:26] (return PC_HI). 331 318 // The second-level trap will restore from ttmp1 for backwards compatibility. 332 319 s_and_b32 ttmp2, ttmp11, TTMP11_SCHED_MODE_MASK ··· 392 379 // Only restore fields which the trap handler changes. 393 380 s_lshr_b32 s_save_state_priv, s_save_state_priv, SQ_WAVE_STATE_PRIV_SCC_SHIFT 394 381 382 + #if RELAXED_SCHEDULING_IN_TRAP 395 383 // Assume relaxed scheduling mode after this point. 396 384 restore_sched_mode(ttmp2) 385 + #endif 397 386 398 387 s_setreg_b32 hwreg(HW_REG_WAVE_STATE_PRIV, SQ_WAVE_STATE_PRIV_SCC_SHIFT, \ 399 388 SQ_WAVE_STATE_PRIV_POISON_ERR_SHIFT - SQ_WAVE_STATE_PRIV_SCC_SHIFT + 1), s_save_state_priv ··· 534 519 v_mov_b32 v2, 0x0 //Set of SGPRs for TCP store 535 520 s_mov_b32 m0, 0x0 //Next lane of v2 to write to 536 521 522 + write_hwreg_to_v2(s_save_m0) 523 + 537 524 // Ensure no further changes to barrier or LDS state. 538 525 // STATE_PRIV.*BARRIER_COMPLETE may change up to this point. 539 - wait_trap_barriers(s_save_tmp) 526 + wait_trap_barriers(s_save_tmp, s_save_m0, 1) 540 527 541 528 // Re-read final state of *BARRIER_COMPLETE fields for save. 542 529 s_getreg_b32 s_save_tmp, hwreg(HW_REG_WAVE_STATE_PRIV) ··· 546 529 s_andn2_b32 s_save_state_priv, s_save_state_priv, SQ_WAVE_STATE_PRIV_ALL_BARRIER_COMPLETE_MASK 547 530 s_or_b32 s_save_state_priv, s_save_state_priv, s_save_tmp 548 531 549 - write_hwreg_to_v2(s_save_m0) 550 532 write_hwreg_to_v2(s_save_pc_lo) 551 - s_andn2_b32 s_save_tmp, s_save_pc_hi, S_SAVE_PC_HI_FIRST_WAVE_MASK 533 + s_and_b32 s_save_tmp, s_save_pc_hi, ADDRESS_HI32_MASK 552 534 write_hwreg_to_v2(s_save_tmp) 553 535 write_hwreg_to_v2(s_save_exec_lo) 554 536 #if WAVE32_ONLY ··· 603 587 write_hwreg_to_v2(s_save_tmp) 604 588 #endif 605 589 590 + #if ASIC_FAMILY >= CHIP_GC_12_0_3 591 + s_getreg_b32 s_save_tmp, hwreg(HW_REG_WAVE_SCHED_MODE) 592 + write_hwreg_to_v2(s_save_tmp) 593 + #endif 594 + 595 + #if ! SAVE_TTMPS_IN_SGPR_BLOCK 606 596 // Write HWREGs with 16 VGPR lanes. TTMPs occupy space after this. 607 597 s_mov_b32 exec_lo, 0xFFFF 598 + #else 599 + // All 128 bytes are available for HWREGs. 600 + s_mov_b32 exec_lo, 0xFFFFFFFF 601 + #endif 608 602 s_mov_b32 exec_hi, 0x0 609 603 s_add_u32 s_save_addr_lo, s_save_base_addr_lo, s_save_mem_offset 610 604 s_addc_u32 s_save_addr_hi, s_save_base_addr_hi, 0x0 ··· 1177 1151 L_SKIP_CLUSTER_BARRIER_RESTORE: 1178 1152 #endif 1179 1153 1154 + #if ASIC_FAMILY >= CHIP_GC_12_0_3 1155 + s_load_b32 s_restore_tmp, [s_restore_addr_lo, s_restore_addr_hi], null scope:SCOPE_SYS offset:0x40 1156 + s_wait_kmcnt 0 1157 + s_setreg_b32 hwreg(HW_REG_WAVE_SCHED_MODE), s_restore_tmp 1158 + #endif 1159 + 1180 1160 s_mov_b32 m0, s_restore_m0 1181 1161 s_mov_b32 exec_lo, s_restore_exec_lo 1182 1162 s_mov_b32 exec_hi, s_restore_exec_hi ··· 1222 1190 s_and_b64 exec, exec, exec // Restore STATUS.EXECZ, not writable by s_setreg_b32 1223 1191 s_and_b64 vcc, vcc, vcc // Restore STATUS.VCCZ, not writable by s_setreg_b32 1224 1192 1193 + #if RELAXED_SCHEDULING_IN_TRAP 1225 1194 // Assume relaxed scheduling mode after this point. 1226 1195 restore_sched_mode(s_restore_tmp) 1196 + #endif 1227 1197 1228 1198 s_setreg_b32 hwreg(HW_REG_WAVE_STATE_PRIV), s_restore_state_priv // SCC is included, which is changed by previous salu 1229 1199 1230 1200 // Make barrier and LDS state visible to all waves in the group/cluster. 1231 1201 // STATE_PRIV.*BARRIER_COMPLETE may change after this point. 1232 - wait_trap_barriers(s_restore_tmp) 1202 + wait_trap_barriers(s_restore_tmp, 0, 0) 1233 1203 1234 1204 #if HAVE_CLUSTER_BARRIER 1235 1205 // SCC is changed by wait_trap_barriers, restore it separately. ··· 1244 1210 L_END_PGM: 1245 1211 // Make sure that no wave of the group/cluster can exit the trap handler 1246 1212 // before the group/cluster barrier state is saved. 1247 - wait_trap_barriers(s_restore_tmp) 1213 + wait_trap_barriers(s_restore_tmp, 0, 0) 1248 1214 1249 1215 s_endpgm_saved 1250 1216 end ··· 1334 1300 end 1335 1301 #endif 1336 1302 1337 - function wait_trap_barriers(s_tmp) 1303 + function wait_trap_barriers(s_tmp1, s_tmp2, serialize_wa) 1338 1304 #if HAVE_CLUSTER_BARRIER 1339 1305 // If not in a WG then wave cannot use s_barrier_signal_isfirst. 1340 - s_getreg_b32 s_tmp, hwreg(HW_REG_WAVE_STATUS) 1341 - s_bitcmp0_b32 s_tmp, SQ_WAVE_STATUS_IN_WG_SHIFT 1306 + s_getreg_b32 s_tmp1, hwreg(HW_REG_WAVE_STATUS) 1307 + s_bitcmp0_b32 s_tmp1, SQ_WAVE_STATUS_IN_WG_SHIFT 1342 1308 s_cbranch_scc1 L_TRAP_CLUSTER_BARRIER_SIGNAL 1343 1309 1344 1310 s_barrier_signal_isfirst -2 ··· 1352 1318 1353 1319 L_SKIP_TRAP_CLUSTER_BARRIER_SIGNAL: 1354 1320 s_barrier_wait -4 1321 + 1322 + #if CLUSTER_BARRIER_SERIALIZE_WORKAROUND 1323 + if serialize_wa 1324 + // Trap cluster barrier may complete with a user cluster barrier in-flight. 1325 + // This is indicated if user cluster member count and signal count are equal. 1326 + L_WAIT_USER_CLUSTER_BARRIER_COMPLETE: 1327 + s_sendmsg_rtn_b32 s_tmp1, sendmsg(MSG_RTN_GET_CLUSTER_BARRIER_STATE) 1328 + s_wait_kmcnt 0 1329 + s_bitcmp0_b32 s_tmp1, BARRIER_STATE_VALID_OFFSET 1330 + s_cbranch_scc1 L_NOT_IN_CLUSTER 1331 + 1332 + s_bfe_u32 s_tmp2, s_tmp1, (BARRIER_STATE_MEMBER_OFFSET | (BARRIER_STATE_MEMBER_SIZE << 0x10)) 1333 + s_bfe_u32 s_tmp1, s_tmp1, (BARRIER_STATE_SIGNAL_OFFSET | (BARRIER_STATE_SIGNAL_SIZE << 0x10)) 1334 + s_cmp_eq_u32 s_tmp1, s_tmp2 1335 + s_cbranch_scc1 L_WAIT_USER_CLUSTER_BARRIER_COMPLETE 1336 + end 1337 + L_NOT_IN_CLUSTER: 1338 + #endif 1339 + 1355 1340 #else 1356 1341 s_barrier_signal -2 1357 1342 s_barrier_wait -2 1358 1343 #endif 1359 1344 end 1360 1345 1346 + #if RELAXED_SCHEDULING_IN_TRAP 1361 1347 function restore_sched_mode(s_tmp) 1362 1348 s_bfe_u32 s_tmp, ttmp11, (TTMP11_SCHED_MODE_SHIFT | (TTMP11_SCHED_MODE_SIZE << 0x10)) 1363 1349 s_setreg_b32 hwreg(HW_REG_WAVE_SCHED_MODE), s_tmp 1350 + end 1351 + #endif 1364 1352 1365 1353 function restore_barrier_signal_count(barrier_id) 1366 1354 // extract the saved signal count from s_restore_tmp ··· 1410 1354 // ttmp[0:1]: {7b'0} PC[56:0] 1411 1355 // ttmp2, 3, 10, 13, 14, 15: free 1412 1356 s_load_b64 [ttmp14, ttmp15], [ttmp0, ttmp1], 0 scope:SCOPE_CU // Load the 2 instruction DW we are returning to 1357 + s_wait_kmcnt 0 1413 1358 s_load_b64 [ttmp2, ttmp3], [ttmp0, ttmp1], 8 scope:SCOPE_CU // Load the next 2 instruction DW, just in case 1414 - s_wait_kmcnt 1 1415 1359 s_and_b32 ttmp10, ttmp14, 0x80000000 // Check bit 31 in the first DWORD 1416 1360 // SCC set if ttmp10 is != 0, i.e. if bit 31 == 1 1417 1361 s_cbranch_scc1 L_FIXUP_NOT_VOP12C // If bit 31 is 1, we are not VOP1, VOP2, or VOP3C
+1 -2
drivers/gpu/drm/amd/amdkfd/kfd_debug.h
··· 120 120 && dev->kfd->mec2_fw_version < 0x1b6) || 121 121 (KFD_GC_VERSION(dev) == IP_VERSION(9, 4, 1) 122 122 && dev->kfd->mec2_fw_version < 0x30) || 123 - (KFD_GC_VERSION(dev) >= IP_VERSION(11, 0, 0) && 124 - KFD_GC_VERSION(dev) < IP_VERSION(12, 0, 0))) 123 + kfd_dbg_has_cwsr_workaround(dev)) 125 124 return false; 126 125 127 126 /* Assume debugging and cooperative launch supported otherwise. */
+22 -1
drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c
··· 109 109 m->cp_hqd_queue_priority = q->priority; 110 110 } 111 111 112 + static bool mqd_on_vram(struct amdgpu_device *adev) 113 + { 114 + switch (amdgpu_ip_version(adev, GC_HWIP, 0)) { 115 + case IP_VERSION(9, 4, 3): 116 + case IP_VERSION(9, 5, 0): 117 + return true; 118 + default: 119 + return false; 120 + } 121 + } 122 + 112 123 static struct kfd_mem_obj *allocate_mqd(struct kfd_node *node, 113 124 struct queue_properties *q) 114 125 { ··· 150 139 (ALIGN(q->ctl_stack_size, PAGE_SIZE) + 151 140 ALIGN(sizeof(struct v9_mqd), PAGE_SIZE)) * 152 141 NUM_XCC(node->xcc_mask), 153 - AMDGPU_GEM_DOMAIN_GTT, 142 + mqd_on_vram(node->adev) ? AMDGPU_GEM_DOMAIN_VRAM : 143 + AMDGPU_GEM_DOMAIN_GTT, 154 144 &(mqd_mem_obj->mem), 155 145 &(mqd_mem_obj->gpu_addr), 156 146 (void *)&(mqd_mem_obj->cpu_ptr), true); ··· 751 739 *gart_addr = xcc_gart_addr; 752 740 } 753 741 } 742 + 743 + if (mqd_on_vram(mm->dev->adev)) 744 + amdgpu_device_flush_hdp(mm->dev->adev, NULL); 754 745 } 755 746 756 747 static void update_mqd_v9_4_3(struct mqd_manager *mm, void *mqd, ··· 790 775 m->pm4_target_xcc_in_xcp = q->pm4_target_xcc; 791 776 } 792 777 } 778 + 779 + if (mqd_on_vram(mm->dev->adev)) 780 + amdgpu_device_flush_hdp(mm->dev->adev, NULL); 793 781 } 794 782 795 783 static void restore_mqd_v9_4_3(struct mqd_manager *mm, void **mqd, ··· 831 813 (uint8_t *)ctl_stack_src + xcc * mqd_ctl_stack_size, 832 814 mqd_ctl_stack_size); 833 815 } 816 + 817 + if (mqd_on_vram(mm->dev->adev)) 818 + amdgpu_device_flush_hdp(mm->dev->adev, NULL); 834 819 } 835 820 static int destroy_mqd_v9_4_3(struct mqd_manager *mm, void *mqd, 836 821 enum kfd_preempt_type type, unsigned int timeout,
+1 -4
drivers/gpu/drm/amd/amdkfd/kfd_svm.c
··· 1372 1372 svm_range_unmap_from_gpus(struct svm_range *prange, unsigned long start, 1373 1373 unsigned long last, uint32_t trigger) 1374 1374 { 1375 - DECLARE_BITMAP(bitmap, MAX_GPU_INSTANCE); 1376 1375 struct kfd_process_device *pdd; 1377 1376 struct dma_fence *fence = NULL; 1378 1377 struct kfd_process *p; ··· 1389 1390 prange->mapped_to_gpu = false; 1390 1391 } 1391 1392 1392 - bitmap_or(bitmap, prange->bitmap_access, prange->bitmap_aip, 1393 - MAX_GPU_INSTANCE); 1394 1393 p = container_of(prange->svms, struct kfd_process, svms); 1395 1394 1396 - for_each_set_bit(gpuidx, bitmap, MAX_GPU_INSTANCE) { 1395 + for_each_or_bit(gpuidx, prange->bitmap_access, prange->bitmap_aip, MAX_GPU_INSTANCE) { 1397 1396 pr_debug("unmap from gpu idx 0x%x\n", gpuidx); 1398 1397 pdd = kfd_process_device_from_gpuidx(p, gpuidx); 1399 1398 if (!pdd) {
+21 -4
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
··· 7768 7768 drm_dp_mst_topology_mgr_destroy(&aconnector->mst_mgr); 7769 7769 7770 7770 /* Cancel and flush any pending HDMI HPD debounce work */ 7771 - cancel_delayed_work_sync(&aconnector->hdmi_hpd_debounce_work); 7772 - if (aconnector->hdmi_prev_sink) { 7773 - dc_sink_release(aconnector->hdmi_prev_sink); 7774 - aconnector->hdmi_prev_sink = NULL; 7771 + if (aconnector->hdmi_hpd_debounce_delay_ms) { 7772 + cancel_delayed_work_sync(&aconnector->hdmi_hpd_debounce_work); 7773 + if (aconnector->hdmi_prev_sink) { 7774 + dc_sink_release(aconnector->hdmi_prev_sink); 7775 + aconnector->hdmi_prev_sink = NULL; 7776 + } 7775 7777 } 7776 7778 7777 7779 if (aconnector->bl_idx != -1) { ··· 13146 13144 13147 13145 if (ieeeId == HDMI_AMD_VENDOR_SPECIFIC_DATA_BLOCK_IEEE_REGISTRATION_ID && 13148 13146 amd_vsdb->version == HDMI_AMD_VENDOR_SPECIFIC_DATA_BLOCK_VERSION_3) { 13147 + u8 panel_type; 13149 13148 vsdb_info->replay_mode = (amd_vsdb->feature_caps & AMD_VSDB_VERSION_3_FEATURECAP_REPLAYMODE) ? true : false; 13150 13149 vsdb_info->amd_vsdb_version = HDMI_AMD_VENDOR_SPECIFIC_DATA_BLOCK_VERSION_3; 13151 13150 drm_dbg_kms(aconnector->base.dev, "Panel supports Replay Mode: %d\n", vsdb_info->replay_mode); 13151 + panel_type = (amd_vsdb->color_space_eotf_support & AMD_VDSB_VERSION_3_PANEL_TYPE_MASK) >> AMD_VDSB_VERSION_3_PANEL_TYPE_SHIFT; 13152 + switch (panel_type) { 13153 + case AMD_VSDB_PANEL_TYPE_OLED: 13154 + aconnector->dc_link->panel_type = PANEL_TYPE_OLED; 13155 + break; 13156 + case AMD_VSDB_PANEL_TYPE_MINILED: 13157 + aconnector->dc_link->panel_type = PANEL_TYPE_MINILED; 13158 + break; 13159 + default: 13160 + aconnector->dc_link->panel_type = PANEL_TYPE_NONE; 13161 + break; 13162 + } 13163 + drm_dbg_kms(aconnector->base.dev, "Panel type: %d\n", 13164 + aconnector->dc_link->panel_type); 13152 13165 13153 13166 return true; 13154 13167 }
+11
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
··· 55 55 56 56 #define HDMI_AMD_VENDOR_SPECIFIC_DATA_BLOCK_IEEE_REGISTRATION_ID 0x00001A 57 57 #define AMD_VSDB_VERSION_3_FEATURECAP_REPLAYMODE 0x40 58 + #define AMD_VDSB_VERSION_3_PANEL_TYPE_MASK 0xC0 59 + #define AMD_VDSB_VERSION_3_PANEL_TYPE_SHIFT 6 58 60 #define HDMI_AMD_VENDOR_SPECIFIC_DATA_BLOCK_VERSION_3 0x3 61 + 62 + enum amd_vsdb_panel_type { 63 + AMD_VSDB_PANEL_TYPE_DEFAULT = 0, 64 + AMD_VSDB_PANEL_TYPE_MINILED, 65 + AMD_VSDB_PANEL_TYPE_OLED, 66 + AMD_VSDB_PANEL_TYPE_RESERVED, 67 + }; 59 68 60 69 #define AMDGPU_HDR_MULT_DEFAULT (0x100000000LL) 61 70 ··· 101 92 unsigned char ieee_id[3]; 102 93 unsigned char version; 103 94 unsigned char feature_caps; 95 + unsigned char reserved[3]; 96 + unsigned char color_space_eotf_support; 104 97 }; 105 98 106 99 struct common_irq_params {
-11
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
··· 248 248 struct vblank_control_work *vblank_work = 249 249 container_of(work, struct vblank_control_work, work); 250 250 struct amdgpu_display_manager *dm = vblank_work->dm; 251 - struct amdgpu_device *adev = drm_to_adev(dm->ddev); 252 - int r; 253 251 254 252 mutex_lock(&dm->dc_lock); 255 253 ··· 277 279 278 280 if (dm->active_vblank_irq_count == 0) { 279 281 dc_post_update_surfaces_to_stream(dm->dc); 280 - 281 - r = amdgpu_dpm_pause_power_profile(adev, true); 282 - if (r) 283 - dev_warn(adev->dev, "failed to set default power profile mode\n"); 284 - 285 282 dc_allow_idle_optimizations(dm->dc, true); 286 - 287 - r = amdgpu_dpm_pause_power_profile(adev, false); 288 - if (r) 289 - dev_warn(adev->dev, "failed to restore the power profile mode\n"); 290 283 } 291 284 292 285 mutex_unlock(&dm->dc_lock);
+70 -1
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c
··· 2710 2710 } 2711 2711 2712 2712 /* 2713 + * IPS residency information from DMUB service. Read only. 2714 + * 2715 + * For time-window (segment) measurement: 2716 + * 1) echo 1 > /sys/kernel/debug/dri/0/amdgpu_dm_ips_residency_cntl 2717 + * 2) sleep <seconds> 2718 + * 3) echo 0 > /sys/kernel/debug/dri/0/amdgpu_dm_ips_residency_cntl 2719 + * 4) cat /sys/kernel/debug/dri/0/amdgpu_dm_ips_residency 2720 + */ 2721 + static int ips_residency_show(struct seq_file *m, void *unused) 2722 + { 2723 + struct amdgpu_device *adev = m->private; 2724 + struct dc *dc = adev->dm.dc; 2725 + uint8_t panel_inst = 0; 2726 + enum ips_residency_mode mode; 2727 + struct dmub_ips_residency_info info; 2728 + 2729 + mutex_lock(&adev->dm.dc_lock); 2730 + 2731 + mode = IPS_RESIDENCY__IPS1_RCG; 2732 + if (!dc_dmub_srv_ips_query_residency_info(dc->ctx, panel_inst, &info, mode)) { 2733 + seq_printf(m, "ISP query failed\n"); 2734 + } else { 2735 + unsigned int pct, frac; 2736 + pct = info.residency_millipercent / 1000; 2737 + frac = info.residency_millipercent % 1000; 2738 + 2739 + seq_printf(m, "IPS residency: %u.%03u%% \n", pct, frac); 2740 + seq_printf(m, " entry_counter: %u\n", info.entry_counter); 2741 + seq_printf(m, " total_time_us: %llu\n", 2742 + (unsigned long long)info.total_time_us); 2743 + seq_printf(m, " total_inactive_time_us: %llu\n", 2744 + (unsigned long long)info.total_inactive_time_us); 2745 + } 2746 + mutex_unlock(&adev->dm.dc_lock); 2747 + return 0; 2748 + } 2749 + 2750 + static int ips_residency_cntl_get(void *data, u64 *val) 2751 + { 2752 + *val = 0; 2753 + return 0; 2754 + } 2755 + 2756 + static int ips_residency_cntl_set(void *data, u64 val) 2757 + { 2758 + struct amdgpu_device *adev = data; 2759 + struct dc *dc = adev->dm.dc; 2760 + uint8_t panel_inst = 0; 2761 + int ret = 0; 2762 + 2763 + mutex_lock(&adev->dm.dc_lock); 2764 + if (!dc_dmub_srv_ips_residency_cntl(dc->ctx, panel_inst, !!val)) 2765 + ret = -EIO; 2766 + mutex_unlock(&adev->dm.dc_lock); 2767 + 2768 + return ret; 2769 + } 2770 + 2771 + /* 2713 2772 * Backlight at this moment. Read only. 2714 2773 * As written to display, taking ABM and backlight lut into account. 2715 2774 * Ranges from 0x0 to 0x10000 (= 100% PWM) ··· 3429 3370 disallow_edp_enter_psr_get, 3430 3371 disallow_edp_enter_psr_set, "%llu\n"); 3431 3372 3373 + DEFINE_DEBUGFS_ATTRIBUTE(ips_residency_cntl_fops, ips_residency_cntl_get, 3374 + ips_residency_cntl_set, "%llu\n"); 3432 3375 DEFINE_SHOW_ATTRIBUTE(current_backlight); 3433 3376 DEFINE_SHOW_ATTRIBUTE(target_backlight); 3434 3377 DEFINE_SHOW_ATTRIBUTE(ips_status); 3378 + DEFINE_SHOW_ATTRIBUTE(ips_residency); 3435 3379 3436 3380 static const struct { 3437 3381 char *name; ··· 4333 4271 debugfs_create_file_unsafe("amdgpu_dm_disable_hpd", 0644, root, adev, 4334 4272 &disable_hpd_ops); 4335 4273 4336 - if (adev->dm.dc->caps.ips_support) 4274 + if (adev->dm.dc->caps.ips_support) { 4337 4275 debugfs_create_file_unsafe("amdgpu_dm_ips_status", 0644, root, adev, 4338 4276 &ips_status_fops); 4277 + 4278 + debugfs_create_file_unsafe("amdgpu_dm_ips_residency_cntl", 0644, root, adev, 4279 + &ips_residency_cntl_fops); 4280 + 4281 + debugfs_create_file_unsafe("amdgpu_dm_ips_residency", 0644, root, adev, 4282 + &ips_residency_fops); 4283 + } 4339 4284 }
+6
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
··· 1121 1121 /* TODO: something */ 1122 1122 } 1123 1123 1124 + void dm_helpers_dmu_timeout(struct dc_context *ctx) 1125 + { 1126 + // TODO: 1127 + //amdgpu_device_gpu_recover(dc_context->driver-context, NULL); 1128 + } 1129 + 1124 1130 void dm_helpers_smu_timeout(struct dc_context *ctx, unsigned int msg_id, unsigned int param, unsigned int timeout_us) 1125 1131 { 1126 1132 // TODO:
+8 -2
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_irq.c
··· 915 915 struct amdgpu_dm_connector *amdgpu_dm_connector; 916 916 const struct dc_link *dc_link; 917 917 918 - use_polling |= connector->polled != DRM_CONNECTOR_POLL_HPD; 919 - 920 918 if (connector->connector_type == DRM_MODE_CONNECTOR_WRITEBACK) 921 919 continue; 922 920 923 921 amdgpu_dm_connector = to_amdgpu_dm_connector(connector); 922 + 923 + /* 924 + * Analog connectors may be hot-plugged unlike other connector 925 + * types that don't support HPD. Only poll analog connectors. 926 + */ 927 + use_polling |= 928 + amdgpu_dm_connector->dc_link && 929 + dc_connector_supports_analog(amdgpu_dm_connector->dc_link->link_id.id); 924 930 925 931 dc_link = amdgpu_dm_connector->dc_link; 926 932
+4 -129
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn314/dcn314_clk_mgr.c
··· 77 77 #undef DC_LOGGER 78 78 #define DC_LOGGER \ 79 79 clk_mgr->base.base.ctx->logger 80 - 81 80 #define regCLK1_CLK_PLL_REQ 0x0237 82 81 #define regCLK1_CLK_PLL_REQ_BASE_IDX 0 83 82 ··· 87 88 #define CLK1_CLK_PLL_REQ__PllSpineDiv_MASK 0x0000F000L 88 89 #define CLK1_CLK_PLL_REQ__FbMult_frac_MASK 0xFFFF0000L 89 90 90 - #define regCLK1_CLK0_DFS_CNTL 0x0269 91 - #define regCLK1_CLK0_DFS_CNTL_BASE_IDX 0 92 - #define regCLK1_CLK1_DFS_CNTL 0x026c 93 - #define regCLK1_CLK1_DFS_CNTL_BASE_IDX 0 94 - #define regCLK1_CLK2_DFS_CNTL 0x026f 95 - #define regCLK1_CLK2_DFS_CNTL_BASE_IDX 0 96 - #define regCLK1_CLK3_DFS_CNTL 0x0272 97 - #define regCLK1_CLK3_DFS_CNTL_BASE_IDX 0 98 - #define regCLK1_CLK4_DFS_CNTL 0x0275 99 - #define regCLK1_CLK4_DFS_CNTL_BASE_IDX 0 100 - #define regCLK1_CLK5_DFS_CNTL 0x0278 101 - #define regCLK1_CLK5_DFS_CNTL_BASE_IDX 0 102 - 103 - #define regCLK1_CLK0_CURRENT_CNT 0x02fb 104 - #define regCLK1_CLK0_CURRENT_CNT_BASE_IDX 0 105 - #define regCLK1_CLK1_CURRENT_CNT 0x02fc 106 - #define regCLK1_CLK1_CURRENT_CNT_BASE_IDX 0 107 - #define regCLK1_CLK2_CURRENT_CNT 0x02fd 108 - #define regCLK1_CLK2_CURRENT_CNT_BASE_IDX 0 109 - #define regCLK1_CLK3_CURRENT_CNT 0x02fe 110 - #define regCLK1_CLK3_CURRENT_CNT_BASE_IDX 0 111 - #define regCLK1_CLK4_CURRENT_CNT 0x02ff 112 - #define regCLK1_CLK4_CURRENT_CNT_BASE_IDX 0 113 - #define regCLK1_CLK5_CURRENT_CNT 0x0300 114 - #define regCLK1_CLK5_CURRENT_CNT_BASE_IDX 0 115 - 116 - #define regCLK1_CLK0_BYPASS_CNTL 0x028a 117 - #define regCLK1_CLK0_BYPASS_CNTL_BASE_IDX 0 118 - #define regCLK1_CLK1_BYPASS_CNTL 0x0293 119 - #define regCLK1_CLK1_BYPASS_CNTL_BASE_IDX 0 120 91 #define regCLK1_CLK2_BYPASS_CNTL 0x029c 121 92 #define regCLK1_CLK2_BYPASS_CNTL_BASE_IDX 0 122 - #define regCLK1_CLK3_BYPASS_CNTL 0x02a5 123 - #define regCLK1_CLK3_BYPASS_CNTL_BASE_IDX 0 124 - #define regCLK1_CLK4_BYPASS_CNTL 0x02ae 125 - #define regCLK1_CLK4_BYPASS_CNTL_BASE_IDX 0 126 - #define regCLK1_CLK5_BYPASS_CNTL 0x02b7 127 - #define regCLK1_CLK5_BYPASS_CNTL_BASE_IDX 0 128 - 129 - #define regCLK1_CLK0_DS_CNTL 0x0283 130 - #define regCLK1_CLK0_DS_CNTL_BASE_IDX 0 131 - #define regCLK1_CLK1_DS_CNTL 0x028c 132 - #define regCLK1_CLK1_DS_CNTL_BASE_IDX 0 133 - #define regCLK1_CLK2_DS_CNTL 0x0295 134 - #define regCLK1_CLK2_DS_CNTL_BASE_IDX 0 135 - #define regCLK1_CLK3_DS_CNTL 0x029e 136 - #define regCLK1_CLK3_DS_CNTL_BASE_IDX 0 137 - #define regCLK1_CLK4_DS_CNTL 0x02a7 138 - #define regCLK1_CLK4_DS_CNTL_BASE_IDX 0 139 - #define regCLK1_CLK5_DS_CNTL 0x02b0 140 - #define regCLK1_CLK5_DS_CNTL_BASE_IDX 0 141 - 142 - #define regCLK1_CLK0_ALLOW_DS 0x0284 143 - #define regCLK1_CLK0_ALLOW_DS_BASE_IDX 0 144 - #define regCLK1_CLK1_ALLOW_DS 0x028d 145 - #define regCLK1_CLK1_ALLOW_DS_BASE_IDX 0 146 - #define regCLK1_CLK2_ALLOW_DS 0x0296 147 - #define regCLK1_CLK2_ALLOW_DS_BASE_IDX 0 148 - #define regCLK1_CLK3_ALLOW_DS 0x029f 149 - #define regCLK1_CLK3_ALLOW_DS_BASE_IDX 0 150 - #define regCLK1_CLK4_ALLOW_DS 0x02a8 151 - #define regCLK1_CLK4_ALLOW_DS_BASE_IDX 0 152 - #define regCLK1_CLK5_ALLOW_DS 0x02b1 153 - #define regCLK1_CLK5_ALLOW_DS_BASE_IDX 0 154 93 155 94 #define CLK1_CLK2_BYPASS_CNTL__CLK2_BYPASS_SEL__SHIFT 0x0 156 95 #define CLK1_CLK2_BYPASS_CNTL__CLK2_BYPASS_DIV__SHIFT 0x10 ··· 185 248 { 186 249 struct clk_mgr_internal *clk_mgr_int = TO_CLK_MGR_INTERNAL(clk_mgr); 187 250 uint32_t ref_dtbclk = clk_mgr->clks.ref_dtbclk_khz; 188 - struct clk_mgr_dcn314 *clk_mgr_dcn314 = TO_CLK_MGR_DCN314(clk_mgr_int); 189 - struct clk_log_info log_info = {0}; 190 251 191 252 memset(&(clk_mgr->clks), 0, sizeof(struct dc_clocks)); 192 253 // Assumption is that boot state always supports pstate ··· 200 265 dce_adjust_dp_ref_freq_for_ss(clk_mgr_int, clk_mgr->dprefclk_khz); 201 266 else 202 267 clk_mgr->dp_dto_source_clock_in_khz = clk_mgr->dprefclk_khz; 203 - 204 - dcn314_dump_clk_registers(&clk_mgr->boot_snapshot, &clk_mgr_dcn314->base.base, &log_info); 205 - clk_mgr->clks.dispclk_khz = clk_mgr->boot_snapshot.dispclk * 1000; 206 268 } 207 269 208 270 void dcn314_update_clocks(struct clk_mgr *clk_mgr_base, ··· 210 278 struct clk_mgr_internal *clk_mgr = TO_CLK_MGR_INTERNAL(clk_mgr_base); 211 279 struct dc_clocks *new_clocks = &context->bw_ctx.bw.dcn.clk; 212 280 struct dc *dc = clk_mgr_base->ctx->dc; 213 - int display_count; 281 + int display_count = 0; 214 282 bool update_dppclk = false; 215 283 bool update_dispclk = false; 216 284 bool dpp_clock_lowered = false; ··· 219 287 return; 220 288 221 289 display_count = dcn314_get_active_display_cnt_wa(dc, context); 222 - 223 290 /* 224 291 * if it is safe to lower, but we are already in the lower state, we don't have to do anything 225 292 * also if safe to lower is false, we just go in the higher state ··· 294 363 } 295 364 296 365 if (should_set_clock(safe_to_lower, new_clocks->dispclk_khz, clk_mgr_base->clks.dispclk_khz) && 297 - (new_clocks->dispclk_khz > 0 || (safe_to_lower && display_count == 0))) { 366 + (new_clocks->dispclk_khz > 0 || (safe_to_lower && display_count == 0))) { 298 367 int requested_dispclk_khz = new_clocks->dispclk_khz; 299 368 300 369 dcn314_disable_otg_wa(clk_mgr_base, context, safe_to_lower, true); ··· 305 374 306 375 dcn314_smu_set_dispclk(clk_mgr, requested_dispclk_khz); 307 376 clk_mgr_base->clks.dispclk_khz = new_clocks->dispclk_khz; 308 - 309 377 dcn314_disable_otg_wa(clk_mgr_base, context, safe_to_lower, false); 310 378 311 379 update_dispclk = true; ··· 392 462 return true; 393 463 } 394 464 395 - 396 - static void dcn314_dump_clk_registers_internal(struct dcn35_clk_internal *internal, struct clk_mgr *clk_mgr_base) 397 - { 398 - struct clk_mgr_internal *clk_mgr = TO_CLK_MGR_INTERNAL(clk_mgr_base); 399 - 400 - // read dtbclk 401 - internal->CLK1_CLK4_CURRENT_CNT = REG_READ(CLK1_CLK4_CURRENT_CNT); 402 - internal->CLK1_CLK4_BYPASS_CNTL = REG_READ(CLK1_CLK4_BYPASS_CNTL); 403 - 404 - // read dcfclk 405 - internal->CLK1_CLK3_CURRENT_CNT = REG_READ(CLK1_CLK3_CURRENT_CNT); 406 - internal->CLK1_CLK3_BYPASS_CNTL = REG_READ(CLK1_CLK3_BYPASS_CNTL); 407 - 408 - // read dcf deep sleep divider 409 - internal->CLK1_CLK3_DS_CNTL = REG_READ(CLK1_CLK3_DS_CNTL); 410 - internal->CLK1_CLK3_ALLOW_DS = REG_READ(CLK1_CLK3_ALLOW_DS); 411 - 412 - // read dppclk 413 - internal->CLK1_CLK1_CURRENT_CNT = REG_READ(CLK1_CLK1_CURRENT_CNT); 414 - internal->CLK1_CLK1_BYPASS_CNTL = REG_READ(CLK1_CLK1_BYPASS_CNTL); 415 - 416 - // read dprefclk 417 - internal->CLK1_CLK2_CURRENT_CNT = REG_READ(CLK1_CLK2_CURRENT_CNT); 418 - internal->CLK1_CLK2_BYPASS_CNTL = REG_READ(CLK1_CLK2_BYPASS_CNTL); 419 - 420 - // read dispclk 421 - internal->CLK1_CLK0_CURRENT_CNT = REG_READ(CLK1_CLK0_CURRENT_CNT); 422 - internal->CLK1_CLK0_BYPASS_CNTL = REG_READ(CLK1_CLK0_BYPASS_CNTL); 423 - } 424 - 425 - void dcn314_dump_clk_registers(struct clk_state_registers_and_bypass *regs_and_bypass, 465 + static void dcn314_dump_clk_registers(struct clk_state_registers_and_bypass *regs_and_bypass, 426 466 struct clk_mgr *clk_mgr_base, struct clk_log_info *log_info) 427 467 { 428 - 429 - struct dcn35_clk_internal internal = {0}; 430 - 431 - dcn314_dump_clk_registers_internal(&internal, clk_mgr_base); 432 - 433 - regs_and_bypass->dcfclk = internal.CLK1_CLK3_CURRENT_CNT / 10; 434 - regs_and_bypass->dcf_deep_sleep_divider = internal.CLK1_CLK3_DS_CNTL / 10; 435 - regs_and_bypass->dcf_deep_sleep_allow = internal.CLK1_CLK3_ALLOW_DS; 436 - regs_and_bypass->dprefclk = internal.CLK1_CLK2_CURRENT_CNT / 10; 437 - regs_and_bypass->dispclk = internal.CLK1_CLK0_CURRENT_CNT / 10; 438 - regs_and_bypass->dppclk = internal.CLK1_CLK1_CURRENT_CNT / 10; 439 - regs_and_bypass->dtbclk = internal.CLK1_CLK4_CURRENT_CNT / 10; 440 - 441 - regs_and_bypass->dppclk_bypass = internal.CLK1_CLK1_BYPASS_CNTL & 0x0007; 442 - if (regs_and_bypass->dppclk_bypass > 4) 443 - regs_and_bypass->dppclk_bypass = 0; 444 - regs_and_bypass->dcfclk_bypass = internal.CLK1_CLK3_BYPASS_CNTL & 0x0007; 445 - if (regs_and_bypass->dcfclk_bypass > 4) 446 - regs_and_bypass->dcfclk_bypass = 0; 447 - regs_and_bypass->dispclk_bypass = internal.CLK1_CLK0_BYPASS_CNTL & 0x0007; 448 - if (regs_and_bypass->dispclk_bypass > 4) 449 - regs_and_bypass->dispclk_bypass = 0; 450 - regs_and_bypass->dprefclk_bypass = internal.CLK1_CLK2_BYPASS_CNTL & 0x0007; 451 - if (regs_and_bypass->dprefclk_bypass > 4) 452 - regs_and_bypass->dprefclk_bypass = 0; 453 - 468 + return; 454 469 } 455 470 456 471 static struct clk_bw_params dcn314_bw_params = {
-5
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn314/dcn314_clk_mgr.h
··· 65 65 66 66 void dcn314_clk_mgr_destroy(struct clk_mgr_internal *clk_mgr_int); 67 67 68 - 69 - void dcn314_dump_clk_registers(struct clk_state_registers_and_bypass *regs_and_bypass, 70 - struct clk_mgr *clk_mgr_base, struct clk_log_info *log_info); 71 - 72 - 73 68 #endif //__DCN314_CLK_MGR_H__
+3 -87
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn315/dcn315_clk_mgr.c
··· 40 40 #include "dm_helpers.h" 41 41 42 42 #include "dc_dmub_srv.h" 43 - #include "reg_helper.h" 43 + 44 44 #include "logger_types.h" 45 45 #undef DC_LOGGER 46 46 #define DC_LOGGER \ ··· 48 48 49 49 #include "link_service.h" 50 50 51 - #define MAX_INSTANCE 7 52 - #define MAX_SEGMENT 8 53 - 54 - struct IP_BASE_INSTANCE { 55 - unsigned int segment[MAX_SEGMENT]; 56 - }; 57 - 58 - struct IP_BASE { 59 - struct IP_BASE_INSTANCE instance[MAX_INSTANCE]; 60 - }; 61 - 62 - static const struct IP_BASE CLK_BASE = { { { { 0x00016C00, 0x02401800, 0, 0, 0, 0, 0, 0 } }, 63 - { { 0x00016E00, 0x02401C00, 0, 0, 0, 0, 0, 0 } }, 64 - { { 0x00017000, 0x02402000, 0, 0, 0, 0, 0, 0 } }, 65 - { { 0x00017200, 0x02402400, 0, 0, 0, 0, 0, 0 } }, 66 - { { 0x0001B000, 0x0242D800, 0, 0, 0, 0, 0, 0 } }, 67 - { { 0x0001B200, 0x0242DC00, 0, 0, 0, 0, 0, 0 } } } }; 68 - 69 - #define regCLK1_CLK0_CURRENT_CNT 0x0314 70 - #define regCLK1_CLK0_CURRENT_CNT_BASE_IDX 0 71 - #define regCLK1_CLK1_CURRENT_CNT 0x0315 72 - #define regCLK1_CLK1_CURRENT_CNT_BASE_IDX 0 73 - #define regCLK1_CLK2_CURRENT_CNT 0x0316 74 - #define regCLK1_CLK2_CURRENT_CNT_BASE_IDX 0 75 - #define regCLK1_CLK3_CURRENT_CNT 0x0317 76 - #define regCLK1_CLK3_CURRENT_CNT_BASE_IDX 0 77 - #define regCLK1_CLK4_CURRENT_CNT 0x0318 78 - #define regCLK1_CLK4_CURRENT_CNT_BASE_IDX 0 79 - #define regCLK1_CLK5_CURRENT_CNT 0x0319 80 - #define regCLK1_CLK5_CURRENT_CNT_BASE_IDX 0 81 - 82 51 #define TO_CLK_MGR_DCN315(clk_mgr)\ 83 52 container_of(clk_mgr, struct clk_mgr_dcn315, base) 84 - 85 - #define REG(reg_name) \ 86 - (CLK_BASE.instance[0].segment[reg ## reg_name ## _BASE_IDX] + reg ## reg_name) 87 53 88 54 #define UNSUPPORTED_DCFCLK 10000000 89 55 #define MIN_DPP_DISP_CLK 100000 ··· 138 172 if (dc->work_arounds.skip_clock_update) 139 173 return; 140 174 141 - clk_mgr_base->clks.zstate_support = new_clocks->zstate_support; 175 + display_count = dcn315_get_active_display_cnt_wa(dc, context); 142 176 /* 143 177 * if it is safe to lower, but we are already in the lower state, we don't have to do anything 144 178 * also if safe to lower is false, we just go in the higher state ··· 151 185 } 152 186 /* check that we're not already in lower */ 153 187 if (clk_mgr_base->clks.pwr_state != DCN_PWR_STATE_LOW_POWER) { 154 - display_count = dcn315_get_active_display_cnt_wa(dc, context); 155 188 /* if we can go lower, go lower */ 156 189 if (display_count == 0) { 157 190 union display_idle_optimization_u idle_info = { 0 }; ··· 244 279 dc_wake_and_execute_dmub_cmd(dc->ctx, &cmd, DM_DMUB_WAIT_TYPE_WAIT); 245 280 } 246 281 247 - static void dcn315_dump_clk_registers_internal(struct dcn35_clk_internal *internal, struct clk_mgr *clk_mgr_base) 248 - { 249 - struct clk_mgr_internal *clk_mgr = TO_CLK_MGR_INTERNAL(clk_mgr_base); 250 - 251 - // read dtbclk 252 - internal->CLK1_CLK4_CURRENT_CNT = REG_READ(CLK1_CLK4_CURRENT_CNT); 253 - 254 - // read dcfclk 255 - internal->CLK1_CLK3_CURRENT_CNT = REG_READ(CLK1_CLK3_CURRENT_CNT); 256 - 257 - // read dppclk 258 - internal->CLK1_CLK1_CURRENT_CNT = REG_READ(CLK1_CLK1_CURRENT_CNT); 259 - 260 - // read dprefclk 261 - internal->CLK1_CLK2_CURRENT_CNT = REG_READ(CLK1_CLK2_CURRENT_CNT); 262 - 263 - // read dispclk 264 - internal->CLK1_CLK0_CURRENT_CNT = REG_READ(CLK1_CLK0_CURRENT_CNT); 265 - } 266 - 267 282 static void dcn315_dump_clk_registers(struct clk_state_registers_and_bypass *regs_and_bypass, 268 283 struct clk_mgr *clk_mgr_base, struct clk_log_info *log_info) 269 284 { 270 - struct dcn35_clk_internal internal = {0}; 271 - 272 - dcn315_dump_clk_registers_internal(&internal, clk_mgr_base); 273 - 274 - regs_and_bypass->dcfclk = internal.CLK1_CLK3_CURRENT_CNT / 10; 275 - regs_and_bypass->dprefclk = internal.CLK1_CLK2_CURRENT_CNT / 10; 276 - regs_and_bypass->dispclk = internal.CLK1_CLK0_CURRENT_CNT / 10; 277 - regs_and_bypass->dppclk = internal.CLK1_CLK1_CURRENT_CNT / 10; 278 - regs_and_bypass->dtbclk = internal.CLK1_CLK4_CURRENT_CNT / 10; 279 285 return; 280 286 } 281 287 ··· 593 657 .get_dp_ref_clk_frequency = dce12_get_dp_ref_freq_khz, 594 658 .get_dtb_ref_clk_frequency = dcn31_get_dtb_ref_freq_khz, 595 659 .update_clocks = dcn315_update_clocks, 596 - .init_clocks = dcn315_init_clocks, 660 + .init_clocks = dcn31_init_clocks, 597 661 .enable_pme_wa = dcn315_enable_pme_wa, 598 662 .are_clock_states_equal = dcn31_are_clock_states_equal, 599 663 .notify_wm_ranges = dcn315_notify_wm_ranges 600 664 }; 601 665 extern struct clk_mgr_funcs dcn3_fpga_funcs; 602 - 603 - void dcn315_init_clocks(struct clk_mgr *clk_mgr) 604 - { 605 - struct clk_mgr_internal *clk_mgr_int = TO_CLK_MGR_INTERNAL(clk_mgr); 606 - uint32_t ref_dtbclk = clk_mgr->clks.ref_dtbclk_khz; 607 - struct clk_mgr_dcn315 *clk_mgr_dcn315 = TO_CLK_MGR_DCN315(clk_mgr_int); 608 - struct clk_log_info log_info = {0}; 609 - 610 - memset(&(clk_mgr->clks), 0, sizeof(struct dc_clocks)); 611 - // Assumption is that boot state always supports pstate 612 - clk_mgr->clks.ref_dtbclk_khz = ref_dtbclk; // restore ref_dtbclk 613 - clk_mgr->clks.p_state_change_support = true; 614 - clk_mgr->clks.prev_p_state_change_support = true; 615 - clk_mgr->clks.pwr_state = DCN_PWR_STATE_UNKNOWN; 616 - clk_mgr->clks.zstate_support = DCN_ZSTATE_SUPPORT_UNKNOWN; 617 - 618 - dcn315_dump_clk_registers(&clk_mgr->boot_snapshot, &clk_mgr_dcn315->base.base, &log_info); 619 - clk_mgr->clks.dispclk_khz = clk_mgr->boot_snapshot.dispclk * 1000; 620 - } 621 666 622 667 void dcn315_clk_mgr_construct( 623 668 struct dc_context *ctx, ··· 660 743 /* Saved clocks configured at boot for debug purposes */ 661 744 dcn315_dump_clk_registers(&clk_mgr->base.base.boot_snapshot, 662 745 &clk_mgr->base.base, &log_info); 663 - clk_mgr->base.base.clks.dispclk_khz = clk_mgr->base.base.boot_snapshot.dispclk * 1000; 664 746 665 747 clk_mgr->base.base.dprefclk_khz = 600000; 666 748 clk_mgr->base.base.dprefclk_khz = dcn315_smu_get_dpref_clk(&clk_mgr->base);
-1
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn315/dcn315_clk_mgr.h
··· 44 44 struct pp_smu_funcs *pp_smu, 45 45 struct dccg *dccg); 46 46 47 - void dcn315_init_clocks(struct clk_mgr *clk_mgr); 48 47 void dcn315_clk_mgr_destroy(struct clk_mgr_internal *clk_mgr_int); 49 48 50 49 #endif //__DCN315_CLK_MGR_H__
+12 -10
drivers/gpu/drm/amd/display/dc/core/dc.c
··· 7143 7143 bool dc_get_qos_info(struct dc *dc, struct dc_qos_info *info) 7144 7144 { 7145 7145 const struct dc_clocks *clk = &dc->current_state->bw_ctx.bw.dcn.clk; 7146 + struct memory_qos qos; 7146 7147 7147 7148 memset(info, 0, sizeof(*info)); 7148 7149 7149 - // Check if all measurement functions are available 7150 - if (!dc->hwss.measure_peak_bw_mbps || 7151 - !dc->hwss.measure_avg_bw_mbps || 7152 - !dc->hwss.measure_max_latency_ns || 7153 - !dc->hwss.measure_avg_latency_ns) { 7150 + // Check if measurement function is available 7151 + if (!dc->hwss.measure_memory_qos) { 7154 7152 return false; 7155 7153 } 7156 7154 7157 - // Call measurement functions to get actual values 7158 - info->actual_peak_bw_in_mbps = dc->hwss.measure_peak_bw_mbps(dc); 7159 - info->actual_avg_bw_in_mbps = dc->hwss.measure_avg_bw_mbps(dc); 7160 - info->actual_max_latency_in_ns = dc->hwss.measure_max_latency_ns(dc); 7161 - info->actual_avg_latency_in_ns = dc->hwss.measure_avg_latency_ns(dc); 7155 + // Call unified measurement function 7156 + dc->hwss.measure_memory_qos(dc, &qos); 7157 + 7158 + // Populate info from measured qos 7159 + info->actual_peak_bw_in_mbps = qos.peak_bw_mbps; 7160 + info->actual_avg_bw_in_mbps = qos.avg_bw_mbps; 7161 + info->actual_min_latency_in_ns = qos.min_latency_ns; 7162 + info->actual_max_latency_in_ns = qos.max_latency_ns; 7163 + info->actual_avg_latency_in_ns = qos.avg_latency_ns; 7162 7164 info->dcn_bandwidth_ub_in_mbps = (uint32_t)(clk->fclk_khz / 1000 * 64); 7163 7165 7164 7166 return true;
+4 -1
drivers/gpu/drm/amd/display/dc/dc.h
··· 63 63 struct dcn_optc_reg_state; 64 64 struct dcn_dccg_reg_state; 65 65 66 - #define DC_VER "3.2.365" 66 + #define DC_VER "3.2.366" 67 67 68 68 /** 69 69 * MAX_SURFACES - representative of the upper bound of surfaces that can be piped to a single CRTC ··· 962 962 uint32_t actual_avg_bw_in_mbps; 963 963 uint32_t calculated_avg_bw_in_mbps; 964 964 uint32_t actual_max_latency_in_ns; 965 + uint32_t actual_min_latency_in_ns; 965 966 uint32_t qos_max_latency_ub_in_ns; 966 967 uint32_t actual_avg_latency_in_ns; 967 968 uint32_t qos_avg_latency_ub_in_ns; ··· 1209 1208 uint32_t custom_psp_footer_size; 1210 1209 bool disable_deferred_minimal_transitions; 1211 1210 unsigned int num_fast_flips_to_steady_state_override; 1211 + bool enable_dmu_recovery; 1212 1212 }; 1213 1213 1214 1214 ··· 1735 1733 bool link_powered_externally; // Used to bypass hardware sequencing delays when panel is powered down forcibly 1736 1734 1737 1735 struct dc_panel_config panel_config; 1736 + enum dc_panel_type panel_type; 1738 1737 struct phy_state phy_state; 1739 1738 uint32_t phy_transition_bitmask; 1740 1739 // BW ALLOCATON USB4 ONLY
+22 -13
drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c
··· 41 41 #define DC_LOGGER CTX->logger 42 42 #define GPINT_RETRY_NUM 20 43 43 44 + #define MAX_WAIT_US 100000 45 + 44 46 static void dc_dmub_srv_construct(struct dc_dmub_srv *dc_srv, struct dc *dc, 45 47 struct dmub_srv *dmub) 46 48 { 47 49 dc_srv->dmub = dmub; 48 50 dc_srv->ctx = dc->ctx; 51 + } 52 + 53 + static void dc_dmub_srv_handle_failure(struct dc_dmub_srv *dc_dmub_srv) 54 + { 55 + dc_dmub_srv_log_diagnostic_data(dc_dmub_srv); 56 + if (dc_dmub_srv->ctx->dc->debug.enable_dmu_recovery) 57 + dm_helpers_dmu_timeout(dc_dmub_srv->ctx); 49 58 } 50 59 51 60 struct dc_dmub_srv *dc_dmub_srv_create(struct dc *dc, struct dmub_srv *dmub) ··· 93 84 dmub = dc_dmub_srv->dmub; 94 85 95 86 do { 96 - status = dmub_srv_wait_for_pending(dmub, 100000); 87 + status = dmub_srv_wait_for_pending(dmub, MAX_WAIT_US); 97 88 } while (dc_dmub_srv->ctx->dc->debug.disable_timeout && status != DMUB_STATUS_OK); 98 89 99 90 if (status != DMUB_STATUS_OK) { 100 91 DC_ERROR("Error waiting for DMUB idle: status=%d\n", status); 101 - dc_dmub_srv_log_diagnostic_data(dc_dmub_srv); 92 + dc_dmub_srv_handle_failure(dc_dmub_srv); 102 93 } 103 94 104 95 return status == DMUB_STATUS_OK; ··· 113 104 status = dmub_srv_clear_inbox0_ack(dmub); 114 105 if (status != DMUB_STATUS_OK) { 115 106 DC_ERROR("Error clearing INBOX0 ack: status=%d\n", status); 116 - dc_dmub_srv_log_diagnostic_data(dc_dmub_srv); 107 + dc_dmub_srv_handle_failure(dc_dmub_srv); 117 108 } 118 109 } 119 110 ··· 123 114 struct dc_context *dc_ctx = dc_dmub_srv->ctx; 124 115 enum dmub_status status = DMUB_STATUS_OK; 125 116 126 - status = dmub_srv_wait_for_inbox0_ack(dmub, 100000); 117 + status = dmub_srv_wait_for_inbox0_ack(dmub, MAX_WAIT_US); 127 118 if (status != DMUB_STATUS_OK) { 128 119 DC_ERROR("Error waiting for INBOX0 HW Lock Ack\n"); 129 - dc_dmub_srv_log_diagnostic_data(dc_dmub_srv); 120 + dc_dmub_srv_handle_failure(dc_dmub_srv); 130 121 } 131 122 } 132 123 ··· 140 131 status = dmub_srv_send_inbox0_cmd(dmub, data); 141 132 if (status != DMUB_STATUS_OK) { 142 133 DC_ERROR("Error sending INBOX0 cmd\n"); 143 - dc_dmub_srv_log_diagnostic_data(dc_dmub_srv); 134 + dc_dmub_srv_handle_failure(dc_dmub_srv); 144 135 } 145 136 } 146 137 ··· 162 153 for (i = 0 ; i < count; i++) { 163 154 /* confirm no messages pending */ 164 155 do { 165 - status = dmub_srv_wait_for_idle(dmub, 100000); 156 + status = dmub_srv_wait_for_idle(dmub, MAX_WAIT_US); 166 157 } while (dc_dmub_srv->ctx->dc->debug.disable_timeout && status != DMUB_STATUS_OK); 167 158 168 159 /* queue command */ ··· 178 169 if (status != DMUB_STATUS_OK) { 179 170 if (status != DMUB_STATUS_POWER_STATE_D3) { 180 171 DC_ERROR("Error starting DMUB execution: status=%d\n", status); 181 - dc_dmub_srv_log_diagnostic_data(dc_dmub_srv); 172 + dc_dmub_srv_handle_failure(dc_dmub_srv); 182 173 } 183 174 return false; 184 175 } ··· 217 208 return false; 218 209 219 210 do { 220 - status = dmub_srv_wait_for_inbox_free(dmub, 100000, count - i); 211 + status = dmub_srv_wait_for_inbox_free(dmub, MAX_WAIT_US, count - i); 221 212 } while (dc_dmub_srv->ctx->dc->debug.disable_timeout && status != DMUB_STATUS_OK); 222 213 223 214 /* Requeue the command. */ ··· 227 218 if (status != DMUB_STATUS_OK) { 228 219 if (status != DMUB_STATUS_POWER_STATE_D3) { 229 220 DC_ERROR("Error queueing DMUB command: status=%d\n", status); 230 - dc_dmub_srv_log_diagnostic_data(dc_dmub_srv); 221 + dc_dmub_srv_handle_failure(dc_dmub_srv); 231 222 } 232 223 return false; 233 224 } ··· 237 228 if (status != DMUB_STATUS_OK) { 238 229 if (status != DMUB_STATUS_POWER_STATE_D3) { 239 230 DC_ERROR("Error starting DMUB execution: status=%d\n", status); 240 - dc_dmub_srv_log_diagnostic_data(dc_dmub_srv); 231 + dc_dmub_srv_handle_failure(dc_dmub_srv); 241 232 } 242 233 return false; 243 234 } ··· 280 271 // Wait for DMUB to process command 281 272 if (wait_type != DM_DMUB_WAIT_TYPE_NO_WAIT) { 282 273 do { 283 - status = dmub_srv_wait_for_idle(dmub, 100000); 274 + status = dmub_srv_wait_for_idle(dmub, MAX_WAIT_US); 284 275 } while (dc_dmub_srv->ctx->dc->debug.disable_timeout && status != DMUB_STATUS_OK); 285 276 286 277 if (status != DMUB_STATUS_OK) { ··· 291 282 dmub->debug.timeout_info.timeout_cmd = *cmd_list; 292 283 dmub->debug.timeout_info.timestamp = dm_get_timestamp(dc_dmub_srv->ctx); 293 284 } 294 - dc_dmub_srv_log_diagnostic_data(dc_dmub_srv); 285 + dc_dmub_srv_handle_failure(dc_dmub_srv); 295 286 return false; 296 287 } 297 288
+7
drivers/gpu/drm/amd/display/dc/dc_types.h
··· 964 964 enum display_endpoint_type ep_type; 965 965 }; 966 966 967 + enum dc_panel_type { 968 + PANEL_TYPE_NONE = 0, // UNKONWN, not determined yet 969 + PANEL_TYPE_LCD = 1, 970 + PANEL_TYPE_OLED = 2, 971 + PANEL_TYPE_MINILED = 3, 972 + }; 973 + 967 974 enum backlight_control_type { 968 975 BACKLIGHT_CONTROL_PWM = 0, 969 976 BACKLIGHT_CONTROL_VESA_AUX = 1,
+1
drivers/gpu/drm/amd/display/dc/dm_helpers.h
··· 197 197 198 198 bool dm_helpers_dmub_outbox_interrupt_control(struct dc_context *ctx, bool enable); 199 199 200 + void dm_helpers_dmu_timeout(struct dc_context *ctx); 200 201 void dm_helpers_smu_timeout(struct dc_context *ctx, unsigned int msg_id, unsigned int param, unsigned int timeout_us); 201 202 202 203 // 0x1 = Result_OK, 0xFE = Result_UnkmownCmd, 0x0 = Status_Busy
+1 -1
drivers/gpu/drm/amd/display/dc/dsc/dc_dsc.c
··· 1157 1157 if (!is_dsc_possible) 1158 1158 goto done; 1159 1159 1160 - /* increase miniumum slice count to meet sink slice width limitations */ 1160 + /* increase minimum slice count to meet sink slice width limitations */ 1161 1161 min_slices_h = dc_fixpt_ceil(dc_fixpt_max( 1162 1162 dc_fixpt_div_int(dc_fixpt_from_int(pic_width), dsc_common_caps.max_slice_width), // sink min 1163 1163 dc_fixpt_from_int(min_slices_h))); // source min
+15 -9
drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c
··· 59 59 #include "dc_state_priv.h" 60 60 #include "dpcd_defs.h" 61 61 #include "dsc.h" 62 + #include "dc_dp_types.h" 62 63 /* include DCE11 register header files */ 63 64 #include "dce/dce_11_0_d.h" 64 65 #include "dce/dce_11_0_sh_mask.h" ··· 1760 1759 int i; 1761 1760 1762 1761 for (i = 0; i < dc->link_count; i++) { 1763 - enum signal_type signal = dc->links[i]->connector_signal; 1762 + struct dc_link *link = dc->links[i]; 1763 + struct link_encoder *link_enc = link->link_enc; 1764 + enum signal_type signal = link->connector_signal; 1764 1765 1765 - dc->link_srv->blank_dp_stream(dc->links[i], false); 1766 - 1766 + dc->link_srv->blank_dp_stream(link, false); 1767 1767 if (signal != SIGNAL_TYPE_EDP) 1768 1768 signal = SIGNAL_TYPE_NONE; 1769 1769 1770 - if (dc->links[i]->ep_type == DISPLAY_ENDPOINT_PHY) 1771 - dc->links[i]->link_enc->funcs->disable_output( 1772 - dc->links[i]->link_enc, signal); 1770 + if (link->ep_type == DISPLAY_ENDPOINT_PHY) 1771 + link_enc->funcs->disable_output(link_enc, signal); 1773 1772 1774 - dc->links[i]->link_status.link_active = false; 1775 - memset(&dc->links[i]->cur_link_settings, 0, 1776 - sizeof(dc->links[i]->cur_link_settings)); 1773 + if (link->fec_state == dc_link_fec_enabled) { 1774 + link_enc->funcs->fec_set_enable(link_enc, false); 1775 + link_enc->funcs->fec_set_ready(link_enc, false); 1776 + link->fec_state = dc_link_fec_not_ready; 1777 + } 1778 + 1779 + link->link_status.link_active = false; 1780 + memset(&link->cur_link_settings, 0, sizeof(link->cur_link_settings)); 1777 1781 } 1778 1782 } 1779 1783
-2
drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c
··· 3145 3145 REG_WRITE(RBBMIF_TIMEOUT_DIS, 0xFFFFFFFF); 3146 3146 REG_WRITE(RBBMIF_TIMEOUT_DIS_2, 0xFFFFFFFF); 3147 3147 3148 - hws->funcs.dccg_init(hws); 3149 - 3150 3148 REG_UPDATE(DCHUBBUB_GLOBAL_TIMER_CNTL, DCHUBBUB_GLOBAL_TIMER_REFDIV, 2); 3151 3149 REG_UPDATE(DCHUBBUB_GLOBAL_TIMER_CNTL, DCHUBBUB_GLOBAL_TIMER_ENABLE, 1); 3152 3150 if (REG(REFCLK_CNTL))
-1
drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_init.c
··· 143 143 .set_hdr_multiplier = dcn10_set_hdr_multiplier, 144 144 .verify_allow_pstate_change_high = dcn10_verify_allow_pstate_change_high, 145 145 .wait_for_blank_complete = dcn20_wait_for_blank_complete, 146 - .dccg_init = dcn20_dccg_init, 147 146 .set_blend_lut = dcn30_set_blend_lut, 148 147 .set_shaper_3dlut = dcn20_set_shaper_3dlut, 149 148 };
-1
drivers/gpu/drm/amd/display/dc/hwss/dcn301/dcn301_init.c
··· 140 140 .set_hdr_multiplier = dcn10_set_hdr_multiplier, 141 141 .verify_allow_pstate_change_high = dcn10_verify_allow_pstate_change_high, 142 142 .wait_for_blank_complete = dcn20_wait_for_blank_complete, 143 - .dccg_init = dcn20_dccg_init, 144 143 .set_blend_lut = dcn30_set_blend_lut, 145 144 .set_shaper_3dlut = dcn20_set_shaper_3dlut, 146 145 };
+15 -1
drivers/gpu/drm/amd/display/dc/hwss/dcn31/dcn31_hwseq.c
··· 546 546 if (pipe_ctx->stream_res.tg->funcs->set_odm_bypass) 547 547 pipe_ctx->stream_res.tg->funcs->set_odm_bypass( 548 548 pipe_ctx->stream_res.tg, &pipe_ctx->stream->timing); 549 + /* 550 + * TODO - convert symclk_ref_cnts for otg to a bit map to solve 551 + * the case where the same symclk is shared across multiple otg 552 + * instances 553 + */ 549 554 if (dc_is_hdmi_tmds_signal(pipe_ctx->stream->signal)) 550 - pipe_ctx->stream->link->phy_state.symclk_ref_cnts.otg = 0; 555 + link->phy_state.symclk_ref_cnts.otg = 0; 556 + 557 + if (pipe_ctx->top_pipe == NULL) { 558 + if (link->phy_state.symclk_state == SYMCLK_ON_TX_OFF) { 559 + const struct link_hwss *link_hwss = get_link_hwss(link, &pipe_ctx->link_res); 560 + 561 + link_hwss->disable_link_output(link, &pipe_ctx->link_res, pipe_ctx->stream->signal); 562 + link->phy_state.symclk_state = SYMCLK_OFF_TX_OFF; 563 + } 564 + } 551 565 552 566 set_drr_and_clear_adjust_pending(pipe_ctx, pipe_ctx->stream, NULL); 553 567
-1
drivers/gpu/drm/amd/display/dc/hwss/dcn31/dcn31_init.c
··· 144 144 .set_hdr_multiplier = dcn10_set_hdr_multiplier, 145 145 .verify_allow_pstate_change_high = dcn10_verify_allow_pstate_change_high, 146 146 .wait_for_blank_complete = dcn20_wait_for_blank_complete, 147 - .dccg_init = dcn20_dccg_init, 148 147 .set_blend_lut = dcn30_set_blend_lut, 149 148 .set_shaper_3dlut = dcn20_set_shaper_3dlut, 150 149 .setup_hpo_hw_control = dcn31_setup_hpo_hw_control,
-1
drivers/gpu/drm/amd/display/dc/hwss/dcn314/dcn314_init.c
··· 149 149 .set_hdr_multiplier = dcn10_set_hdr_multiplier, 150 150 .verify_allow_pstate_change_high = dcn10_verify_allow_pstate_change_high, 151 151 .wait_for_blank_complete = dcn20_wait_for_blank_complete, 152 - .dccg_init = dcn20_dccg_init, 153 152 .set_blend_lut = dcn30_set_blend_lut, 154 153 .set_shaper_3dlut = dcn20_set_shaper_3dlut, 155 154 .setup_hpo_hw_control = dcn31_setup_hpo_hw_control,
-1
drivers/gpu/drm/amd/display/dc/hwss/dcn32/dcn32_init.c
··· 154 154 .set_hdr_multiplier = dcn10_set_hdr_multiplier, 155 155 .verify_allow_pstate_change_high = dcn10_verify_allow_pstate_change_high, 156 156 .wait_for_blank_complete = dcn20_wait_for_blank_complete, 157 - .dccg_init = dcn20_dccg_init, 158 157 .set_mcm_luts = dcn32_set_mcm_luts, 159 158 .program_mall_pipe_config = dcn32_program_mall_pipe_config, 160 159 .update_force_pstate = dcn32_update_force_pstate,
-1
drivers/gpu/drm/amd/display/dc/hwss/dcn35/dcn35_init.c
··· 164 164 .set_hdr_multiplier = dcn10_set_hdr_multiplier, 165 165 .verify_allow_pstate_change_high = dcn10_verify_allow_pstate_change_high, 166 166 .wait_for_blank_complete = dcn20_wait_for_blank_complete, 167 - .dccg_init = dcn20_dccg_init, 168 167 .set_mcm_luts = dcn32_set_mcm_luts, 169 168 .setup_hpo_hw_control = dcn35_setup_hpo_hw_control, 170 169 .calculate_dccg_k1_k2_values = dcn32_calculate_dccg_k1_k2_values,
-1
drivers/gpu/drm/amd/display/dc/hwss/dcn351/dcn351_init.c
··· 153 153 .set_hdr_multiplier = dcn10_set_hdr_multiplier, 154 154 .verify_allow_pstate_change_high = dcn10_verify_allow_pstate_change_high, 155 155 .wait_for_blank_complete = dcn20_wait_for_blank_complete, 156 - .dccg_init = dcn20_dccg_init, 157 156 .set_mcm_luts = dcn32_set_mcm_luts, 158 157 .setup_hpo_hw_control = dcn35_setup_hpo_hw_control, 159 158 .calculate_dccg_k1_k2_values = dcn32_calculate_dccg_k1_k2_values,
+1 -1
drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.c
··· 948 948 const struct link_hwss *link_hwss = get_link_hwss(link, &pipe_ctx->link_res); 949 949 struct dc *dc = pipe_ctx->stream->ctx->dc; 950 950 struct dccg *dccg = dc->res_pool->dccg; 951 - enum phyd32clk_clock_source phyd32clk; 951 + enum phyd32clk_clock_source phyd32clk = PHYD32CLKA; 952 952 int dp_hpo_inst = 0; 953 953 unsigned int tmds_div = PIXEL_RATE_DIV_NA; 954 954 unsigned int unused_div = PIXEL_RATE_DIV_NA;
-1
drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_init.c
··· 156 156 .verify_allow_pstate_change_high = dcn10_verify_allow_pstate_change_high, 157 157 .verify_allow_pstate_change_high_sequence = dcn401_verify_allow_pstate_change_high_sequence, 158 158 .wait_for_blank_complete = dcn20_wait_for_blank_complete, 159 - .dccg_init = dcn20_dccg_init, 160 159 .set_mcm_luts = dcn401_set_mcm_luts, 161 160 .program_mall_pipe_config = dcn32_program_mall_pipe_config, 162 161 .program_mall_pipe_config_sequence = dcn401_program_mall_pipe_config_sequence,
+6 -32
drivers/gpu/drm/amd/display/dc/hwss/hw_sequencer.h
··· 52 52 struct dc_underflow_debug_data; 53 53 struct dsc_optc_config; 54 54 struct vm_system_aperture_param; 55 - 55 + struct memory_qos; 56 56 struct subvp_pipe_control_lock_fast_params { 57 57 struct dc *dc; 58 58 bool lock; ··· 1289 1289 struct dc_underflow_debug_data *out_data); 1290 1290 1291 1291 /** 1292 - * measure_peak_bw_mbps - Measure actual peak bandwidth in Mbps 1292 + * measure_memory_qos - Measure memory QoS metrics 1293 1293 * @dc: DC structure 1294 + * @qos: Pointer to memory_qos struct to populate with measured values 1294 1295 * 1295 - * Returns the measured peak bandwidth value in Mbps from hardware 1296 - * performance counters or registers. 1296 + * Populates the provided memory_qos struct with peak bandwidth, average bandwidth, 1297 + * max latency, min latency, and average latency from hardware performance counters. 1297 1298 */ 1298 - uint32_t (*measure_peak_bw_mbps)(struct dc *dc); 1299 - 1300 - /** 1301 - * measure_avg_bw_mbps - Measure actual average bandwidth in Mbps 1302 - * @dc: DC structure 1303 - * 1304 - * Returns the measured average bandwidth value in Mbps from hardware 1305 - * performance counters or registers. 1306 - */ 1307 - uint32_t (*measure_avg_bw_mbps)(struct dc *dc); 1308 - 1309 - /** 1310 - * measure_max_latency_ns - Measure actual maximum latency in nanoseconds 1311 - * @dc: DC structure 1312 - * 1313 - * Returns the measured maximum latency value in nanoseconds from hardware 1314 - * performance counters or registers. 1315 - */ 1316 - uint32_t (*measure_max_latency_ns)(struct dc *dc); 1317 - 1318 - /** 1319 - * measure_avg_latency_ns - Measure actual average latency in nanoseconds 1320 - * @dc: DC structure 1321 - * 1322 - * Returns the measured average latency value in nanoseconds from hardware 1323 - * performance counters or registers. 1324 - */ 1325 - uint32_t (*measure_avg_latency_ns)(struct dc *dc); 1299 + void (*measure_memory_qos)(struct dc *dc, struct memory_qos *qos); 1326 1300 1327 1301 }; 1328 1302
+8
drivers/gpu/drm/amd/display/dc/inc/core_types.h
··· 704 704 int max_phyclk_mhz; 705 705 }; 706 706 707 + struct memory_qos { 708 + uint32_t peak_bw_mbps; 709 + uint32_t avg_bw_mbps; 710 + uint32_t max_latency_ns; 711 + uint32_t min_latency_ns; 712 + uint32_t avg_latency_ns; 713 + }; 714 + 707 715 #endif /* _CORE_TYPES_H_ */
+18 -10
drivers/gpu/drm/amd/display/dc/inc/hw/dchubbub.h
··· 254 254 bool (*program_arbiter)(struct hubbub *hubbub, struct dml2_display_arb_regs *arb_regs, bool safe_to_lower); 255 255 void (*dchvm_init)(struct hubbub *hubbub); 256 256 257 + /* Performance monitoring related functions */ 257 258 struct hubbub_perfmon_funcs { 258 259 void (*reset)(struct hubbub *hubbub); 259 - void (*start_measuring_max_memory_latency_ns)( 260 + void (*start_measuring_memory_latencies)( 260 261 struct hubbub *hubbub); 261 - uint32_t (*get_max_memory_latency_ns)(struct hubbub *hubbub, 262 - uint32_t refclk_mhz, uint32_t *sample_count); 263 - void (*start_measuring_average_memory_latency_ns)( 262 + uint32_t (*get_memory_latencies_ns)(struct hubbub *hubbub, 263 + uint32_t refclk_mhz, uint32_t *min_latency_ns, 264 + uint32_t *max_latency_ns, uint32_t *avg_latency_ns); 265 + void (*start_measuring_urgent_assertion_count)( 264 266 struct hubbub *hubbub); 265 - uint32_t (*get_average_memory_latency_ns)(struct hubbub *hubbub, 266 - uint32_t refclk_mhz, uint32_t *sample_count); 267 - void (*start_measuring_urgent_ramp_latency_ns)( 267 + bool (*get_urgent_assertion_count)(struct hubbub *hubbub, 268 + uint32_t refclk_mhz, 269 + uint32_t *assertion_count, 270 + uint32_t *deassertion_count, 271 + uint32_t *timestamp_us); 272 + void (*start_measuring_urgent_ramp_latency)( 268 273 struct hubbub *hubbub, 269 274 const struct hubbub_urgent_latency_params *params); 270 275 uint32_t (*get_urgent_ramp_latency_ns)(struct hubbub *hubbub, 271 276 uint32_t refclk_mhz); 272 - void (*start_measuring_unbounded_bandwidth_mbps)( 277 + void (*start_measuring_unbounded_bandwidth)( 273 278 struct hubbub *hubbub); 274 279 uint32_t (*get_unbounded_bandwidth_mbps)(struct hubbub *hubbub, 275 280 uint32_t refclk_mhz, uint32_t *duration_ns); 276 - void (*start_measuring_average_bandwidth_mbps)( 281 + void (*start_measuring_in_order_bandwidth)( 277 282 struct hubbub *hubbub); 278 - uint32_t (*get_average_bandwidth_mbps)(struct hubbub *hubbub, 283 + uint32_t (*get_in_order_bandwidth_mbps)(struct hubbub *hubbub, 279 284 uint32_t refclk_mhz, uint32_t min_duration_ns, 280 285 uint32_t *duration_ns); 286 + void (*start_measuring_prefetch_data_size)( 287 + struct hubbub *hubbub); 288 + uint32_t (*get_prefetch_data_size)(struct hubbub *hubbub); 281 289 } perfmon; 282 290 283 291 struct hubbub_qos_funcs {
+5 -6
drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h
··· 1635 1635 uint32_t lock_dig: 1; 1636 1636 uint32_t triple_buffer_lock: 1; 1637 1637 1638 - uint32_t lock: 1; /**< Lock */ 1638 + uint32_t lock: 1; /**< Lock */ 1639 1639 uint32_t should_release: 1; /**< Release */ 1640 - uint32_t reserved: 7; /**< Reserved for extending more clients, HW, etc. */ 1640 + uint32_t reserved: 7; /**< Reserved for extending more clients, HW, etc. */ 1641 1641 } bits; 1642 1642 uint32_t all; 1643 1643 }; ··· 2658 2658 2659 2659 union dmub_cmd_fams2_config { 2660 2660 struct dmub_cmd_fams2_global_config global; 2661 - // coverity[cert_dcl37_c_violation:FALSE] errno.h, stddef.h, stdint.h not included in atombios.h 2662 2661 struct dmub_fams2_stream_static_state stream; //v0 2663 2662 union { 2664 2663 struct dmub_fams2_cmd_stream_static_base_state base; ··· 3677 3678 /** 3678 3679 * @ rate_control_caps : Indicate FreeSync PSR Sink Capabilities 3679 3680 */ 3680 - uint8_t rate_control_caps ; 3681 + uint8_t rate_control_caps; 3681 3682 /* 3682 3683 * Force PSRSU always doing full frame update 3683 3684 */ ··· 5163 5164 */ 5164 5165 DMUB_CMD__LSDMA_LINEAR_COPY = 1, 5165 5166 /** 5166 - * LSDMA copies data from source to destination linearly in sub window 5167 - */ 5167 + * LSDMA copies data from source to destination linearly in sub window 5168 + */ 5168 5169 DMUB_CMD__LSDMA_LINEAR_SUB_WINDOW_COPY = 2, 5169 5170 /** 5170 5171 * Send the tiled-to-tiled copy command
+4 -1
drivers/gpu/drm/amd/display/modules/power/power_helpers.c
··· 984 984 uint32_t *frame_skip_number_array = NULL; 985 985 uint32_t frame_skip_number = 0; 986 986 987 + if (link == NULL) 988 + return; 989 + 987 990 if (false == link->replay_settings.config.frame_skip_supported) 988 991 return; 989 992 990 - if (link == NULL || flicker_free_refresh_rate_mhz == 0 || coasting_vtotal_refresh_rate_mhz == 0) 993 + if (flicker_free_refresh_rate_mhz == 0 || coasting_vtotal_refresh_rate_mhz == 0) 991 994 return; 992 995 993 996 if (is_defer)
+1 -1
drivers/gpu/drm/amd/pm/amdgpu_dpm.c
··· 1569 1569 int ret = 0; 1570 1570 1571 1571 if (!pp_funcs->get_power_limit) 1572 - return -ENODATA; 1572 + return -EOPNOTSUPP; 1573 1573 1574 1574 mutex_lock(&adev->pm.mutex); 1575 1575 ret = pp_funcs->get_power_limit(adev->powerplay.pp_handle,
+1 -1
drivers/gpu/drm/amd/pm/amdgpu_pm.c
··· 3878 3878 attr == &sensor_dev_attr_temp3_emergency.dev_attr.attr)) 3879 3879 return 0; 3880 3880 3881 - /* only Vangogh has fast PPT limit and power labels */ 3881 + /* only a few GPUs have fast PPT limit and power labels */ 3882 3882 if ((attr == &sensor_dev_attr_power2_cap_max.dev_attr.attr || 3883 3883 attr == &sensor_dev_attr_power2_cap_min.dev_attr.attr || 3884 3884 attr == &sensor_dev_attr_power2_cap.dev_attr.attr ||
+16 -15
drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c
··· 2273 2273 if (scaling_factor == 0) 2274 2274 return -EINVAL; 2275 2275 2276 - memset(smc_table, 0, sizeof(SISLANDS_SMC_STATETABLE)); 2277 - 2278 2276 ret = si_calculate_adjusted_tdp_limits(adev, 2279 2277 false, /* ??? */ 2280 2278 adev->pm.dpm.tdp_adjustment, ··· 2280 2282 &near_tdp_limit); 2281 2283 if (ret) 2282 2284 return ret; 2285 + 2286 + if (adev->pdev->device == 0x6611 && adev->pdev->revision == 0x87) { 2287 + /* Workaround buggy powertune on Radeon 430 and 520. */ 2288 + tdp_limit = 32; 2289 + near_tdp_limit = 28; 2290 + } 2283 2291 2284 2292 smc_table->dpm2Params.TDPLimit = 2285 2293 cpu_to_be32(si_scale_power_for_smc(tdp_limit, scaling_factor) * 1000); ··· 2332 2328 2333 2329 if (ni_pi->enable_power_containment) { 2334 2330 SISLANDS_SMC_STATETABLE *smc_table = &si_pi->smc_statetable; 2335 - u32 scaling_factor = si_get_smc_power_scaling_factor(adev); 2336 2331 int ret; 2337 - 2338 - memset(smc_table, 0, sizeof(SISLANDS_SMC_STATETABLE)); 2339 - 2340 - smc_table->dpm2Params.NearTDPLimit = 2341 - cpu_to_be32(si_scale_power_for_smc(adev->pm.dpm.near_tdp_limit_adjusted, scaling_factor) * 1000); 2342 - smc_table->dpm2Params.SafePowerLimit = 2343 - cpu_to_be32(si_scale_power_for_smc((adev->pm.dpm.near_tdp_limit_adjusted * SISLANDS_DPM2_TDP_SAFE_LIMIT_PERCENT) / 100, scaling_factor) * 1000); 2344 2332 2345 2333 ret = amdgpu_si_copy_bytes_to_smc(adev, 2346 2334 (si_pi->state_table_start + ··· 3469 3473 (adev->pdev->revision == 0x80) || 3470 3474 (adev->pdev->revision == 0x81) || 3471 3475 (adev->pdev->revision == 0x83) || 3472 - (adev->pdev->revision == 0x87) || 3476 + (adev->pdev->revision == 0x87 && 3477 + adev->pdev->device != 0x6611) || 3473 3478 (adev->pdev->device == 0x6604) || 3474 3479 (adev->pdev->device == 0x6605)) { 3475 3480 max_sclk = 75000; 3481 + } else if (adev->pdev->revision == 0x87 && 3482 + adev->pdev->device == 0x6611) { 3483 + /* Radeon 430 and 520 */ 3484 + max_sclk = 78000; 3476 3485 } 3477 3486 } 3478 3487 ··· 7601 7600 case AMDGPU_IRQ_STATE_DISABLE: 7602 7601 cg_thermal_int = RREG32_SMC(mmCG_THERMAL_INT); 7603 7602 cg_thermal_int |= CG_THERMAL_INT__THERM_INT_MASK_HIGH_MASK; 7604 - WREG32_SMC(mmCG_THERMAL_INT, cg_thermal_int); 7603 + WREG32(mmCG_THERMAL_INT, cg_thermal_int); 7605 7604 break; 7606 7605 case AMDGPU_IRQ_STATE_ENABLE: 7607 7606 cg_thermal_int = RREG32_SMC(mmCG_THERMAL_INT); 7608 7607 cg_thermal_int &= ~CG_THERMAL_INT__THERM_INT_MASK_HIGH_MASK; 7609 - WREG32_SMC(mmCG_THERMAL_INT, cg_thermal_int); 7608 + WREG32(mmCG_THERMAL_INT, cg_thermal_int); 7610 7609 break; 7611 7610 default: 7612 7611 break; ··· 7618 7617 case AMDGPU_IRQ_STATE_DISABLE: 7619 7618 cg_thermal_int = RREG32_SMC(mmCG_THERMAL_INT); 7620 7619 cg_thermal_int |= CG_THERMAL_INT__THERM_INT_MASK_LOW_MASK; 7621 - WREG32_SMC(mmCG_THERMAL_INT, cg_thermal_int); 7620 + WREG32(mmCG_THERMAL_INT, cg_thermal_int); 7622 7621 break; 7623 7622 case AMDGPU_IRQ_STATE_ENABLE: 7624 7623 cg_thermal_int = RREG32_SMC(mmCG_THERMAL_INT); 7625 7624 cg_thermal_int &= ~CG_THERMAL_INT__THERM_INT_MASK_LOW_MASK; 7626 - WREG32_SMC(mmCG_THERMAL_INT, cg_thermal_int); 7625 + WREG32(mmCG_THERMAL_INT, cg_thermal_int); 7627 7626 break; 7628 7627 default: 7629 7628 break;
+1 -1
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c
··· 956 956 gpu_metrics->gfx_below_host_limit_total_acc 957 957 [i] = SMUQ10_ROUND( 958 958 metrics->GfxclkBelowHostLimitTotalAcc[inst]); 959 - }; 959 + } 960 960 } 961 961 962 962 gpu_metrics->xgmi_link_width = metrics->XgmiWidth;
+3 -2
drivers/gpu/drm/radeon/radeon_vce.c
··· 121 121 if (sscanf(c, "%2u]", &rdev->vce.fb_version) != 1) 122 122 return -EINVAL; 123 123 124 - DRM_INFO("Found VCE firmware/feedback version %d.%d.%d / %d!\n", 125 - start, mid, end, rdev->vce.fb_version); 124 + drm_info(&rdev->ddev, 125 + "Found VCE firmware/feedback version %d.%d.%d / %d!\n", 126 + start, mid, end, rdev->vce.fb_version); 126 127 127 128 rdev->vce.fw_version = (start << 24) | (mid << 16) | (end << 8); 128 129