Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.19-rc1 227 lines 7.1 kB view raw
1// SPDX-License-Identifier: GPL-2.0 AND MIT 2/* 3 * Copyright © 2024-2025 Intel Corporation 4 */ 5 6#include <kunit/test.h> 7 8#include "xe_device.h" 9#include "xe_kunit_helpers.h" 10#include "xe_pci_test.h" 11 12static int pf_service_test_init(struct kunit *test) 13{ 14 struct xe_pci_fake_data fake = { 15 .sriov_mode = XE_SRIOV_MODE_PF, 16 .platform = XE_TIGERLAKE, /* some random platform */ 17 .subplatform = XE_SUBPLATFORM_NONE, 18 }; 19 struct xe_device *xe; 20 21 test->priv = &fake; 22 xe_kunit_helper_xe_device_test_init(test); 23 24 xe = test->priv; 25 KUNIT_ASSERT_EQ(test, xe_sriov_init(xe), 0); 26 27 xe_sriov_pf_service_init(xe); 28 /* 29 * sanity check: 30 * - all supported platforms VF/PF ABI versions must be defined 31 * - base version can't be newer than latest 32 */ 33 KUNIT_ASSERT_NE(test, 0, xe->sriov.pf.service.version.base.major); 34 KUNIT_ASSERT_NE(test, 0, xe->sriov.pf.service.version.latest.major); 35 KUNIT_ASSERT_LE(test, xe->sriov.pf.service.version.base.major, 36 xe->sriov.pf.service.version.latest.major); 37 if (xe->sriov.pf.service.version.base.major == xe->sriov.pf.service.version.latest.major) 38 KUNIT_ASSERT_LE(test, xe->sriov.pf.service.version.base.minor, 39 xe->sriov.pf.service.version.latest.minor); 40 return 0; 41} 42 43static void pf_negotiate_any(struct kunit *test) 44{ 45 struct xe_device *xe = test->priv; 46 u32 major, minor; 47 48 KUNIT_ASSERT_EQ(test, 0, 49 pf_negotiate_version(xe, VF2PF_HANDSHAKE_MAJOR_ANY, 50 VF2PF_HANDSHAKE_MINOR_ANY, 51 &major, &minor)); 52 KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.latest.major); 53 KUNIT_ASSERT_EQ(test, minor, xe->sriov.pf.service.version.latest.minor); 54} 55 56static void pf_negotiate_base_match(struct kunit *test) 57{ 58 struct xe_device *xe = test->priv; 59 u32 major, minor; 60 61 KUNIT_ASSERT_EQ(test, 0, 62 pf_negotiate_version(xe, 63 xe->sriov.pf.service.version.base.major, 64 xe->sriov.pf.service.version.base.minor, 65 &major, &minor)); 66 KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.base.major); 67 KUNIT_ASSERT_EQ(test, minor, xe->sriov.pf.service.version.base.minor); 68} 69 70static void pf_negotiate_base_newer(struct kunit *test) 71{ 72 struct xe_device *xe = test->priv; 73 u32 major, minor; 74 75 KUNIT_ASSERT_EQ(test, 0, 76 pf_negotiate_version(xe, 77 xe->sriov.pf.service.version.base.major, 78 xe->sriov.pf.service.version.base.minor + 1, 79 &major, &minor)); 80 KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.base.major); 81 KUNIT_ASSERT_GE(test, minor, xe->sriov.pf.service.version.base.minor); 82 if (xe->sriov.pf.service.version.base.major == xe->sriov.pf.service.version.latest.major) 83 KUNIT_ASSERT_LE(test, minor, xe->sriov.pf.service.version.latest.minor); 84 else 85 KUNIT_FAIL(test, "FIXME: don't know how to test multi-version yet!\n"); 86} 87 88static void pf_negotiate_base_next(struct kunit *test) 89{ 90 struct xe_device *xe = test->priv; 91 u32 major, minor; 92 93 KUNIT_ASSERT_EQ(test, 0, 94 pf_negotiate_version(xe, 95 xe->sriov.pf.service.version.base.major + 1, 0, 96 &major, &minor)); 97 KUNIT_ASSERT_GE(test, major, xe->sriov.pf.service.version.base.major); 98 KUNIT_ASSERT_LE(test, major, xe->sriov.pf.service.version.latest.major); 99 if (major == xe->sriov.pf.service.version.latest.major) 100 KUNIT_ASSERT_LE(test, minor, xe->sriov.pf.service.version.latest.minor); 101 else 102 KUNIT_FAIL(test, "FIXME: don't know how to test multi-version yet!\n"); 103} 104 105static void pf_negotiate_base_older(struct kunit *test) 106{ 107 struct xe_device *xe = test->priv; 108 u32 major, minor; 109 110 if (!xe->sriov.pf.service.version.base.minor) 111 kunit_skip(test, "no older minor\n"); 112 113 KUNIT_ASSERT_NE(test, 0, 114 pf_negotiate_version(xe, 115 xe->sriov.pf.service.version.base.major, 116 xe->sriov.pf.service.version.base.minor - 1, 117 &major, &minor)); 118} 119 120static void pf_negotiate_base_prev(struct kunit *test) 121{ 122 struct xe_device *xe = test->priv; 123 u32 major, minor; 124 125 KUNIT_ASSERT_NE(test, 0, 126 pf_negotiate_version(xe, 127 xe->sriov.pf.service.version.base.major - 1, 1, 128 &major, &minor)); 129} 130 131static void pf_negotiate_latest_match(struct kunit *test) 132{ 133 struct xe_device *xe = test->priv; 134 u32 major, minor; 135 136 KUNIT_ASSERT_EQ(test, 0, 137 pf_negotiate_version(xe, 138 xe->sriov.pf.service.version.latest.major, 139 xe->sriov.pf.service.version.latest.minor, 140 &major, &minor)); 141 KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.latest.major); 142 KUNIT_ASSERT_EQ(test, minor, xe->sriov.pf.service.version.latest.minor); 143} 144 145static void pf_negotiate_latest_newer(struct kunit *test) 146{ 147 struct xe_device *xe = test->priv; 148 u32 major, minor; 149 150 KUNIT_ASSERT_EQ(test, 0, 151 pf_negotiate_version(xe, 152 xe->sriov.pf.service.version.latest.major, 153 xe->sriov.pf.service.version.latest.minor + 1, 154 &major, &minor)); 155 KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.latest.major); 156 KUNIT_ASSERT_EQ(test, minor, xe->sriov.pf.service.version.latest.minor); 157} 158 159static void pf_negotiate_latest_next(struct kunit *test) 160{ 161 struct xe_device *xe = test->priv; 162 u32 major, minor; 163 164 KUNIT_ASSERT_EQ(test, 0, 165 pf_negotiate_version(xe, 166 xe->sriov.pf.service.version.latest.major + 1, 0, 167 &major, &minor)); 168 KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.latest.major); 169 KUNIT_ASSERT_EQ(test, minor, xe->sriov.pf.service.version.latest.minor); 170} 171 172static void pf_negotiate_latest_older(struct kunit *test) 173{ 174 struct xe_device *xe = test->priv; 175 u32 major, minor; 176 177 if (!xe->sriov.pf.service.version.latest.minor) 178 kunit_skip(test, "no older minor\n"); 179 180 KUNIT_ASSERT_EQ(test, 0, 181 pf_negotiate_version(xe, 182 xe->sriov.pf.service.version.latest.major, 183 xe->sriov.pf.service.version.latest.minor - 1, 184 &major, &minor)); 185 KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.latest.major); 186 KUNIT_ASSERT_EQ(test, minor, xe->sriov.pf.service.version.latest.minor - 1); 187} 188 189static void pf_negotiate_latest_prev(struct kunit *test) 190{ 191 struct xe_device *xe = test->priv; 192 u32 major, minor; 193 194 if (xe->sriov.pf.service.version.base.major == xe->sriov.pf.service.version.latest.major) 195 kunit_skip(test, "no prev major"); 196 197 KUNIT_ASSERT_EQ(test, 0, 198 pf_negotiate_version(xe, 199 xe->sriov.pf.service.version.latest.major - 1, 200 xe->sriov.pf.service.version.base.minor + 1, 201 &major, &minor)); 202 KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.latest.major - 1); 203 KUNIT_ASSERT_GE(test, major, xe->sriov.pf.service.version.base.major); 204} 205 206static struct kunit_case pf_service_test_cases[] = { 207 KUNIT_CASE(pf_negotiate_any), 208 KUNIT_CASE(pf_negotiate_base_match), 209 KUNIT_CASE(pf_negotiate_base_newer), 210 KUNIT_CASE(pf_negotiate_base_next), 211 KUNIT_CASE(pf_negotiate_base_older), 212 KUNIT_CASE(pf_negotiate_base_prev), 213 KUNIT_CASE(pf_negotiate_latest_match), 214 KUNIT_CASE(pf_negotiate_latest_newer), 215 KUNIT_CASE(pf_negotiate_latest_next), 216 KUNIT_CASE(pf_negotiate_latest_older), 217 KUNIT_CASE(pf_negotiate_latest_prev), 218 {} 219}; 220 221static struct kunit_suite pf_service_suite = { 222 .name = "pf_service", 223 .test_cases = pf_service_test_cases, 224 .init = pf_service_test_init, 225}; 226 227kunit_test_suite(pf_service_suite);