Loading drivers/thunderbolt/test.c +92 −0 Original line number Diff line number Diff line Loading @@ -341,6 +341,47 @@ static struct tb_switch *alloc_dev_with_dpin(struct kunit *test, return sw; } static struct tb_switch *alloc_dev_without_dp(struct kunit *test, struct tb_switch *parent, u64 route, bool bonded) { struct tb_switch *sw; int i; sw = alloc_dev_default(test, parent, route, bonded); if (!sw) return NULL; /* * Device with: * 2x USB4 Adapters (adapters 1,2 and 3,4), * 1x PCIe Upstream (adapter 9), * 1x PCIe Downstream (adapter 10), * 1x USB3 Upstream (adapter 16), * 1x USB3 Downstream (adapter 17) */ for (i = 5; i <= 8; i++) sw->ports[i].disabled = true; for (i = 11; i <= 14; i++) sw->ports[i].disabled = true; sw->ports[13].cap_adap = 0; sw->ports[14].cap_adap = 0; for (i = 18; i <= 19; i++) sw->ports[i].disabled = true; sw->generation = 4; sw->credit_allocation = true; sw->max_usb3_credits = 109; sw->min_dp_aux_credits = 0; sw->min_dp_main_credits = 0; sw->max_pcie_credits = 30; sw->max_dma_credits = 1; return sw; } static struct tb_switch *alloc_dev_usb4(struct kunit *test, struct tb_switch *parent, u64 route, bool bonded) Loading Loading @@ -1996,6 +2037,56 @@ static void tb_test_credit_alloc_pcie(struct kunit *test) tb_tunnel_free(tunnel); } static void tb_test_credit_alloc_without_dp(struct kunit *test) { struct tb_switch *host, *dev; struct tb_port *up, *down; struct tb_tunnel *tunnel; struct tb_path *path; host = alloc_host_usb4(test); dev = alloc_dev_without_dp(test, host, 0x1, true); /* * The device has no DP therefore baMinDPmain = baMinDPaux = 0 * * Create PCIe path with buffers less than baMaxPCIe. * * For a device with buffers configurations: * baMaxUSB3 = 109 * baMinDPaux = 0 * baMinDPmain = 0 * baMaxPCIe = 30 * baMaxHI = 1 * Remaining Buffers = Total - (CP + DP) = 120 - (2 + 0) = 118 * PCIe Credits = Max(6, Min(baMaxPCIe, Remaining Buffers - baMaxUSB3) * = Max(6, Min(30, 9) = 9 */ down = &host->ports[8]; up = &dev->ports[9]; tunnel = tb_tunnel_alloc_pci(NULL, up, down); KUNIT_ASSERT_TRUE(test, tunnel != NULL); KUNIT_ASSERT_EQ(test, tunnel->npaths, (size_t)2); /* PCIe downstream path */ path = tunnel->paths[0]; KUNIT_ASSERT_EQ(test, path->path_length, 2); KUNIT_EXPECT_EQ(test, path->hops[0].nfc_credits, 0U); KUNIT_EXPECT_EQ(test, path->hops[0].initial_credits, 7U); KUNIT_EXPECT_EQ(test, path->hops[1].nfc_credits, 0U); KUNIT_EXPECT_EQ(test, path->hops[1].initial_credits, 9U); /* PCIe upstream path */ path = tunnel->paths[1]; KUNIT_ASSERT_EQ(test, path->path_length, 2); KUNIT_EXPECT_EQ(test, path->hops[0].nfc_credits, 0U); KUNIT_EXPECT_EQ(test, path->hops[0].initial_credits, 7U); KUNIT_EXPECT_EQ(test, path->hops[1].nfc_credits, 0U); KUNIT_EXPECT_EQ(test, path->hops[1].initial_credits, 64U); tb_tunnel_free(tunnel); } static void tb_test_credit_alloc_dp(struct kunit *test) { struct tb_switch *host, *dev; Loading Loading @@ -2709,6 +2800,7 @@ static struct kunit_case tb_test_cases[] = { KUNIT_CASE(tb_test_credit_alloc_legacy_not_bonded), KUNIT_CASE(tb_test_credit_alloc_legacy_bonded), KUNIT_CASE(tb_test_credit_alloc_pcie), KUNIT_CASE(tb_test_credit_alloc_without_dp), KUNIT_CASE(tb_test_credit_alloc_dp), KUNIT_CASE(tb_test_credit_alloc_usb3), KUNIT_CASE(tb_test_credit_alloc_dma), Loading Loading
drivers/thunderbolt/test.c +92 −0 Original line number Diff line number Diff line Loading @@ -341,6 +341,47 @@ static struct tb_switch *alloc_dev_with_dpin(struct kunit *test, return sw; } static struct tb_switch *alloc_dev_without_dp(struct kunit *test, struct tb_switch *parent, u64 route, bool bonded) { struct tb_switch *sw; int i; sw = alloc_dev_default(test, parent, route, bonded); if (!sw) return NULL; /* * Device with: * 2x USB4 Adapters (adapters 1,2 and 3,4), * 1x PCIe Upstream (adapter 9), * 1x PCIe Downstream (adapter 10), * 1x USB3 Upstream (adapter 16), * 1x USB3 Downstream (adapter 17) */ for (i = 5; i <= 8; i++) sw->ports[i].disabled = true; for (i = 11; i <= 14; i++) sw->ports[i].disabled = true; sw->ports[13].cap_adap = 0; sw->ports[14].cap_adap = 0; for (i = 18; i <= 19; i++) sw->ports[i].disabled = true; sw->generation = 4; sw->credit_allocation = true; sw->max_usb3_credits = 109; sw->min_dp_aux_credits = 0; sw->min_dp_main_credits = 0; sw->max_pcie_credits = 30; sw->max_dma_credits = 1; return sw; } static struct tb_switch *alloc_dev_usb4(struct kunit *test, struct tb_switch *parent, u64 route, bool bonded) Loading Loading @@ -1996,6 +2037,56 @@ static void tb_test_credit_alloc_pcie(struct kunit *test) tb_tunnel_free(tunnel); } static void tb_test_credit_alloc_without_dp(struct kunit *test) { struct tb_switch *host, *dev; struct tb_port *up, *down; struct tb_tunnel *tunnel; struct tb_path *path; host = alloc_host_usb4(test); dev = alloc_dev_without_dp(test, host, 0x1, true); /* * The device has no DP therefore baMinDPmain = baMinDPaux = 0 * * Create PCIe path with buffers less than baMaxPCIe. * * For a device with buffers configurations: * baMaxUSB3 = 109 * baMinDPaux = 0 * baMinDPmain = 0 * baMaxPCIe = 30 * baMaxHI = 1 * Remaining Buffers = Total - (CP + DP) = 120 - (2 + 0) = 118 * PCIe Credits = Max(6, Min(baMaxPCIe, Remaining Buffers - baMaxUSB3) * = Max(6, Min(30, 9) = 9 */ down = &host->ports[8]; up = &dev->ports[9]; tunnel = tb_tunnel_alloc_pci(NULL, up, down); KUNIT_ASSERT_TRUE(test, tunnel != NULL); KUNIT_ASSERT_EQ(test, tunnel->npaths, (size_t)2); /* PCIe downstream path */ path = tunnel->paths[0]; KUNIT_ASSERT_EQ(test, path->path_length, 2); KUNIT_EXPECT_EQ(test, path->hops[0].nfc_credits, 0U); KUNIT_EXPECT_EQ(test, path->hops[0].initial_credits, 7U); KUNIT_EXPECT_EQ(test, path->hops[1].nfc_credits, 0U); KUNIT_EXPECT_EQ(test, path->hops[1].initial_credits, 9U); /* PCIe upstream path */ path = tunnel->paths[1]; KUNIT_ASSERT_EQ(test, path->path_length, 2); KUNIT_EXPECT_EQ(test, path->hops[0].nfc_credits, 0U); KUNIT_EXPECT_EQ(test, path->hops[0].initial_credits, 7U); KUNIT_EXPECT_EQ(test, path->hops[1].nfc_credits, 0U); KUNIT_EXPECT_EQ(test, path->hops[1].initial_credits, 64U); tb_tunnel_free(tunnel); } static void tb_test_credit_alloc_dp(struct kunit *test) { struct tb_switch *host, *dev; Loading Loading @@ -2709,6 +2800,7 @@ static struct kunit_case tb_test_cases[] = { KUNIT_CASE(tb_test_credit_alloc_legacy_not_bonded), KUNIT_CASE(tb_test_credit_alloc_legacy_bonded), KUNIT_CASE(tb_test_credit_alloc_pcie), KUNIT_CASE(tb_test_credit_alloc_without_dp), KUNIT_CASE(tb_test_credit_alloc_dp), KUNIT_CASE(tb_test_credit_alloc_usb3), KUNIT_CASE(tb_test_credit_alloc_dma), Loading