},
 };
 
+// Structural representation of topology containing SectionPCM
+
+struct tplg_tmpl_002 {
+       struct snd_soc_tplg_hdr header;
+       struct snd_soc_tplg_manifest manifest;
+       struct snd_soc_tplg_hdr pcm_header;
+       struct snd_soc_tplg_pcm pcm;
+} __packed;
+
+static struct tplg_tmpl_002 tplg_tmpl_with_pcm = {
+       .header = {
+               .magic = SND_SOC_TPLG_MAGIC,
+               .abi = 5,
+               .version = 0,
+               .type = SND_SOC_TPLG_TYPE_MANIFEST,
+               .size = sizeof(struct snd_soc_tplg_hdr),
+               .vendor_type = 0,
+               .payload_size = sizeof(struct snd_soc_tplg_manifest),
+               .index = 0,
+               .count = 1,
+       },
+       .manifest = {
+               .size = sizeof(struct snd_soc_tplg_manifest),
+               .pcm_elems = 1,
+               /* rest of fields is 0 */
+       },
+       .pcm_header = {
+               .magic = SND_SOC_TPLG_MAGIC,
+               .abi = 5,
+               .version = 0,
+               .type = SND_SOC_TPLG_TYPE_PCM,
+               .size = sizeof(struct snd_soc_tplg_hdr),
+               .vendor_type = 0,
+               .payload_size = sizeof(struct snd_soc_tplg_pcm),
+               .index = 0,
+               .count = 1,
+       },
+       .pcm = {
+               .size = sizeof(struct snd_soc_tplg_pcm),
+               .pcm_name = "KUNIT Audio",
+               .dai_name = "kunit-audio-dai",
+               .pcm_id = 0,
+               .dai_id = 0,
+               .playback = 1,
+               .capture = 1,
+               .compress = 0,
+               .stream = {
+                       [0] = {
+                               .channels = 2,
+                       },
+                       [1] = {
+                               .channels = 2,
+                       },
+               },
+               .num_streams = 0,
+               .caps = {
+                       [0] = {
+                               .name = "kunit-audio-playback",
+                               .channels_min = 2,
+                               .channels_max = 2,
+                       },
+                       [1] = {
+                               .name = "kunit-audio-capture",
+                               .channels_min = 2,
+                               .channels_max = 2,
+                       },
+               },
+               .flag_mask = 0,
+               .flags = 0,
+               .priv = { 0 },
+       },
+};
+
 /* ===== TEST CASES ========================================================= */
 
 // TEST CASE
        KUNIT_EXPECT_EQ(test, 0, ret);
 }
 
+// TEST CASE
+// Test passing topology file with PCM definition
+static void snd_soc_tplg_test_load_pcm_tplg(struct kunit *test)
+{
+       struct kunit_soc_component *kunit_comp;
+       u8 *data;
+       int size;
+       int ret;
+
+       /* prepare */
+       kunit_comp = kunit_kzalloc(test, sizeof(*kunit_comp), GFP_KERNEL);
+       KUNIT_EXPECT_NOT_ERR_OR_NULL(test, kunit_comp);
+       kunit_comp->kunit = test;
+       kunit_comp->expect = 0; /* expect success */
+
+       size = sizeof(tplg_tmpl_with_pcm);
+       data = kunit_kzalloc(kunit_comp->kunit, size, GFP_KERNEL);
+       KUNIT_EXPECT_NOT_ERR_OR_NULL(kunit_comp->kunit, data);
+
+       memcpy(data, &tplg_tmpl_with_pcm, sizeof(tplg_tmpl_with_pcm));
+
+       kunit_comp->fw.data = data;
+       kunit_comp->fw.size = size;
+
+       kunit_comp->card.dev = test_dev,
+       kunit_comp->card.name = "kunit-card",
+       kunit_comp->card.owner = THIS_MODULE,
+       kunit_comp->card.dai_link = kunit_dai_links,
+       kunit_comp->card.num_links = ARRAY_SIZE(kunit_dai_links),
+       kunit_comp->card.fully_routed = true,
+
+       /* run test */
+       ret = snd_soc_register_card(&kunit_comp->card);
+       if (ret != 0 && ret != -EPROBE_DEFER)
+               KUNIT_FAIL(test, "Failed to register card");
+
+       ret = snd_soc_component_initialize(&kunit_comp->comp, &test_component, test_dev);
+       KUNIT_EXPECT_EQ(test, 0, ret);
+
+       ret = snd_soc_add_component(&kunit_comp->comp, NULL, 0);
+       KUNIT_EXPECT_EQ(test, 0, ret);
+
+       snd_soc_unregister_component(test_dev);
+
+       /* cleanup */
+       ret = snd_soc_unregister_card(&kunit_comp->card);
+       KUNIT_EXPECT_EQ(test, 0, ret);
+}
+
+// TEST CASE
+// Test passing topology file with PCM definition
+// with component reload
+static void snd_soc_tplg_test_load_pcm_tplg_reload_comp(struct kunit *test)
+{
+       struct kunit_soc_component *kunit_comp;
+       u8 *data;
+       int size;
+       int ret;
+       int i;
+
+       /* prepare */
+       kunit_comp = kunit_kzalloc(test, sizeof(*kunit_comp), GFP_KERNEL);
+       KUNIT_EXPECT_NOT_ERR_OR_NULL(test, kunit_comp);
+       kunit_comp->kunit = test;
+       kunit_comp->expect = 0; /* expect success */
+
+       size = sizeof(tplg_tmpl_with_pcm);
+       data = kunit_kzalloc(kunit_comp->kunit, size, GFP_KERNEL);
+       KUNIT_EXPECT_NOT_ERR_OR_NULL(kunit_comp->kunit, data);
+
+       memcpy(data, &tplg_tmpl_with_pcm, sizeof(tplg_tmpl_with_pcm));
+
+       kunit_comp->fw.data = data;
+       kunit_comp->fw.size = size;
+
+       kunit_comp->card.dev = test_dev,
+       kunit_comp->card.name = "kunit-card",
+       kunit_comp->card.owner = THIS_MODULE,
+       kunit_comp->card.dai_link = kunit_dai_links,
+       kunit_comp->card.num_links = ARRAY_SIZE(kunit_dai_links),
+       kunit_comp->card.fully_routed = true,
+
+       /* run test */
+       ret = snd_soc_register_card(&kunit_comp->card);
+       if (ret != 0 && ret != -EPROBE_DEFER)
+               KUNIT_FAIL(test, "Failed to register card");
+
+       for (i = 0; i < 100; i++) {
+               ret = snd_soc_component_initialize(&kunit_comp->comp, &test_component, test_dev);
+               KUNIT_EXPECT_EQ(test, 0, ret);
+
+               ret = snd_soc_add_component(&kunit_comp->comp, NULL, 0);
+               KUNIT_EXPECT_EQ(test, 0, ret);
+
+               snd_soc_unregister_component(test_dev);
+       }
+
+       /* cleanup */
+       ret = snd_soc_unregister_card(&kunit_comp->card);
+       KUNIT_EXPECT_EQ(test, 0, ret);
+}
+
+// TEST CASE
+// Test passing topology file with PCM definition
+// with card reload
+static void snd_soc_tplg_test_load_pcm_tplg_reload_card(struct kunit *test)
+{
+       struct kunit_soc_component *kunit_comp;
+       u8 *data;
+       int size;
+       int ret;
+       int i;
+
+       /* prepare */
+       kunit_comp = kunit_kzalloc(test, sizeof(*kunit_comp), GFP_KERNEL);
+       KUNIT_EXPECT_NOT_ERR_OR_NULL(test, kunit_comp);
+       kunit_comp->kunit = test;
+       kunit_comp->expect = 0; /* expect success */
+
+       size = sizeof(tplg_tmpl_with_pcm);
+       data = kunit_kzalloc(kunit_comp->kunit, size, GFP_KERNEL);
+       KUNIT_EXPECT_NOT_ERR_OR_NULL(kunit_comp->kunit, data);
+
+       memcpy(data, &tplg_tmpl_with_pcm, sizeof(tplg_tmpl_with_pcm));
+
+       kunit_comp->fw.data = data;
+       kunit_comp->fw.size = size;
+
+       kunit_comp->card.dev = test_dev,
+       kunit_comp->card.name = "kunit-card",
+       kunit_comp->card.owner = THIS_MODULE,
+       kunit_comp->card.dai_link = kunit_dai_links,
+       kunit_comp->card.num_links = ARRAY_SIZE(kunit_dai_links),
+       kunit_comp->card.fully_routed = true,
+
+       /* run test */
+       ret = snd_soc_component_initialize(&kunit_comp->comp, &test_component, test_dev);
+       KUNIT_EXPECT_EQ(test, 0, ret);
+
+       ret = snd_soc_add_component(&kunit_comp->comp, NULL, 0);
+       KUNIT_EXPECT_EQ(test, 0, ret);
+
+       for (i = 0; i < 100; i++) {
+               ret = snd_soc_register_card(&kunit_comp->card);
+               if (ret != 0 && ret != -EPROBE_DEFER)
+                       KUNIT_FAIL(test, "Failed to register card");
+
+               ret = snd_soc_unregister_card(&kunit_comp->card);
+               KUNIT_EXPECT_EQ(test, 0, ret);
+       }
+
+       /* cleanup */
+       snd_soc_unregister_component(test_dev);
+}
+
 /* ===== KUNIT MODULE DEFINITIONS =========================================== */
 
 static struct kunit_case snd_soc_tplg_test_cases[] = {
        KUNIT_CASE(snd_soc_tplg_test_load_empty_tplg_bad_abi),
        KUNIT_CASE(snd_soc_tplg_test_load_empty_tplg_bad_size),
        KUNIT_CASE(snd_soc_tplg_test_load_empty_tplg_bad_payload_size),
+       KUNIT_CASE(snd_soc_tplg_test_load_pcm_tplg),
+       KUNIT_CASE(snd_soc_tplg_test_load_pcm_tplg_reload_comp),
+       KUNIT_CASE(snd_soc_tplg_test_load_pcm_tplg_reload_card),
        {}
 };