|
@@ -903,6 +903,191 @@ static int gfx_v8_0_mec_init(struct amdgpu_device *adev)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static void gfx_v8_0_gpu_early_init(struct amdgpu_device *adev)
|
|
|
+{
|
|
|
+ u32 gb_addr_config;
|
|
|
+ u32 mc_shared_chmap, mc_arb_ramcfg;
|
|
|
+ u32 dimm00_addr_map, dimm01_addr_map, dimm10_addr_map, dimm11_addr_map;
|
|
|
+ u32 tmp;
|
|
|
+
|
|
|
+ switch (adev->asic_type) {
|
|
|
+ case CHIP_TOPAZ:
|
|
|
+ adev->gfx.config.max_shader_engines = 1;
|
|
|
+ adev->gfx.config.max_tile_pipes = 2;
|
|
|
+ adev->gfx.config.max_cu_per_sh = 6;
|
|
|
+ adev->gfx.config.max_sh_per_se = 1;
|
|
|
+ adev->gfx.config.max_backends_per_se = 2;
|
|
|
+ adev->gfx.config.max_texture_channel_caches = 2;
|
|
|
+ adev->gfx.config.max_gprs = 256;
|
|
|
+ adev->gfx.config.max_gs_threads = 32;
|
|
|
+ adev->gfx.config.max_hw_contexts = 8;
|
|
|
+
|
|
|
+ adev->gfx.config.sc_prim_fifo_size_frontend = 0x20;
|
|
|
+ adev->gfx.config.sc_prim_fifo_size_backend = 0x100;
|
|
|
+ adev->gfx.config.sc_hiz_tile_fifo_size = 0x30;
|
|
|
+ adev->gfx.config.sc_earlyz_tile_fifo_size = 0x130;
|
|
|
+ gb_addr_config = TOPAZ_GB_ADDR_CONFIG_GOLDEN;
|
|
|
+ break;
|
|
|
+ case CHIP_FIJI:
|
|
|
+ adev->gfx.config.max_shader_engines = 4;
|
|
|
+ adev->gfx.config.max_tile_pipes = 16;
|
|
|
+ adev->gfx.config.max_cu_per_sh = 16;
|
|
|
+ adev->gfx.config.max_sh_per_se = 1;
|
|
|
+ adev->gfx.config.max_backends_per_se = 4;
|
|
|
+ adev->gfx.config.max_texture_channel_caches = 8;
|
|
|
+ adev->gfx.config.max_gprs = 256;
|
|
|
+ adev->gfx.config.max_gs_threads = 32;
|
|
|
+ adev->gfx.config.max_hw_contexts = 8;
|
|
|
+
|
|
|
+ adev->gfx.config.sc_prim_fifo_size_frontend = 0x20;
|
|
|
+ adev->gfx.config.sc_prim_fifo_size_backend = 0x100;
|
|
|
+ adev->gfx.config.sc_hiz_tile_fifo_size = 0x30;
|
|
|
+ adev->gfx.config.sc_earlyz_tile_fifo_size = 0x130;
|
|
|
+ gb_addr_config = TONGA_GB_ADDR_CONFIG_GOLDEN;
|
|
|
+ break;
|
|
|
+ case CHIP_TONGA:
|
|
|
+ adev->gfx.config.max_shader_engines = 4;
|
|
|
+ adev->gfx.config.max_tile_pipes = 8;
|
|
|
+ adev->gfx.config.max_cu_per_sh = 8;
|
|
|
+ adev->gfx.config.max_sh_per_se = 1;
|
|
|
+ adev->gfx.config.max_backends_per_se = 2;
|
|
|
+ adev->gfx.config.max_texture_channel_caches = 8;
|
|
|
+ adev->gfx.config.max_gprs = 256;
|
|
|
+ adev->gfx.config.max_gs_threads = 32;
|
|
|
+ adev->gfx.config.max_hw_contexts = 8;
|
|
|
+
|
|
|
+ adev->gfx.config.sc_prim_fifo_size_frontend = 0x20;
|
|
|
+ adev->gfx.config.sc_prim_fifo_size_backend = 0x100;
|
|
|
+ adev->gfx.config.sc_hiz_tile_fifo_size = 0x30;
|
|
|
+ adev->gfx.config.sc_earlyz_tile_fifo_size = 0x130;
|
|
|
+ gb_addr_config = TONGA_GB_ADDR_CONFIG_GOLDEN;
|
|
|
+ break;
|
|
|
+ case CHIP_CARRIZO:
|
|
|
+ adev->gfx.config.max_shader_engines = 1;
|
|
|
+ adev->gfx.config.max_tile_pipes = 2;
|
|
|
+ adev->gfx.config.max_sh_per_se = 1;
|
|
|
+ adev->gfx.config.max_backends_per_se = 2;
|
|
|
+
|
|
|
+ switch (adev->pdev->revision) {
|
|
|
+ case 0xc4:
|
|
|
+ case 0x84:
|
|
|
+ case 0xc8:
|
|
|
+ case 0xcc:
|
|
|
+ /* B10 */
|
|
|
+ adev->gfx.config.max_cu_per_sh = 8;
|
|
|
+ break;
|
|
|
+ case 0xc5:
|
|
|
+ case 0x81:
|
|
|
+ case 0x85:
|
|
|
+ case 0xc9:
|
|
|
+ case 0xcd:
|
|
|
+ /* B8 */
|
|
|
+ adev->gfx.config.max_cu_per_sh = 6;
|
|
|
+ break;
|
|
|
+ case 0xc6:
|
|
|
+ case 0xca:
|
|
|
+ case 0xce:
|
|
|
+ /* B6 */
|
|
|
+ adev->gfx.config.max_cu_per_sh = 6;
|
|
|
+ break;
|
|
|
+ case 0xc7:
|
|
|
+ case 0x87:
|
|
|
+ case 0xcb:
|
|
|
+ default:
|
|
|
+ /* B4 */
|
|
|
+ adev->gfx.config.max_cu_per_sh = 4;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ adev->gfx.config.max_texture_channel_caches = 2;
|
|
|
+ adev->gfx.config.max_gprs = 256;
|
|
|
+ adev->gfx.config.max_gs_threads = 32;
|
|
|
+ adev->gfx.config.max_hw_contexts = 8;
|
|
|
+
|
|
|
+ adev->gfx.config.sc_prim_fifo_size_frontend = 0x20;
|
|
|
+ adev->gfx.config.sc_prim_fifo_size_backend = 0x100;
|
|
|
+ adev->gfx.config.sc_hiz_tile_fifo_size = 0x30;
|
|
|
+ adev->gfx.config.sc_earlyz_tile_fifo_size = 0x130;
|
|
|
+ gb_addr_config = CARRIZO_GB_ADDR_CONFIG_GOLDEN;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ adev->gfx.config.max_shader_engines = 2;
|
|
|
+ adev->gfx.config.max_tile_pipes = 4;
|
|
|
+ adev->gfx.config.max_cu_per_sh = 2;
|
|
|
+ adev->gfx.config.max_sh_per_se = 1;
|
|
|
+ adev->gfx.config.max_backends_per_se = 2;
|
|
|
+ adev->gfx.config.max_texture_channel_caches = 4;
|
|
|
+ adev->gfx.config.max_gprs = 256;
|
|
|
+ adev->gfx.config.max_gs_threads = 32;
|
|
|
+ adev->gfx.config.max_hw_contexts = 8;
|
|
|
+
|
|
|
+ adev->gfx.config.sc_prim_fifo_size_frontend = 0x20;
|
|
|
+ adev->gfx.config.sc_prim_fifo_size_backend = 0x100;
|
|
|
+ adev->gfx.config.sc_hiz_tile_fifo_size = 0x30;
|
|
|
+ adev->gfx.config.sc_earlyz_tile_fifo_size = 0x130;
|
|
|
+ gb_addr_config = TONGA_GB_ADDR_CONFIG_GOLDEN;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ mc_shared_chmap = RREG32(mmMC_SHARED_CHMAP);
|
|
|
+ adev->gfx.config.mc_arb_ramcfg = RREG32(mmMC_ARB_RAMCFG);
|
|
|
+ mc_arb_ramcfg = adev->gfx.config.mc_arb_ramcfg;
|
|
|
+
|
|
|
+ adev->gfx.config.num_tile_pipes = adev->gfx.config.max_tile_pipes;
|
|
|
+ adev->gfx.config.mem_max_burst_length_bytes = 256;
|
|
|
+ if (adev->flags & AMD_IS_APU) {
|
|
|
+ /* Get memory bank mapping mode. */
|
|
|
+ tmp = RREG32(mmMC_FUS_DRAM0_BANK_ADDR_MAPPING);
|
|
|
+ dimm00_addr_map = REG_GET_FIELD(tmp, MC_FUS_DRAM0_BANK_ADDR_MAPPING, DIMM0ADDRMAP);
|
|
|
+ dimm01_addr_map = REG_GET_FIELD(tmp, MC_FUS_DRAM0_BANK_ADDR_MAPPING, DIMM1ADDRMAP);
|
|
|
+
|
|
|
+ tmp = RREG32(mmMC_FUS_DRAM1_BANK_ADDR_MAPPING);
|
|
|
+ dimm10_addr_map = REG_GET_FIELD(tmp, MC_FUS_DRAM1_BANK_ADDR_MAPPING, DIMM0ADDRMAP);
|
|
|
+ dimm11_addr_map = REG_GET_FIELD(tmp, MC_FUS_DRAM1_BANK_ADDR_MAPPING, DIMM1ADDRMAP);
|
|
|
+
|
|
|
+ /* Validate settings in case only one DIMM installed. */
|
|
|
+ if ((dimm00_addr_map == 0) || (dimm00_addr_map == 3) || (dimm00_addr_map == 4) || (dimm00_addr_map > 12))
|
|
|
+ dimm00_addr_map = 0;
|
|
|
+ if ((dimm01_addr_map == 0) || (dimm01_addr_map == 3) || (dimm01_addr_map == 4) || (dimm01_addr_map > 12))
|
|
|
+ dimm01_addr_map = 0;
|
|
|
+ if ((dimm10_addr_map == 0) || (dimm10_addr_map == 3) || (dimm10_addr_map == 4) || (dimm10_addr_map > 12))
|
|
|
+ dimm10_addr_map = 0;
|
|
|
+ if ((dimm11_addr_map == 0) || (dimm11_addr_map == 3) || (dimm11_addr_map == 4) || (dimm11_addr_map > 12))
|
|
|
+ dimm11_addr_map = 0;
|
|
|
+
|
|
|
+ /* If DIMM Addr map is 8GB, ROW size should be 2KB. Otherwise 1KB. */
|
|
|
+ /* If ROW size(DIMM1) != ROW size(DMIMM0), ROW size should be larger one. */
|
|
|
+ if ((dimm00_addr_map == 11) || (dimm01_addr_map == 11) || (dimm10_addr_map == 11) || (dimm11_addr_map == 11))
|
|
|
+ adev->gfx.config.mem_row_size_in_kb = 2;
|
|
|
+ else
|
|
|
+ adev->gfx.config.mem_row_size_in_kb = 1;
|
|
|
+ } else {
|
|
|
+ tmp = REG_GET_FIELD(mc_arb_ramcfg, MC_ARB_RAMCFG, NOOFCOLS);
|
|
|
+ adev->gfx.config.mem_row_size_in_kb = (4 * (1 << (8 + tmp))) / 1024;
|
|
|
+ if (adev->gfx.config.mem_row_size_in_kb > 4)
|
|
|
+ adev->gfx.config.mem_row_size_in_kb = 4;
|
|
|
+ }
|
|
|
+
|
|
|
+ adev->gfx.config.shader_engine_tile_size = 32;
|
|
|
+ adev->gfx.config.num_gpus = 1;
|
|
|
+ adev->gfx.config.multi_gpu_tile_size = 64;
|
|
|
+
|
|
|
+ /* fix up row size */
|
|
|
+ switch (adev->gfx.config.mem_row_size_in_kb) {
|
|
|
+ case 1:
|
|
|
+ default:
|
|
|
+ gb_addr_config = REG_SET_FIELD(gb_addr_config, GB_ADDR_CONFIG, ROW_SIZE, 0);
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ gb_addr_config = REG_SET_FIELD(gb_addr_config, GB_ADDR_CONFIG, ROW_SIZE, 1);
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ gb_addr_config = REG_SET_FIELD(gb_addr_config, GB_ADDR_CONFIG, ROW_SIZE, 2);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ adev->gfx.config.gb_addr_config = gb_addr_config;
|
|
|
+}
|
|
|
+
|
|
|
static int gfx_v8_0_sw_init(void *handle)
|
|
|
{
|
|
|
int i, r;
|
|
@@ -1010,6 +1195,8 @@ static int gfx_v8_0_sw_init(void *handle)
|
|
|
|
|
|
adev->gfx.ce_ram_size = 0x8000;
|
|
|
|
|
|
+ gfx_v8_0_gpu_early_init(adev);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -2043,203 +2230,23 @@ static void gfx_v8_0_init_compute_vmid(struct amdgpu_device *adev)
|
|
|
|
|
|
static void gfx_v8_0_gpu_init(struct amdgpu_device *adev)
|
|
|
{
|
|
|
- u32 gb_addr_config;
|
|
|
- u32 mc_shared_chmap, mc_arb_ramcfg;
|
|
|
- u32 dimm00_addr_map, dimm01_addr_map, dimm10_addr_map, dimm11_addr_map;
|
|
|
u32 tmp;
|
|
|
int i;
|
|
|
|
|
|
- switch (adev->asic_type) {
|
|
|
- case CHIP_TOPAZ:
|
|
|
- adev->gfx.config.max_shader_engines = 1;
|
|
|
- adev->gfx.config.max_tile_pipes = 2;
|
|
|
- adev->gfx.config.max_cu_per_sh = 6;
|
|
|
- adev->gfx.config.max_sh_per_se = 1;
|
|
|
- adev->gfx.config.max_backends_per_se = 2;
|
|
|
- adev->gfx.config.max_texture_channel_caches = 2;
|
|
|
- adev->gfx.config.max_gprs = 256;
|
|
|
- adev->gfx.config.max_gs_threads = 32;
|
|
|
- adev->gfx.config.max_hw_contexts = 8;
|
|
|
-
|
|
|
- adev->gfx.config.sc_prim_fifo_size_frontend = 0x20;
|
|
|
- adev->gfx.config.sc_prim_fifo_size_backend = 0x100;
|
|
|
- adev->gfx.config.sc_hiz_tile_fifo_size = 0x30;
|
|
|
- adev->gfx.config.sc_earlyz_tile_fifo_size = 0x130;
|
|
|
- gb_addr_config = TOPAZ_GB_ADDR_CONFIG_GOLDEN;
|
|
|
- break;
|
|
|
- case CHIP_FIJI:
|
|
|
- adev->gfx.config.max_shader_engines = 4;
|
|
|
- adev->gfx.config.max_tile_pipes = 16;
|
|
|
- adev->gfx.config.max_cu_per_sh = 16;
|
|
|
- adev->gfx.config.max_sh_per_se = 1;
|
|
|
- adev->gfx.config.max_backends_per_se = 4;
|
|
|
- adev->gfx.config.max_texture_channel_caches = 8;
|
|
|
- adev->gfx.config.max_gprs = 256;
|
|
|
- adev->gfx.config.max_gs_threads = 32;
|
|
|
- adev->gfx.config.max_hw_contexts = 8;
|
|
|
-
|
|
|
- adev->gfx.config.sc_prim_fifo_size_frontend = 0x20;
|
|
|
- adev->gfx.config.sc_prim_fifo_size_backend = 0x100;
|
|
|
- adev->gfx.config.sc_hiz_tile_fifo_size = 0x30;
|
|
|
- adev->gfx.config.sc_earlyz_tile_fifo_size = 0x130;
|
|
|
- gb_addr_config = TONGA_GB_ADDR_CONFIG_GOLDEN;
|
|
|
- break;
|
|
|
- case CHIP_TONGA:
|
|
|
- adev->gfx.config.max_shader_engines = 4;
|
|
|
- adev->gfx.config.max_tile_pipes = 8;
|
|
|
- adev->gfx.config.max_cu_per_sh = 8;
|
|
|
- adev->gfx.config.max_sh_per_se = 1;
|
|
|
- adev->gfx.config.max_backends_per_se = 2;
|
|
|
- adev->gfx.config.max_texture_channel_caches = 8;
|
|
|
- adev->gfx.config.max_gprs = 256;
|
|
|
- adev->gfx.config.max_gs_threads = 32;
|
|
|
- adev->gfx.config.max_hw_contexts = 8;
|
|
|
-
|
|
|
- adev->gfx.config.sc_prim_fifo_size_frontend = 0x20;
|
|
|
- adev->gfx.config.sc_prim_fifo_size_backend = 0x100;
|
|
|
- adev->gfx.config.sc_hiz_tile_fifo_size = 0x30;
|
|
|
- adev->gfx.config.sc_earlyz_tile_fifo_size = 0x130;
|
|
|
- gb_addr_config = TONGA_GB_ADDR_CONFIG_GOLDEN;
|
|
|
- break;
|
|
|
- case CHIP_CARRIZO:
|
|
|
- adev->gfx.config.max_shader_engines = 1;
|
|
|
- adev->gfx.config.max_tile_pipes = 2;
|
|
|
- adev->gfx.config.max_sh_per_se = 1;
|
|
|
- adev->gfx.config.max_backends_per_se = 2;
|
|
|
-
|
|
|
- switch (adev->pdev->revision) {
|
|
|
- case 0xc4:
|
|
|
- case 0x84:
|
|
|
- case 0xc8:
|
|
|
- case 0xcc:
|
|
|
- /* B10 */
|
|
|
- adev->gfx.config.max_cu_per_sh = 8;
|
|
|
- break;
|
|
|
- case 0xc5:
|
|
|
- case 0x81:
|
|
|
- case 0x85:
|
|
|
- case 0xc9:
|
|
|
- case 0xcd:
|
|
|
- /* B8 */
|
|
|
- adev->gfx.config.max_cu_per_sh = 6;
|
|
|
- break;
|
|
|
- case 0xc6:
|
|
|
- case 0xca:
|
|
|
- case 0xce:
|
|
|
- /* B6 */
|
|
|
- adev->gfx.config.max_cu_per_sh = 6;
|
|
|
- break;
|
|
|
- case 0xc7:
|
|
|
- case 0x87:
|
|
|
- case 0xcb:
|
|
|
- default:
|
|
|
- /* B4 */
|
|
|
- adev->gfx.config.max_cu_per_sh = 4;
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- adev->gfx.config.max_texture_channel_caches = 2;
|
|
|
- adev->gfx.config.max_gprs = 256;
|
|
|
- adev->gfx.config.max_gs_threads = 32;
|
|
|
- adev->gfx.config.max_hw_contexts = 8;
|
|
|
-
|
|
|
- adev->gfx.config.sc_prim_fifo_size_frontend = 0x20;
|
|
|
- adev->gfx.config.sc_prim_fifo_size_backend = 0x100;
|
|
|
- adev->gfx.config.sc_hiz_tile_fifo_size = 0x30;
|
|
|
- adev->gfx.config.sc_earlyz_tile_fifo_size = 0x130;
|
|
|
- gb_addr_config = CARRIZO_GB_ADDR_CONFIG_GOLDEN;
|
|
|
- break;
|
|
|
- default:
|
|
|
- adev->gfx.config.max_shader_engines = 2;
|
|
|
- adev->gfx.config.max_tile_pipes = 4;
|
|
|
- adev->gfx.config.max_cu_per_sh = 2;
|
|
|
- adev->gfx.config.max_sh_per_se = 1;
|
|
|
- adev->gfx.config.max_backends_per_se = 2;
|
|
|
- adev->gfx.config.max_texture_channel_caches = 4;
|
|
|
- adev->gfx.config.max_gprs = 256;
|
|
|
- adev->gfx.config.max_gs_threads = 32;
|
|
|
- adev->gfx.config.max_hw_contexts = 8;
|
|
|
-
|
|
|
- adev->gfx.config.sc_prim_fifo_size_frontend = 0x20;
|
|
|
- adev->gfx.config.sc_prim_fifo_size_backend = 0x100;
|
|
|
- adev->gfx.config.sc_hiz_tile_fifo_size = 0x30;
|
|
|
- adev->gfx.config.sc_earlyz_tile_fifo_size = 0x130;
|
|
|
- gb_addr_config = TONGA_GB_ADDR_CONFIG_GOLDEN;
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
tmp = RREG32(mmGRBM_CNTL);
|
|
|
tmp = REG_SET_FIELD(tmp, GRBM_CNTL, READ_TIMEOUT, 0xff);
|
|
|
WREG32(mmGRBM_CNTL, tmp);
|
|
|
|
|
|
- mc_shared_chmap = RREG32(mmMC_SHARED_CHMAP);
|
|
|
- adev->gfx.config.mc_arb_ramcfg = RREG32(mmMC_ARB_RAMCFG);
|
|
|
- mc_arb_ramcfg = adev->gfx.config.mc_arb_ramcfg;
|
|
|
-
|
|
|
- adev->gfx.config.num_tile_pipes = adev->gfx.config.max_tile_pipes;
|
|
|
- adev->gfx.config.mem_max_burst_length_bytes = 256;
|
|
|
- if (adev->flags & AMD_IS_APU) {
|
|
|
- /* Get memory bank mapping mode. */
|
|
|
- tmp = RREG32(mmMC_FUS_DRAM0_BANK_ADDR_MAPPING);
|
|
|
- dimm00_addr_map = REG_GET_FIELD(tmp, MC_FUS_DRAM0_BANK_ADDR_MAPPING, DIMM0ADDRMAP);
|
|
|
- dimm01_addr_map = REG_GET_FIELD(tmp, MC_FUS_DRAM0_BANK_ADDR_MAPPING, DIMM1ADDRMAP);
|
|
|
-
|
|
|
- tmp = RREG32(mmMC_FUS_DRAM1_BANK_ADDR_MAPPING);
|
|
|
- dimm10_addr_map = REG_GET_FIELD(tmp, MC_FUS_DRAM1_BANK_ADDR_MAPPING, DIMM0ADDRMAP);
|
|
|
- dimm11_addr_map = REG_GET_FIELD(tmp, MC_FUS_DRAM1_BANK_ADDR_MAPPING, DIMM1ADDRMAP);
|
|
|
-
|
|
|
- /* Validate settings in case only one DIMM installed. */
|
|
|
- if ((dimm00_addr_map == 0) || (dimm00_addr_map == 3) || (dimm00_addr_map == 4) || (dimm00_addr_map > 12))
|
|
|
- dimm00_addr_map = 0;
|
|
|
- if ((dimm01_addr_map == 0) || (dimm01_addr_map == 3) || (dimm01_addr_map == 4) || (dimm01_addr_map > 12))
|
|
|
- dimm01_addr_map = 0;
|
|
|
- if ((dimm10_addr_map == 0) || (dimm10_addr_map == 3) || (dimm10_addr_map == 4) || (dimm10_addr_map > 12))
|
|
|
- dimm10_addr_map = 0;
|
|
|
- if ((dimm11_addr_map == 0) || (dimm11_addr_map == 3) || (dimm11_addr_map == 4) || (dimm11_addr_map > 12))
|
|
|
- dimm11_addr_map = 0;
|
|
|
-
|
|
|
- /* If DIMM Addr map is 8GB, ROW size should be 2KB. Otherwise 1KB. */
|
|
|
- /* If ROW size(DIMM1) != ROW size(DMIMM0), ROW size should be larger one. */
|
|
|
- if ((dimm00_addr_map == 11) || (dimm01_addr_map == 11) || (dimm10_addr_map == 11) || (dimm11_addr_map == 11))
|
|
|
- adev->gfx.config.mem_row_size_in_kb = 2;
|
|
|
- else
|
|
|
- adev->gfx.config.mem_row_size_in_kb = 1;
|
|
|
- } else {
|
|
|
- tmp = REG_GET_FIELD(mc_arb_ramcfg, MC_ARB_RAMCFG, NOOFCOLS);
|
|
|
- adev->gfx.config.mem_row_size_in_kb = (4 * (1 << (8 + tmp))) / 1024;
|
|
|
- if (adev->gfx.config.mem_row_size_in_kb > 4)
|
|
|
- adev->gfx.config.mem_row_size_in_kb = 4;
|
|
|
- }
|
|
|
-
|
|
|
- adev->gfx.config.shader_engine_tile_size = 32;
|
|
|
- adev->gfx.config.num_gpus = 1;
|
|
|
- adev->gfx.config.multi_gpu_tile_size = 64;
|
|
|
-
|
|
|
- /* fix up row size */
|
|
|
- switch (adev->gfx.config.mem_row_size_in_kb) {
|
|
|
- case 1:
|
|
|
- default:
|
|
|
- gb_addr_config = REG_SET_FIELD(gb_addr_config, GB_ADDR_CONFIG, ROW_SIZE, 0);
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- gb_addr_config = REG_SET_FIELD(gb_addr_config, GB_ADDR_CONFIG, ROW_SIZE, 1);
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- gb_addr_config = REG_SET_FIELD(gb_addr_config, GB_ADDR_CONFIG, ROW_SIZE, 2);
|
|
|
- break;
|
|
|
- }
|
|
|
- adev->gfx.config.gb_addr_config = gb_addr_config;
|
|
|
-
|
|
|
- WREG32(mmGB_ADDR_CONFIG, gb_addr_config);
|
|
|
- WREG32(mmHDP_ADDR_CONFIG, gb_addr_config);
|
|
|
- WREG32(mmDMIF_ADDR_CALC, gb_addr_config);
|
|
|
+ WREG32(mmGB_ADDR_CONFIG, adev->gfx.config.gb_addr_config);
|
|
|
+ WREG32(mmHDP_ADDR_CONFIG, adev->gfx.config.gb_addr_config);
|
|
|
+ WREG32(mmDMIF_ADDR_CALC, adev->gfx.config.gb_addr_config);
|
|
|
WREG32(mmSDMA0_TILING_CONFIG + SDMA0_REGISTER_OFFSET,
|
|
|
- gb_addr_config & 0x70);
|
|
|
+ adev->gfx.config.gb_addr_config & 0x70);
|
|
|
WREG32(mmSDMA0_TILING_CONFIG + SDMA1_REGISTER_OFFSET,
|
|
|
- gb_addr_config & 0x70);
|
|
|
- WREG32(mmUVD_UDEC_ADDR_CONFIG, gb_addr_config);
|
|
|
- WREG32(mmUVD_UDEC_DB_ADDR_CONFIG, gb_addr_config);
|
|
|
- WREG32(mmUVD_UDEC_DBW_ADDR_CONFIG, gb_addr_config);
|
|
|
+ adev->gfx.config.gb_addr_config & 0x70);
|
|
|
+ WREG32(mmUVD_UDEC_ADDR_CONFIG, adev->gfx.config.gb_addr_config);
|
|
|
+ WREG32(mmUVD_UDEC_DB_ADDR_CONFIG, adev->gfx.config.gb_addr_config);
|
|
|
+ WREG32(mmUVD_UDEC_DBW_ADDR_CONFIG, adev->gfx.config.gb_addr_config);
|
|
|
|
|
|
gfx_v8_0_tiling_mode_table_init(adev);
|
|
|
|
|
@@ -2256,13 +2263,13 @@ static void gfx_v8_0_gpu_init(struct amdgpu_device *adev)
|
|
|
if (i == 0) {
|
|
|
tmp = REG_SET_FIELD(0, SH_MEM_CONFIG, DEFAULT_MTYPE, MTYPE_UC);
|
|
|
tmp = REG_SET_FIELD(tmp, SH_MEM_CONFIG, APE1_MTYPE, MTYPE_UC);
|
|
|
- tmp = REG_SET_FIELD(tmp, SH_MEM_CONFIG, ALIGNMENT_MODE,
|
|
|
+ tmp = REG_SET_FIELD(tmp, SH_MEM_CONFIG, ALIGNMENT_MODE,
|
|
|
SH_MEM_ALIGNMENT_MODE_UNALIGNED);
|
|
|
WREG32(mmSH_MEM_CONFIG, tmp);
|
|
|
} else {
|
|
|
tmp = REG_SET_FIELD(0, SH_MEM_CONFIG, DEFAULT_MTYPE, MTYPE_NC);
|
|
|
tmp = REG_SET_FIELD(tmp, SH_MEM_CONFIG, APE1_MTYPE, MTYPE_NC);
|
|
|
- tmp = REG_SET_FIELD(tmp, SH_MEM_CONFIG, ALIGNMENT_MODE,
|
|
|
+ tmp = REG_SET_FIELD(tmp, SH_MEM_CONFIG, ALIGNMENT_MODE,
|
|
|
SH_MEM_ALIGNMENT_MODE_UNALIGNED);
|
|
|
WREG32(mmSH_MEM_CONFIG, tmp);
|
|
|
}
|