]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu: Convert query_memory_partition into common helpers
authorHawking Zhang <Hawking.Zhang@amd.com>
Sat, 21 Jun 2025 13:11:30 +0000 (21:11 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 24 Jun 2025 14:04:09 +0000 (10:04 -0400)
The query_memory_partition does not need to remain
as soc specific callbacks. They can be shared across
multiple products

Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h
drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c

index c5f06142e8923b504bf09507c2c82d37b3e43fd0..a65dff25c35a86bc35b288542d4fe236ee7e0abd 100644 (file)
@@ -1448,3 +1448,46 @@ bool amdgpu_gmc_need_reset_on_init(struct amdgpu_device *adev)
 
        return false;
 }
+
+enum amdgpu_memory_partition
+amdgpu_gmc_get_vf_memory_partition(struct amdgpu_device *adev)
+{
+       switch (adev->gmc.num_mem_partitions) {
+       case 0:
+               return UNKNOWN_MEMORY_PARTITION_MODE;
+       case 1:
+               return AMDGPU_NPS1_PARTITION_MODE;
+       case 2:
+               return AMDGPU_NPS2_PARTITION_MODE;
+       case 4:
+               return AMDGPU_NPS4_PARTITION_MODE;
+       case 8:
+               return AMDGPU_NPS8_PARTITION_MODE;
+       default:
+               return AMDGPU_NPS1_PARTITION_MODE;
+       }
+}
+
+enum amdgpu_memory_partition
+amdgpu_gmc_get_memory_partition(struct amdgpu_device *adev, u32 *supp_modes)
+{
+       enum amdgpu_memory_partition mode = UNKNOWN_MEMORY_PARTITION_MODE;
+
+       if (adev->nbio.funcs &&
+           adev->nbio.funcs->get_memory_partition_mode)
+               mode = adev->nbio.funcs->get_memory_partition_mode(adev,
+                                                                  supp_modes);
+       else
+               dev_warn(adev->dev, "memory partition mode query is not supported\n");
+
+       return mode;
+}
+
+enum amdgpu_memory_partition
+amdgpu_gmc_query_memory_partition(struct amdgpu_device *adev)
+{
+       if (amdgpu_sriov_vf(adev))
+               return amdgpu_gmc_get_vf_memory_partition(adev);
+       else
+               return amdgpu_gmc_get_memory_partition(adev, NULL);
+}
index 5aa404390d68f7f94baf65f0a234d1a38e68e30f..95a68e0eb96e972d842fd5d1cad5d489ec12d8ae 100644 (file)
@@ -458,5 +458,10 @@ int amdgpu_gmc_request_memory_partition(struct amdgpu_device *adev,
                                        int nps_mode);
 void amdgpu_gmc_prepare_nps_mode_change(struct amdgpu_device *adev);
 bool amdgpu_gmc_need_reset_on_init(struct amdgpu_device *adev);
-
+enum amdgpu_memory_partition
+amdgpu_gmc_get_vf_memory_partition(struct amdgpu_device *adev);
+enum amdgpu_memory_partition
+amdgpu_gmc_get_memory_partition(struct amdgpu_device *adev, u32 *supp_modes);
+enum amdgpu_memory_partition
+amdgpu_gmc_query_memory_partition(struct amdgpu_device *adev);
 #endif
index 01b9374134f28ea27f3041a5479ca4a22bfc6897..3cc2d5c21f49fb176ab1d2122d1dcd35e014de86 100644 (file)
@@ -1383,46 +1383,6 @@ static unsigned int gmc_v9_0_get_vbios_fb_size(struct amdgpu_device *adev)
        return size;
 }
 
-static enum amdgpu_memory_partition
-gmc_v9_0_get_memory_partition(struct amdgpu_device *adev, u32 *supp_modes)
-{
-       enum amdgpu_memory_partition mode = UNKNOWN_MEMORY_PARTITION_MODE;
-
-       if (adev->nbio.funcs->get_memory_partition_mode)
-               mode = adev->nbio.funcs->get_memory_partition_mode(adev,
-                                                                  supp_modes);
-
-       return mode;
-}
-
-static enum amdgpu_memory_partition
-gmc_v9_0_query_vf_memory_partition(struct amdgpu_device *adev)
-{
-       switch (adev->gmc.num_mem_partitions) {
-       case 0:
-               return UNKNOWN_MEMORY_PARTITION_MODE;
-       case 1:
-               return AMDGPU_NPS1_PARTITION_MODE;
-       case 2:
-               return AMDGPU_NPS2_PARTITION_MODE;
-       case 4:
-               return AMDGPU_NPS4_PARTITION_MODE;
-       default:
-               return AMDGPU_NPS1_PARTITION_MODE;
-       }
-
-       return AMDGPU_NPS1_PARTITION_MODE;
-}
-
-static enum amdgpu_memory_partition
-gmc_v9_0_query_memory_partition(struct amdgpu_device *adev)
-{
-       if (amdgpu_sriov_vf(adev))
-               return gmc_v9_0_query_vf_memory_partition(adev);
-
-       return gmc_v9_0_get_memory_partition(adev, NULL);
-}
-
 static bool gmc_v9_0_need_reset_on_init(struct amdgpu_device *adev)
 {
        if (adev->nbio.funcs && adev->nbio.funcs->is_nps_switch_requested &&
@@ -1444,7 +1404,7 @@ static const struct amdgpu_gmc_funcs gmc_v9_0_gmc_funcs = {
        .get_vm_pte = gmc_v9_0_get_vm_pte,
        .override_vm_pte_flags = gmc_v9_0_override_vm_pte_flags,
        .get_vbios_fb_size = gmc_v9_0_get_vbios_fb_size,
-       .query_mem_partition_mode = &gmc_v9_0_query_memory_partition,
+       .query_mem_partition_mode = &amdgpu_gmc_query_memory_partition,
        .request_mem_partition_mode = &amdgpu_gmc_request_memory_partition,
        .need_reset_on_init = &gmc_v9_0_need_reset_on_init,
 };
@@ -1597,7 +1557,7 @@ static void gmc_v9_0_init_nps_details(struct amdgpu_device *adev)
        if (amdgpu_sriov_vf(adev) || (adev->flags & AMD_IS_APU))
                return;
 
-       mode = gmc_v9_0_get_memory_partition(adev, &supp_modes);
+       mode = amdgpu_gmc_get_memory_partition(adev, &supp_modes);
 
        /* Mode detected by hardware and supported modes available */
        if ((mode != UNKNOWN_MEMORY_PARTITION_MODE) && supp_modes) {
@@ -1889,7 +1849,7 @@ static bool gmc_v9_0_validate_partition_info(struct amdgpu_device *adev)
        u32 supp_modes;
        bool valid;
 
-       mode = gmc_v9_0_get_memory_partition(adev, &supp_modes);
+       mode = amdgpu_gmc_get_memory_partition(adev, &supp_modes);
 
        /* Mode detected by hardware not present in supported modes */
        if ((mode != UNKNOWN_MEMORY_PARTITION_MODE) &&
@@ -1973,7 +1933,7 @@ gmc_v9_0_init_sw_mem_ranges(struct amdgpu_device *adev,
        u32 start_addr = 0, size;
        int i, r, l;
 
-       mode = gmc_v9_0_query_memory_partition(adev);
+       mode = amdgpu_gmc_query_memory_partition(adev);
 
        switch (mode) {
        case UNKNOWN_MEMORY_PARTITION_MODE: