From: Alex Hung <[email protected]>

[Why & How]
Extract amdgpu_dm_initialize_default_pipeline() into a new
STATIC_IFN_KUNIT helper amdgpu_dm_build_default_pipeline().

This separation makes the pipeline-building logic testable via
KUnit without pulling in amdgpu_device and its dependencies
that are unavailable in the UML KUnit build environment.

Assisted-by: Copilot:Claude-Sonnet-4.6

Reviewed-by: Harry Wentland <[email protected]>
Signed-off-by: Alex Hung <[email protected]>
Signed-off-by: Ray Wu <[email protected]>
---
 .../amd/display/amdgpu_dm/amdgpu_dm_colorop.c | 22 ++++++++++++++-----
 .../amd/display/amdgpu_dm/amdgpu_dm_colorop.h |  5 +++++
 2 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_colorop.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_colorop.c
index 7c83fe6df395..d3ae9b58024b 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_colorop.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_colorop.c
@@ -59,12 +59,11 @@ EXPORT_IF_KUNIT(amdgpu_dm_supported_blnd_tfs);
 
 #define LUT3D_SIZE             17
 
-int amdgpu_dm_initialize_default_pipeline(struct drm_plane *plane, struct 
drm_prop_enum_list *list)
+STATIC_IFN_KUNIT int
+amdgpu_dm_build_default_pipeline(struct drm_device *dev, struct drm_plane 
*plane,
+                                 bool hw_3d_lut, struct drm_prop_enum_list 
*list)
 {
        struct drm_colorop *ops[MAX_COLOR_PIPELINE_OPS];
-       struct drm_device *dev = plane->dev;
-       struct amdgpu_device *adev = drm_to_adev(dev);
-       bool has_3dlut = adev->dm.dc->caps.color.dpp.hw_3d_lut || 
adev->dm.dc->caps.color.mpc.preblend;
        int ret;
        int i = 0;
 
@@ -117,7 +116,7 @@ int amdgpu_dm_initialize_default_pipeline(struct drm_plane 
*plane, struct drm_pr
 
        i++;
 
-       if (has_3dlut) {
+       if (hw_3d_lut) {
                /* 1D curve - SHAPER TF */
                ops[i] = kzalloc(sizeof(*ops[0]), GFP_KERNEL);
                if (!ops[i]) {
@@ -208,9 +207,20 @@ int amdgpu_dm_initialize_default_pipeline(struct drm_plane 
*plane, struct drm_pr
 
 cleanup:
        if (ret == -ENOMEM)
-               drm_err(plane->dev, "KMS: Failed to allocate colorop\n");
+               drm_err(dev, "KMS: Failed to allocate colorop\n");
 
        drm_colorop_pipeline_destroy(dev);
 
        return ret;
 }
+EXPORT_IF_KUNIT(amdgpu_dm_build_default_pipeline);
+
+int amdgpu_dm_initialize_default_pipeline(struct drm_plane *plane, struct 
drm_prop_enum_list *list)
+{
+       struct drm_device *dev = plane->dev;
+       struct amdgpu_device *adev = drm_to_adev(dev);
+       bool hw_3d_lut = adev->dm.dc->caps.color.dpp.hw_3d_lut ||
+                        adev->dm.dc->caps.color.mpc.preblend;
+
+       return amdgpu_dm_build_default_pipeline(dev, plane, hw_3d_lut, list);
+}
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_colorop.h 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_colorop.h
index 2e1617ffc8ee..77364d954d3b 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_colorop.h
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_colorop.h
@@ -33,4 +33,9 @@ extern const u64 amdgpu_dm_supported_blnd_tfs;
 
 int amdgpu_dm_initialize_default_pipeline(struct drm_plane *plane, struct 
drm_prop_enum_list *list);
 
+#if IS_ENABLED(CONFIG_DRM_AMD_DC_KUNIT_TEST)
+int amdgpu_dm_build_default_pipeline(struct drm_device *dev, struct drm_plane 
*plane,
+                                     bool hw_3d_lut, struct drm_prop_enum_list 
*list);
+#endif
+
 #endif /* __AMDGPU_DM_COLOROP_H__*/
-- 
2.43.0

Reply via email to