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

drm/amdgpu: remove gfx9 NGG

Never used.

Signed-off-by: Marek Olšák <marek.olsak@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Marek Olšák and committed by
Alex Deucher
6de088a0 631cdbd2

-277
-5
drivers/gpu/drm/amd/amdgpu/amdgpu.h
··· 147 147 extern char *amdgpu_disable_cu; 148 148 extern char *amdgpu_virtual_display; 149 149 extern uint amdgpu_pp_feature_mask; 150 - extern int amdgpu_ngg; 151 - extern int amdgpu_prim_buf_per_se; 152 - extern int amdgpu_pos_buf_per_se; 153 - extern int amdgpu_cntl_sb_buf_per_se; 154 - extern int amdgpu_param_buf_per_se; 155 150 extern int amdgpu_job_hang_limit; 156 151 extern int amdgpu_lbpw; 157 152 extern int amdgpu_compute_multipipe;
-41
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
··· 128 128 char *amdgpu_virtual_display = NULL; 129 129 /* OverDrive(bit 14) disabled by default*/ 130 130 uint amdgpu_pp_feature_mask = 0xffffbfff; 131 - int amdgpu_ngg = 0; 132 - int amdgpu_prim_buf_per_se = 0; 133 - int amdgpu_pos_buf_per_se = 0; 134 - int amdgpu_cntl_sb_buf_per_se = 0; 135 - int amdgpu_param_buf_per_se = 0; 136 131 int amdgpu_job_hang_limit = 0; 137 132 int amdgpu_lbpw = -1; 138 133 int amdgpu_compute_multipipe = -1; ··· 446 451 MODULE_PARM_DESC(virtual_display, 447 452 "Enable virtual display feature (the virtual_display will be set like xxxx:xx:xx.x,x;xxxx:xx:xx.x,x)"); 448 453 module_param_named(virtual_display, amdgpu_virtual_display, charp, 0444); 449 - 450 - /** 451 - * DOC: ngg (int) 452 - * Set to enable Next Generation Graphics (1 = enable). The default is 0 (disabled). 453 - */ 454 - MODULE_PARM_DESC(ngg, "Next Generation Graphics (1 = enable, 0 = disable(default depending on gfx))"); 455 - module_param_named(ngg, amdgpu_ngg, int, 0444); 456 - 457 - /** 458 - * DOC: prim_buf_per_se (int) 459 - * Override the size of Primitive Buffer per Shader Engine in Byte. The default is 0 (depending on gfx). 460 - */ 461 - MODULE_PARM_DESC(prim_buf_per_se, "the size of Primitive Buffer per Shader Engine (default depending on gfx)"); 462 - module_param_named(prim_buf_per_se, amdgpu_prim_buf_per_se, int, 0444); 463 - 464 - /** 465 - * DOC: pos_buf_per_se (int) 466 - * Override the size of Position Buffer per Shader Engine in Byte. The default is 0 (depending on gfx). 467 - */ 468 - MODULE_PARM_DESC(pos_buf_per_se, "the size of Position Buffer per Shader Engine (default depending on gfx)"); 469 - module_param_named(pos_buf_per_se, amdgpu_pos_buf_per_se, int, 0444); 470 - 471 - /** 472 - * DOC: cntl_sb_buf_per_se (int) 473 - * Override the size of Control Sideband per Shader Engine in Byte. The default is 0 (depending on gfx). 474 - */ 475 - MODULE_PARM_DESC(cntl_sb_buf_per_se, "the size of Control Sideband per Shader Engine (default depending on gfx)"); 476 - module_param_named(cntl_sb_buf_per_se, amdgpu_cntl_sb_buf_per_se, int, 0444); 477 - 478 - /** 479 - * DOC: param_buf_per_se (int) 480 - * Override the size of Off-Chip Parameter Cache per Shader Engine in Byte. 481 - * The default is 0 (depending on gfx). 482 - */ 483 - MODULE_PARM_DESC(param_buf_per_se, "the size of Off-Chip Parameter Cache per Shader Engine (default depending on gfx)"); 484 - module_param_named(param_buf_per_se, amdgpu_param_buf_per_se, int, 0444); 485 454 486 455 /** 487 456 * DOC: job_hang_limit (int)
-25
drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h
··· 200 200 int (*query_ras_error_count) (struct amdgpu_device *adev, void *ras_error_status); 201 201 }; 202 202 203 - struct amdgpu_ngg_buf { 204 - struct amdgpu_bo *bo; 205 - uint64_t gpu_addr; 206 - uint32_t size; 207 - uint32_t bo_size; 208 - }; 209 - 210 - enum { 211 - NGG_PRIM = 0, 212 - NGG_POS, 213 - NGG_CNTL, 214 - NGG_PARAM, 215 - NGG_BUF_MAX 216 - }; 217 - 218 - struct amdgpu_ngg { 219 - struct amdgpu_ngg_buf buf[NGG_BUF_MAX]; 220 - uint32_t gds_reserve_addr; 221 - uint32_t gds_reserve_size; 222 - bool init; 223 - }; 224 - 225 203 struct sq_work { 226 204 struct work_struct work; 227 205 unsigned ih_data; ··· 287 309 /* reset mask */ 288 310 uint32_t grbm_soft_reset; 289 311 uint32_t srbm_soft_reset; 290 - 291 - /* NGG */ 292 - struct amdgpu_ngg ngg; 293 312 294 313 /* gfx off */ 295 314 bool gfx_off_state; /* true: enabled, false: disabled */
-11
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
··· 770 770 dev_info.vce_harvest_config = adev->vce.harvest_config; 771 771 dev_info.gc_double_offchip_lds_buf = 772 772 adev->gfx.config.double_offchip_lds_buf; 773 - 774 - if (amdgpu_ngg) { 775 - dev_info.prim_buf_gpu_addr = adev->gfx.ngg.buf[NGG_PRIM].gpu_addr; 776 - dev_info.prim_buf_size = adev->gfx.ngg.buf[NGG_PRIM].size; 777 - dev_info.pos_buf_gpu_addr = adev->gfx.ngg.buf[NGG_POS].gpu_addr; 778 - dev_info.pos_buf_size = adev->gfx.ngg.buf[NGG_POS].size; 779 - dev_info.cntl_sb_buf_gpu_addr = adev->gfx.ngg.buf[NGG_CNTL].gpu_addr; 780 - dev_info.cntl_sb_buf_size = adev->gfx.ngg.buf[NGG_CNTL].size; 781 - dev_info.param_buf_gpu_addr = adev->gfx.ngg.buf[NGG_PARAM].gpu_addr; 782 - dev_info.param_buf_size = adev->gfx.ngg.buf[NGG_PARAM].size; 783 - } 784 773 dev_info.wave_front_size = adev->gfx.cu_info.wave_front_size; 785 774 dev_info.num_shader_visible_vgprs = adev->gfx.config.max_gprs; 786 775 dev_info.num_cu_per_sh = adev->gfx.config.max_cu_per_sh;
-195
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
··· 1957 1957 return 0; 1958 1958 } 1959 1959 1960 - static int gfx_v9_0_ngg_create_buf(struct amdgpu_device *adev, 1961 - struct amdgpu_ngg_buf *ngg_buf, 1962 - int size_se, 1963 - int default_size_se) 1964 - { 1965 - int r; 1966 - 1967 - if (size_se < 0) { 1968 - dev_err(adev->dev, "Buffer size is invalid: %d\n", size_se); 1969 - return -EINVAL; 1970 - } 1971 - size_se = size_se ? size_se : default_size_se; 1972 - 1973 - ngg_buf->size = size_se * adev->gfx.config.max_shader_engines; 1974 - r = amdgpu_bo_create_kernel(adev, ngg_buf->size, 1975 - PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM, 1976 - &ngg_buf->bo, 1977 - &ngg_buf->gpu_addr, 1978 - NULL); 1979 - if (r) { 1980 - dev_err(adev->dev, "(%d) failed to create NGG buffer\n", r); 1981 - return r; 1982 - } 1983 - ngg_buf->bo_size = amdgpu_bo_size(ngg_buf->bo); 1984 - 1985 - return r; 1986 - } 1987 - 1988 - static int gfx_v9_0_ngg_fini(struct amdgpu_device *adev) 1989 - { 1990 - int i; 1991 - 1992 - for (i = 0; i < NGG_BUF_MAX; i++) 1993 - amdgpu_bo_free_kernel(&adev->gfx.ngg.buf[i].bo, 1994 - &adev->gfx.ngg.buf[i].gpu_addr, 1995 - NULL); 1996 - 1997 - memset(&adev->gfx.ngg.buf[0], 0, 1998 - sizeof(struct amdgpu_ngg_buf) * NGG_BUF_MAX); 1999 - 2000 - adev->gfx.ngg.init = false; 2001 - 2002 - return 0; 2003 - } 2004 - 2005 - static int gfx_v9_0_ngg_init(struct amdgpu_device *adev) 2006 - { 2007 - int r; 2008 - 2009 - if (!amdgpu_ngg || adev->gfx.ngg.init == true) 2010 - return 0; 2011 - 2012 - /* GDS reserve memory: 64 bytes alignment */ 2013 - adev->gfx.ngg.gds_reserve_size = ALIGN(5 * 4, 0x40); 2014 - adev->gds.gds_size -= adev->gfx.ngg.gds_reserve_size; 2015 - adev->gfx.ngg.gds_reserve_addr = RREG32_SOC15(GC, 0, mmGDS_VMID0_BASE); 2016 - adev->gfx.ngg.gds_reserve_addr += RREG32_SOC15(GC, 0, mmGDS_VMID0_SIZE); 2017 - 2018 - /* Primitive Buffer */ 2019 - r = gfx_v9_0_ngg_create_buf(adev, &adev->gfx.ngg.buf[NGG_PRIM], 2020 - amdgpu_prim_buf_per_se, 2021 - 64 * 1024); 2022 - if (r) { 2023 - dev_err(adev->dev, "Failed to create Primitive Buffer\n"); 2024 - goto err; 2025 - } 2026 - 2027 - /* Position Buffer */ 2028 - r = gfx_v9_0_ngg_create_buf(adev, &adev->gfx.ngg.buf[NGG_POS], 2029 - amdgpu_pos_buf_per_se, 2030 - 256 * 1024); 2031 - if (r) { 2032 - dev_err(adev->dev, "Failed to create Position Buffer\n"); 2033 - goto err; 2034 - } 2035 - 2036 - /* Control Sideband */ 2037 - r = gfx_v9_0_ngg_create_buf(adev, &adev->gfx.ngg.buf[NGG_CNTL], 2038 - amdgpu_cntl_sb_buf_per_se, 2039 - 256); 2040 - if (r) { 2041 - dev_err(adev->dev, "Failed to create Control Sideband Buffer\n"); 2042 - goto err; 2043 - } 2044 - 2045 - /* Parameter Cache, not created by default */ 2046 - if (amdgpu_param_buf_per_se <= 0) 2047 - goto out; 2048 - 2049 - r = gfx_v9_0_ngg_create_buf(adev, &adev->gfx.ngg.buf[NGG_PARAM], 2050 - amdgpu_param_buf_per_se, 2051 - 512 * 1024); 2052 - if (r) { 2053 - dev_err(adev->dev, "Failed to create Parameter Cache\n"); 2054 - goto err; 2055 - } 2056 - 2057 - out: 2058 - adev->gfx.ngg.init = true; 2059 - return 0; 2060 - err: 2061 - gfx_v9_0_ngg_fini(adev); 2062 - return r; 2063 - } 2064 - 2065 - static int gfx_v9_0_ngg_en(struct amdgpu_device *adev) 2066 - { 2067 - struct amdgpu_ring *ring = &adev->gfx.gfx_ring[0]; 2068 - int r; 2069 - u32 data, base; 2070 - 2071 - if (!amdgpu_ngg) 2072 - return 0; 2073 - 2074 - /* Program buffer size */ 2075 - data = REG_SET_FIELD(0, WD_BUF_RESOURCE_1, INDEX_BUF_SIZE, 2076 - adev->gfx.ngg.buf[NGG_PRIM].size >> 8); 2077 - data = REG_SET_FIELD(data, WD_BUF_RESOURCE_1, POS_BUF_SIZE, 2078 - adev->gfx.ngg.buf[NGG_POS].size >> 8); 2079 - WREG32_SOC15(GC, 0, mmWD_BUF_RESOURCE_1, data); 2080 - 2081 - data = REG_SET_FIELD(0, WD_BUF_RESOURCE_2, CNTL_SB_BUF_SIZE, 2082 - adev->gfx.ngg.buf[NGG_CNTL].size >> 8); 2083 - data = REG_SET_FIELD(data, WD_BUF_RESOURCE_2, PARAM_BUF_SIZE, 2084 - adev->gfx.ngg.buf[NGG_PARAM].size >> 10); 2085 - WREG32_SOC15(GC, 0, mmWD_BUF_RESOURCE_2, data); 2086 - 2087 - /* Program buffer base address */ 2088 - base = lower_32_bits(adev->gfx.ngg.buf[NGG_PRIM].gpu_addr); 2089 - data = REG_SET_FIELD(0, WD_INDEX_BUF_BASE, BASE, base); 2090 - WREG32_SOC15(GC, 0, mmWD_INDEX_BUF_BASE, data); 2091 - 2092 - base = upper_32_bits(adev->gfx.ngg.buf[NGG_PRIM].gpu_addr); 2093 - data = REG_SET_FIELD(0, WD_INDEX_BUF_BASE_HI, BASE_HI, base); 2094 - WREG32_SOC15(GC, 0, mmWD_INDEX_BUF_BASE_HI, data); 2095 - 2096 - base = lower_32_bits(adev->gfx.ngg.buf[NGG_POS].gpu_addr); 2097 - data = REG_SET_FIELD(0, WD_POS_BUF_BASE, BASE, base); 2098 - WREG32_SOC15(GC, 0, mmWD_POS_BUF_BASE, data); 2099 - 2100 - base = upper_32_bits(adev->gfx.ngg.buf[NGG_POS].gpu_addr); 2101 - data = REG_SET_FIELD(0, WD_POS_BUF_BASE_HI, BASE_HI, base); 2102 - WREG32_SOC15(GC, 0, mmWD_POS_BUF_BASE_HI, data); 2103 - 2104 - base = lower_32_bits(adev->gfx.ngg.buf[NGG_CNTL].gpu_addr); 2105 - data = REG_SET_FIELD(0, WD_CNTL_SB_BUF_BASE, BASE, base); 2106 - WREG32_SOC15(GC, 0, mmWD_CNTL_SB_BUF_BASE, data); 2107 - 2108 - base = upper_32_bits(adev->gfx.ngg.buf[NGG_CNTL].gpu_addr); 2109 - data = REG_SET_FIELD(0, WD_CNTL_SB_BUF_BASE_HI, BASE_HI, base); 2110 - WREG32_SOC15(GC, 0, mmWD_CNTL_SB_BUF_BASE_HI, data); 2111 - 2112 - /* Clear GDS reserved memory */ 2113 - r = amdgpu_ring_alloc(ring, 17); 2114 - if (r) { 2115 - DRM_ERROR("amdgpu: NGG failed to lock ring %s (%d).\n", 2116 - ring->name, r); 2117 - return r; 2118 - } 2119 - 2120 - gfx_v9_0_write_data_to_reg(ring, 0, false, 2121 - SOC15_REG_OFFSET(GC, 0, mmGDS_VMID0_SIZE), 2122 - (adev->gds.gds_size + 2123 - adev->gfx.ngg.gds_reserve_size)); 2124 - 2125 - amdgpu_ring_write(ring, PACKET3(PACKET3_DMA_DATA, 5)); 2126 - amdgpu_ring_write(ring, (PACKET3_DMA_DATA_CP_SYNC | 2127 - PACKET3_DMA_DATA_DST_SEL(1) | 2128 - PACKET3_DMA_DATA_SRC_SEL(2))); 2129 - amdgpu_ring_write(ring, 0); 2130 - amdgpu_ring_write(ring, 0); 2131 - amdgpu_ring_write(ring, adev->gfx.ngg.gds_reserve_addr); 2132 - amdgpu_ring_write(ring, 0); 2133 - amdgpu_ring_write(ring, PACKET3_DMA_DATA_CMD_RAW_WAIT | 2134 - adev->gfx.ngg.gds_reserve_size); 2135 - 2136 - gfx_v9_0_write_data_to_reg(ring, 0, false, 2137 - SOC15_REG_OFFSET(GC, 0, mmGDS_VMID0_SIZE), 0); 2138 - 2139 - amdgpu_ring_commit(ring); 2140 - 2141 - return 0; 2142 - } 2143 - 2144 1960 static int gfx_v9_0_compute_ring_init(struct amdgpu_device *adev, int ring_id, 2145 1961 int mec, int pipe, int queue) 2146 1962 { ··· 2124 2308 if (r) 2125 2309 return r; 2126 2310 2127 - r = gfx_v9_0_ngg_init(adev); 2128 - if (r) 2129 - return r; 2130 - 2131 2311 return 0; 2132 2312 } 2133 2313 ··· 2157 2345 amdgpu_gfx_kiq_fini(adev); 2158 2346 2159 2347 gfx_v9_0_mec_fini(adev); 2160 - gfx_v9_0_ngg_fini(adev); 2161 2348 amdgpu_bo_unref(&adev->gfx.rlc.clear_state_obj); 2162 2349 if (adev->asic_type == CHIP_RAVEN || adev->asic_type == CHIP_RENOIR) { 2163 2350 amdgpu_bo_free_kernel(&adev->gfx.rlc.cp_table_obj, ··· 3694 3883 r = gfx_v9_0_cp_resume(adev); 3695 3884 if (r) 3696 3885 return r; 3697 - 3698 - if (adev->asic_type != CHIP_ARCTURUS) { 3699 - r = gfx_v9_0_ngg_en(adev); 3700 - if (r) 3701 - return r; 3702 - } 3703 3886 3704 3887 return r; 3705 3888 }