habanalabs/gaudi: fix DMA completions max outstanding to 15
authorOded Gabbay <oded.gabbay@gmail.com>
Mon, 14 Sep 2020 06:26:54 +0000 (09:26 +0300)
committerOded Gabbay <oded.gabbay@gmail.com>
Tue, 22 Sep 2020 15:49:54 +0000 (18:49 +0300)
This is a workaround for H/W bug H3-2116, where if there are more than 16
outstanding completions in the DMA transpose engine, there can be a
deadlock in the engine.

Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
drivers/misc/habanalabs/gaudi/gaudi.c

index 2c10e3f92c86444d6d226c95a626d14897315fe4..86650be5898f1356216ce0664f71304e5f1a4336 100644 (file)
@@ -1918,6 +1918,9 @@ static void gaudi_init_dma_core(struct hl_device *hdev, int dma_id)
        WREG32(mmDMA0_CORE_RD_MAX_OUTSTAND + dma_offset, 0);
        WREG32(mmDMA0_CORE_RD_MAX_SIZE + dma_offset, 0);
 
+       /* WA for H/W bug H3-2116 */
+       WREG32(mmDMA0_CORE_LBW_MAX_OUTSTAND + dma_offset, 15);
+
        /* STOP_ON bit implies no completion to operation in case of RAZWI */
        if (hdev->stop_on_err)
                dma_err_cfg |= 1 << DMA0_CORE_ERR_CFG_STOP_ON_ERR_SHIFT;