drm/radeon: Initialize compute vmid
authorBen Goz <ben.goz@amd.com>
Fri, 2 Jan 2015 21:43:19 +0000 (23:43 +0200)
committerOded Gabbay <oded.gabbay@amd.com>
Fri, 2 Jan 2015 21:43:19 +0000 (23:43 +0200)
This patch moves to radeon the initialization of compute vmid.

That initializations was done in kfd-->kgd interface, but doing it in radeon
as part of radeon's H/W initialization routines is more appropriate.

In addition, this simplifies the kfd-->kgd interface.

The patch removes the function from the interface file and from the interface
declaration file.

The function initializes memory apertures to fixed base/limit address and non
cached memory types.

Signed-off-by: Ben Goz <ben.goz@amd.com>
Signed-off-by: Oded Gabbay <oded.gabbay@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/include/kgd_kfd_interface.h
drivers/gpu/drm/radeon/cik.c
drivers/gpu/drm/radeon/radeon_kfd.c

index cd3878fe6f77a923a9c349cc3568d05bf9941922..883499740e3314e3a49767c2b755d1db8bc16fec 100644 (file)
@@ -129,9 +129,6 @@ struct kgd2kfd_calls {
  * @set_pasid_vmid_mapping: Exposes pasid/vmid pair to the H/W for no cp
  * scheduling mode. Only used for no cp scheduling mode.
  *
- * @init_memory: Initializes memory apertures to fixed base/limit address
- * and non cached memory types.
- *
  * @init_pipeline: Initialized the compute pipelines.
  *
  * @hqd_load: Loads the mqd structure to a H/W hqd slot. used only for no cp
@@ -175,7 +172,6 @@ struct kfd2kgd_calls {
        int (*set_pasid_vmid_mapping)(struct kgd_dev *kgd, unsigned int pasid,
                                        unsigned int vmid);
 
-       int (*init_memory)(struct kgd_dev *kgd);
        int (*init_pipeline)(struct kgd_dev *kgd, uint32_t pipe_id,
                                uint32_t hpd_size, uint64_t hpd_gpu_addr);
 
index 6dcde3798b45a026f0be30f8e7bffb8b254ace81..14d173e2a8f7e59044d830a3a1d91a23074ded8b 100644 (file)
@@ -5707,6 +5707,28 @@ void cik_pcie_gart_tlb_flush(struct radeon_device *rdev)
        WREG32(VM_INVALIDATE_REQUEST, 0x1);
 }
 
+static void cik_pcie_init_compute_vmid(struct radeon_device *rdev)
+{
+       int i;
+       uint32_t sh_mem_bases, sh_mem_config;
+
+       sh_mem_bases = 0x6000 | 0x6000 << 16;
+       sh_mem_config = ALIGNMENT_MODE(SH_MEM_ALIGNMENT_MODE_UNALIGNED);
+       sh_mem_config |= DEFAULT_MTYPE(MTYPE_NONCACHED);
+
+       mutex_lock(&rdev->srbm_mutex);
+       for (i = 8; i < 16; i++) {
+               cik_srbm_select(rdev, 0, 0, 0, i);
+               /* CP and shaders */
+               WREG32(SH_MEM_CONFIG, sh_mem_config);
+               WREG32(SH_MEM_APE1_BASE, 1);
+               WREG32(SH_MEM_APE1_LIMIT, 0);
+               WREG32(SH_MEM_BASES, sh_mem_bases);
+       }
+       cik_srbm_select(rdev, 0, 0, 0, 0);
+       mutex_unlock(&rdev->srbm_mutex);
+}
+
 /**
  * cik_pcie_gart_enable - gart enable
  *
@@ -5820,6 +5842,8 @@ static int cik_pcie_gart_enable(struct radeon_device *rdev)
        cik_srbm_select(rdev, 0, 0, 0, 0);
        mutex_unlock(&rdev->srbm_mutex);
 
+       cik_pcie_init_compute_vmid(rdev);
+
        cik_pcie_gart_tlb_flush(rdev);
        DRM_INFO("PCIE GART of %uM enabled (table at 0x%016llX).\n",
                 (unsigned)(rdev->mc.gtt_size >> 20),
index cae11eefecf08824c7e55dcb56b762c9656608e9..13e8066aef70a09ef6e872f10a3b8bb975bd4662 100644 (file)
@@ -63,8 +63,6 @@ static void kgd_program_sh_mem_settings(struct kgd_dev *kgd, uint32_t vmid,
 static int kgd_set_pasid_vmid_mapping(struct kgd_dev *kgd, unsigned int pasid,
                                        unsigned int vmid);
 
-static int kgd_init_memory(struct kgd_dev *kgd);
-
 static int kgd_init_pipeline(struct kgd_dev *kgd, uint32_t pipe_id,
                                uint32_t hpd_size, uint64_t hpd_gpu_addr);
 
@@ -89,7 +87,6 @@ static const struct kfd2kgd_calls kfd2kgd = {
        .get_max_engine_clock_in_mhz = get_max_engine_clock_in_mhz,
        .program_sh_mem_settings = kgd_program_sh_mem_settings,
        .set_pasid_vmid_mapping = kgd_set_pasid_vmid_mapping,
-       .init_memory = kgd_init_memory,
        .init_pipeline = kgd_init_pipeline,
        .hqd_load = kgd_hqd_load,
        .hqd_sdma_load = kgd_hqd_sdma_load,
@@ -375,42 +372,6 @@ static int kgd_set_pasid_vmid_mapping(struct kgd_dev *kgd, unsigned int pasid,
        return 0;
 }
 
-static int kgd_init_memory(struct kgd_dev *kgd)
-{
-       /*
-        * Configure apertures:
-        * LDS:         0x60000000'00000000 - 0x60000001'00000000 (4GB)
-        * Scratch:     0x60000001'00000000 - 0x60000002'00000000 (4GB)
-        * GPUVM:       0x60010000'00000000 - 0x60020000'00000000 (1TB)
-        */
-       int i;
-       uint32_t sh_mem_bases = PRIVATE_BASE(0x6000) | SHARED_BASE(0x6000);
-
-       for (i = 8; i < 16; i++) {
-               uint32_t sh_mem_config;
-
-               lock_srbm(kgd, 0, 0, 0, i);
-
-               sh_mem_config = ALIGNMENT_MODE(SH_MEM_ALIGNMENT_MODE_UNALIGNED);
-               sh_mem_config |= DEFAULT_MTYPE(MTYPE_NONCACHED);
-
-               write_register(kgd, SH_MEM_CONFIG, sh_mem_config);
-
-               write_register(kgd, SH_MEM_BASES, sh_mem_bases);
-
-               /* Scratch aperture is not supported for now. */
-               write_register(kgd, SH_STATIC_MEM_CONFIG, 0);
-
-               /* APE1 disabled for now. */
-               write_register(kgd, SH_MEM_APE1_BASE, 1);
-               write_register(kgd, SH_MEM_APE1_LIMIT, 0);
-
-               unlock_srbm(kgd);
-       }
-
-       return 0;
-}
-
 static int kgd_init_pipeline(struct kgd_dev *kgd, uint32_t pipe_id,
                                uint32_t hpd_size, uint64_t hpd_gpu_addr)
 {