|
@@ -66,6 +66,27 @@
|
|
|
#define MACRO_TILE_ASPECT(x) ((x) << GB_MACROTILE_MODE0__MACRO_TILE_ASPECT__SHIFT)
|
|
|
#define NUM_BANKS(x) ((x) << GB_MACROTILE_MODE0__NUM_BANKS__SHIFT)
|
|
|
|
|
|
+#define RLC_CGTT_MGCG_OVERRIDE__CPF_MASK 0x00000001L
|
|
|
+#define RLC_CGTT_MGCG_OVERRIDE__RLC_MASK 0x00000002L
|
|
|
+#define RLC_CGTT_MGCG_OVERRIDE__MGCG_MASK 0x00000004L
|
|
|
+#define RLC_CGTT_MGCG_OVERRIDE__CGCG_MASK 0x00000008L
|
|
|
+#define RLC_CGTT_MGCG_OVERRIDE__CGLS_MASK 0x00000010L
|
|
|
+#define RLC_CGTT_MGCG_OVERRIDE__GRBM_MASK 0x00000020L
|
|
|
+
|
|
|
+/* BPM SERDES CMD */
|
|
|
+#define SET_BPM_SERDES_CMD 1
|
|
|
+#define CLE_BPM_SERDES_CMD 0
|
|
|
+
|
|
|
+/* BPM Register Address*/
|
|
|
+enum {
|
|
|
+ BPM_REG_CGLS_EN = 0, /* Enable/Disable CGLS */
|
|
|
+ BPM_REG_CGLS_ON, /* ON/OFF CGLS: shall be controlled by RLC FW */
|
|
|
+ BPM_REG_CGCG_OVERRIDE, /* Set/Clear CGCG Override */
|
|
|
+ BPM_REG_MGCG_OVERRIDE, /* Set/Clear MGCG Override */
|
|
|
+ BPM_REG_FGCG_OVERRIDE, /* Set/Clear FGCG Override */
|
|
|
+ BPM_REG_FGCG_MAX
|
|
|
+};
|
|
|
+
|
|
|
MODULE_FIRMWARE("amdgpu/carrizo_ce.bin");
|
|
|
MODULE_FIRMWARE("amdgpu/carrizo_pfp.bin");
|
|
|
MODULE_FIRMWARE("amdgpu/carrizo_me.bin");
|
|
@@ -964,6 +985,322 @@ static int gfx_v8_0_mec_init(struct amdgpu_device *adev)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static const u32 vgpr_init_compute_shader[] =
|
|
|
+{
|
|
|
+ 0x7e000209, 0x7e020208,
|
|
|
+ 0x7e040207, 0x7e060206,
|
|
|
+ 0x7e080205, 0x7e0a0204,
|
|
|
+ 0x7e0c0203, 0x7e0e0202,
|
|
|
+ 0x7e100201, 0x7e120200,
|
|
|
+ 0x7e140209, 0x7e160208,
|
|
|
+ 0x7e180207, 0x7e1a0206,
|
|
|
+ 0x7e1c0205, 0x7e1e0204,
|
|
|
+ 0x7e200203, 0x7e220202,
|
|
|
+ 0x7e240201, 0x7e260200,
|
|
|
+ 0x7e280209, 0x7e2a0208,
|
|
|
+ 0x7e2c0207, 0x7e2e0206,
|
|
|
+ 0x7e300205, 0x7e320204,
|
|
|
+ 0x7e340203, 0x7e360202,
|
|
|
+ 0x7e380201, 0x7e3a0200,
|
|
|
+ 0x7e3c0209, 0x7e3e0208,
|
|
|
+ 0x7e400207, 0x7e420206,
|
|
|
+ 0x7e440205, 0x7e460204,
|
|
|
+ 0x7e480203, 0x7e4a0202,
|
|
|
+ 0x7e4c0201, 0x7e4e0200,
|
|
|
+ 0x7e500209, 0x7e520208,
|
|
|
+ 0x7e540207, 0x7e560206,
|
|
|
+ 0x7e580205, 0x7e5a0204,
|
|
|
+ 0x7e5c0203, 0x7e5e0202,
|
|
|
+ 0x7e600201, 0x7e620200,
|
|
|
+ 0x7e640209, 0x7e660208,
|
|
|
+ 0x7e680207, 0x7e6a0206,
|
|
|
+ 0x7e6c0205, 0x7e6e0204,
|
|
|
+ 0x7e700203, 0x7e720202,
|
|
|
+ 0x7e740201, 0x7e760200,
|
|
|
+ 0x7e780209, 0x7e7a0208,
|
|
|
+ 0x7e7c0207, 0x7e7e0206,
|
|
|
+ 0xbf8a0000, 0xbf810000,
|
|
|
+};
|
|
|
+
|
|
|
+static const u32 sgpr_init_compute_shader[] =
|
|
|
+{
|
|
|
+ 0xbe8a0100, 0xbe8c0102,
|
|
|
+ 0xbe8e0104, 0xbe900106,
|
|
|
+ 0xbe920108, 0xbe940100,
|
|
|
+ 0xbe960102, 0xbe980104,
|
|
|
+ 0xbe9a0106, 0xbe9c0108,
|
|
|
+ 0xbe9e0100, 0xbea00102,
|
|
|
+ 0xbea20104, 0xbea40106,
|
|
|
+ 0xbea60108, 0xbea80100,
|
|
|
+ 0xbeaa0102, 0xbeac0104,
|
|
|
+ 0xbeae0106, 0xbeb00108,
|
|
|
+ 0xbeb20100, 0xbeb40102,
|
|
|
+ 0xbeb60104, 0xbeb80106,
|
|
|
+ 0xbeba0108, 0xbebc0100,
|
|
|
+ 0xbebe0102, 0xbec00104,
|
|
|
+ 0xbec20106, 0xbec40108,
|
|
|
+ 0xbec60100, 0xbec80102,
|
|
|
+ 0xbee60004, 0xbee70005,
|
|
|
+ 0xbeea0006, 0xbeeb0007,
|
|
|
+ 0xbee80008, 0xbee90009,
|
|
|
+ 0xbefc0000, 0xbf8a0000,
|
|
|
+ 0xbf810000, 0x00000000,
|
|
|
+};
|
|
|
+
|
|
|
+static const u32 vgpr_init_regs[] =
|
|
|
+{
|
|
|
+ mmCOMPUTE_STATIC_THREAD_MGMT_SE0, 0xffffffff,
|
|
|
+ mmCOMPUTE_RESOURCE_LIMITS, 0,
|
|
|
+ mmCOMPUTE_NUM_THREAD_X, 256*4,
|
|
|
+ mmCOMPUTE_NUM_THREAD_Y, 1,
|
|
|
+ mmCOMPUTE_NUM_THREAD_Z, 1,
|
|
|
+ mmCOMPUTE_PGM_RSRC2, 20,
|
|
|
+ mmCOMPUTE_USER_DATA_0, 0xedcedc00,
|
|
|
+ mmCOMPUTE_USER_DATA_1, 0xedcedc01,
|
|
|
+ mmCOMPUTE_USER_DATA_2, 0xedcedc02,
|
|
|
+ mmCOMPUTE_USER_DATA_3, 0xedcedc03,
|
|
|
+ mmCOMPUTE_USER_DATA_4, 0xedcedc04,
|
|
|
+ mmCOMPUTE_USER_DATA_5, 0xedcedc05,
|
|
|
+ mmCOMPUTE_USER_DATA_6, 0xedcedc06,
|
|
|
+ mmCOMPUTE_USER_DATA_7, 0xedcedc07,
|
|
|
+ mmCOMPUTE_USER_DATA_8, 0xedcedc08,
|
|
|
+ mmCOMPUTE_USER_DATA_9, 0xedcedc09,
|
|
|
+};
|
|
|
+
|
|
|
+static const u32 sgpr1_init_regs[] =
|
|
|
+{
|
|
|
+ mmCOMPUTE_STATIC_THREAD_MGMT_SE0, 0x0f,
|
|
|
+ mmCOMPUTE_RESOURCE_LIMITS, 0x1000000,
|
|
|
+ mmCOMPUTE_NUM_THREAD_X, 256*5,
|
|
|
+ mmCOMPUTE_NUM_THREAD_Y, 1,
|
|
|
+ mmCOMPUTE_NUM_THREAD_Z, 1,
|
|
|
+ mmCOMPUTE_PGM_RSRC2, 20,
|
|
|
+ mmCOMPUTE_USER_DATA_0, 0xedcedc00,
|
|
|
+ mmCOMPUTE_USER_DATA_1, 0xedcedc01,
|
|
|
+ mmCOMPUTE_USER_DATA_2, 0xedcedc02,
|
|
|
+ mmCOMPUTE_USER_DATA_3, 0xedcedc03,
|
|
|
+ mmCOMPUTE_USER_DATA_4, 0xedcedc04,
|
|
|
+ mmCOMPUTE_USER_DATA_5, 0xedcedc05,
|
|
|
+ mmCOMPUTE_USER_DATA_6, 0xedcedc06,
|
|
|
+ mmCOMPUTE_USER_DATA_7, 0xedcedc07,
|
|
|
+ mmCOMPUTE_USER_DATA_8, 0xedcedc08,
|
|
|
+ mmCOMPUTE_USER_DATA_9, 0xedcedc09,
|
|
|
+};
|
|
|
+
|
|
|
+static const u32 sgpr2_init_regs[] =
|
|
|
+{
|
|
|
+ mmCOMPUTE_STATIC_THREAD_MGMT_SE0, 0xf0,
|
|
|
+ mmCOMPUTE_RESOURCE_LIMITS, 0x1000000,
|
|
|
+ mmCOMPUTE_NUM_THREAD_X, 256*5,
|
|
|
+ mmCOMPUTE_NUM_THREAD_Y, 1,
|
|
|
+ mmCOMPUTE_NUM_THREAD_Z, 1,
|
|
|
+ mmCOMPUTE_PGM_RSRC2, 20,
|
|
|
+ mmCOMPUTE_USER_DATA_0, 0xedcedc00,
|
|
|
+ mmCOMPUTE_USER_DATA_1, 0xedcedc01,
|
|
|
+ mmCOMPUTE_USER_DATA_2, 0xedcedc02,
|
|
|
+ mmCOMPUTE_USER_DATA_3, 0xedcedc03,
|
|
|
+ mmCOMPUTE_USER_DATA_4, 0xedcedc04,
|
|
|
+ mmCOMPUTE_USER_DATA_5, 0xedcedc05,
|
|
|
+ mmCOMPUTE_USER_DATA_6, 0xedcedc06,
|
|
|
+ mmCOMPUTE_USER_DATA_7, 0xedcedc07,
|
|
|
+ mmCOMPUTE_USER_DATA_8, 0xedcedc08,
|
|
|
+ mmCOMPUTE_USER_DATA_9, 0xedcedc09,
|
|
|
+};
|
|
|
+
|
|
|
+static const u32 sec_ded_counter_registers[] =
|
|
|
+{
|
|
|
+ mmCPC_EDC_ATC_CNT,
|
|
|
+ mmCPC_EDC_SCRATCH_CNT,
|
|
|
+ mmCPC_EDC_UCODE_CNT,
|
|
|
+ mmCPF_EDC_ATC_CNT,
|
|
|
+ mmCPF_EDC_ROQ_CNT,
|
|
|
+ mmCPF_EDC_TAG_CNT,
|
|
|
+ mmCPG_EDC_ATC_CNT,
|
|
|
+ mmCPG_EDC_DMA_CNT,
|
|
|
+ mmCPG_EDC_TAG_CNT,
|
|
|
+ mmDC_EDC_CSINVOC_CNT,
|
|
|
+ mmDC_EDC_RESTORE_CNT,
|
|
|
+ mmDC_EDC_STATE_CNT,
|
|
|
+ mmGDS_EDC_CNT,
|
|
|
+ mmGDS_EDC_GRBM_CNT,
|
|
|
+ mmGDS_EDC_OA_DED,
|
|
|
+ mmSPI_EDC_CNT,
|
|
|
+ mmSQC_ATC_EDC_GATCL1_CNT,
|
|
|
+ mmSQC_EDC_CNT,
|
|
|
+ mmSQ_EDC_DED_CNT,
|
|
|
+ mmSQ_EDC_INFO,
|
|
|
+ mmSQ_EDC_SEC_CNT,
|
|
|
+ mmTCC_EDC_CNT,
|
|
|
+ mmTCP_ATC_EDC_GATCL1_CNT,
|
|
|
+ mmTCP_EDC_CNT,
|
|
|
+ mmTD_EDC_CNT
|
|
|
+};
|
|
|
+
|
|
|
+static int gfx_v8_0_do_edc_gpr_workarounds(struct amdgpu_device *adev)
|
|
|
+{
|
|
|
+ struct amdgpu_ring *ring = &adev->gfx.compute_ring[0];
|
|
|
+ struct amdgpu_ib ib;
|
|
|
+ struct fence *f = NULL;
|
|
|
+ int r, i;
|
|
|
+ u32 tmp;
|
|
|
+ unsigned total_size, vgpr_offset, sgpr_offset;
|
|
|
+ u64 gpu_addr;
|
|
|
+
|
|
|
+ /* only supported on CZ */
|
|
|
+ if (adev->asic_type != CHIP_CARRIZO)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ /* bail if the compute ring is not ready */
|
|
|
+ if (!ring->ready)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ tmp = RREG32(mmGB_EDC_MODE);
|
|
|
+ WREG32(mmGB_EDC_MODE, 0);
|
|
|
+
|
|
|
+ total_size =
|
|
|
+ (((ARRAY_SIZE(vgpr_init_regs) / 2) * 3) + 4 + 5 + 2) * 4;
|
|
|
+ total_size +=
|
|
|
+ (((ARRAY_SIZE(sgpr1_init_regs) / 2) * 3) + 4 + 5 + 2) * 4;
|
|
|
+ total_size +=
|
|
|
+ (((ARRAY_SIZE(sgpr2_init_regs) / 2) * 3) + 4 + 5 + 2) * 4;
|
|
|
+ total_size = ALIGN(total_size, 256);
|
|
|
+ vgpr_offset = total_size;
|
|
|
+ total_size += ALIGN(sizeof(vgpr_init_compute_shader), 256);
|
|
|
+ sgpr_offset = total_size;
|
|
|
+ total_size += sizeof(sgpr_init_compute_shader);
|
|
|
+
|
|
|
+ /* allocate an indirect buffer to put the commands in */
|
|
|
+ memset(&ib, 0, sizeof(ib));
|
|
|
+ r = amdgpu_ib_get(ring, NULL, total_size, &ib);
|
|
|
+ if (r) {
|
|
|
+ DRM_ERROR("amdgpu: failed to get ib (%d).\n", r);
|
|
|
+ return r;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* load the compute shaders */
|
|
|
+ for (i = 0; i < ARRAY_SIZE(vgpr_init_compute_shader); i++)
|
|
|
+ ib.ptr[i + (vgpr_offset / 4)] = vgpr_init_compute_shader[i];
|
|
|
+
|
|
|
+ for (i = 0; i < ARRAY_SIZE(sgpr_init_compute_shader); i++)
|
|
|
+ ib.ptr[i + (sgpr_offset / 4)] = sgpr_init_compute_shader[i];
|
|
|
+
|
|
|
+ /* init the ib length to 0 */
|
|
|
+ ib.length_dw = 0;
|
|
|
+
|
|
|
+ /* VGPR */
|
|
|
+ /* write the register state for the compute dispatch */
|
|
|
+ for (i = 0; i < ARRAY_SIZE(vgpr_init_regs); i += 2) {
|
|
|
+ ib.ptr[ib.length_dw++] = PACKET3(PACKET3_SET_SH_REG, 1);
|
|
|
+ ib.ptr[ib.length_dw++] = vgpr_init_regs[i] - PACKET3_SET_SH_REG_START;
|
|
|
+ ib.ptr[ib.length_dw++] = vgpr_init_regs[i + 1];
|
|
|
+ }
|
|
|
+ /* write the shader start address: mmCOMPUTE_PGM_LO, mmCOMPUTE_PGM_HI */
|
|
|
+ gpu_addr = (ib.gpu_addr + (u64)vgpr_offset) >> 8;
|
|
|
+ ib.ptr[ib.length_dw++] = PACKET3(PACKET3_SET_SH_REG, 2);
|
|
|
+ ib.ptr[ib.length_dw++] = mmCOMPUTE_PGM_LO - PACKET3_SET_SH_REG_START;
|
|
|
+ ib.ptr[ib.length_dw++] = lower_32_bits(gpu_addr);
|
|
|
+ ib.ptr[ib.length_dw++] = upper_32_bits(gpu_addr);
|
|
|
+
|
|
|
+ /* write dispatch packet */
|
|
|
+ ib.ptr[ib.length_dw++] = PACKET3(PACKET3_DISPATCH_DIRECT, 3);
|
|
|
+ ib.ptr[ib.length_dw++] = 8; /* x */
|
|
|
+ ib.ptr[ib.length_dw++] = 1; /* y */
|
|
|
+ ib.ptr[ib.length_dw++] = 1; /* z */
|
|
|
+ ib.ptr[ib.length_dw++] =
|
|
|
+ REG_SET_FIELD(0, COMPUTE_DISPATCH_INITIATOR, COMPUTE_SHADER_EN, 1);
|
|
|
+
|
|
|
+ /* write CS partial flush packet */
|
|
|
+ ib.ptr[ib.length_dw++] = PACKET3(PACKET3_EVENT_WRITE, 0);
|
|
|
+ ib.ptr[ib.length_dw++] = EVENT_TYPE(7) | EVENT_INDEX(4);
|
|
|
+
|
|
|
+ /* SGPR1 */
|
|
|
+ /* write the register state for the compute dispatch */
|
|
|
+ for (i = 0; i < ARRAY_SIZE(sgpr1_init_regs); i += 2) {
|
|
|
+ ib.ptr[ib.length_dw++] = PACKET3(PACKET3_SET_SH_REG, 1);
|
|
|
+ ib.ptr[ib.length_dw++] = sgpr1_init_regs[i] - PACKET3_SET_SH_REG_START;
|
|
|
+ ib.ptr[ib.length_dw++] = sgpr1_init_regs[i + 1];
|
|
|
+ }
|
|
|
+ /* write the shader start address: mmCOMPUTE_PGM_LO, mmCOMPUTE_PGM_HI */
|
|
|
+ gpu_addr = (ib.gpu_addr + (u64)sgpr_offset) >> 8;
|
|
|
+ ib.ptr[ib.length_dw++] = PACKET3(PACKET3_SET_SH_REG, 2);
|
|
|
+ ib.ptr[ib.length_dw++] = mmCOMPUTE_PGM_LO - PACKET3_SET_SH_REG_START;
|
|
|
+ ib.ptr[ib.length_dw++] = lower_32_bits(gpu_addr);
|
|
|
+ ib.ptr[ib.length_dw++] = upper_32_bits(gpu_addr);
|
|
|
+
|
|
|
+ /* write dispatch packet */
|
|
|
+ ib.ptr[ib.length_dw++] = PACKET3(PACKET3_DISPATCH_DIRECT, 3);
|
|
|
+ ib.ptr[ib.length_dw++] = 8; /* x */
|
|
|
+ ib.ptr[ib.length_dw++] = 1; /* y */
|
|
|
+ ib.ptr[ib.length_dw++] = 1; /* z */
|
|
|
+ ib.ptr[ib.length_dw++] =
|
|
|
+ REG_SET_FIELD(0, COMPUTE_DISPATCH_INITIATOR, COMPUTE_SHADER_EN, 1);
|
|
|
+
|
|
|
+ /* write CS partial flush packet */
|
|
|
+ ib.ptr[ib.length_dw++] = PACKET3(PACKET3_EVENT_WRITE, 0);
|
|
|
+ ib.ptr[ib.length_dw++] = EVENT_TYPE(7) | EVENT_INDEX(4);
|
|
|
+
|
|
|
+ /* SGPR2 */
|
|
|
+ /* write the register state for the compute dispatch */
|
|
|
+ for (i = 0; i < ARRAY_SIZE(sgpr2_init_regs); i += 2) {
|
|
|
+ ib.ptr[ib.length_dw++] = PACKET3(PACKET3_SET_SH_REG, 1);
|
|
|
+ ib.ptr[ib.length_dw++] = sgpr2_init_regs[i] - PACKET3_SET_SH_REG_START;
|
|
|
+ ib.ptr[ib.length_dw++] = sgpr2_init_regs[i + 1];
|
|
|
+ }
|
|
|
+ /* write the shader start address: mmCOMPUTE_PGM_LO, mmCOMPUTE_PGM_HI */
|
|
|
+ gpu_addr = (ib.gpu_addr + (u64)sgpr_offset) >> 8;
|
|
|
+ ib.ptr[ib.length_dw++] = PACKET3(PACKET3_SET_SH_REG, 2);
|
|
|
+ ib.ptr[ib.length_dw++] = mmCOMPUTE_PGM_LO - PACKET3_SET_SH_REG_START;
|
|
|
+ ib.ptr[ib.length_dw++] = lower_32_bits(gpu_addr);
|
|
|
+ ib.ptr[ib.length_dw++] = upper_32_bits(gpu_addr);
|
|
|
+
|
|
|
+ /* write dispatch packet */
|
|
|
+ ib.ptr[ib.length_dw++] = PACKET3(PACKET3_DISPATCH_DIRECT, 3);
|
|
|
+ ib.ptr[ib.length_dw++] = 8; /* x */
|
|
|
+ ib.ptr[ib.length_dw++] = 1; /* y */
|
|
|
+ ib.ptr[ib.length_dw++] = 1; /* z */
|
|
|
+ ib.ptr[ib.length_dw++] =
|
|
|
+ REG_SET_FIELD(0, COMPUTE_DISPATCH_INITIATOR, COMPUTE_SHADER_EN, 1);
|
|
|
+
|
|
|
+ /* write CS partial flush packet */
|
|
|
+ ib.ptr[ib.length_dw++] = PACKET3(PACKET3_EVENT_WRITE, 0);
|
|
|
+ ib.ptr[ib.length_dw++] = EVENT_TYPE(7) | EVENT_INDEX(4);
|
|
|
+
|
|
|
+ /* shedule the ib on the ring */
|
|
|
+ r = amdgpu_sched_ib_submit_kernel_helper(adev, ring, &ib, 1, NULL,
|
|
|
+ AMDGPU_FENCE_OWNER_UNDEFINED,
|
|
|
+ &f);
|
|
|
+ if (r) {
|
|
|
+ DRM_ERROR("amdgpu: ib submit failed (%d).\n", r);
|
|
|
+ goto fail;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* wait for the GPU to finish processing the IB */
|
|
|
+ r = fence_wait(f, false);
|
|
|
+ if (r) {
|
|
|
+ DRM_ERROR("amdgpu: fence wait failed (%d).\n", r);
|
|
|
+ goto fail;
|
|
|
+ }
|
|
|
+
|
|
|
+ tmp = REG_SET_FIELD(tmp, GB_EDC_MODE, DED_MODE, 2);
|
|
|
+ tmp = REG_SET_FIELD(tmp, GB_EDC_MODE, PROP_FED, 1);
|
|
|
+ WREG32(mmGB_EDC_MODE, tmp);
|
|
|
+
|
|
|
+ tmp = RREG32(mmCC_GC_EDC_CONFIG);
|
|
|
+ tmp = REG_SET_FIELD(tmp, CC_GC_EDC_CONFIG, DIS_EDC, 0) | 1;
|
|
|
+ WREG32(mmCC_GC_EDC_CONFIG, tmp);
|
|
|
+
|
|
|
+
|
|
|
+ /* read back registers to clear the counters */
|
|
|
+ for (i = 0; i < ARRAY_SIZE(sec_ded_counter_registers); i++)
|
|
|
+ RREG32(sec_ded_counter_registers[i]);
|
|
|
+
|
|
|
+fail:
|
|
|
+ fence_put(f);
|
|
|
+ amdgpu_ib_free(adev, &ib);
|
|
|
+
|
|
|
+ return r;
|
|
|
+}
|
|
|
+
|
|
|
static void gfx_v8_0_gpu_early_init(struct amdgpu_device *adev)
|
|
|
{
|
|
|
u32 gb_addr_config;
|
|
@@ -1323,1418 +1660,923 @@ static int gfx_v8_0_sw_fini(void *handle)
|
|
|
|
|
|
static void gfx_v8_0_tiling_mode_table_init(struct amdgpu_device *adev)
|
|
|
{
|
|
|
- const u32 num_tile_mode_states = 32;
|
|
|
- const u32 num_secondary_tile_mode_states = 16;
|
|
|
- u32 reg_offset, gb_tile_moden, split_equal_to_row_size;
|
|
|
+ uint32_t *modearray, *mod2array;
|
|
|
+ const u32 num_tile_mode_states = ARRAY_SIZE(adev->gfx.config.tile_mode_array);
|
|
|
+ const u32 num_secondary_tile_mode_states = ARRAY_SIZE(adev->gfx.config.macrotile_mode_array);
|
|
|
+ u32 reg_offset;
|
|
|
|
|
|
- switch (adev->gfx.config.mem_row_size_in_kb) {
|
|
|
- case 1:
|
|
|
- split_equal_to_row_size = ADDR_SURF_TILE_SPLIT_1KB;
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- default:
|
|
|
- split_equal_to_row_size = ADDR_SURF_TILE_SPLIT_2KB;
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- split_equal_to_row_size = ADDR_SURF_TILE_SPLIT_4KB;
|
|
|
- break;
|
|
|
- }
|
|
|
+ modearray = adev->gfx.config.tile_mode_array;
|
|
|
+ mod2array = adev->gfx.config.macrotile_mode_array;
|
|
|
+
|
|
|
+ for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++)
|
|
|
+ modearray[reg_offset] = 0;
|
|
|
+
|
|
|
+ for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++)
|
|
|
+ mod2array[reg_offset] = 0;
|
|
|
|
|
|
switch (adev->asic_type) {
|
|
|
case CHIP_TOPAZ:
|
|
|
- for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) {
|
|
|
- switch (reg_offset) {
|
|
|
- case 0:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 5:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 6:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 8:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2));
|
|
|
- break;
|
|
|
- case 9:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 10:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 11:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 13:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 14:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 15:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 16:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 18:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 19:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 20:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 21:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 22:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 24:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 25:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_XTHICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 26:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_XTHICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 27:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 28:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 29:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 7:
|
|
|
- case 12:
|
|
|
- case 17:
|
|
|
- case 23:
|
|
|
- /* unused idx */
|
|
|
- continue;
|
|
|
- default:
|
|
|
- gb_tile_moden = 0;
|
|
|
- break;
|
|
|
- };
|
|
|
- adev->gfx.config.tile_mode_array[reg_offset] = gb_tile_moden;
|
|
|
- WREG32(mmGB_TILE_MODE0 + reg_offset, gb_tile_moden);
|
|
|
- }
|
|
|
- for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++) {
|
|
|
- switch (reg_offset) {
|
|
|
- case 0:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 5:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 6:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 8:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 9:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 10:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 11:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 12:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 13:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 14:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 7:
|
|
|
- /* unused idx */
|
|
|
- continue;
|
|
|
- default:
|
|
|
- gb_tile_moden = 0;
|
|
|
- break;
|
|
|
- };
|
|
|
- adev->gfx.config.macrotile_mode_array[reg_offset] = gb_tile_moden;
|
|
|
- WREG32(mmGB_MACROTILE_MODE0 + reg_offset, gb_tile_moden);
|
|
|
- }
|
|
|
+ modearray[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[1] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[2] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[3] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[4] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[5] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[6] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[8] = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2));
|
|
|
+ modearray[9] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[10] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[11] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ modearray[13] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[14] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[15] = (ARRAY_MODE(ARRAY_3D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[16] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ modearray[18] = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[19] = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[20] = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[21] = (ARRAY_MODE(ARRAY_3D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[22] = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[24] = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[25] = (ARRAY_MODE(ARRAY_2D_TILED_XTHICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[26] = (ARRAY_MODE(ARRAY_3D_TILED_XTHICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[27] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[28] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[29] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+
|
|
|
+ mod2array[0] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[1] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[2] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[3] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[4] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[5] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[6] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[8] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[9] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[10] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[11] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[12] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[13] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[14] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+
|
|
|
+ for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++)
|
|
|
+ if (reg_offset != 7 && reg_offset != 12 && reg_offset != 17 &&
|
|
|
+ reg_offset != 23)
|
|
|
+ WREG32(mmGB_TILE_MODE0 + reg_offset, modearray[reg_offset]);
|
|
|
+
|
|
|
+ for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++)
|
|
|
+ if (reg_offset != 7)
|
|
|
+ WREG32(mmGB_MACROTILE_MODE0 + reg_offset, mod2array[reg_offset]);
|
|
|
+
|
|
|
+ break;
|
|
|
case CHIP_FIJI:
|
|
|
- for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) {
|
|
|
- switch (reg_offset) {
|
|
|
- case 0:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 5:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 6:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 7:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 8:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16));
|
|
|
- break;
|
|
|
- case 9:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 10:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 11:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 12:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 13:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 14:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 15:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 16:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 17:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 18:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 19:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 20:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 21:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 22:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 23:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 24:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 25:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_XTHICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 26:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_XTHICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 27:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 28:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 29:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 30:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- default:
|
|
|
- gb_tile_moden = 0;
|
|
|
- break;
|
|
|
- }
|
|
|
- adev->gfx.config.tile_mode_array[reg_offset] = gb_tile_moden;
|
|
|
- WREG32(mmGB_TILE_MODE0 + reg_offset, gb_tile_moden);
|
|
|
- }
|
|
|
- for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++) {
|
|
|
- switch (reg_offset) {
|
|
|
- case 0:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 5:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 6:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 8:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 9:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 10:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 11:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 12:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 13:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 14:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
- NUM_BANKS(ADDR_SURF_4_BANK));
|
|
|
- break;
|
|
|
- case 7:
|
|
|
- /* unused idx */
|
|
|
- continue;
|
|
|
- default:
|
|
|
- gb_tile_moden = 0;
|
|
|
- break;
|
|
|
- }
|
|
|
- adev->gfx.config.macrotile_mode_array[reg_offset] = gb_tile_moden;
|
|
|
- WREG32(mmGB_MACROTILE_MODE0 + reg_offset, gb_tile_moden);
|
|
|
- }
|
|
|
+ modearray[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[1] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[2] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[3] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[4] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[5] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[6] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[7] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[8] = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16));
|
|
|
+ modearray[9] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[10] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[11] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ modearray[12] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ modearray[13] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[14] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[15] = (ARRAY_MODE(ARRAY_3D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[16] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ modearray[17] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ modearray[18] = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[19] = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[20] = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[21] = (ARRAY_MODE(ARRAY_3D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[22] = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[23] = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[24] = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[25] = (ARRAY_MODE(ARRAY_2D_TILED_XTHICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[26] = (ARRAY_MODE(ARRAY_3D_TILED_XTHICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[27] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[28] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[29] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ modearray[30] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+
|
|
|
+ mod2array[0] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[1] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[2] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[3] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[4] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[5] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[6] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[8] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[9] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[10] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[11] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[12] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[13] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[14] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
+ NUM_BANKS(ADDR_SURF_4_BANK));
|
|
|
+
|
|
|
+ for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++)
|
|
|
+ WREG32(mmGB_TILE_MODE0 + reg_offset, modearray[reg_offset]);
|
|
|
+
|
|
|
+ for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++)
|
|
|
+ if (reg_offset != 7)
|
|
|
+ WREG32(mmGB_MACROTILE_MODE0 + reg_offset, mod2array[reg_offset]);
|
|
|
+
|
|
|
break;
|
|
|
case CHIP_TONGA:
|
|
|
- for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) {
|
|
|
- switch (reg_offset) {
|
|
|
- case 0:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 5:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 6:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 7:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 8:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16));
|
|
|
- break;
|
|
|
- case 9:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 10:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 11:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 12:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 13:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 14:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 15:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 16:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 17:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 18:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 19:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 20:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 21:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 22:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 23:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 24:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 25:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_XTHICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 26:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_XTHICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 27:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 28:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 29:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 30:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- default:
|
|
|
- gb_tile_moden = 0;
|
|
|
- break;
|
|
|
- };
|
|
|
- adev->gfx.config.tile_mode_array[reg_offset] = gb_tile_moden;
|
|
|
- WREG32(mmGB_TILE_MODE0 + reg_offset, gb_tile_moden);
|
|
|
- }
|
|
|
- for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++) {
|
|
|
- switch (reg_offset) {
|
|
|
- case 0:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 5:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 6:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 8:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 9:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 10:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 11:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 12:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 13:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
- NUM_BANKS(ADDR_SURF_4_BANK));
|
|
|
- break;
|
|
|
- case 14:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
- NUM_BANKS(ADDR_SURF_4_BANK));
|
|
|
- break;
|
|
|
- case 7:
|
|
|
- /* unused idx */
|
|
|
- continue;
|
|
|
- default:
|
|
|
- gb_tile_moden = 0;
|
|
|
- break;
|
|
|
- };
|
|
|
- adev->gfx.config.macrotile_mode_array[reg_offset] = gb_tile_moden;
|
|
|
- WREG32(mmGB_MACROTILE_MODE0 + reg_offset, gb_tile_moden);
|
|
|
- }
|
|
|
+ modearray[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[1] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[2] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[3] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[4] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[5] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[6] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[7] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[8] = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16));
|
|
|
+ modearray[9] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[10] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[11] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ modearray[12] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ modearray[13] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[14] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[15] = (ARRAY_MODE(ARRAY_3D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[16] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ modearray[17] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ modearray[18] = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[19] = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[20] = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[21] = (ARRAY_MODE(ARRAY_3D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[22] = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[23] = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[24] = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[25] = (ARRAY_MODE(ARRAY_2D_TILED_XTHICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[26] = (ARRAY_MODE(ARRAY_3D_TILED_XTHICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[27] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[28] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[29] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ modearray[30] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+
|
|
|
+ mod2array[0] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[1] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[2] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[3] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[4] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[5] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[6] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[8] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[9] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[10] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[11] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[12] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[13] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
+ NUM_BANKS(ADDR_SURF_4_BANK));
|
|
|
+ mod2array[14] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
|
|
|
+ NUM_BANKS(ADDR_SURF_4_BANK));
|
|
|
+
|
|
|
+ for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++)
|
|
|
+ WREG32(mmGB_TILE_MODE0 + reg_offset, modearray[reg_offset]);
|
|
|
+
|
|
|
+ for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++)
|
|
|
+ if (reg_offset != 7)
|
|
|
+ WREG32(mmGB_MACROTILE_MODE0 + reg_offset, mod2array[reg_offset]);
|
|
|
+
|
|
|
break;
|
|
|
case CHIP_STONEY:
|
|
|
- for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) {
|
|
|
- switch (reg_offset) {
|
|
|
- case 0:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 5:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 6:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 8:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2));
|
|
|
- break;
|
|
|
- case 9:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 10:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 11:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 13:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 14:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 15:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 16:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 18:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 19:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 20:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 21:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 22:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 24:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 25:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_XTHICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 26:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_XTHICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 27:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 28:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 29:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 7:
|
|
|
- case 12:
|
|
|
- case 17:
|
|
|
- case 23:
|
|
|
- /* unused idx */
|
|
|
- continue;
|
|
|
- default:
|
|
|
- gb_tile_moden = 0;
|
|
|
- break;
|
|
|
- };
|
|
|
- adev->gfx.config.tile_mode_array[reg_offset] = gb_tile_moden;
|
|
|
- WREG32(mmGB_TILE_MODE0 + reg_offset, gb_tile_moden);
|
|
|
- }
|
|
|
- for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++) {
|
|
|
- switch (reg_offset) {
|
|
|
- case 0:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 5:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 6:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 8:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 9:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 10:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 11:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 12:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 13:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 14:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 7:
|
|
|
- /* unused idx */
|
|
|
- continue;
|
|
|
- default:
|
|
|
- gb_tile_moden = 0;
|
|
|
- break;
|
|
|
- };
|
|
|
- adev->gfx.config.macrotile_mode_array[reg_offset] = gb_tile_moden;
|
|
|
- WREG32(mmGB_MACROTILE_MODE0 + reg_offset, gb_tile_moden);
|
|
|
- }
|
|
|
+ modearray[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[1] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[2] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[3] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[4] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[5] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[6] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[8] = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2));
|
|
|
+ modearray[9] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[10] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[11] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ modearray[13] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[14] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[15] = (ARRAY_MODE(ARRAY_3D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[16] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ modearray[18] = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[19] = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[20] = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[21] = (ARRAY_MODE(ARRAY_3D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[22] = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[24] = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[25] = (ARRAY_MODE(ARRAY_2D_TILED_XTHICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[26] = (ARRAY_MODE(ARRAY_3D_TILED_XTHICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[27] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[28] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[29] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+
|
|
|
+ mod2array[0] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[1] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[2] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[3] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[4] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[5] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[6] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[8] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[9] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[10] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[11] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[12] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[13] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[14] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+
|
|
|
+ for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++)
|
|
|
+ if (reg_offset != 7 && reg_offset != 12 && reg_offset != 17 &&
|
|
|
+ reg_offset != 23)
|
|
|
+ WREG32(mmGB_TILE_MODE0 + reg_offset, modearray[reg_offset]);
|
|
|
+
|
|
|
+ for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++)
|
|
|
+ if (reg_offset != 7)
|
|
|
+ WREG32(mmGB_MACROTILE_MODE0 + reg_offset, mod2array[reg_offset]);
|
|
|
+
|
|
|
break;
|
|
|
- case CHIP_CARRIZO:
|
|
|
default:
|
|
|
- for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) {
|
|
|
- switch (reg_offset) {
|
|
|
- case 0:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 5:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 6:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 8:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2));
|
|
|
- break;
|
|
|
- case 9:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 10:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 11:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 13:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 14:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 15:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 16:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 18:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 19:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 20:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 21:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 22:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 24:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 25:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_XTHICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 26:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_XTHICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 27:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 28:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 29:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 7:
|
|
|
- case 12:
|
|
|
- case 17:
|
|
|
- case 23:
|
|
|
- /* unused idx */
|
|
|
- continue;
|
|
|
- default:
|
|
|
- gb_tile_moden = 0;
|
|
|
- break;
|
|
|
- };
|
|
|
- adev->gfx.config.tile_mode_array[reg_offset] = gb_tile_moden;
|
|
|
- WREG32(mmGB_TILE_MODE0 + reg_offset, gb_tile_moden);
|
|
|
- }
|
|
|
- for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++) {
|
|
|
- switch (reg_offset) {
|
|
|
- case 0:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 5:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 6:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 8:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 9:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 10:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 11:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 12:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 13:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
- NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
- break;
|
|
|
- case 14:
|
|
|
- gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
- BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
- MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
- break;
|
|
|
- case 7:
|
|
|
- /* unused idx */
|
|
|
- continue;
|
|
|
- default:
|
|
|
- gb_tile_moden = 0;
|
|
|
- break;
|
|
|
- };
|
|
|
- adev->gfx.config.macrotile_mode_array[reg_offset] = gb_tile_moden;
|
|
|
- WREG32(mmGB_MACROTILE_MODE0 + reg_offset, gb_tile_moden);
|
|
|
- }
|
|
|
+ dev_warn(adev->dev,
|
|
|
+ "Unknown chip type (%d) in function gfx_v8_0_tiling_mode_table_init() falling through to CHIP_CARRIZO\n",
|
|
|
+ adev->asic_type);
|
|
|
+
|
|
|
+ case CHIP_CARRIZO:
|
|
|
+ modearray[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[1] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[2] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[3] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[4] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[5] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[6] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ modearray[8] = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2));
|
|
|
+ modearray[9] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[10] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[11] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ modearray[13] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[14] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[15] = (ARRAY_MODE(ARRAY_3D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[16] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ modearray[18] = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[19] = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[20] = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[21] = (ARRAY_MODE(ARRAY_3D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[22] = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[24] = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[25] = (ARRAY_MODE(ARRAY_2D_TILED_XTHICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[26] = (ARRAY_MODE(ARRAY_3D_TILED_XTHICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ modearray[27] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[28] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ modearray[29] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+
|
|
|
+ mod2array[0] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[1] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[2] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[3] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[4] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[5] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[6] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+ mod2array[8] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[9] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[10] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[11] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[12] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[13] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
|
|
|
+ NUM_BANKS(ADDR_SURF_16_BANK));
|
|
|
+ mod2array[14] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
|
|
|
+ BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
|
|
|
+ MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
|
|
|
+ NUM_BANKS(ADDR_SURF_8_BANK));
|
|
|
+
|
|
|
+ for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++)
|
|
|
+ if (reg_offset != 7 && reg_offset != 12 && reg_offset != 17 &&
|
|
|
+ reg_offset != 23)
|
|
|
+ WREG32(mmGB_TILE_MODE0 + reg_offset, modearray[reg_offset]);
|
|
|
+
|
|
|
+ for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++)
|
|
|
+ if (reg_offset != 7)
|
|
|
+ WREG32(mmGB_MACROTILE_MODE0 + reg_offset, mod2array[reg_offset]);
|
|
|
+
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static u32 gfx_v8_0_create_bitmask(u32 bit_width)
|
|
|
{
|
|
|
- u32 i, mask = 0;
|
|
|
-
|
|
|
- for (i = 0; i < bit_width; i++) {
|
|
|
- mask <<= 1;
|
|
|
- mask |= 1;
|
|
|
- }
|
|
|
- return mask;
|
|
|
+ return (u32)((1ULL << bit_width) - 1);
|
|
|
}
|
|
|
|
|
|
void gfx_v8_0_select_se_sh(struct amdgpu_device *adev, u32 se_num, u32 sh_num)
|
|
@@ -2809,7 +2651,7 @@ static void gfx_v8_0_setup_rb(struct amdgpu_device *adev,
|
|
|
mutex_lock(&adev->grbm_idx_mutex);
|
|
|
for (i = 0; i < se_num; i++) {
|
|
|
gfx_v8_0_select_se_sh(adev, i, 0xffffffff);
|
|
|
- data = 0;
|
|
|
+ data = RREG32(mmPA_SC_RASTER_CONFIG);
|
|
|
for (j = 0; j < sh_per_se; j++) {
|
|
|
switch (enabled_rbs & 3) {
|
|
|
case 0:
|
|
@@ -2997,17 +2839,11 @@ static void gfx_v8_0_enable_gui_idle_interrupt(struct amdgpu_device *adev,
|
|
|
{
|
|
|
u32 tmp = RREG32(mmCP_INT_CNTL_RING0);
|
|
|
|
|
|
- if (enable) {
|
|
|
- tmp = REG_SET_FIELD(tmp, CP_INT_CNTL_RING0, CNTX_BUSY_INT_ENABLE, 1);
|
|
|
- tmp = REG_SET_FIELD(tmp, CP_INT_CNTL_RING0, CNTX_EMPTY_INT_ENABLE, 1);
|
|
|
- tmp = REG_SET_FIELD(tmp, CP_INT_CNTL_RING0, CMP_BUSY_INT_ENABLE, 1);
|
|
|
- tmp = REG_SET_FIELD(tmp, CP_INT_CNTL_RING0, GFX_IDLE_INT_ENABLE, 1);
|
|
|
- } else {
|
|
|
- tmp = REG_SET_FIELD(tmp, CP_INT_CNTL_RING0, CNTX_BUSY_INT_ENABLE, 0);
|
|
|
- tmp = REG_SET_FIELD(tmp, CP_INT_CNTL_RING0, CNTX_EMPTY_INT_ENABLE, 0);
|
|
|
- tmp = REG_SET_FIELD(tmp, CP_INT_CNTL_RING0, CMP_BUSY_INT_ENABLE, 0);
|
|
|
- tmp = REG_SET_FIELD(tmp, CP_INT_CNTL_RING0, GFX_IDLE_INT_ENABLE, 0);
|
|
|
- }
|
|
|
+ tmp = REG_SET_FIELD(tmp, CP_INT_CNTL_RING0, CNTX_BUSY_INT_ENABLE, enable ? 1 : 0);
|
|
|
+ tmp = REG_SET_FIELD(tmp, CP_INT_CNTL_RING0, CNTX_EMPTY_INT_ENABLE, enable ? 1 : 0);
|
|
|
+ tmp = REG_SET_FIELD(tmp, CP_INT_CNTL_RING0, CMP_BUSY_INT_ENABLE, enable ? 1 : 0);
|
|
|
+ tmp = REG_SET_FIELD(tmp, CP_INT_CNTL_RING0, GFX_IDLE_INT_ENABLE, enable ? 1 : 0);
|
|
|
+
|
|
|
WREG32(mmCP_INT_CNTL_RING0, tmp);
|
|
|
}
|
|
|
|
|
@@ -3087,16 +2923,18 @@ static int gfx_v8_0_rlc_resume(struct amdgpu_device *adev)
|
|
|
|
|
|
gfx_v8_0_rlc_reset(adev);
|
|
|
|
|
|
- if (!adev->firmware.smu_load) {
|
|
|
- /* legacy rlc firmware loading */
|
|
|
- r = gfx_v8_0_rlc_load_microcode(adev);
|
|
|
- if (r)
|
|
|
- return r;
|
|
|
- } else {
|
|
|
- r = adev->smu.smumgr_funcs->check_fw_load_finish(adev,
|
|
|
- AMDGPU_UCODE_ID_RLC_G);
|
|
|
- if (r)
|
|
|
- return -EINVAL;
|
|
|
+ if (!adev->pp_enabled) {
|
|
|
+ if (!adev->firmware.smu_load) {
|
|
|
+ /* legacy rlc firmware loading */
|
|
|
+ r = gfx_v8_0_rlc_load_microcode(adev);
|
|
|
+ if (r)
|
|
|
+ return r;
|
|
|
+ } else {
|
|
|
+ r = adev->smu.smumgr_funcs->check_fw_load_finish(adev,
|
|
|
+ AMDGPU_UCODE_ID_RLC_G);
|
|
|
+ if (r)
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
gfx_v8_0_rlc_start(adev);
|
|
@@ -3941,6 +3779,11 @@ static int gfx_v8_0_cp_compute_resume(struct amdgpu_device *adev)
|
|
|
tmp = REG_SET_FIELD(tmp, CP_HQD_PERSISTENT_STATE, PRELOAD_SIZE, 0x53);
|
|
|
WREG32(mmCP_HQD_PERSISTENT_STATE, tmp);
|
|
|
mqd->cp_hqd_persistent_state = tmp;
|
|
|
+ if (adev->asic_type == CHIP_STONEY) {
|
|
|
+ tmp = RREG32(mmCP_ME1_PIPE3_INT_CNTL);
|
|
|
+ tmp = REG_SET_FIELD(tmp, CP_ME1_PIPE3_INT_CNTL, GENERIC2_INT_ENABLE, 1);
|
|
|
+ WREG32(mmCP_ME1_PIPE3_INT_CNTL, tmp);
|
|
|
+ }
|
|
|
|
|
|
/* activate the queue */
|
|
|
mqd->cp_hqd_active = 1;
|
|
@@ -3982,35 +3825,37 @@ static int gfx_v8_0_cp_resume(struct amdgpu_device *adev)
|
|
|
if (!(adev->flags & AMD_IS_APU))
|
|
|
gfx_v8_0_enable_gui_idle_interrupt(adev, false);
|
|
|
|
|
|
- if (!adev->firmware.smu_load) {
|
|
|
- /* legacy firmware loading */
|
|
|
- r = gfx_v8_0_cp_gfx_load_microcode(adev);
|
|
|
- if (r)
|
|
|
- return r;
|
|
|
-
|
|
|
- r = gfx_v8_0_cp_compute_load_microcode(adev);
|
|
|
- if (r)
|
|
|
- return r;
|
|
|
- } else {
|
|
|
- r = adev->smu.smumgr_funcs->check_fw_load_finish(adev,
|
|
|
- AMDGPU_UCODE_ID_CP_CE);
|
|
|
- if (r)
|
|
|
- return -EINVAL;
|
|
|
-
|
|
|
- r = adev->smu.smumgr_funcs->check_fw_load_finish(adev,
|
|
|
- AMDGPU_UCODE_ID_CP_PFP);
|
|
|
- if (r)
|
|
|
- return -EINVAL;
|
|
|
-
|
|
|
- r = adev->smu.smumgr_funcs->check_fw_load_finish(adev,
|
|
|
- AMDGPU_UCODE_ID_CP_ME);
|
|
|
- if (r)
|
|
|
- return -EINVAL;
|
|
|
+ if (!adev->pp_enabled) {
|
|
|
+ if (!adev->firmware.smu_load) {
|
|
|
+ /* legacy firmware loading */
|
|
|
+ r = gfx_v8_0_cp_gfx_load_microcode(adev);
|
|
|
+ if (r)
|
|
|
+ return r;
|
|
|
|
|
|
- r = adev->smu.smumgr_funcs->check_fw_load_finish(adev,
|
|
|
- AMDGPU_UCODE_ID_CP_MEC1);
|
|
|
- if (r)
|
|
|
- return -EINVAL;
|
|
|
+ r = gfx_v8_0_cp_compute_load_microcode(adev);
|
|
|
+ if (r)
|
|
|
+ return r;
|
|
|
+ } else {
|
|
|
+ r = adev->smu.smumgr_funcs->check_fw_load_finish(adev,
|
|
|
+ AMDGPU_UCODE_ID_CP_CE);
|
|
|
+ if (r)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ r = adev->smu.smumgr_funcs->check_fw_load_finish(adev,
|
|
|
+ AMDGPU_UCODE_ID_CP_PFP);
|
|
|
+ if (r)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ r = adev->smu.smumgr_funcs->check_fw_load_finish(adev,
|
|
|
+ AMDGPU_UCODE_ID_CP_ME);
|
|
|
+ if (r)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ r = adev->smu.smumgr_funcs->check_fw_load_finish(adev,
|
|
|
+ AMDGPU_UCODE_ID_CP_MEC1);
|
|
|
+ if (r)
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
r = gfx_v8_0_cp_gfx_resume(adev);
|
|
@@ -4458,15 +4303,261 @@ static int gfx_v8_0_early_init(void *handle)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int gfx_v8_0_late_init(void *handle)
|
|
|
+{
|
|
|
+ struct amdgpu_device *adev = (struct amdgpu_device *)handle;
|
|
|
+ int r;
|
|
|
+
|
|
|
+ /* requires IBs so do in late init after IB pool is initialized */
|
|
|
+ r = gfx_v8_0_do_edc_gpr_workarounds(adev);
|
|
|
+ if (r)
|
|
|
+ return r;
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static int gfx_v8_0_set_powergating_state(void *handle,
|
|
|
enum amd_powergating_state state)
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static void fiji_send_serdes_cmd(struct amdgpu_device *adev,
|
|
|
+ uint32_t reg_addr, uint32_t cmd)
|
|
|
+{
|
|
|
+ uint32_t data;
|
|
|
+
|
|
|
+ gfx_v8_0_select_se_sh(adev, 0xffffffff, 0xffffffff);
|
|
|
+
|
|
|
+ WREG32(mmRLC_SERDES_WR_CU_MASTER_MASK, 0xffffffff);
|
|
|
+ WREG32(mmRLC_SERDES_WR_NONCU_MASTER_MASK, 0xffffffff);
|
|
|
+
|
|
|
+ data = RREG32(mmRLC_SERDES_WR_CTRL);
|
|
|
+ data &= ~(RLC_SERDES_WR_CTRL__WRITE_COMMAND_MASK |
|
|
|
+ RLC_SERDES_WR_CTRL__READ_COMMAND_MASK |
|
|
|
+ RLC_SERDES_WR_CTRL__P1_SELECT_MASK |
|
|
|
+ RLC_SERDES_WR_CTRL__P2_SELECT_MASK |
|
|
|
+ RLC_SERDES_WR_CTRL__RDDATA_RESET_MASK |
|
|
|
+ RLC_SERDES_WR_CTRL__POWER_DOWN_MASK |
|
|
|
+ RLC_SERDES_WR_CTRL__POWER_UP_MASK |
|
|
|
+ RLC_SERDES_WR_CTRL__SHORT_FORMAT_MASK |
|
|
|
+ RLC_SERDES_WR_CTRL__BPM_DATA_MASK |
|
|
|
+ RLC_SERDES_WR_CTRL__REG_ADDR_MASK |
|
|
|
+ RLC_SERDES_WR_CTRL__SRBM_OVERRIDE_MASK);
|
|
|
+ data |= (RLC_SERDES_WR_CTRL__RSVD_BPM_ADDR_MASK |
|
|
|
+ (cmd << RLC_SERDES_WR_CTRL__BPM_DATA__SHIFT) |
|
|
|
+ (reg_addr << RLC_SERDES_WR_CTRL__REG_ADDR__SHIFT) |
|
|
|
+ (0xff << RLC_SERDES_WR_CTRL__BPM_ADDR__SHIFT));
|
|
|
+
|
|
|
+ WREG32(mmRLC_SERDES_WR_CTRL, data);
|
|
|
+}
|
|
|
+
|
|
|
+static void fiji_update_medium_grain_clock_gating(struct amdgpu_device *adev,
|
|
|
+ bool enable)
|
|
|
+{
|
|
|
+ uint32_t temp, data;
|
|
|
+
|
|
|
+ /* It is disabled by HW by default */
|
|
|
+ if (enable) {
|
|
|
+ /* 1 - RLC memory Light sleep */
|
|
|
+ temp = data = RREG32(mmRLC_MEM_SLP_CNTL);
|
|
|
+ data |= RLC_MEM_SLP_CNTL__RLC_MEM_LS_EN_MASK;
|
|
|
+ if (temp != data)
|
|
|
+ WREG32(mmRLC_MEM_SLP_CNTL, data);
|
|
|
+
|
|
|
+ /* 2 - CP memory Light sleep */
|
|
|
+ temp = data = RREG32(mmCP_MEM_SLP_CNTL);
|
|
|
+ data |= CP_MEM_SLP_CNTL__CP_MEM_LS_EN_MASK;
|
|
|
+ if (temp != data)
|
|
|
+ WREG32(mmCP_MEM_SLP_CNTL, data);
|
|
|
+
|
|
|
+ /* 3 - RLC_CGTT_MGCG_OVERRIDE */
|
|
|
+ temp = data = RREG32(mmRLC_CGTT_MGCG_OVERRIDE);
|
|
|
+ data &= ~(RLC_CGTT_MGCG_OVERRIDE__CPF_MASK |
|
|
|
+ RLC_CGTT_MGCG_OVERRIDE__RLC_MASK |
|
|
|
+ RLC_CGTT_MGCG_OVERRIDE__MGCG_MASK |
|
|
|
+ RLC_CGTT_MGCG_OVERRIDE__GRBM_MASK);
|
|
|
+
|
|
|
+ if (temp != data)
|
|
|
+ WREG32(mmRLC_CGTT_MGCG_OVERRIDE, data);
|
|
|
+
|
|
|
+ /* 4 - wait for RLC_SERDES_CU_MASTER & RLC_SERDES_NONCU_MASTER idle */
|
|
|
+ gfx_v8_0_wait_for_rlc_serdes(adev);
|
|
|
+
|
|
|
+ /* 5 - clear mgcg override */
|
|
|
+ fiji_send_serdes_cmd(adev, BPM_REG_MGCG_OVERRIDE, CLE_BPM_SERDES_CMD);
|
|
|
+
|
|
|
+ /* 6 - Enable CGTS(Tree Shade) MGCG /MGLS */
|
|
|
+ temp = data = RREG32(mmCGTS_SM_CTRL_REG);
|
|
|
+ data &= ~(CGTS_SM_CTRL_REG__SM_MODE_MASK);
|
|
|
+ data |= (0x2 << CGTS_SM_CTRL_REG__SM_MODE__SHIFT);
|
|
|
+ data |= CGTS_SM_CTRL_REG__SM_MODE_ENABLE_MASK;
|
|
|
+ data &= ~CGTS_SM_CTRL_REG__OVERRIDE_MASK;
|
|
|
+ data &= ~CGTS_SM_CTRL_REG__LS_OVERRIDE_MASK;
|
|
|
+ data |= CGTS_SM_CTRL_REG__ON_MONITOR_ADD_EN_MASK;
|
|
|
+ data |= (0x96 << CGTS_SM_CTRL_REG__ON_MONITOR_ADD__SHIFT);
|
|
|
+ if (temp != data)
|
|
|
+ WREG32(mmCGTS_SM_CTRL_REG, data);
|
|
|
+ udelay(50);
|
|
|
+
|
|
|
+ /* 7 - wait for RLC_SERDES_CU_MASTER & RLC_SERDES_NONCU_MASTER idle */
|
|
|
+ gfx_v8_0_wait_for_rlc_serdes(adev);
|
|
|
+ } else {
|
|
|
+ /* 1 - MGCG_OVERRIDE[0] for CP and MGCG_OVERRIDE[1] for RLC */
|
|
|
+ temp = data = RREG32(mmRLC_CGTT_MGCG_OVERRIDE);
|
|
|
+ data |= (RLC_CGTT_MGCG_OVERRIDE__CPF_MASK |
|
|
|
+ RLC_CGTT_MGCG_OVERRIDE__RLC_MASK |
|
|
|
+ RLC_CGTT_MGCG_OVERRIDE__MGCG_MASK |
|
|
|
+ RLC_CGTT_MGCG_OVERRIDE__GRBM_MASK);
|
|
|
+ if (temp != data)
|
|
|
+ WREG32(mmRLC_CGTT_MGCG_OVERRIDE, data);
|
|
|
+
|
|
|
+ /* 2 - disable MGLS in RLC */
|
|
|
+ data = RREG32(mmRLC_MEM_SLP_CNTL);
|
|
|
+ if (data & RLC_MEM_SLP_CNTL__RLC_MEM_LS_EN_MASK) {
|
|
|
+ data &= ~RLC_MEM_SLP_CNTL__RLC_MEM_LS_EN_MASK;
|
|
|
+ WREG32(mmRLC_MEM_SLP_CNTL, data);
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 3 - disable MGLS in CP */
|
|
|
+ data = RREG32(mmCP_MEM_SLP_CNTL);
|
|
|
+ if (data & CP_MEM_SLP_CNTL__CP_MEM_LS_EN_MASK) {
|
|
|
+ data &= ~CP_MEM_SLP_CNTL__CP_MEM_LS_EN_MASK;
|
|
|
+ WREG32(mmCP_MEM_SLP_CNTL, data);
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 4 - Disable CGTS(Tree Shade) MGCG and MGLS */
|
|
|
+ temp = data = RREG32(mmCGTS_SM_CTRL_REG);
|
|
|
+ data |= (CGTS_SM_CTRL_REG__OVERRIDE_MASK |
|
|
|
+ CGTS_SM_CTRL_REG__LS_OVERRIDE_MASK);
|
|
|
+ if (temp != data)
|
|
|
+ WREG32(mmCGTS_SM_CTRL_REG, data);
|
|
|
+
|
|
|
+ /* 5 - wait for RLC_SERDES_CU_MASTER & RLC_SERDES_NONCU_MASTER idle */
|
|
|
+ gfx_v8_0_wait_for_rlc_serdes(adev);
|
|
|
+
|
|
|
+ /* 6 - set mgcg override */
|
|
|
+ fiji_send_serdes_cmd(adev, BPM_REG_MGCG_OVERRIDE, SET_BPM_SERDES_CMD);
|
|
|
+
|
|
|
+ udelay(50);
|
|
|
+
|
|
|
+ /* 7- wait for RLC_SERDES_CU_MASTER & RLC_SERDES_NONCU_MASTER idle */
|
|
|
+ gfx_v8_0_wait_for_rlc_serdes(adev);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static void fiji_update_coarse_grain_clock_gating(struct amdgpu_device *adev,
|
|
|
+ bool enable)
|
|
|
+{
|
|
|
+ uint32_t temp, temp1, data, data1;
|
|
|
+
|
|
|
+ temp = data = RREG32(mmRLC_CGCG_CGLS_CTRL);
|
|
|
+
|
|
|
+ if (enable) {
|
|
|
+ /* 1 enable cntx_empty_int_enable/cntx_busy_int_enable/
|
|
|
+ * Cmp_busy/GFX_Idle interrupts
|
|
|
+ */
|
|
|
+ gfx_v8_0_enable_gui_idle_interrupt(adev, true);
|
|
|
+
|
|
|
+ temp1 = data1 = RREG32(mmRLC_CGTT_MGCG_OVERRIDE);
|
|
|
+ data1 &= ~RLC_CGTT_MGCG_OVERRIDE__CGCG_MASK;
|
|
|
+ if (temp1 != data1)
|
|
|
+ WREG32(mmRLC_CGTT_MGCG_OVERRIDE, data1);
|
|
|
+
|
|
|
+ /* 2 wait for RLC_SERDES_CU_MASTER & RLC_SERDES_NONCU_MASTER idle */
|
|
|
+ gfx_v8_0_wait_for_rlc_serdes(adev);
|
|
|
+
|
|
|
+ /* 3 - clear cgcg override */
|
|
|
+ fiji_send_serdes_cmd(adev, BPM_REG_CGCG_OVERRIDE, CLE_BPM_SERDES_CMD);
|
|
|
+
|
|
|
+ /* wait for RLC_SERDES_CU_MASTER & RLC_SERDES_NONCU_MASTER idle */
|
|
|
+ gfx_v8_0_wait_for_rlc_serdes(adev);
|
|
|
+
|
|
|
+ /* 4 - write cmd to set CGLS */
|
|
|
+ fiji_send_serdes_cmd(adev, BPM_REG_CGLS_EN, SET_BPM_SERDES_CMD);
|
|
|
+
|
|
|
+ /* 5 - enable cgcg */
|
|
|
+ data |= RLC_CGCG_CGLS_CTRL__CGCG_EN_MASK;
|
|
|
+
|
|
|
+ /* enable cgls*/
|
|
|
+ data |= RLC_CGCG_CGLS_CTRL__CGLS_EN_MASK;
|
|
|
+
|
|
|
+ temp1 = data1 = RREG32(mmRLC_CGTT_MGCG_OVERRIDE);
|
|
|
+ data1 &= ~RLC_CGTT_MGCG_OVERRIDE__CGLS_MASK;
|
|
|
+
|
|
|
+ if (temp1 != data1)
|
|
|
+ WREG32(mmRLC_CGTT_MGCG_OVERRIDE, data1);
|
|
|
+
|
|
|
+ if (temp != data)
|
|
|
+ WREG32(mmRLC_CGCG_CGLS_CTRL, data);
|
|
|
+ } else {
|
|
|
+ /* disable cntx_empty_int_enable & GFX Idle interrupt */
|
|
|
+ gfx_v8_0_enable_gui_idle_interrupt(adev, false);
|
|
|
+
|
|
|
+ /* TEST CGCG */
|
|
|
+ temp1 = data1 = RREG32(mmRLC_CGTT_MGCG_OVERRIDE);
|
|
|
+ data1 |= (RLC_CGTT_MGCG_OVERRIDE__CGCG_MASK |
|
|
|
+ RLC_CGTT_MGCG_OVERRIDE__CGLS_MASK);
|
|
|
+ if (temp1 != data1)
|
|
|
+ WREG32(mmRLC_CGTT_MGCG_OVERRIDE, data1);
|
|
|
+
|
|
|
+ /* read gfx register to wake up cgcg */
|
|
|
+ RREG32(mmCB_CGTT_SCLK_CTRL);
|
|
|
+ RREG32(mmCB_CGTT_SCLK_CTRL);
|
|
|
+ RREG32(mmCB_CGTT_SCLK_CTRL);
|
|
|
+ RREG32(mmCB_CGTT_SCLK_CTRL);
|
|
|
+
|
|
|
+ /* wait for RLC_SERDES_CU_MASTER & RLC_SERDES_NONCU_MASTER idle */
|
|
|
+ gfx_v8_0_wait_for_rlc_serdes(adev);
|
|
|
+
|
|
|
+ /* write cmd to Set CGCG Overrride */
|
|
|
+ fiji_send_serdes_cmd(adev, BPM_REG_CGCG_OVERRIDE, SET_BPM_SERDES_CMD);
|
|
|
+
|
|
|
+ /* wait for RLC_SERDES_CU_MASTER & RLC_SERDES_NONCU_MASTER idle */
|
|
|
+ gfx_v8_0_wait_for_rlc_serdes(adev);
|
|
|
+
|
|
|
+ /* write cmd to Clear CGLS */
|
|
|
+ fiji_send_serdes_cmd(adev, BPM_REG_CGLS_EN, CLE_BPM_SERDES_CMD);
|
|
|
+
|
|
|
+ /* disable cgcg, cgls should be disabled too. */
|
|
|
+ data &= ~(RLC_CGCG_CGLS_CTRL__CGCG_EN_MASK |
|
|
|
+ RLC_CGCG_CGLS_CTRL__CGLS_EN_MASK);
|
|
|
+ if (temp != data)
|
|
|
+ WREG32(mmRLC_CGCG_CGLS_CTRL, data);
|
|
|
+ }
|
|
|
+}
|
|
|
+static int fiji_update_gfx_clock_gating(struct amdgpu_device *adev,
|
|
|
+ bool enable)
|
|
|
+{
|
|
|
+ if (enable) {
|
|
|
+ /* CGCG/CGLS should be enabled after MGCG/MGLS/TS(CG/LS)
|
|
|
+ * === MGCG + MGLS + TS(CG/LS) ===
|
|
|
+ */
|
|
|
+ fiji_update_medium_grain_clock_gating(adev, enable);
|
|
|
+ fiji_update_coarse_grain_clock_gating(adev, enable);
|
|
|
+ } else {
|
|
|
+ /* CGCG/CGLS should be disabled before MGCG/MGLS/TS(CG/LS)
|
|
|
+ * === CGCG + CGLS ===
|
|
|
+ */
|
|
|
+ fiji_update_coarse_grain_clock_gating(adev, enable);
|
|
|
+ fiji_update_medium_grain_clock_gating(adev, enable);
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static int gfx_v8_0_set_clockgating_state(void *handle,
|
|
|
enum amd_clockgating_state state)
|
|
|
{
|
|
|
+ struct amdgpu_device *adev = (struct amdgpu_device *)handle;
|
|
|
+
|
|
|
+ switch (adev->asic_type) {
|
|
|
+ case CHIP_FIJI:
|
|
|
+ fiji_update_gfx_clock_gating(adev,
|
|
|
+ state == AMD_CG_STATE_GATE ? true : false);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -4627,7 +4718,7 @@ static void gfx_v8_0_ring_emit_fence_gfx(struct amdgpu_ring *ring, u64 addr,
|
|
|
EVENT_TYPE(CACHE_FLUSH_AND_INV_TS_EVENT) |
|
|
|
EVENT_INDEX(5)));
|
|
|
amdgpu_ring_write(ring, addr & 0xfffffffc);
|
|
|
- amdgpu_ring_write(ring, (upper_32_bits(addr) & 0xffff) |
|
|
|
+ amdgpu_ring_write(ring, (upper_32_bits(addr) & 0xffff) |
|
|
|
DATA_SEL(write64bit ? 2 : 1) | INT_SEL(int_sel ? 2 : 0));
|
|
|
amdgpu_ring_write(ring, lower_32_bits(seq));
|
|
|
amdgpu_ring_write(ring, upper_32_bits(seq));
|
|
@@ -4995,7 +5086,7 @@ static int gfx_v8_0_priv_inst_irq(struct amdgpu_device *adev,
|
|
|
|
|
|
const struct amd_ip_funcs gfx_v8_0_ip_funcs = {
|
|
|
.early_init = gfx_v8_0_early_init,
|
|
|
- .late_init = NULL,
|
|
|
+ .late_init = gfx_v8_0_late_init,
|
|
|
.sw_init = gfx_v8_0_sw_init,
|
|
|
.sw_fini = gfx_v8_0_sw_fini,
|
|
|
.hw_init = gfx_v8_0_hw_init,
|