habanalabs: initialize MMU context for driver
authorOded Gabbay <oded.gabbay@gmail.com>
Wed, 29 May 2019 12:27:48 +0000 (15:27 +0300)
committerOded Gabbay <oded.gabbay@gmail.com>
Wed, 29 May 2019 12:27:48 +0000 (15:27 +0300)
This patch initializes the MMU structures for the kernel context. This is
needed before we can configure mappings for the kernel context.

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

index 280f4625e313dda5daf8f98119bf22028648975c..8682590e3f6ef14ee397e767d339d71eeee00e2f 100644 (file)
@@ -36,6 +36,8 @@ static void hl_ctx_fini(struct hl_ctx *ctx)
 
                hl_vm_ctx_fini(ctx);
                hl_asid_free(hdev, ctx->asid);
+       } else {
+               hl_mmu_ctx_fini(ctx);
        }
 }
 
@@ -119,6 +121,11 @@ int hl_ctx_init(struct hl_device *hdev, struct hl_ctx *ctx, bool is_kernel_ctx)
 
        if (is_kernel_ctx) {
                ctx->asid = HL_KERNEL_ASID_ID; /* KMD gets ASID 0 */
+               rc = hl_mmu_ctx_init(ctx);
+               if (rc) {
+                       dev_err(hdev->dev, "Failed to init mmu ctx module\n");
+                       goto mem_ctx_err;
+               }
        } else {
                ctx->asid = hl_asid_alloc(hdev);
                if (!ctx->asid) {
index 87968f32e7184e5ab560d8ba5878f0141f896f1c..a80162c5c373ddfe6b23c21e3b301a5a4ba884c7 100644 (file)
@@ -241,8 +241,9 @@ static int dram_default_mapping_init(struct hl_ctx *ctx)
                hop2_pte_addr, hop3_pte_addr, pte_val;
        int rc, i, j, hop3_allocated = 0;
 
-       if (!hdev->dram_supports_virtual_memory ||
-                       !hdev->dram_default_page_mapping)
+       if ((!hdev->dram_supports_virtual_memory) ||
+                       (!hdev->dram_default_page_mapping) ||
+                       (ctx->asid == HL_KERNEL_ASID_ID))
                return 0;
 
        num_of_hop3 = prop->dram_size_for_default_page_mapping;
@@ -340,8 +341,9 @@ static void dram_default_mapping_fini(struct hl_ctx *ctx)
                hop2_pte_addr, hop3_pte_addr;
        int i, j;
 
-       if (!hdev->dram_supports_virtual_memory ||
-                       !hdev->dram_default_page_mapping)
+       if ((!hdev->dram_supports_virtual_memory) ||
+                       (!hdev->dram_default_page_mapping) ||
+                       (ctx->asid == HL_KERNEL_ASID_ID))
                return;
 
        num_of_hop3 = prop->dram_size_for_default_page_mapping;