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

drm/amdgpu: nuke dynamic gfx scratch reg allocation

It's over a decade ago that this was actually used for more than ring and
IB tests. Just use the static register directly where needed and nuke the
now useless infrastructure.

Signed-off-by: Christian König <christian.koenig@amd.com>
Acked-by: Lang Yu <Lang.Yu@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Christian König and committed by
Alex Deucher
d54762cc bf1781e1

+43 -226
-36
drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
··· 99 99 } 100 100 101 101 /** 102 - * amdgpu_gfx_scratch_get - Allocate a scratch register 103 - * 104 - * @adev: amdgpu_device pointer 105 - * @reg: scratch register mmio offset 106 - * 107 - * Allocate a CP scratch register for use by the driver (all asics). 108 - * Returns 0 on success or -EINVAL on failure. 109 - */ 110 - int amdgpu_gfx_scratch_get(struct amdgpu_device *adev, uint32_t *reg) 111 - { 112 - int i; 113 - 114 - i = ffs(adev->gfx.scratch.free_mask); 115 - if (i != 0 && i <= adev->gfx.scratch.num_reg) { 116 - i--; 117 - adev->gfx.scratch.free_mask &= ~(1u << i); 118 - *reg = adev->gfx.scratch.reg_base + i; 119 - return 0; 120 - } 121 - return -EINVAL; 122 - } 123 - 124 - /** 125 - * amdgpu_gfx_scratch_free - Free a scratch register 126 - * 127 - * @adev: amdgpu_device pointer 128 - * @reg: scratch register mmio offset 129 - * 130 - * Free a CP scratch register allocated for use by the driver (all asics) 131 - */ 132 - void amdgpu_gfx_scratch_free(struct amdgpu_device *adev, uint32_t reg) 133 - { 134 - adev->gfx.scratch.free_mask |= 1u << (reg - adev->gfx.scratch.reg_base); 135 - } 136 - 137 - /** 138 102 * amdgpu_gfx_parse_disable_cu - Parse the disable_cu module parameter 139 103 * 140 104 * @mask: array in which the per-shader array disable masks will be stored
-13
drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h
··· 111 111 }; 112 112 113 113 /* 114 - * GPU scratch registers structures, functions & helpers 115 - */ 116 - struct amdgpu_scratch { 117 - unsigned num_reg; 118 - uint32_t reg_base; 119 - uint32_t free_mask; 120 - }; 121 - 122 - /* 123 114 * GFX configurations 124 115 */ 125 116 #define AMDGPU_GFX_MAX_SE 4 ··· 279 288 struct amdgpu_mec mec; 280 289 struct amdgpu_kiq kiq; 281 290 struct amdgpu_imu imu; 282 - struct amdgpu_scratch scratch; 283 291 bool rs64_enable; /* firmware format */ 284 292 const struct firmware *me_fw; /* ME firmware */ 285 293 uint32_t me_fw_version; ··· 365 375 { 366 376 return (u32)((1ULL << bit_width) - 1); 367 377 } 368 - 369 - int amdgpu_gfx_scratch_get(struct amdgpu_device *adev, uint32_t *reg); 370 - void amdgpu_gfx_scratch_free(struct amdgpu_device *adev, uint32_t reg); 371 378 372 379 void amdgpu_gfx_parse_disable_cu(unsigned *mask, unsigned max_se, 373 380 unsigned max_sh);
+4 -23
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
··· 3744 3744 gfx_v10_0_init_spm_golden_registers(adev); 3745 3745 } 3746 3746 3747 - static void gfx_v10_0_scratch_init(struct amdgpu_device *adev) 3748 - { 3749 - adev->gfx.scratch.num_reg = 8; 3750 - adev->gfx.scratch.reg_base = SOC15_REG_OFFSET(GC, 0, mmSCRATCH_REG0); 3751 - adev->gfx.scratch.free_mask = (1u << adev->gfx.scratch.num_reg) - 1; 3752 - } 3753 - 3754 3747 static void gfx_v10_0_write_data_to_reg(struct amdgpu_ring *ring, int eng_sel, 3755 3748 bool wc, uint32_t reg, uint32_t val) 3756 3749 { ··· 3780 3787 static int gfx_v10_0_ring_test_ring(struct amdgpu_ring *ring) 3781 3788 { 3782 3789 struct amdgpu_device *adev = ring->adev; 3783 - uint32_t scratch; 3784 3790 uint32_t tmp = 0; 3785 3791 unsigned i; 3786 3792 int r; 3787 3793 3788 - r = amdgpu_gfx_scratch_get(adev, &scratch); 3789 - if (r) { 3790 - DRM_ERROR("amdgpu: cp failed to get scratch reg (%d).\n", r); 3791 - return r; 3792 - } 3793 - 3794 - WREG32(scratch, 0xCAFEDEAD); 3795 - 3794 + WREG32_SOC15(GC, 0, mmSCRATCH_REG0, 0xCAFEDEAD); 3796 3795 r = amdgpu_ring_alloc(ring, 3); 3797 3796 if (r) { 3798 3797 DRM_ERROR("amdgpu: cp failed to lock ring %d (%d).\n", 3799 3798 ring->idx, r); 3800 - amdgpu_gfx_scratch_free(adev, scratch); 3801 3799 return r; 3802 3800 } 3803 3801 3804 3802 amdgpu_ring_write(ring, PACKET3(PACKET3_SET_UCONFIG_REG, 1)); 3805 - amdgpu_ring_write(ring, (scratch - PACKET3_SET_UCONFIG_REG_START)); 3803 + amdgpu_ring_write(ring, SOC15_REG_OFFSET(GC, 0, mmSCRATCH_REG0) - 3804 + PACKET3_SET_UCONFIG_REG_START); 3806 3805 amdgpu_ring_write(ring, 0xDEADBEEF); 3807 3806 amdgpu_ring_commit(ring); 3808 3807 3809 3808 for (i = 0; i < adev->usec_timeout; i++) { 3810 - tmp = RREG32(scratch); 3809 + tmp = RREG32_SOC15(GC, 0, mmSCRATCH_REG0); 3811 3810 if (tmp == 0xDEADBEEF) 3812 3811 break; 3813 3812 if (amdgpu_emu_mode == 1) ··· 3810 3825 3811 3826 if (i >= adev->usec_timeout) 3812 3827 r = -ETIMEDOUT; 3813 - 3814 - amdgpu_gfx_scratch_free(adev, scratch); 3815 3828 3816 3829 return r; 3817 3830 } ··· 4834 4851 return r; 4835 4852 4836 4853 adev->gfx.gfx_current_status = AMDGPU_GFX_NORMAL_MODE; 4837 - 4838 - gfx_v10_0_scratch_init(adev); 4839 4854 4840 4855 r = gfx_v10_0_me_init(adev); 4841 4856 if (r)
+3 -22
drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
··· 297 297 gfx_v11_0_init_spm_golden_registers(adev); 298 298 } 299 299 300 - static void gfx_v11_0_scratch_init(struct amdgpu_device *adev) 301 - { 302 - adev->gfx.scratch.num_reg = 8; 303 - adev->gfx.scratch.reg_base = SOC15_REG_OFFSET(GC, 0, regSCRATCH_REG0); 304 - adev->gfx.scratch.free_mask = (1u << adev->gfx.scratch.num_reg) - 1; 305 - } 306 - 307 300 static void gfx_v11_0_write_data_to_reg(struct amdgpu_ring *ring, int eng_sel, 308 301 bool wc, uint32_t reg, uint32_t val) 309 302 { ··· 333 340 static int gfx_v11_0_ring_test_ring(struct amdgpu_ring *ring) 334 341 { 335 342 struct amdgpu_device *adev = ring->adev; 336 - uint32_t scratch; 343 + uint32_t scratch = SOC15_REG_OFFSET(GC, 0, regSCRATCH_REG0); 337 344 uint32_t tmp = 0; 338 345 unsigned i; 339 346 int r; 340 347 341 - r = amdgpu_gfx_scratch_get(adev, &scratch); 342 - if (r) { 343 - DRM_ERROR("amdgpu: cp failed to get scratch reg (%d).\n", r); 344 - return r; 345 - } 346 - 347 348 WREG32(scratch, 0xCAFEDEAD); 348 - 349 349 r = amdgpu_ring_alloc(ring, 5); 350 350 if (r) { 351 351 DRM_ERROR("amdgpu: cp failed to lock ring %d (%d).\n", 352 352 ring->idx, r); 353 - amdgpu_gfx_scratch_free(adev, scratch); 354 353 return r; 355 354 } 356 355 ··· 350 365 gfx_v11_0_ring_emit_wreg(ring, scratch, 0xDEADBEEF); 351 366 } else { 352 367 amdgpu_ring_write(ring, PACKET3(PACKET3_SET_UCONFIG_REG, 1)); 353 - amdgpu_ring_write(ring, (scratch - PACKET3_SET_UCONFIG_REG_START)); 368 + amdgpu_ring_write(ring, scratch - 369 + PACKET3_SET_UCONFIG_REG_START); 354 370 amdgpu_ring_write(ring, 0xDEADBEEF); 355 371 } 356 372 amdgpu_ring_commit(ring); ··· 368 382 369 383 if (i >= adev->usec_timeout) 370 384 r = -ETIMEDOUT; 371 - 372 - amdgpu_gfx_scratch_free(adev, scratch); 373 - 374 385 return r; 375 386 } 376 387 ··· 1613 1630 return r; 1614 1631 1615 1632 adev->gfx.gfx_current_status = AMDGPU_GFX_NORMAL_MODE; 1616 - 1617 - gfx_v11_0_scratch_init(adev); 1618 1633 1619 1634 if (adev->gfx.imu.funcs) { 1620 1635 if (adev->gfx.imu.funcs->init_microcode) {
+14 -40
drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
··· 1778 1778 udelay(50); 1779 1779 } 1780 1780 1781 - 1782 - static void gfx_v6_0_scratch_init(struct amdgpu_device *adev) 1783 - { 1784 - adev->gfx.scratch.num_reg = 8; 1785 - adev->gfx.scratch.reg_base = mmSCRATCH_REG0; 1786 - adev->gfx.scratch.free_mask = (1u << adev->gfx.scratch.num_reg) - 1; 1787 - } 1788 - 1789 1781 static int gfx_v6_0_ring_test_ring(struct amdgpu_ring *ring) 1790 1782 { 1791 1783 struct amdgpu_device *adev = ring->adev; 1792 - uint32_t scratch; 1793 1784 uint32_t tmp = 0; 1794 1785 unsigned i; 1795 1786 int r; 1796 1787 1797 - r = amdgpu_gfx_scratch_get(adev, &scratch); 1798 - if (r) 1799 - return r; 1800 - 1801 - WREG32(scratch, 0xCAFEDEAD); 1788 + WREG32(mmSCRATCH_REG0, 0xCAFEDEAD); 1802 1789 1803 1790 r = amdgpu_ring_alloc(ring, 3); 1804 1791 if (r) 1805 - goto error_free_scratch; 1792 + return r; 1806 1793 1807 1794 amdgpu_ring_write(ring, PACKET3(PACKET3_SET_CONFIG_REG, 1)); 1808 - amdgpu_ring_write(ring, (scratch - PACKET3_SET_CONFIG_REG_START)); 1795 + amdgpu_ring_write(ring, mmSCRATCH_REG0 - PACKET3_SET_CONFIG_REG_START); 1809 1796 amdgpu_ring_write(ring, 0xDEADBEEF); 1810 1797 amdgpu_ring_commit(ring); 1811 1798 1812 1799 for (i = 0; i < adev->usec_timeout; i++) { 1813 - tmp = RREG32(scratch); 1800 + tmp = RREG32(mmSCRATCH_REG0); 1814 1801 if (tmp == 0xDEADBEEF) 1815 1802 break; 1816 1803 udelay(1); ··· 1805 1818 1806 1819 if (i >= adev->usec_timeout) 1807 1820 r = -ETIMEDOUT; 1808 - 1809 - error_free_scratch: 1810 - amdgpu_gfx_scratch_free(adev, scratch); 1811 1821 return r; 1812 1822 } 1813 1823 ··· 1887 1903 static int gfx_v6_0_ring_test_ib(struct amdgpu_ring *ring, long timeout) 1888 1904 { 1889 1905 struct amdgpu_device *adev = ring->adev; 1890 - struct amdgpu_ib ib; 1891 1906 struct dma_fence *f = NULL; 1892 - uint32_t scratch; 1907 + struct amdgpu_ib ib; 1893 1908 uint32_t tmp = 0; 1894 1909 long r; 1895 1910 1896 - r = amdgpu_gfx_scratch_get(adev, &scratch); 1911 + WREG32(mmSCRATCH_REG0, 0xCAFEDEAD); 1912 + memset(&ib, 0, sizeof(ib)); 1913 + r = amdgpu_ib_get(adev, NULL, 256, AMDGPU_IB_POOL_DIRECT, &ib); 1897 1914 if (r) 1898 1915 return r; 1899 1916 1900 - WREG32(scratch, 0xCAFEDEAD); 1901 - memset(&ib, 0, sizeof(ib)); 1902 - r = amdgpu_ib_get(adev, NULL, 256, 1903 - AMDGPU_IB_POOL_DIRECT, &ib); 1904 - if (r) 1905 - goto err1; 1906 - 1907 1917 ib.ptr[0] = PACKET3(PACKET3_SET_CONFIG_REG, 1); 1908 - ib.ptr[1] = ((scratch - PACKET3_SET_CONFIG_REG_START)); 1918 + ib.ptr[1] = mmSCRATCH_REG0 - PACKET3_SET_CONFIG_REG_START; 1909 1919 ib.ptr[2] = 0xDEADBEEF; 1910 1920 ib.length_dw = 3; 1911 1921 1912 1922 r = amdgpu_ib_schedule(ring, 1, &ib, NULL, &f); 1913 1923 if (r) 1914 - goto err2; 1924 + goto error; 1915 1925 1916 1926 r = dma_fence_wait_timeout(f, false, timeout); 1917 1927 if (r == 0) { 1918 1928 r = -ETIMEDOUT; 1919 - goto err2; 1929 + goto error; 1920 1930 } else if (r < 0) { 1921 - goto err2; 1931 + goto error; 1922 1932 } 1923 - tmp = RREG32(scratch); 1933 + tmp = RREG32(mmSCRATCH_REG0); 1924 1934 if (tmp == 0xDEADBEEF) 1925 1935 r = 0; 1926 1936 else 1927 1937 r = -EINVAL; 1928 1938 1929 - err2: 1939 + error: 1930 1940 amdgpu_ib_free(adev, &ib, NULL); 1931 1941 dma_fence_put(f); 1932 - err1: 1933 - amdgpu_gfx_scratch_free(adev, scratch); 1934 1942 return r; 1935 1943 } 1936 1944 ··· 3069 3093 r = amdgpu_irq_add_id(adev, AMDGPU_IRQ_CLIENTID_LEGACY, 185, &adev->gfx.priv_inst_irq); 3070 3094 if (r) 3071 3095 return r; 3072 - 3073 - gfx_v6_0_scratch_init(adev); 3074 3096 3075 3097 r = gfx_v6_0_init_microcode(adev); 3076 3098 if (r) {
+13 -51
drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
··· 2049 2049 udelay(50); 2050 2050 } 2051 2051 2052 - /* 2053 - * GPU scratch registers helpers function. 2054 - */ 2055 - /** 2056 - * gfx_v7_0_scratch_init - setup driver info for CP scratch regs 2057 - * 2058 - * @adev: amdgpu_device pointer 2059 - * 2060 - * Set up the number and offset of the CP scratch registers. 2061 - * NOTE: use of CP scratch registers is a legacy interface and 2062 - * is not used by default on newer asics (r6xx+). On newer asics, 2063 - * memory buffers are used for fences rather than scratch regs. 2064 - */ 2065 - static void gfx_v7_0_scratch_init(struct amdgpu_device *adev) 2066 - { 2067 - adev->gfx.scratch.num_reg = 8; 2068 - adev->gfx.scratch.reg_base = mmSCRATCH_REG0; 2069 - adev->gfx.scratch.free_mask = (1u << adev->gfx.scratch.num_reg) - 1; 2070 - } 2071 - 2072 2052 /** 2073 2053 * gfx_v7_0_ring_test_ring - basic gfx ring test 2074 2054 * ··· 2062 2082 static int gfx_v7_0_ring_test_ring(struct amdgpu_ring *ring) 2063 2083 { 2064 2084 struct amdgpu_device *adev = ring->adev; 2065 - uint32_t scratch; 2066 2085 uint32_t tmp = 0; 2067 2086 unsigned i; 2068 2087 int r; 2069 2088 2070 - r = amdgpu_gfx_scratch_get(adev, &scratch); 2089 + WREG32(mmSCRATCH_REG0, 0xCAFEDEAD); 2090 + r = amdgpu_ring_alloc(ring, 3); 2071 2091 if (r) 2072 2092 return r; 2073 2093 2074 - WREG32(scratch, 0xCAFEDEAD); 2075 - r = amdgpu_ring_alloc(ring, 3); 2076 - if (r) 2077 - goto error_free_scratch; 2078 - 2079 2094 amdgpu_ring_write(ring, PACKET3(PACKET3_SET_UCONFIG_REG, 1)); 2080 - amdgpu_ring_write(ring, (scratch - PACKET3_SET_UCONFIG_REG_START)); 2095 + amdgpu_ring_write(ring, mmSCRATCH_REG0 - PACKET3_SET_UCONFIG_REG_START); 2081 2096 amdgpu_ring_write(ring, 0xDEADBEEF); 2082 2097 amdgpu_ring_commit(ring); 2083 2098 2084 2099 for (i = 0; i < adev->usec_timeout; i++) { 2085 - tmp = RREG32(scratch); 2100 + tmp = RREG32(mmSCRATCH_REG0); 2086 2101 if (tmp == 0xDEADBEEF) 2087 2102 break; 2088 2103 udelay(1); 2089 2104 } 2090 2105 if (i >= adev->usec_timeout) 2091 2106 r = -ETIMEDOUT; 2092 - 2093 - error_free_scratch: 2094 - amdgpu_gfx_scratch_free(adev, scratch); 2095 2107 return r; 2096 2108 } 2097 2109 ··· 2327 2355 struct amdgpu_device *adev = ring->adev; 2328 2356 struct amdgpu_ib ib; 2329 2357 struct dma_fence *f = NULL; 2330 - uint32_t scratch; 2331 2358 uint32_t tmp = 0; 2332 2359 long r; 2333 2360 2334 - r = amdgpu_gfx_scratch_get(adev, &scratch); 2361 + WREG32(mmSCRATCH_REG0, 0xCAFEDEAD); 2362 + memset(&ib, 0, sizeof(ib)); 2363 + r = amdgpu_ib_get(adev, NULL, 256, AMDGPU_IB_POOL_DIRECT, &ib); 2335 2364 if (r) 2336 2365 return r; 2337 2366 2338 - WREG32(scratch, 0xCAFEDEAD); 2339 - memset(&ib, 0, sizeof(ib)); 2340 - r = amdgpu_ib_get(adev, NULL, 256, 2341 - AMDGPU_IB_POOL_DIRECT, &ib); 2342 - if (r) 2343 - goto err1; 2344 - 2345 2367 ib.ptr[0] = PACKET3(PACKET3_SET_UCONFIG_REG, 1); 2346 - ib.ptr[1] = ((scratch - PACKET3_SET_UCONFIG_REG_START)); 2368 + ib.ptr[1] = mmSCRATCH_REG0 - PACKET3_SET_UCONFIG_REG_START; 2347 2369 ib.ptr[2] = 0xDEADBEEF; 2348 2370 ib.length_dw = 3; 2349 2371 2350 2372 r = amdgpu_ib_schedule(ring, 1, &ib, NULL, &f); 2351 2373 if (r) 2352 - goto err2; 2374 + goto error; 2353 2375 2354 2376 r = dma_fence_wait_timeout(f, false, timeout); 2355 2377 if (r == 0) { 2356 2378 r = -ETIMEDOUT; 2357 - goto err2; 2379 + goto error; 2358 2380 } else if (r < 0) { 2359 - goto err2; 2381 + goto error; 2360 2382 } 2361 - tmp = RREG32(scratch); 2383 + tmp = RREG32(mmSCRATCH_REG0); 2362 2384 if (tmp == 0xDEADBEEF) 2363 2385 r = 0; 2364 2386 else 2365 2387 r = -EINVAL; 2366 2388 2367 - err2: 2389 + error: 2368 2390 amdgpu_ib_free(adev, &ib, NULL); 2369 2391 dma_fence_put(f); 2370 - err1: 2371 - amdgpu_gfx_scratch_free(adev, scratch); 2372 2392 return r; 2373 2393 } 2374 2394 ··· 4452 4488 &adev->gfx.priv_inst_irq); 4453 4489 if (r) 4454 4490 return r; 4455 - 4456 - gfx_v7_0_scratch_init(adev); 4457 4491 4458 4492 r = gfx_v7_0_init_microcode(adev); 4459 4493 if (r) {
+4 -20
drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
··· 835 835 } 836 836 } 837 837 838 - static void gfx_v8_0_scratch_init(struct amdgpu_device *adev) 839 - { 840 - adev->gfx.scratch.num_reg = 8; 841 - adev->gfx.scratch.reg_base = mmSCRATCH_REG0; 842 - adev->gfx.scratch.free_mask = (1u << adev->gfx.scratch.num_reg) - 1; 843 - } 844 - 845 838 static int gfx_v8_0_ring_test_ring(struct amdgpu_ring *ring) 846 839 { 847 840 struct amdgpu_device *adev = ring->adev; 848 - uint32_t scratch; 849 841 uint32_t tmp = 0; 850 842 unsigned i; 851 843 int r; 852 844 853 - r = amdgpu_gfx_scratch_get(adev, &scratch); 845 + WREG32(mmSCRATCH_REG0, 0xCAFEDEAD); 846 + r = amdgpu_ring_alloc(ring, 3); 854 847 if (r) 855 848 return r; 856 849 857 - WREG32(scratch, 0xCAFEDEAD); 858 - r = amdgpu_ring_alloc(ring, 3); 859 - if (r) 860 - goto error_free_scratch; 861 - 862 850 amdgpu_ring_write(ring, PACKET3(PACKET3_SET_UCONFIG_REG, 1)); 863 - amdgpu_ring_write(ring, (scratch - PACKET3_SET_UCONFIG_REG_START)); 851 + amdgpu_ring_write(ring, mmSCRATCH_REG0 - PACKET3_SET_UCONFIG_REG_START); 864 852 amdgpu_ring_write(ring, 0xDEADBEEF); 865 853 amdgpu_ring_commit(ring); 866 854 867 855 for (i = 0; i < adev->usec_timeout; i++) { 868 - tmp = RREG32(scratch); 856 + tmp = RREG32(mmSCRATCH_REG0); 869 857 if (tmp == 0xDEADBEEF) 870 858 break; 871 859 udelay(1); ··· 862 874 if (i >= adev->usec_timeout) 863 875 r = -ETIMEDOUT; 864 876 865 - error_free_scratch: 866 - amdgpu_gfx_scratch_free(adev, scratch); 867 877 return r; 868 878 } 869 879 ··· 1985 1999 INIT_WORK(&adev->gfx.sq_work.work, gfx_v8_0_sq_irq_work_func); 1986 2000 1987 2001 adev->gfx.gfx_current_status = AMDGPU_GFX_NORMAL_MODE; 1988 - 1989 - gfx_v8_0_scratch_init(adev); 1990 2002 1991 2003 r = gfx_v8_0_init_microcode(adev); 1992 2004 if (r) {
+5 -21
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
··· 950 950 (const u32)ARRAY_SIZE(golden_settings_gc_9_x_common)); 951 951 } 952 952 953 - static void gfx_v9_0_scratch_init(struct amdgpu_device *adev) 954 - { 955 - adev->gfx.scratch.num_reg = 8; 956 - adev->gfx.scratch.reg_base = SOC15_REG_OFFSET(GC, 0, mmSCRATCH_REG0); 957 - adev->gfx.scratch.free_mask = (1u << adev->gfx.scratch.num_reg) - 1; 958 - } 959 - 960 953 static void gfx_v9_0_write_data_to_reg(struct amdgpu_ring *ring, int eng_sel, 961 954 bool wc, uint32_t reg, uint32_t val) 962 955 { ··· 987 994 static int gfx_v9_0_ring_test_ring(struct amdgpu_ring *ring) 988 995 { 989 996 struct amdgpu_device *adev = ring->adev; 990 - uint32_t scratch; 991 997 uint32_t tmp = 0; 992 998 unsigned i; 993 999 int r; 994 1000 995 - r = amdgpu_gfx_scratch_get(adev, &scratch); 1001 + WREG32_SOC15(GC, 0, mmSCRATCH_REG0, 0xCAFEDEAD); 1002 + r = amdgpu_ring_alloc(ring, 3); 996 1003 if (r) 997 1004 return r; 998 1005 999 - WREG32(scratch, 0xCAFEDEAD); 1000 - r = amdgpu_ring_alloc(ring, 3); 1001 - if (r) 1002 - goto error_free_scratch; 1003 - 1004 1006 amdgpu_ring_write(ring, PACKET3(PACKET3_SET_UCONFIG_REG, 1)); 1005 - amdgpu_ring_write(ring, (scratch - PACKET3_SET_UCONFIG_REG_START)); 1007 + amdgpu_ring_write(ring, SOC15_REG_OFFSET(GC, 0, mmSCRATCH_REG0) - 1008 + PACKET3_SET_UCONFIG_REG_START); 1006 1009 amdgpu_ring_write(ring, 0xDEADBEEF); 1007 1010 amdgpu_ring_commit(ring); 1008 1011 1009 1012 for (i = 0; i < adev->usec_timeout; i++) { 1010 - tmp = RREG32(scratch); 1013 + tmp = RREG32_SOC15(GC, 0, mmSCRATCH_REG0); 1011 1014 if (tmp == 0xDEADBEEF) 1012 1015 break; 1013 1016 udelay(1); ··· 1011 1022 1012 1023 if (i >= adev->usec_timeout) 1013 1024 r = -ETIMEDOUT; 1014 - 1015 - error_free_scratch: 1016 - amdgpu_gfx_scratch_free(adev, scratch); 1017 1025 return r; 1018 1026 } 1019 1027 ··· 2323 2337 return r; 2324 2338 2325 2339 adev->gfx.gfx_current_status = AMDGPU_GFX_NORMAL_MODE; 2326 - 2327 - gfx_v9_0_scratch_init(adev); 2328 2340 2329 2341 r = gfx_v9_0_init_microcode(adev); 2330 2342 if (r) {