r600: apply SIMD workaround to cayman also.
authorDave Airlie <airlied@redhat.com>
Mon, 7 Dec 2015 07:59:34 +0000 (17:59 +1000)
committerDave Airlie <airlied@redhat.com>
Mon, 7 Dec 2015 08:57:34 +0000 (18:57 +1000)
At last on ARUBA this is required to stop tessellation hanging
in heaven.

This removes one of the SIMDs from use by the HS/LS.

Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
Tested-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/gallium/drivers/r600/evergreen_state.c

index 571ea860917b03c721ea6e48cc16d6e76f144c50..6e0c448ce8a78cd5d769c5a84a5cd07853a2a4f9 100644 (file)
@@ -2424,7 +2424,7 @@ static void cayman_init_atom_start_cs(struct r600_context *rctx)
        struct r600_command_buffer *cb = &rctx->start_cs_cmd;
        int tmp, i;
 
-       r600_init_command_buffer(cb, 336);
+       r600_init_command_buffer(cb, 342);
 
        /* This must be first. */
        r600_store_value(cb, PKT3(PKT3_CONTEXT_CONTROL, 1, 0));
@@ -2441,6 +2441,12 @@ static void cayman_init_atom_start_cs(struct r600_context *rctx)
        r600_store_config_reg(cb, R_009100_SPI_CONFIG_CNTL, 0);
        r600_store_config_reg(cb, R_00913C_SPI_CONFIG_CNTL_1, S_00913C_VTX_DONE_DELAY(4));
 
+       /* remove LS/HS from one SIMD for hw workaround */
+       r600_store_config_reg_seq(cb, R_008E20_SQ_STATIC_THREAD_MGMT1, 3);
+       r600_store_value(cb, 0xffffffff);
+       r600_store_value(cb, 0xffffffff);
+       r600_store_value(cb, 0xfffffffe);
+
        r600_store_context_reg_seq(cb, R_028900_SQ_ESGS_RING_ITEMSIZE, 6);
        r600_store_value(cb, 0); /* R_028900_SQ_ESGS_RING_ITEMSIZE */
        r600_store_value(cb, 0); /* R_028904_SQ_GSVS_RING_ITEMSIZE */
@@ -2862,6 +2868,7 @@ void evergreen_init_atom_start_cs(struct r600_context *rctx)
        r600_store_config_reg(cb, R_008E2C_SQ_LDS_RESOURCE_MGMT,
                              S_008E2C_NUM_PS_LDS(0x1000) | S_008E2C_NUM_LS_LDS(0x1000));
 
+       /* remove LS/HS from one SIMD for hw workaround */
        r600_store_config_reg_seq(cb, R_008E20_SQ_STATIC_THREAD_MGMT1, 3);
        r600_store_value(cb, 0xffffffff);
        r600_store_value(cb, 0xffffffff);