mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-08 14:23:19 +00:00
thunderbolt: Add KUnit test for devices with no DisplayPort adapters
Add a KUnit test to check that buffer allocation works also for devices with no DP adapters. Signed-off-by: Gil Fine <gil.fine@intel.com> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
This commit is contained in:
parent
93bf344f66
commit
c7c99a09ef
@ -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)
|
||||
@ -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;
|
||||
@ -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…
Reference in New Issue
Block a user