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

drm/radeon: allow unaligned shader loads on CIK

Set alignment mode to unaligned on CIK to align with amdgpu. This is
needed for unaligned loads to work properly in mesa. The current setting
requires dword alignment.

Signed-off-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Marek Olšák and committed by
Alex Deucher
75cb00dc 451bc8eb

+7 -3
+5 -2
drivers/gpu/drm/radeon/cik.c
··· 35 35 #include "clearstate_ci.h" 36 36 #include "radeon_kfd.h" 37 37 38 + #define SH_MEM_CONFIG_GFX_DEFAULT \ 39 + ALIGNMENT_MODE(SH_MEM_ALIGNMENT_MODE_UNALIGNED) 40 + 38 41 MODULE_FIRMWARE("radeon/BONAIRE_pfp.bin"); 39 42 MODULE_FIRMWARE("radeon/BONAIRE_me.bin"); 40 43 MODULE_FIRMWARE("radeon/BONAIRE_ce.bin"); ··· 5590 5587 for (i = 0; i < 16; i++) { 5591 5588 cik_srbm_select(rdev, 0, 0, 0, i); 5592 5589 /* CP and shaders */ 5593 - WREG32(SH_MEM_CONFIG, 0); 5590 + WREG32(SH_MEM_CONFIG, SH_MEM_CONFIG_GFX_DEFAULT); 5594 5591 WREG32(SH_MEM_APE1_BASE, 1); 5595 5592 WREG32(SH_MEM_APE1_LIMIT, 0); 5596 5593 WREG32(SH_MEM_BASES, 0); ··· 5797 5794 radeon_ring_write(ring, 0); 5798 5795 5799 5796 radeon_ring_write(ring, 0); /* SH_MEM_BASES */ 5800 - radeon_ring_write(ring, 0); /* SH_MEM_CONFIG */ 5797 + radeon_ring_write(ring, SH_MEM_CONFIG_GFX_DEFAULT); /* SH_MEM_CONFIG */ 5801 5798 radeon_ring_write(ring, 1); /* SH_MEM_APE1_BASE */ 5802 5799 radeon_ring_write(ring, 0); /* SH_MEM_APE1_LIMIT */ 5803 5800
+2 -1
drivers/gpu/drm/radeon/radeon_drv.c
··· 98 98 * 2.47.0 - Add UVD_NO_OP register support 99 99 * 2.48.0 - TA_CS_BC_BASE_ADDR allowed on SI 100 100 * 2.49.0 - DRM_RADEON_GEM_INFO ioctl returns correct vram_size/visible values 101 + * 2.50.0 - Allows unaligned shader loads on CIK. (needed by OpenGL) 101 102 */ 102 103 #define KMS_DRIVER_MAJOR 2 103 - #define KMS_DRIVER_MINOR 49 104 + #define KMS_DRIVER_MINOR 50 104 105 #define KMS_DRIVER_PATCHLEVEL 0 105 106 int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags); 106 107 void radeon_driver_unload_kms(struct drm_device *dev);