habanalabs/gaudi: Set DMA5 QMAN internal
authorOfir Bitton <obitton@habana.ai>
Mon, 31 Aug 2020 05:52:56 +0000 (08:52 +0300)
committerOded Gabbay <ogabbay@kernel.org>
Mon, 30 Nov 2020 08:47:30 +0000 (10:47 +0200)
DMA5 QMAN is designated to be used for reduction process, hence it will
be no longer configured as external queue.

Signed-off-by: Ofir Bitton <obitton@habana.ai>
Reviewed-by: Oded Gabbay <ogabbay@kernel.org>
Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
drivers/misc/habanalabs/gaudi/gaudi.c
drivers/misc/habanalabs/gaudi/gaudiP.h
include/uapi/misc/habanalabs.h

index d4218c4b48878151f4b2d44a57bb819076a5962a..7e1557f8a73f7246cca957bf19fc577e66d7116e 100644 (file)
@@ -38,7 +38,7 @@
  *
  * MMU is always enabled.
  *
- * QMAN DMA channels 0,1,5 (PCI DMAN):
+ * QMAN DMA channels 0,1 (PCI DMAN):
  *     - DMA is not secured.
  *     - PQ and CQ are secured.
  *     - CP is secured: The driver needs to parse CB but WREG should be allowed
@@ -55,7 +55,7 @@
  *       idle)
  *     - MMU page tables area clear (happens on init)
  *
- * QMAN DMA 2-4,6,7, TPC, MME, NIC:
+ * QMAN DMA 2-7, TPC, MME, NIC:
  * PQ is secured and is located on the Host (HBM CON TPC3 bug)
  * CQ, CP and the engine are not secured
  *
@@ -113,12 +113,12 @@ static const char gaudi_irq_name[GAUDI_MSI_ENTRIES][GAUDI_MAX_STRING_LEN] = {
 static const u8 gaudi_dma_assignment[GAUDI_DMA_MAX] = {
        [GAUDI_PCI_DMA_1] = GAUDI_ENGINE_ID_DMA_0,
        [GAUDI_PCI_DMA_2] = GAUDI_ENGINE_ID_DMA_1,
-       [GAUDI_PCI_DMA_3] = GAUDI_ENGINE_ID_DMA_5,
        [GAUDI_HBM_DMA_1] = GAUDI_ENGINE_ID_DMA_2,
        [GAUDI_HBM_DMA_2] = GAUDI_ENGINE_ID_DMA_3,
        [GAUDI_HBM_DMA_3] = GAUDI_ENGINE_ID_DMA_4,
-       [GAUDI_HBM_DMA_4] = GAUDI_ENGINE_ID_DMA_6,
-       [GAUDI_HBM_DMA_5] = GAUDI_ENGINE_ID_DMA_7
+       [GAUDI_HBM_DMA_4] = GAUDI_ENGINE_ID_DMA_5,
+       [GAUDI_HBM_DMA_5] = GAUDI_ENGINE_ID_DMA_6,
+       [GAUDI_HBM_DMA_6] = GAUDI_ENGINE_ID_DMA_7
 };
 
 static const u8 gaudi_cq_assignment[NUMBER_OF_CMPLT_QUEUES] = {
@@ -130,10 +130,6 @@ static const u8 gaudi_cq_assignment[NUMBER_OF_CMPLT_QUEUES] = {
        [5] = GAUDI_QUEUE_ID_DMA_1_1,
        [6] = GAUDI_QUEUE_ID_DMA_1_2,
        [7] = GAUDI_QUEUE_ID_DMA_1_3,
-       [8] = GAUDI_QUEUE_ID_DMA_5_0,
-       [9] = GAUDI_QUEUE_ID_DMA_5_1,
-       [10] = GAUDI_QUEUE_ID_DMA_5_2,
-       [11] = GAUDI_QUEUE_ID_DMA_5_3
 };
 
 static const u16 gaudi_packet_sizes[MAX_PACKET_ID] = {
@@ -249,10 +245,10 @@ static enum hl_queue_type gaudi_queue_type[GAUDI_QUEUE_ID_SIZE] = {
        QUEUE_TYPE_INT, /* GAUDI_QUEUE_ID_DMA_4_1 */
        QUEUE_TYPE_INT, /* GAUDI_QUEUE_ID_DMA_4_2 */
        QUEUE_TYPE_INT, /* GAUDI_QUEUE_ID_DMA_4_3 */
-       QUEUE_TYPE_EXT, /* GAUDI_QUEUE_ID_DMA_5_0 */
-       QUEUE_TYPE_EXT, /* GAUDI_QUEUE_ID_DMA_5_1 */
-       QUEUE_TYPE_EXT, /* GAUDI_QUEUE_ID_DMA_5_2 */
-       QUEUE_TYPE_EXT, /* GAUDI_QUEUE_ID_DMA_5_3 */
+       QUEUE_TYPE_INT, /* GAUDI_QUEUE_ID_DMA_5_0 */
+       QUEUE_TYPE_INT, /* GAUDI_QUEUE_ID_DMA_5_1 */
+       QUEUE_TYPE_INT, /* GAUDI_QUEUE_ID_DMA_5_2 */
+       QUEUE_TYPE_INT, /* GAUDI_QUEUE_ID_DMA_5_3 */
        QUEUE_TYPE_INT, /* GAUDI_QUEUE_ID_DMA_6_0 */
        QUEUE_TYPE_INT, /* GAUDI_QUEUE_ID_DMA_6_1 */
        QUEUE_TYPE_INT, /* GAUDI_QUEUE_ID_DMA_6_2 */
@@ -978,8 +974,7 @@ static int gaudi_alloc_internal_qmans_pq_mem(struct hl_device *hdev)
                q = &gaudi->internal_qmans[i];
 
                switch (i) {
-               case GAUDI_QUEUE_ID_DMA_2_0 ... GAUDI_QUEUE_ID_DMA_4_3:
-               case GAUDI_QUEUE_ID_DMA_6_0 ... GAUDI_QUEUE_ID_DMA_7_3:
+               case GAUDI_QUEUE_ID_DMA_2_0 ... GAUDI_QUEUE_ID_DMA_7_3:
                        q->pq_size = HBM_DMA_QMAN_SIZE_IN_BYTES;
                        break;
                case GAUDI_QUEUE_ID_MME_0_0 ... GAUDI_QUEUE_ID_MME_1_3:
@@ -3424,21 +3419,21 @@ static void gaudi_ring_doorbell(struct hl_device *hdev, u32 hw_queue_id, u32 pi)
                break;
 
        case GAUDI_QUEUE_ID_DMA_5_0...GAUDI_QUEUE_ID_DMA_5_3:
-               dma_id = gaudi_dma_assignment[GAUDI_PCI_DMA_3];
+               dma_id = gaudi_dma_assignment[GAUDI_HBM_DMA_4];
                dma_qm_offset = dma_id * DMA_QMAN_OFFSET;
                q_off = dma_qm_offset + ((hw_queue_id - 1) & 0x3) * 4;
                db_reg_offset = mmDMA0_QM_PQ_PI_0 + q_off;
                break;
 
        case GAUDI_QUEUE_ID_DMA_6_0...GAUDI_QUEUE_ID_DMA_6_3:
-               dma_id = gaudi_dma_assignment[GAUDI_HBM_DMA_4];
+               dma_id = gaudi_dma_assignment[GAUDI_HBM_DMA_5];
                dma_qm_offset = dma_id * DMA_QMAN_OFFSET;
                q_off = dma_qm_offset + ((hw_queue_id - 1) & 0x3) * 4;
                db_reg_offset = mmDMA0_QM_PQ_PI_0 + q_off;
                break;
 
        case GAUDI_QUEUE_ID_DMA_7_0...GAUDI_QUEUE_ID_DMA_7_3:
-               dma_id = gaudi_dma_assignment[GAUDI_HBM_DMA_5];
+               dma_id = gaudi_dma_assignment[GAUDI_HBM_DMA_6];
                dma_qm_offset = dma_id * DMA_QMAN_OFFSET;
                q_off = dma_qm_offset + ((hw_queue_id - 1) & 0x3) * 4;
                db_reg_offset = mmDMA0_QM_PQ_PI_0 + q_off;
index 277c391272ac1ddb4b37fb04b8ceffd69c4df127..16871d9ff88b8fb584c75fbbeb69504740ddc582 100644 (file)
@@ -15,7 +15,7 @@
 #include "../include/gaudi/gaudi.h"
 #include "../include/gaudi/gaudi_async_events.h"
 
-#define NUMBER_OF_EXT_HW_QUEUES                12
+#define NUMBER_OF_EXT_HW_QUEUES                8
 #define NUMBER_OF_CMPLT_QUEUES         NUMBER_OF_EXT_HW_QUEUES
 #define NUMBER_OF_CPU_HW_QUEUES                1
 #define NUMBER_OF_INT_HW_QUEUES                100
@@ -62,8 +62,8 @@
 #error "GAUDI_MAX_PENDING_CS must be power of 2 and greater than 1"
 #endif
 
-#define PCI_DMA_NUMBER_OF_CHNLS                3
-#define HBM_DMA_NUMBER_OF_CHNLS                5
+#define PCI_DMA_NUMBER_OF_CHNLS                2
+#define HBM_DMA_NUMBER_OF_CHNLS                6
 #define DMA_NUMBER_OF_CHNLS            (PCI_DMA_NUMBER_OF_CHNLS + \
                                                HBM_DMA_NUMBER_OF_CHNLS)
 
 enum gaudi_dma_channels {
        GAUDI_PCI_DMA_1,
        GAUDI_PCI_DMA_2,
-       GAUDI_PCI_DMA_3,
        GAUDI_HBM_DMA_1,
        GAUDI_HBM_DMA_2,
        GAUDI_HBM_DMA_3,
        GAUDI_HBM_DMA_4,
        GAUDI_HBM_DMA_5,
+       GAUDI_HBM_DMA_6,
        GAUDI_DMA_MAX
 };
 
index 2b244d0bdc26c3013d10ae322a2448c05c387fb0..4661a74f0425f5e01676cf7da74297dbc971f8ff 100644 (file)
@@ -18,8 +18,8 @@
 #define GOYA_KMD_SRAM_RESERVED_SIZE_FROM_START         0x8000  /* 32KB */
 #define GAUDI_DRIVER_SRAM_RESERVED_SIZE_FROM_START     0x80    /* 128 bytes */
 
-#define GAUDI_FIRST_AVAILABLE_W_S_SYNC_OBJECT          48
-#define GAUDI_FIRST_AVAILABLE_W_S_MONITOR              24
+#define GAUDI_FIRST_AVAILABLE_W_S_SYNC_OBJECT          32
+#define GAUDI_FIRST_AVAILABLE_W_S_MONITOR              16
 /*
  * Goya queue Numbering
  *
@@ -76,10 +76,10 @@ enum gaudi_queue_id {
        GAUDI_QUEUE_ID_DMA_4_1 = 18,    /* internal */
        GAUDI_QUEUE_ID_DMA_4_2 = 19,    /* internal */
        GAUDI_QUEUE_ID_DMA_4_3 = 20,    /* internal */
-       GAUDI_QUEUE_ID_DMA_5_0 = 21,    /* external */
-       GAUDI_QUEUE_ID_DMA_5_1 = 22,    /* external */
-       GAUDI_QUEUE_ID_DMA_5_2 = 23,    /* external */
-       GAUDI_QUEUE_ID_DMA_5_3 = 24,    /* external */
+       GAUDI_QUEUE_ID_DMA_5_0 = 21,    /* internal */
+       GAUDI_QUEUE_ID_DMA_5_1 = 22,    /* internal */
+       GAUDI_QUEUE_ID_DMA_5_2 = 23,    /* internal */
+       GAUDI_QUEUE_ID_DMA_5_3 = 24,    /* internal */
        GAUDI_QUEUE_ID_DMA_6_0 = 25,    /* internal */
        GAUDI_QUEUE_ID_DMA_6_1 = 26,    /* internal */
        GAUDI_QUEUE_ID_DMA_6_2 = 27,    /* internal */