blob: cd7324e3cb5dfc4f5d964a2ef542d8ede4649dff [file]
# Licensed under the Apache-2.0 license
# SPDX-License-Identifier: Apache-2.0
load("@pigweed//pw_kernel/tooling:rust_app.bzl", "rust_app")
load("@pigweed//pw_kernel/tooling:system_image.bzl", "system_image")
load("@pigweed//pw_kernel/tooling:target_codegen.bzl", "target_codegen")
load("@pigweed//pw_kernel/tooling:target_linker_script.bzl", "target_linker_script")
load("@pigweed//pw_kernel/tooling/panic_detector:rust_binary_no_panics_test.bzl", "rust_binary_no_panics_test")
load("@rules_rust//rust:defs.bzl", "rust_binary")
load("//target/earlgrey:defs.bzl", "TARGET_COMPATIBLE_WITH")
load("//target/earlgrey/signing/keys:defs.bzl", "FPGA_ECDSA_KEY", "SILICON_ECDSA_KEY")
load("//target/earlgrey/tooling:opentitan_runner.bzl", "opentitan_test")
rust_app(
name = "test_usb",
srcs = [
"test_usb.rs",
],
codegen_crate_name = "test_usb_codegen",
edition = "2024",
system_config = "@pigweed//pw_kernel/target:system_config_file",
tags = ["kernel"],
visibility = ["//visibility:public"],
deps = [
"//hal/blocking/usb:hal_usb",
"//protocol/usb/stack",
"//target/earlgrey/drivers:usb_driver",
"//target/earlgrey/registers:lc_ctrl",
"//target/earlgrey/registers:pinmux",
"//target/earlgrey/registers:top_earlgrey",
"//target/earlgrey/registers:usbdev",
"//target/earlgrey/util",
"//util/panic",
"@pigweed//pw_kernel/userspace",
"@pigweed//pw_log/rust:pw_log",
"@pigweed//pw_status/rust:pw_status",
"@rust_crates//:aligned",
"@rust_crates//:zerocopy",
],
)
system_image(
name = "usb",
apps = [
":test_usb",
],
kernel = ":target",
platform = "//target/earlgrey",
system_config = ":system_config",
tags = ["kernel"],
)
rust_binary_no_panics_test(
name = "no_panics",
apps = ["test_usb"],
binary = ":usb",
tags = ["no_panics"],
)
target_linker_script(
name = "linker_script",
system_config = ":system_config",
tags = ["kernel"],
template = "//target/earlgrey:linker_script_template",
)
filegroup(
name = "system_config",
srcs = ["system.json5"],
)
target_codegen(
name = "codegen",
arch = "@pigweed//pw_kernel/arch/riscv:arch_riscv",
system_config = ":system_config",
)
rust_binary(
name = "target",
srcs = [
"target.rs",
],
edition = "2024",
tags = ["kernel"],
target_compatible_with = TARGET_COMPATIBLE_WITH,
deps = [
":codegen",
":linker_script",
"//target/earlgrey:entry",
"@pigweed//pw_kernel/arch/riscv:arch_riscv",
"@pigweed//pw_kernel/kernel",
"@pigweed//pw_kernel/subsys/console:console_backend",
"@pigweed//pw_kernel/target:target_common",
"@pigweed//pw_kernel/userspace",
"@pigweed//pw_log/rust:pw_log",
],
)
opentitan_test(
name = "usb_verilator_test",
timeout = "eternal",
environment = "//target/earlgrey/env:verilator",
interface = "verilator",
tags = [
"nightly_test",
"verilator",
],
target = ":usb",
)
# TODO(cfrantz): these tests need to verify that the USB function got enumerated.
opentitan_test(
name = "usb_hyper310_test",
ecdsa_key = FPGA_ECDSA_KEY,
environment = "//target/earlgrey/env:hyper310",
interface = "hyper310",
tags = [
"hardware",
"hyper310",
],
target = ":usb",
test_cmd = "--logging=info --wait-for-firmware=false",
test_harness = ":host_usb_check",
)
opentitan_test(
name = "usb_hyper340_test",
ecdsa_key = FPGA_ECDSA_KEY,
environment = "//target/earlgrey/env:hyper340",
interface = "hyper340",
tags = [
"hardware",
"hyper340",
],
target = ":usb",
test_cmd = "--logging=info --wait-for-firmware=false",
test_harness = ":host_usb_check",
)
opentitan_test(
name = "usb_silicon_test",
ecdsa_key = SILICON_ECDSA_KEY,
environment = "//target/earlgrey/env:teacup",
interface = "teacup",
tags = [
"earlgrey_silicon",
"hardware",
],
target = ":usb",
test_cmd = "--logging=info --wait-for-firmware=false",
test_harness = ":host_usb_check",
)
rust_binary(
name = "host_usb_check",
srcs = [
"host_usb_check.rs",
],
edition = "2024",
rustc_flags = [
"-C",
"link-arg=-Wl,--allow-shlib-undefined",
],
deps = [
"//third_party/lowrisc_opentitan:opentitanlib",
"//third_party/lowrisc_opentitan:usb_test_helper",
"@ot_crate_index//:anyhow",
"@ot_crate_index//:clap",
"@ot_crate_index//:humantime",
"@ot_crate_index//:log",
],
)