*/
 static bool dump_dp_payload_table(struct drm_dp_mst_topology_mgr *mgr,
                                  char *buf);
-static int test_calc_pbn_mode(void);
 
 static void drm_dp_mst_topology_put_port(struct drm_dp_mst_port *port);
 
 }
 EXPORT_SYMBOL(drm_dp_calc_pbn_mode);
 
-static int test_calc_pbn_mode(void)
-{
-       int ret;
-       ret = drm_dp_calc_pbn_mode(154000, 30);
-       if (ret != 689) {
-               DRM_ERROR("PBN calculation test failed - clock %d, bpp %d, expected PBN %d, actual PBN %d.\n",
-                               154000, 30, 689, ret);
-               return -EINVAL;
-       }
-       ret = drm_dp_calc_pbn_mode(234000, 30);
-       if (ret != 1047) {
-               DRM_ERROR("PBN calculation test failed - clock %d, bpp %d, expected PBN %d, actual PBN %d.\n",
-                               234000, 30, 1047, ret);
-               return -EINVAL;
-       }
-       ret = drm_dp_calc_pbn_mode(297000, 24);
-       if (ret != 1063) {
-               DRM_ERROR("PBN calculation test failed - clock %d, bpp %d, expected PBN %d, actual PBN %d.\n",
-                               297000, 24, 1063, ret);
-               return -EINVAL;
-       }
-       return 0;
-}
-
 /* we want to kick the TX after we've ack the up/down IRQs. */
 static void drm_dp_mst_kick_tx(struct drm_dp_mst_topology_mgr *mgr)
 {
        if (!mgr->proposed_vcpis)
                return -ENOMEM;
        set_bit(0, &mgr->payload_mask);
-       if (test_calc_pbn_mode() < 0)
-               DRM_ERROR("MST PBN self-test failed\n");
 
        mst_state = kzalloc(sizeof(*mst_state), GFP_KERNEL);
        if (mst_state == NULL)
 
 # SPDX-License-Identifier: GPL-2.0-only
 test-drm_modeset-y := test-drm_modeset_common.o test-drm_plane_helper.o \
                       test-drm_format.o test-drm_framebuffer.o \
-                     test-drm_damage_helper.o
+                     test-drm_damage_helper.o test-drm_dp_mst_helper.o
 
 obj-$(CONFIG_DRM_DEBUG_SELFTEST) += test-drm_mm.o test-drm_modeset.o test-drm_cmdline_parser.o
 
--- /dev/null
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Test cases for for the DRM DP MST helpers
+ */
+
+#include <drm/drm_dp_mst_helper.h>
+#include <drm/drm_print.h>
+
+#include "test-drm_modeset_common.h"
+
+int igt_dp_mst_calc_pbn_mode(void *ignored)
+{
+       int pbn, i;
+       const struct {
+               int rate;
+               int bpp;
+               int expected;
+       } test_params[] = {
+               { 154000, 30, 689 },
+               { 234000, 30, 1047 },
+               { 297000, 24, 1063 },
+       };
+
+       for (i = 0; i < ARRAY_SIZE(test_params); i++) {
+               pbn = drm_dp_calc_pbn_mode(test_params[i].rate,
+                                          test_params[i].bpp);
+               FAIL(pbn != test_params[i].expected,
+                    "Expected PBN %d for clock %d bpp %d, got %d\n",
+                    test_params[i].expected, test_params[i].rate,
+                    test_params[i].bpp, pbn);
+       }
+
+       return 0;
+}