Skip to content

Add NPU provider (New)#2198

Open
vandah wants to merge 20 commits intocanonical:mainfrom
vandah:npu-provider
Open

Add NPU provider (New)#2198
vandah wants to merge 20 commits intocanonical:mainfrom
vandah:npu-provider

Conversation

@vandah
Copy link
Contributor

@vandah vandah commented Nov 12, 2025

Description

This PR adds a provider for testing devices with an NPU.
It is currently focused on Intel NPUs which use the accel kernel interface.
The driver for these NPUs is distributed through the intel-npu-driver snap which also includes a gtest-based testing utility npu-umd-test. The tests in this provider check the appropriate firmware version is loaded, the user has the appropriate permissions and the rest runs individual tests from the npu-umd-test utility.

The latest version of the intel-npu-driver snap now includes also the configuration file and model files necessary for running the npu-umd-test as well as a known-failures command which I've used to simplify the test filtering. The configuration file and list of known failures will be maintained as part of the intel-npu-driver snap as they can change from one version to another.

Known issues

Some of the test names coming from the npu-umd-test test suite are longer than 80 characters which triggers a warning in checkbox.

Tests

Tests have been run on Meteor Lake and Arrow Lake devices.

@vandah vandah changed the title New: Add NPU provider Add NPU provider (New) Nov 12, 2025
@vandah vandah force-pushed the npu-provider branch 5 times, most recently from 40b763c to 3c0ef4f Compare November 13, 2025 09:29
@vandah vandah marked this pull request as draft November 13, 2025 15:24
@vandah vandah marked this pull request as ready for review November 14, 2025 12:54
@@ -0,0 +1,5 @@
# Checkbox Provider - NPU
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there anything that should be done when creating a new provider? CI-wise, packaging-wise?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, indeed. It will require to add at least the provider into the tox-checkbox.yaml and create a tox file for this provider.
Nevertheless, I discussed this morning with Max and, since these tests are fairly simple, and they are all under a new manifest entry, we could add them directly to the base provider.
I will finish the review to make sure that's the case, but that way we won't need to create a new provider.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have been told by @farshidtz that to run the coverage and different python version tests, the provider needs to be added in the tox-checkbox workflow.
However, I am not sure if there is more to do for a new provider.

estimated_duration: 2s
command: check_accel_permissions.py
imports: from com.canonical.plainbox import manifest
requires: manifest.has_npu == 'True'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that new manifest entries must now be submitted to the certification team to be added to C3's feature set

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

C3 gets them from https://github.com/canonical/blueprints so you could also make a PR there, I think.

@vandah
Copy link
Contributor Author

vandah commented Dec 12, 2025

@fernando79513 and @tomli380576, can you please review this PR?

Copy link
Contributor

@pseudocc pseudocc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a passersby reviewer, see inline comments.

@@ -0,0 +1,5 @@
# Checkbox Provider - NPU

This provider includes tests for devices with an NPU. As of right now, it is intended only for Intel NPUs. The tests only run as long as the manifest entry `has_npu` is set to `true`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should check this instead of defining has_npu

modinfo -Falias intel_vpu                                                                                                    devenv-shell-env
pci:v00008086d0000FD3Esv*sd*bc*sc*i*
pci:v00008086d0000B03Esv*sd*bc*sc*i*
pci:v00008086d0000643Esv*sd*bc*sc*i*
pci:v00008086d0000AD1Dsv*sd*bc*sc*i*
pci:v00008086d00007D1Dsv*sd*bc*sc*i*

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you mean there should be no manifest entry at all ?
I have now added a job to check modinfo output, is that what you had in mind?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was thinking about reading the modinfo output in a resource job, but now I think it may not be the ideal way.

Say we have:

  • 6.17 kernel and a Panther Lake CPU (modaliases for Panther Lake were added in 6.18).

Then all NPU tests would be skipped, which shouldn't be what we expect. Let's just keep the manifest implementation; it's good.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I think in these cases it's better to go to the manifest. If we know if a device should test for NPU(via the manifest), then we can easily detect an error in case the NPU is not detected correctly.

Copy link
Contributor

@tomli380576 tomli380576 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Test scripts lgtm! Could you provide a bit of documentation on what the expectations are for NPU_UMD_TEST_CONFIG like where it's supposed to be placed at, permissions, what exactly are the expected contents (for example the tree output of a correct setup), etc.

One small question: is the driver snap expected to come preinstalled? If not, I think we should print an error somewhere or mention it in the manifest.



def main():
config_path = os.environ.get("NPU_UMD_TEST_CONFIG")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think NPU_UMD_TEST_CONFIG also needs to be an absolute path since it's passed to dirname in one of the jobs

assert Path(config_path).is_absolute()

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file (along with the model file) might have to be placed inside the driver snap's current directory or the umd tests will say "the file is bad" and trigger an apparmor deny message. For example if I put the config file in $HOME, this happens:

[Tue Dec 23 10:47:03 2025] audit: type=1400 audit(1766458023.464:331): apparmor="DENIED" operation="open" class="file" profile="snap.intel-npu-driver.npu-umd-test" name="/home/ubuntu/basic.yaml" pid=31451 comm="npu-umd-test" requested_mask="r" denied_mask="r" fsuid=1000 ouid=1000

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Currently this file is placed in the current directory by the script which installs the intel-npu-driver snap. The file is pretty much static but we're planning to have the file located directly inside the intel-npu-driver snap (since the format could change between versions of npu-umd-test which is already distributed as a binary in the intel-npu-driver snap).

Copy link
Contributor

@tomli380576 tomli380576 Jan 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this mean the model files would be bundled with the snap in the future? If so, I think you can use the path of the bundled files as the default inside the test case and only use the environment variable as an override. This would also make it easier to run the test since we won't have to specify NPU_UMD_TEST_CONFIG every time.

Copy link
Contributor Author

@vandah vandah Jan 29, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The config file as well as the model files are now bundled with the intel-npu-driver snap on the latest/edge channel. The default config and model files are used if you specify --config=basic.yaml.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have updated the code to make the NPU_UMD_TEST_CONFIG optional.

@vandah
Copy link
Contributor Author

vandah commented Jan 23, 2026

One small question: is the driver snap expected to come preinstalled? If not, I think we should print an error somewhere or mention it in the manifest.

The snap is not pre-installed but ideally the devices that do have the has_npu manifest entry should install the snap before running checkbox... Is there any way in checkbox to define this dependency and maybe even have the snap auto-installed by checkbox?

@vandah vandah requested a review from pseudocc January 23, 2026 07:55
pseudocc
pseudocc previously approved these changes Jan 23, 2026
Copy link
Contributor

@pseudocc pseudocc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me now, thanks!

@tomli380576
Copy link
Contributor

To make this case depend on whether the driver snap exists, add snap.name == "intel-npu-driver" in the requires: section of the test job; but note that this would make checkbox "silently" skip the job and put it in the "job with failed dependencies" pile if the snap is not installed even if the manifest is set to true.

@codecov
Copy link

codecov bot commented Jan 23, 2026

Codecov Report

❌ Patch coverage is 96.78068% with 16 lines in your changes missing coverage. Please review.
✅ Project coverage is 55.83%. Comparing base (278c069) to head (eaea343).
⚠️ Report is 83 commits behind head on main.

Files with missing lines Patch % Lines
...roviders/npu/tests/test_check_accel_permissions.py 94.73% 7 Missing ⚠️
providers/npu/bin/check_accel_permissions.py 86.95% 3 Missing ⚠️
providers/npu/bin/check_firmware_version.py 97.05% 1 Missing ⚠️
providers/npu/bin/intel_npu_gtest_resource.py 97.36% 1 Missing ⚠️
providers/npu/bin/min_kernel_version.py 95.65% 1 Missing ⚠️
providers/npu/tests/test_check_firmware_version.py 99.27% 1 Missing ⚠️
...oviders/npu/tests/test_intel_npu_gtest_resource.py 97.43% 1 Missing ⚠️
providers/npu/tests/test_min_kernel_version.py 98.50% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2198      +/-   ##
==========================================
+ Coverage   53.34%   55.83%   +2.49%     
==========================================
  Files         399      422      +23     
  Lines       42907    45417    +2510     
  Branches     7945     8194     +249     
==========================================
+ Hits        22887    25358    +2471     
- Misses      19214    19287      +73     
+ Partials      806      772      -34     
Flag Coverage Δ
checkbox-ng 71.69% <ø> (+0.28%) ⬆️
checkbox-support 70.89% <ø> (+5.59%) ⬆️
provider-base 32.17% <ø> (+2.34%) ⬆️
provider-certification-client 57.14% <ø> (ø)
provider-certification-server 57.14% <ø> (ø)
provider-genio 96.90% <ø> (ø)
provider-gpgpu 93.14% <ø> (ø)
provider-iiotg 100.00% <ø> (ø)
provider-npu 53.21% <96.78%> (?)
provider-resource 39.57% <ø> (+0.26%) ⬆️
provider-sru 97.97% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@vandah
Copy link
Contributor Author

vandah commented Jan 29, 2026

To make this case depend on whether the driver snap exists, add snap.name == "intel-npu-driver" in the requires: section of the test job; but note that this would make checkbox "silently" skip the job and put it in the "job with failed dependencies" pile if the snap is not installed even if the manifest is set to true.

I see, I have actually avoided using the dependency exactly so that it would be an explicit failure if the snap is not present but has_npu. In our testing pipeline, we install the snap with testflinger before running checkbox, but I was wondering how to make this more obvious if it gets run by someone else (and how does it work with dependencies when a device gets certified).

As a side note, I think it would be useful to have something like Ansible's failed_when which would allow the tests to fail based on the value of checkbox variables since as I understand, skipped tests have a bit different meaning than failed tests (not applicable vs. something is wrong).

Copy link
Collaborator

@fernando79513 fernando79513 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for taking so long to review it. Thanks a lot for all the effort.
I will continue the review on Monday, but I'm leaving some comments in the meantime.

Comment on lines 87 to 89
raise SystemExit(
"The loaded firmware does not match any version in the snap files."
)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment as before. If the versions mismatch, it will be interesting to log the loaded version and the version for the snap to investigate the issue.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have now updated it to add the loaded version and the versions found in the snap in the error message.

@@ -0,0 +1,5 @@
# Checkbox Provider - NPU
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, indeed. It will require to add at least the provider into the tox-checkbox.yaml and create a tox file for this provider.
Nevertheless, I discussed this morning with Max and, since these tests are fairly simple, and they are all under a new manifest entry, we could add them directly to the base provider.
I will finish the review to make sure that's the case, but that way we won't need to create a new provider.

Comment on lines 61 to 63
# This can happen with corrupted files or if 'strings' isn't installed
return None
return None
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No need to retunr None in python.
I would log here the error though, to know that it could not read any file

Suggested change
# This can happen with corrupted files or if 'strings' isn't installed
return None
return None
print("Version pattern not found in file")

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have made this raise SystemExit now.

Comment on lines 21 to 24
except (
IOError,
FileNotFoundError,
):
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nitpick, I just feel it's more readable this way.

Suggested change
except (
IOError,
FileNotFoundError,
):
except (IOError, FileNotFoundError):

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is now updated.

Comment on lines 8 to 28
try:
# Find all sequences of one or more digits in the string
numbers = re.findall(
r"\d+",
version_str,
)
if not numbers:
raise ValueError("No version numbers found in the string.")

# Convert the list of number strings to a tuple of integers
return tuple(
map(
int,
numbers,
)
)
except (
ValueError,
TypeError,
):
return None
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nitpick: This may be an autoformatting config thing, but this 20 lines could be written in just 9, with a more readable structure (and more consistent with the rest of the checkbox codebase)
Maybe it's an issue with the trailing commas after each list/touple item?
I saw you have already fixed it in some parts of the code.

Suggested change
try:
# Find all sequences of one or more digits in the string
numbers = re.findall(
r"\d+",
version_str,
)
if not numbers:
raise ValueError("No version numbers found in the string.")
# Convert the list of number strings to a tuple of integers
return tuple(
map(
int,
numbers,
)
)
except (
ValueError,
TypeError,
):
return None
try:
# Find all sequences of one or more digits in the string
numbers = re.findall(r"\d+", version_str)
if not numbers:
raise ValueError("No version numbers found in the string.")
# Convert the list of number strings to a tuple of integers
return tuple(map(int, numbers))
except (ValueError, TypeError):
return None

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm pretty sure this formatting comes from running black on it, I don't use any other autoformatter. It could be wrong comma placement though, I'll check if I can make it format it in less lines.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Considering how many of these formattings are there I wonder if I haven't given black wrong line length at some point...

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's putting trailing commas by default. I also use black, but when I remove the trailing comma on list/touples, I get a more reasonable result.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah I somehow think the commas were also added by black, but honestly can't be sure anymore. I think it stemmed somehow from the fact that black considers 80-82 characters still fine for -l 79 but then the flake8 test fails and so I've tried to put smaller numbers to black to make the lines actually max 79 characters long.

Anyways, I've reformatted as much as I saw that could be fit one less lines now 🙂

Comment on lines 13 to 22
result = subprocess.run(
[
"journalctl",
"--dmesg",
],
capture_output=True,
text=True,
check=True,
encoding="utf-8",
)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It should be okay just using subprocess.check_output(). Also I don't think "encoding=" is available for python 3.5, but I don't think we are ever going to run these tests in core16.

Suggested change
result = subprocess.run(
[
"journalctl",
"--dmesg",
],
capture_output=True,
text=True,
check=True,
encoding="utf-8",
)
result = subprocess.check_output(
["journalctl", "--dmesg"], universal_newlines=True, encoding="utf-8"
)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have updated all of the calls to use check_output now. And I don't think the encoding parameter is necessary there anyways.

Comment on lines 38 to 47
result = subprocess.run(
[
"strings",
filepath,
],
capture_output=True,
text=True,
check=True,
encoding="utf-8",
)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
result = subprocess.run(
[
"strings",
filepath,
],
capture_output=True,
text=True,
check=True,
encoding="utf-8",
)
result = subprocess.check_output(
["strings", filepath], universal_newlines=True, encoding="utf-8"
)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is now updated. 👍

Remove unreachable return

Co-authored-by: Fernando Bravo <39527354+fernando79513@users.noreply.github.com>
Copy link
Collaborator

@fernando79513 fernando79513 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I left a few more comments on the PR.
My main concern is with the "non-blocker" jobs. I am not sure under which conditions you expect them to fail, but we should not add them to the test plan if they are not expected to pass.

Apart from that, could you add some submissions of devices in the lab running the NPU tests with the new provider?

Comment on lines +44 to +45
current_version = parse_version(current_version_str)
required_version = parse_version(args.required_version)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have packaging.version available. If you import from packaging import version you can use it to parse kernel versions, in a similar way to this script.

Suggested change
current_version = parse_version(current_version_str)
required_version = parse_version(args.required_version)
current_version = version.Version(current_version_str.rsplit('-', 1)[0]))
required_version = version.Version(current_version_str.rsplit('-', 1)[0]))

It would be great to move this functionality to checkbo_ support/helpers, but I don't think we are including the packaging module there.
We could have a simple kernel version parser there thoug:

def parse_kernel_version(version_str):
    version, flavor = version_str.rsplit("-", 1)
    return version, flavor

Comment on lines 46 to 55
known_failures = (
subprocess.run(
["intel-npu-driver.known-failures"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True,
)
.stdout.strip()
.splitlines()
)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a bit simpler:

Suggested change
known_failures = (
subprocess.run(
["intel-npu-driver.known-failures"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True,
)
.stdout.strip()
.splitlines()
)
known_failures = (
subprocess.check_output(
["intel-npu-driver.known-failures"],
universal_newlines=True,
)
.strip()
.splitlines()
)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, I changed all of the subprocess.run to subprocess.check_output 👍

Comment on lines +32 to +33
help=" 'blocker' prints only tests that aren't known failures,"
"'non-blocker' prints only known failures.",
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the naming is confusing here. We don't expect any of the tests in checkbox to fail in normal circumstances, even if they are "non-blocker" tests.

If they only pass some of the time, just call them fleaky. If they only pass on certain architectures, use another resource and filter them. The "blocker"/"non-blocker" category should be reserved only for the certification process.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They are known failures, the list is already filtered by cpu generation and running kernel version. However the failures might get fixed by Intel in future driver versions and that's why it would be useful to be able to have the information about if they passed/failed on a certain version.

Copy link
Collaborator

@fernando79513 fernando79513 Feb 3, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you just want to keep this information from run to run, you could just have an informational job.
You could have a job that runs all these tests that are expected to fail and logs their results, without the actual job failing. You should make it clear in the tests this purpose.
something like:

id: tracked_known_issues
category_id: intel_npu
flags: simple
_description: Keeps track of tests with known failures that may be fixed in the future.
estimated_duration: 2s
command: failed_tests_info

)

FIRMWARE_SEARCH_DIR = Path("/var/snap/intel-npu-driver/current/intel/vpu")
VERSION_PATTERN = re.compile(r"^(\d{8}\*|[A-Z][a-z]{2}\s+\d{1,2}\s+\d{4}\*).*")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This regex pattern is quite hard to read. If we can't avoid using it (in favor of builtin python functions), at least try to explain what it's trying to achieve and maybe add an example.

Comment on lines +17 to +24
plugin: resource
id: intel_npu_gtest_resource_non_blocker
category_id: intel_npu
_summary: Produces a resource per test of Intel NPU Umd test
_description: Creates a resource for accessing tests for NPU drivers.
imports: from com.canonical.plainbox import manifest
requires: manifest.has_npu == 'True'
command: intel_npu_gtest_resource.py -m non-blocker
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As I said before. If they are known failures, either you make sure you run them only on the environments where they always pass, or you add the results as an informational job. Jobs that are included in the test plan are expected to pass if the machine has no issues.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

or you add the results as an informational job

What do you mean with this? Exclude it from the test plan and just keep it as an optional job that could be included by another test plan?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, that was my approach. But after your previous comment, I think we should not have them in any test plan. If we decide to include any of these tests for a specific platform, we can add a "platform" option in intel_npu_gtest_resource.py to filter them.

plugin: resource
_description: Creates resource for firwmare version logging support in dmesg
estimated_duration: 2s
command: min_kernel_version.py 6.8
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you are not getting any information from the resource job, apart from whether it passes or not, you could get rid of the resource altogether and just have this check as a dependency of the rest of the NPU tests:

id: kmd/char_device_permissions
...
depends: info/kernel_config
id: check_min_kernel_version
category_id: intel_npu
flags: simple
_description: Check if the firmware version is supported
estimated_duration: 2s
command: min_kernel_version.py 6.8

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you are not getting any information from the resource job, apart from whether it passes or not

Can you please clarify what you mean here? The resource job always passes but sets the resource to either supported or unsupported, not in the sense if the driver is supported or not but if getting the firmware version out of dmesg is supported. The job kmd/firmware_version is requiring that the state is supported because it inspects dmesg logs to check the loaded firmware version and that it matches the one in the tested snap. If getting the fw version from dmesg is not supported, the job kmd/firmware_version would fail but the driver is still expected to work also with kernels older than 6.8.

@fernando79513
Copy link
Collaborator

Also, I have a couple of questions.

  • How are you going to install the intel-npu-driver snap on the devices that require it for testing? For that, we could use the setup-include feature. But since it's not fully implemented (It's lacking documentation and a few key features), I think we should include it in the corresponding testflinger job.
  • Can you share the submission tar file of the checkbox run in the PR description? Or if you want, submit the checkbox job to C3, that's also OK.

@vandah
Copy link
Contributor Author

vandah commented Feb 12, 2026

Also, I have a couple of questions.

  • How are you going to install the intel-npu-driver snap on the devices that require it for testing? For that, we could use the setup-include feature. But since it's not fully implemented (It's lacking documentation and a few key features), I think we should include it in the corresponding testflinger job.

@fernando79513 Thank you for your review! The intel-npu-driver snap is a functional dependency that's needed for the NPU to be used so it is expected to be present on the tested device so installing in a testflinger job sounds perfect 👍. We do that for the intel-npu-driver snap CI already but are there any extra steps needed for certification ? I.e. do we need to provide you with the testflinger jobs and then it gets run by the cert team directly or do we just run the tests and upload to C3 ourselves?

  • Can you share the submission tar file of the checkbox run in the PR description? Or if you want, submit the checkbox job to C3, that's also OK.

Sure, I'll upload those.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants