tan-cli 0.7.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tan/__init__.py +0 -0
- tan/__main__.py +120 -0
- tan/cli.py +939 -0
- tan/command_table.py +265 -0
- tan/commands/__init__.py +8 -0
- tan/commands/bootstrap_cmd.py +4856 -0
- tan/commands/bootstrap_patches.py +164 -0
- tan/commands/bootstrap_toolchain_fetch.py +155 -0
- tan/commands/bootstrap_toolchain_pin.py +36 -0
- tan/commands/build/__init__.py +1 -0
- tan/commands/build/configure_inputs.py +277 -0
- tan/commands/build/execute.py +1852 -0
- tan/commands/build/host_python.py +59 -0
- tan/commands/build/link_stale.py +78 -0
- tan/commands/build/manifest.py +428 -0
- tan/commands/build/materialise.py +81 -0
- tan/commands/build/token_substitution.py +381 -0
- tan/commands/build/toolchain.py +482 -0
- tan/commands/build/user_defines_wipe.py +115 -0
- tan/commands/build/workspace_patches.py +65 -0
- tan/commands/build_cmd.py +2236 -0
- tan/commands/build_output.py +331 -0
- tan/commands/clean_cmd.py +1183 -0
- tan/commands/completion_cmd.py +786 -0
- tan/commands/debug_config_cmd.py +2425 -0
- tan/commands/diff_cmd.py +940 -0
- tan/commands/doctor_cmd.py +4767 -0
- tan/commands/examples_cmd.py +644 -0
- tan/commands/explain_cmd.py +1319 -0
- tan/commands/faultdecode_cmd.py +931 -0
- tan/commands/flash_atoc_guard.py +240 -0
- tan/commands/flash_cmd.py +5731 -0
- tan/commands/flash_mram_guard.py +150 -0
- tan/commands/flash_ram.py +578 -0
- tan/commands/flash_raw.py +583 -0
- tan/commands/generate_cmd.py +1456 -0
- tan/commands/image_cmd.py +753 -0
- tan/commands/init_cmd.py +1740 -0
- tan/commands/inspect_cmd.py +377 -0
- tan/commands/kconfig_cmd.py +734 -0
- tan/commands/model_cmd.py +1514 -0
- tan/commands/model_device_cmd.py +351 -0
- tan/commands/model_device_live.py +234 -0
- tan/commands/model_host_cmd.py +430 -0
- tan/commands/model_zoo_cmd.py +363 -0
- tan/commands/monitor_actions.py +125 -0
- tan/commands/monitor_cmd.py +626 -0
- tan/commands/monitor_session.py +505 -0
- tan/commands/new_som_cmd.py +1522 -0
- tan/commands/pinmux_cmd.py +568 -0
- tan/commands/presets_cmd.py +1123 -0
- tan/commands/probe_cmd.py +421 -0
- tan/commands/reset_cmd.py +354 -0
- tan/commands/reset_confirm.py +168 -0
- tan/commands/run_cmd.py +637 -0
- tan/commands/scaffold_cmd.py +490 -0
- tan/commands/sdk_cmd.py +1723 -0
- tan/commands/size_cmd.py +1020 -0
- tan/commands/support_bundle_cmd.py +1073 -0
- tan/commands/trace_cmd.py +341 -0
- tan/commands/validate_cmd.py +2009 -0
- tan/commands/west_forward_cmd.py +736 -0
- tan/commands/workspace_patch_check.py +296 -0
- tan/core/__init__.py +1 -0
- tan/core/alp_conf_pregen.py +100 -0
- tan/core/artifact_provenance.py +240 -0
- tan/core/atoc_guard.py +276 -0
- tan/core/atoc_guard_messages.py +232 -0
- tan/core/atoc_replacement.py +118 -0
- tan/core/atomic_write.py +178 -0
- tan/core/board_context.py +351 -0
- tan/core/board_diagnostic.py +111 -0
- tan/core/board_files.py +221 -0
- tan/core/board_validator.py +542 -0
- tan/core/board_validator_compat.py +196 -0
- tan/core/board_validator_run.py +129 -0
- tan/core/board_validator_schema.py +186 -0
- tan/core/board_validator_skew.py +46 -0
- tan/core/board_yaml_edit.py +295 -0
- tan/core/board_yaml_pos.py +118 -0
- tan/core/bootstrap.py +2572 -0
- tan/core/build_plan.py +625 -0
- tan/core/consent.py +104 -0
- tan/core/console_filter.py +245 -0
- tan/core/debug_launch.py +1803 -0
- tan/core/devicetree_lint.py +168 -0
- tan/core/dir_removal.py +229 -0
- tan/core/doctor_git.py +172 -0
- tan/core/doctor_libraries.py +253 -0
- tan/core/doctor_render.py +185 -0
- tan/core/doctor_scope.py +66 -0
- tan/core/doctor_setools.py +237 -0
- tan/core/doctor_stale.py +180 -0
- tan/core/document_guards.py +723 -0
- tan/core/dp_id.py +97 -0
- tan/core/elf_load.py +63 -0
- tan/core/error_catalog.py +171 -0
- tan/core/example_catalog.py +499 -0
- tan/core/example_facets.py +151 -0
- tan/core/faultdecode.py +521 -0
- tan/core/flash_plan.py +2501 -0
- tan/core/flow_d_report.py +381 -0
- tan/core/flow_d_uptime.py +164 -0
- tan/core/fs_confine.py +130 -0
- tan/core/global_flags.py +230 -0
- tan/core/host_python.py +210 -0
- tan/core/image_bundle.py +247 -0
- tan/core/inert.py +147 -0
- tan/core/jlink_binary.py +128 -0
- tan/core/jlink_probe.py +481 -0
- tan/core/jsonc_splice.py +404 -0
- tan/core/launch_provenance.py +257 -0
- tan/core/link_refusal.py +76 -0
- tan/core/metadata_schema.py +376 -0
- tan/core/model_check.py +227 -0
- tan/core/model_device.py +449 -0
- tan/core/model_doctor.py +198 -0
- tan/core/model_host.py +48 -0
- tan/core/model_list.py +112 -0
- tan/core/model_zoo.py +353 -0
- tan/core/module_template.py +340 -0
- tan/core/mram_link.py +87 -0
- tan/core/new_som_ospi.py +94 -0
- tan/core/os_class.py +159 -0
- tan/core/patch_paths.py +87 -0
- tan/core/pending.py +40 -0
- tan/core/plain_zephyr_plan.py +138 -0
- tan/core/plan_exec.py +373 -0
- tan/core/plan_tokens.py +600 -0
- tan/core/probe.py +155 -0
- tan/core/probe_plan.py +237 -0
- tan/core/proxy.py +168 -0
- tan/core/publish.py +31 -0
- tan/core/python_floor.py +178 -0
- tan/core/ram_run.py +694 -0
- tan/core/ram_watch.py +231 -0
- tan/core/raw_write.py +160 -0
- tan/core/reset_plan.py +56 -0
- tan/core/run.py +161 -0
- tan/core/scaffold.py +2203 -0
- tan/core/scaffold_selftest_identity.py +225 -0
- tan/core/sdk_default_registry.py +565 -0
- tan/core/sdk_discovery.py +996 -0
- tan/core/sdk_removal.py +465 -0
- tan/core/serial_actions.py +175 -0
- tan/core/serial_capture.py +185 -0
- tan/core/serial_url.py +45 -0
- tan/core/setools.py +608 -0
- tan/core/setools_scratch.py +243 -0
- tan/core/shapes.py +194 -0
- tan/core/size.py +610 -0
- tan/core/som_buildability.py +204 -0
- tan/core/som_schema_version.py +62 -0
- tan/core/subprocess_env.py +201 -0
- tan/core/sysbuild_image.py +94 -0
- tan/core/system_manifest.py +827 -0
- tan/core/text_layout.py +73 -0
- tan/core/timestamp.py +182 -0
- tan/core/tool_lookup.py +383 -0
- tan/core/toolchain_pin.py +117 -0
- tan/core/toolchain_provision.py +1224 -0
- tan/core/trusted_path.py +134 -0
- tan/core/uboot_breakin.py +154 -0
- tan/core/uri_reference.py +415 -0
- tan/core/user_defines.py +152 -0
- tan/core/venv.py +332 -0
- tan/core/west_patches.py +143 -0
- tan/core/west_workspace_refusal.py +159 -0
- tan/core/zephyr_env.py +124 -0
- tan/env.py +185 -0
- tan/envelope.py +647 -0
- tan/exit_codes.py +12 -0
- tan/lazy_typer.py +185 -0
- tan/model/__init__.py +2 -0
- tan/model/_gen_fixture.py +132 -0
- tan/model/adapters/__init__.py +116 -0
- tan/model/adapters/cpu.py +26 -0
- tan/model/adapters/deepx.py +94 -0
- tan/model/adapters/drpai.py +242 -0
- tan/model/adapters/ethos_u.py +951 -0
- tan/model/adapters/executorch.py +55 -0
- tan/model/analyze.py +694 -0
- tan/model/build.py +304 -0
- tan/model/check.py +682 -0
- tan/model/manifest.py +625 -0
- tan/model/measure.py +216 -0
- tan/model/npu_ops_validate.py +130 -0
- tan/model/package.py +125 -0
- tan/model/perf.py +635 -0
- tan/model/perf_apply.py +721 -0
- tan/model/prep.py +193 -0
- tan/model/sram_fit.py +502 -0
- tan/model/targets.py +374 -0
- tan/model/tensorio.py +287 -0
- tan/net.py +73 -0
- tan/output_format.py +213 -0
- tan/planner/__init__.py +219 -0
- tan/planner/aperture.py +202 -0
- tan/planner/buildplan.py +1092 -0
- tan/planner/camera_owner.py +192 -0
- tan/planner/cameras.py +132 -0
- tan/planner/carveout.py +755 -0
- tan/planner/cli.py +274 -0
- tan/planner/headers.py +315 -0
- tan/planner/kconfig.py +2435 -0
- tan/planner/kconfig_symbols.py +473 -0
- tan/planner/libraries.py +677 -0
- tan/planner/link_target.py +237 -0
- tan/planner/linux_ownership.py +216 -0
- tan/planner/loader.py +1525 -0
- tan/planner/manifest.py +116 -0
- tan/planner/memory.py +161 -0
- tan/planner/memregion.py +56 -0
- tan/planner/models.py +533 -0
- tan/planner/orchestrator.py +874 -0
- tan/planner/ownership.py +203 -0
- tan/planner/partition.py +1160 -0
- tan/planner/paths.py +32 -0
- tan/planner/plain_slice.py +139 -0
- tan/planner/project_emit/__init__.py +60 -0
- tan/planner/project_emit/bom_netlist.py +375 -0
- tan/planner/project_emit/dts.py +580 -0
- tan/planner/project_emit/hw_info.py +221 -0
- tan/planner/project_emit/native_sim.py +136 -0
- tan/planner/project_emit/west_libs.py +213 -0
- tan/planner/project_loader.py +264 -0
- tan/planner/sdk_capability.py +203 -0
- tan/planner/sdk_compat.py +395 -0
- tan/planner/secure.py +350 -0
- tan/planner/slugs.py +394 -0
- tan/planner/som_metadata.py +325 -0
- tan/planner/strict_loaders.py +131 -0
- tan/planner/template.py +1037 -0
- tan/planner/template_pins.py +535 -0
- tan/planner/template_rewrite.py +714 -0
- tan/planner/topology.py +208 -0
- tan/planner/validate.py +365 -0
- tan/planner/whole_device_alias.py +67 -0
- tan/planner/zephyr_board.py +3510 -0
- tan/planner_cli.py +97 -0
- tan/planner_emit.py +617 -0
- tan/planner_root.py +119 -0
- tan/soc_ref.py +58 -0
- tan/templates/__init__.py +34 -0
- tan/templates/vendored/MANIFEST.md +1862 -0
- tan/templates/vendored/diagnostics/E1M-AEN801/CMakeLists.txt +8 -0
- tan/templates/vendored/diagnostics/E1M-AEN801/README.md +112 -0
- tan/templates/vendored/diagnostics/E1M-AEN801/board.yaml +38 -0
- tan/templates/vendored/diagnostics/E1M-AEN801/boards/native_sim_native_64.conf +11 -0
- tan/templates/vendored/diagnostics/E1M-AEN801/boards/native_sim_native_64.overlay +29 -0
- tan/templates/vendored/diagnostics/E1M-AEN801/prj.conf +5 -0
- tan/templates/vendored/diagnostics/E1M-AEN801/src/main.c +266 -0
- tan/templates/vendored/diagnostics/E1M-AEN801/testcase.yaml +53 -0
- tan/templates/vendored/diagnostics/E1M-V2N101/CMakeLists.txt +8 -0
- tan/templates/vendored/diagnostics/E1M-V2N101/README.md +112 -0
- tan/templates/vendored/diagnostics/E1M-V2N101/board.yaml +38 -0
- tan/templates/vendored/diagnostics/E1M-V2N101/boards/native_sim_native_64.conf +11 -0
- tan/templates/vendored/diagnostics/E1M-V2N101/boards/native_sim_native_64.overlay +29 -0
- tan/templates/vendored/diagnostics/E1M-V2N101/prj.conf +5 -0
- tan/templates/vendored/diagnostics/E1M-V2N101/src/main.c +266 -0
- tan/templates/vendored/diagnostics/E1M-V2N101/testcase.yaml +53 -0
- tan/templates/vendored/edge-ai/E1M-AEN801/CMakeLists.txt +10 -0
- tan/templates/vendored/edge-ai/E1M-AEN801/README.md +75 -0
- tan/templates/vendored/edge-ai/E1M-AEN801/board.yaml +38 -0
- tan/templates/vendored/edge-ai/E1M-AEN801/prj.conf +8 -0
- tan/templates/vendored/edge-ai/E1M-AEN801/src/cold_chain.c +371 -0
- tan/templates/vendored/edge-ai/E1M-AEN801/src/cold_chain.h +178 -0
- tan/templates/vendored/edge-ai/E1M-AEN801/src/main.c +373 -0
- tan/templates/vendored/edge-ai/E1M-AEN801/testcase.yaml +62 -0
- tan/templates/vendored/edge-ai/E1M-V2N101/CMakeLists.txt +10 -0
- tan/templates/vendored/edge-ai/E1M-V2N101/README.md +75 -0
- tan/templates/vendored/edge-ai/E1M-V2N101/board.yaml +37 -0
- tan/templates/vendored/edge-ai/E1M-V2N101/prj.conf +8 -0
- tan/templates/vendored/edge-ai/E1M-V2N101/src/cold_chain.c +371 -0
- tan/templates/vendored/edge-ai/E1M-V2N101/src/cold_chain.h +178 -0
- tan/templates/vendored/edge-ai/E1M-V2N101/src/main.c +373 -0
- tan/templates/vendored/edge-ai/E1M-V2N101/testcase.yaml +62 -0
- tan/templates/vendored/iot/E1M-AEN801/CMakeLists.txt +14 -0
- tan/templates/vendored/iot/E1M-AEN801/README.md +103 -0
- tan/templates/vendored/iot/E1M-AEN801/board.yaml +69 -0
- tan/templates/vendored/iot/E1M-AEN801/prj.conf +15 -0
- tan/templates/vendored/iot/E1M-AEN801/src/cc3501e_bridge.c +196 -0
- tan/templates/vendored/iot/E1M-AEN801/src/cc3501e_bridge.h +173 -0
- tan/templates/vendored/iot/E1M-AEN801/src/main.c +262 -0
- tan/templates/vendored/iot/E1M-AEN801/testcase.yaml +68 -0
- tan/templates/vendored/minimal/E1M-AEN801/CMakeLists.txt +8 -0
- tan/templates/vendored/minimal/E1M-AEN801/README.md +108 -0
- tan/templates/vendored/minimal/E1M-AEN801/board.yaml +32 -0
- tan/templates/vendored/minimal/E1M-AEN801/prj.conf +8 -0
- tan/templates/vendored/minimal/E1M-AEN801/src/main.c +111 -0
- tan/templates/vendored/minimal/E1M-AEN801/testcase.yaml +49 -0
- tan/templates/vendored/minimal/E1M-V2N101/CMakeLists.txt +8 -0
- tan/templates/vendored/minimal/E1M-V2N101/README.md +108 -0
- tan/templates/vendored/minimal/E1M-V2N101/board.yaml +32 -0
- tan/templates/vendored/minimal/E1M-V2N101/prj.conf +8 -0
- tan/templates/vendored/minimal/E1M-V2N101/src/main.c +111 -0
- tan/templates/vendored/minimal/E1M-V2N101/testcase.yaml +49 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/CMakeLists.txt +8 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/README.md +120 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/board.yaml +57 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/boards/native_sim_native_64.overlay +40 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/peer/CMakeLists.txt +13 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/peer/main.c +171 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/peer/prj.conf +17 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/peer/testcase.yaml +23 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/prj.conf +22 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/src/main.c +185 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/testcase.yaml +26 -0
- tan/templates/vendored/sensor/E1M-AEN801/CMakeLists.txt +8 -0
- tan/templates/vendored/sensor/E1M-AEN801/README.md +112 -0
- tan/templates/vendored/sensor/E1M-AEN801/board.yaml +57 -0
- tan/templates/vendored/sensor/E1M-AEN801/boards/native_sim_native_64.conf +10 -0
- tan/templates/vendored/sensor/E1M-AEN801/boards/native_sim_native_64.overlay +28 -0
- tan/templates/vendored/sensor/E1M-AEN801/prj.conf +5 -0
- tan/templates/vendored/sensor/E1M-AEN801/src/main.c +186 -0
- tan/templates/vendored/sensor/E1M-AEN801/testcase.yaml +52 -0
- tan/templates/vendored/sensor/E1M-V2N101/CMakeLists.txt +8 -0
- tan/templates/vendored/sensor/E1M-V2N101/README.md +112 -0
- tan/templates/vendored/sensor/E1M-V2N101/board.yaml +57 -0
- tan/templates/vendored/sensor/E1M-V2N101/boards/native_sim_native_64.conf +10 -0
- tan/templates/vendored/sensor/E1M-V2N101/boards/native_sim_native_64.overlay +28 -0
- tan/templates/vendored/sensor/E1M-V2N101/prj.conf +5 -0
- tan/templates/vendored/sensor/E1M-V2N101/src/main.c +186 -0
- tan/templates/vendored/sensor/E1M-V2N101/testcase.yaml +52 -0
- tan/version.py +102 -0
- tan_cli-0.7.0.dist-info/METADATA +125 -0
- tan_cli-0.7.0.dist-info/RECORD +330 -0
- tan_cli-0.7.0.dist-info/WHEEL +5 -0
- tan_cli-0.7.0.dist-info/entry_points.txt +2 -0
- tan_cli-0.7.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
|
|
3
|
+
sample:
|
|
4
|
+
name: hello-world
|
|
5
|
+
description: |
|
|
6
|
+
Minimal "first program" example. Prints a periodic heartbeat
|
|
7
|
+
so customers can verify their toolchain + flash flow + log
|
|
8
|
+
console before tackling peripheral wiring. Builds on both
|
|
9
|
+
EVKs: no board-specific macros required.
|
|
10
|
+
|
|
11
|
+
tests:
|
|
12
|
+
alp_sdk.example.hello_world.e1m_x_evk:
|
|
13
|
+
extra_args: EXTRA_CONF_FILE=generated/alp.conf
|
|
14
|
+
platform_allow:
|
|
15
|
+
- native_sim
|
|
16
|
+
- native_sim/native/64
|
|
17
|
+
integration_platforms:
|
|
18
|
+
- native_sim/native/64
|
|
19
|
+
extra_configs:
|
|
20
|
+
- 'CONFIG_COMPILER_OPT="-DALP_BOARD_E1M_X_EVK"'
|
|
21
|
+
tags:
|
|
22
|
+
- alp-sdk
|
|
23
|
+
- example
|
|
24
|
+
- hello-world
|
|
25
|
+
- v2n
|
|
26
|
+
harness: console
|
|
27
|
+
harness_config:
|
|
28
|
+
type: one_line
|
|
29
|
+
regex:
|
|
30
|
+
- "\\[hello\\] done"
|
|
31
|
+
alp_sdk.example.hello_world.e1m_evk:
|
|
32
|
+
extra_args: EXTRA_CONF_FILE=generated/alp.conf
|
|
33
|
+
platform_allow:
|
|
34
|
+
- native_sim
|
|
35
|
+
- native_sim/native/64
|
|
36
|
+
integration_platforms:
|
|
37
|
+
- native_sim/native/64
|
|
38
|
+
extra_configs:
|
|
39
|
+
- 'CONFIG_COMPILER_OPT="-DALP_BOARD_E1M_EVK"'
|
|
40
|
+
tags:
|
|
41
|
+
- alp-sdk
|
|
42
|
+
- example
|
|
43
|
+
- hello-world
|
|
44
|
+
- aen
|
|
45
|
+
harness: console
|
|
46
|
+
harness_config:
|
|
47
|
+
type: one_line
|
|
48
|
+
regex:
|
|
49
|
+
- "\\[hello\\] done"
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# mproc-mailbox
|
|
2
|
+
|
|
3
|
+
Per-peripheral example for `<alp/mproc.h>`. Demonstrates the
|
|
4
|
+
M55-HP side of a Cortex-M55-HP ↔ Cortex-M55-HE mailbox roundtrip
|
|
5
|
+
on AEN: stage a payload in shared SRAM, signal the peer via the
|
|
6
|
+
hardware mailbox, wait for a reply, read the result back.
|
|
7
|
+
|
|
8
|
+
## What this shows
|
|
9
|
+
|
|
10
|
+
- Opening a shared-memory region (`alp_shmem_open`) and a
|
|
11
|
+
hardware mailbox (`alp_mbox_open`) by portable instance IDs.
|
|
12
|
+
- Resolving a raw pointer view of the shared region with
|
|
13
|
+
`alp_shmem_view()`, then staging payload bytes by `memcpy`
|
|
14
|
+
through that pointer (the surface hands back a base pointer +
|
|
15
|
+
size and trusts the caller to write through it; the region is
|
|
16
|
+
non-cacheable, so no cache maintenance is needed).
|
|
17
|
+
- Signalling the peer with `alp_mbox_send` carrying a small
|
|
18
|
+
tuple (offset + length) that points at the staged bytes.
|
|
19
|
+
- Receiving the reply through an inbound callback registered with
|
|
20
|
+
`alp_mbox_set_callback()` -- it fires on the SDK's mbox thread
|
|
21
|
+
with the peer's (offset, length) tuple, which `main()` then
|
|
22
|
+
drains.
|
|
23
|
+
- Reading the peer's echo response back from shared SRAM via the
|
|
24
|
+
same pointer view.
|
|
25
|
+
|
|
26
|
+
## Build
|
|
27
|
+
|
|
28
|
+
### native_sim (no peer core; HP-side init only)
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# writes ./generated/alp.conf, which west reads below (#866)
|
|
32
|
+
tan generate --target zephyr-conf --core m55_hp --sdk-root "$ALP_SDK_ROOT" --output generated/alp.conf
|
|
33
|
+
west build -b native_sim/native/64 . -- -DEXTRA_CONF_FILE=generated/alp.conf
|
|
34
|
+
west build -t run
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Expected output:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
[mproc] init mbox + shmem
|
|
41
|
+
[mproc] sending payload "hello-from-HP" (13 bytes)
|
|
42
|
+
[mproc] native_sim: no peer core; skipping reply
|
|
43
|
+
[mproc] done
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Real silicon (AEN dual-core, both images built from this project)
|
|
47
|
+
|
|
48
|
+
The peer-side firmware lives at
|
|
49
|
+
[`./peer/main.c`](peer/main.c) -- HE-side
|
|
50
|
+
image that waits on the same mbox, reads the staged shmem
|
|
51
|
+
payload, and writes back an echo via reverse send. (alp-sdk's own
|
|
52
|
+
upstream copy of this example lives at
|
|
53
|
+
`examples/multicore/mproc-mailbox/peer/main.c`, not part of this
|
|
54
|
+
scaffolded project.)
|
|
55
|
+
|
|
56
|
+
`board.yaml` declares both `m55_hp` (`app: ./src`) and `m55_he`
|
|
57
|
+
(`app: ./peer`) as real project cores, so one `tan build` now
|
|
58
|
+
produces both images -- no more topology-default `alp-stock-shim`
|
|
59
|
+
placeholder on the HE side:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
tan build --project .
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Each core can also be built standalone with `west build` directly
|
|
66
|
+
(e.g. while iterating on one side):
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# HP side.
|
|
70
|
+
# writes ./generated/alp.conf, which west reads below (#866)
|
|
71
|
+
tan generate --target zephyr-conf --core m55_hp --sdk-root "$ALP_SDK_ROOT" --output generated/alp.conf
|
|
72
|
+
west build -b ensemble_e8_dk/ae822fa0e5597ls0/rtss_hp . -- -DEXTRA_CONF_FILE=generated/alp.conf
|
|
73
|
+
west flash
|
|
74
|
+
|
|
75
|
+
# HE side.
|
|
76
|
+
# writes ./peer/generated/alp.conf, which west reads below (#866)
|
|
77
|
+
tan generate --target zephyr-conf --core m55_he --sdk-root "$ALP_SDK_ROOT" --output peer/generated/alp.conf
|
|
78
|
+
west build -b ensemble_e8_dk/ae822fa0e5597ls0/rtss_he ./peer -- -DEXTRA_CONF_FILE=generated/alp.conf
|
|
79
|
+
west flash
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Flash both into the matching SoC partitions (HP -> RTSS-HP slot,
|
|
83
|
+
HE -> RTSS-HE slot) and the roundtrip completes:
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
[mproc] init mbox + shmem
|
|
87
|
+
[mproc] sending payload "hello-from-HP" (13 bytes)
|
|
88
|
+
[mproc-peer] request offset=0 len=13
|
|
89
|
+
[mproc-peer] payload "hello-from-HP"
|
|
90
|
+
[mproc-peer] replied "echo: hello-from-HP" (19 bytes)
|
|
91
|
+
[mproc] HE replied via mbox callback
|
|
92
|
+
[mproc] HE replied "echo: hello-from-HP" (19 bytes)
|
|
93
|
+
[mproc] done
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Reference
|
|
97
|
+
|
|
98
|
+
- [`<alp/mproc.h>`](https://github.com/alplabai/alp-sdk/blob/v0.17.0/include/alp/mproc.h) -- mailbox + shmem
|
|
99
|
+
+ hwsem API.
|
|
100
|
+
- [`docs/v1.0-readiness.md`](https://github.com/alplabai/alp-sdk/blob/v0.17.0/docs/v1.0-readiness.md) §4 --
|
|
101
|
+
this example is one of the v1.0 reference-app flagships; both the
|
|
102
|
+
HP host and the HE peer now build from this one project, with
|
|
103
|
+
HiL verification of the round-trip still ahead.
|
|
104
|
+
|
|
105
|
+
## Before you run this: the channel is not allocated yet
|
|
106
|
+
|
|
107
|
+
`E1M-AEN801` carries no `memory_map:` in its SoM metadata, so this project's
|
|
108
|
+
shared-memory carve-out cannot be placed and resolves `blocked`:
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
name: alp_shmem0 kind: raw_shmem status: blocked
|
|
112
|
+
reason: memory_map.base is TBD for region 'mram_main' in SoM E1M-AEN801; this
|
|
113
|
+
SoM hasn't been HW-mapped yet so IPC carve-outs cannot be allocated.
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
The project still configures and builds, and `--emit ipc-contract-h` still
|
|
117
|
+
exits 0 -- it emits `ALP_IPC_*_ADDR 0x0u /* stub: blocked */`. So the mailbox
|
|
118
|
+
roundtrip this example teaches compiles and does nothing until that metadata
|
|
119
|
+
lands. This is
|
|
120
|
+
mapping work not yet done upstream, not a limit of the design.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# board.yaml -- per-app project configuration for the
|
|
2
|
+
# mproc-mailbox example (M55-HP + M55-HE, both real project cores).
|
|
3
|
+
#
|
|
4
|
+
# Targets AEN-Zephyr on both Cortex-M55 cores: `m55_hp` runs the
|
|
5
|
+
# host side (`./src`), `m55_he` runs the peer (`./peer`) that echoes
|
|
6
|
+
# the mailbox payload back. The SoM's second core no longer ships
|
|
7
|
+
# the topology-default `alp-stock-shim` here -- `tan build` builds
|
|
8
|
+
# both slices from this one project, matching the `ipc:` block's
|
|
9
|
+
# `endpoints: [m55_hp, m55_he]` below.
|
|
10
|
+
som:
|
|
11
|
+
sku: E1M-AEN801
|
|
12
|
+
|
|
13
|
+
preset: e1m-evk
|
|
14
|
+
cores:
|
|
15
|
+
m55_hp:
|
|
16
|
+
app: ./src
|
|
17
|
+
m55_he:
|
|
18
|
+
app: ./peer
|
|
19
|
+
|
|
20
|
+
# Cross-core shared SRAM + hardware mailbox used to signal the peer.
|
|
21
|
+
# `raw_shmem`, not `rpmsg`: this is the low-level <alp/mproc.h>
|
|
22
|
+
# shmem+mailbox primitive, so the carve-out stays at its non-cacheable
|
|
23
|
+
# default (kconfig.py's `_emit_cross_core_shmem_cache` reads this
|
|
24
|
+
# block and emits CONFIG_DCACHE=n for both m55_hp and m55_he
|
|
25
|
+
# accordingly -- see the comment in prj.conf / peer/prj.conf for the
|
|
26
|
+
# hardware reasoning). `name: alp_shmem0` matches the DT-alias name
|
|
27
|
+
# alp-sdk's `src/backends/mproc/zephyr_drv.c` (a different `src/`
|
|
28
|
+
# than this project's own -- not part of this scaffolded project)
|
|
29
|
+
# and both main.c's hardcode -- it is NOT a free-form label like an
|
|
30
|
+
# rpmsg channel name.
|
|
31
|
+
#
|
|
32
|
+
# #1069 gave E1M-AEN801 a real `memory_map:` (alp-sdk's
|
|
33
|
+
# metadata/e1m_modules/E1M-AEN801.yaml, not part of this scaffolded
|
|
34
|
+
# project), but this carve-out still resolves `status: blocked`
|
|
35
|
+
# (`--emit system-manifest`): the five fine-grained regions
|
|
36
|
+
# (mcuboot/he_slot0/hp_slot0/reserved/storage) are MRAM, not RAM, and are
|
|
37
|
+
# marked `carveout: false` so the allocator can't silently place this
|
|
38
|
+
# raw_shmem ring inside flash-class memory; `mram_main` (the only other
|
|
39
|
+
# region accessible from both m55_hp and m55_he) is ALSO flash-class --
|
|
40
|
+
# its extent equals the SoC's declared App MRAM aperture exactly (the
|
|
41
|
+
# whole-device alias; `base` resolved to 0x80000000 in #2053), not safe
|
|
42
|
+
# as an IPC carve-out target either. The carve-out being blocked does
|
|
43
|
+
# not affect this example:
|
|
44
|
+
# the generated `<alp/system_ipc.h>` / DTS reservation it would drive
|
|
45
|
+
# aren't consumed here (main.c / peer/main.c open "alp_shmem0" by its DT
|
|
46
|
+
# alias, wired by the board overlay directly, not by the orchestrator's
|
|
47
|
+
# resolved address) -- only the `_emit_cross_core_shmem_cache` Kconfig path
|
|
48
|
+
# this PR adds reads this block, and that path doesn't need resolution to
|
|
49
|
+
# fire.
|
|
50
|
+
ipc:
|
|
51
|
+
- kind: raw_shmem
|
|
52
|
+
endpoints: [m55_hp, m55_he]
|
|
53
|
+
carve_out_kb: 4
|
|
54
|
+
name: alp_shmem0
|
|
55
|
+
|
|
56
|
+
diagnostics:
|
|
57
|
+
log_level: info
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026 Alp Lab AB
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*
|
|
5
|
+
* Overlay declaring alp-shmem0 for the mproc-mailbox example so the
|
|
6
|
+
* HP-side native_sim build resolves "alp_shmem0" through the new
|
|
7
|
+
* DT-anchored lookup path (commit 2e9deec, v0.7). native_sim never
|
|
8
|
+
* dereferences the address; alp_shmem_view just reports the
|
|
9
|
+
* DT-anchored base + size verbatim and the example's memcpy is
|
|
10
|
+
* skipped on the !CONFIG_BOARD_NATIVE_SIM branch.
|
|
11
|
+
*
|
|
12
|
+
* On real AEN silicon the alp-shmem0 alias must point at a
|
|
13
|
+
* reserved-memory carve-out shared between the M55-HP and M55-HE
|
|
14
|
+
* images. The orchestrator (alp-sdk's scripts/alp_orchestrate.py,
|
|
15
|
+
* not part of this scaffolded project) emits the
|
|
16
|
+
* per-core overlay with the matching alias when the board.yaml v2
|
|
17
|
+
* declares an ipc[] block; until that ships customers can declare
|
|
18
|
+
* the alias by hand in a board overlay following this same shape:
|
|
19
|
+
*
|
|
20
|
+
* / {
|
|
21
|
+
* alp_shmem0_node: shmem@<carve_out_addr> {
|
|
22
|
+
* compatible = "mmio-sram";
|
|
23
|
+
* reg = <0x<addr> 0x<size>>;
|
|
24
|
+
* status = "okay";
|
|
25
|
+
* };
|
|
26
|
+
* aliases { alp-shmem0 = &alp_shmem0_node; };
|
|
27
|
+
* };
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
/ {
|
|
31
|
+
alp_shmem0_node: shmem@70000000 {
|
|
32
|
+
compatible = "mmio-sram";
|
|
33
|
+
reg = <0x70000000 0x1000>;
|
|
34
|
+
status = "okay";
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
aliases {
|
|
38
|
+
alp-shmem0 = &alp_shmem0_node;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
#
|
|
3
|
+
# HE-side peer image for the mproc-mailbox flagship. `board.yaml`
|
|
4
|
+
# declares this as the `m55_he` slice's `app:`, so `tan build`
|
|
5
|
+
# builds it alongside `../src` (m55_hp) as a real project core, not
|
|
6
|
+
# the topology-default `alp-stock-shim`.
|
|
7
|
+
|
|
8
|
+
cmake_minimum_required(VERSION 3.20)
|
|
9
|
+
|
|
10
|
+
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
|
|
11
|
+
project(mproc_mailbox_peer LANGUAGES C)
|
|
12
|
+
|
|
13
|
+
target_sources(app PRIVATE main.c)
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026 Alp Lab AB
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*
|
|
5
|
+
* mproc-mailbox -- M55-HE side of the dual-core mailbox roundtrip.
|
|
6
|
+
* Sister to ../src/main.c (the HP-side).
|
|
7
|
+
*
|
|
8
|
+
* The pattern this peer shows
|
|
9
|
+
* ===========================
|
|
10
|
+
*
|
|
11
|
+
* The HP-side application code stages a payload in shared memory
|
|
12
|
+
* and signals this peer through a hardware mailbox. This peer:
|
|
13
|
+
*
|
|
14
|
+
* 1. Opens the same mbox + shmem region.
|
|
15
|
+
* 2. Registers an mbox callback that fires on each HP send.
|
|
16
|
+
* 3. In the callback: reads the (offset, length) tuple, pulls
|
|
17
|
+
* the payload out of shared memory, builds an echo
|
|
18
|
+
* response, writes it back at a different shmem offset,
|
|
19
|
+
* and signals the HP via mbox.
|
|
20
|
+
*
|
|
21
|
+
* The peer runs forever in a low-power idle loop -- the mbox
|
|
22
|
+
* callback fires from the SDK's mailbox thread.
|
|
23
|
+
*
|
|
24
|
+
* Build status (v1.0 prep)
|
|
25
|
+
* ========================
|
|
26
|
+
*
|
|
27
|
+
* Compiles standalone today, and `board.yaml` declaring both
|
|
28
|
+
* `m55_hp` (`app: ./src`) and `m55_he` (`app: ./peer`) as real
|
|
29
|
+
* project cores means one `tan build` already produces both images
|
|
30
|
+
* through the orchestrator's existing multi-slice path -- no
|
|
31
|
+
* sysbuild involved. Each core can also be built standalone with
|
|
32
|
+
* `west build` and flashed to its own partition.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
#include <stdio.h>
|
|
36
|
+
#include <string.h>
|
|
37
|
+
|
|
38
|
+
#include <zephyr/kernel.h>
|
|
39
|
+
|
|
40
|
+
#include "alp/mproc.h"
|
|
41
|
+
#include "alp/peripheral.h"
|
|
42
|
+
|
|
43
|
+
/* Region name resolved against the alp-shmemN DT aliases. Must
|
|
44
|
+
* match the HP side; both peers see the same physical bytes via
|
|
45
|
+
* the alp-shmem0 alias. */
|
|
46
|
+
#define SHMEM_REGION_NAME "alp_shmem0"
|
|
47
|
+
#define SHMEM_REGION_SIZE 512u
|
|
48
|
+
#define MBOX_CHANNEL 0u
|
|
49
|
+
#define RESPONSE_OFFSET 256u /* must match HP's expectation */
|
|
50
|
+
#define ECHO_PREFIX "echo: "
|
|
51
|
+
#define MAX_PAYLOAD 128u
|
|
52
|
+
|
|
53
|
+
static struct {
|
|
54
|
+
alp_shmem_t *shmem;
|
|
55
|
+
alp_mbox_t *mbox;
|
|
56
|
+
void *shmem_base;
|
|
57
|
+
size_t shmem_size;
|
|
58
|
+
} g_peer;
|
|
59
|
+
|
|
60
|
+
/* Mailbox inbound-message callback. Fires when the HP signals
|
|
61
|
+
* via the shared mbox channel. Pulls the request out of
|
|
62
|
+
* shared memory, builds the echo response, stages it back,
|
|
63
|
+
* signals via mbox. Runs on the SDK's mailbox thread. */
|
|
64
|
+
static void mbox_inbound(uint32_t channel, const void *data, size_t len, void *user)
|
|
65
|
+
{
|
|
66
|
+
(void)channel;
|
|
67
|
+
(void)user;
|
|
68
|
+
if (len < 8u || g_peer.shmem_base == NULL) {
|
|
69
|
+
printf("[mproc-peer] undersized tuple (%zu bytes) -- dropping\n", len);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const uint8_t *b = data;
|
|
74
|
+
const size_t offset =
|
|
75
|
+
(size_t)b[0] | ((size_t)b[1] << 8) | ((size_t)b[2] << 16) | ((size_t)b[3] << 24);
|
|
76
|
+
size_t req_len =
|
|
77
|
+
(size_t)b[4] | ((size_t)b[5] << 8) | ((size_t)b[6] << 16) | ((size_t)b[7] << 24);
|
|
78
|
+
if (req_len > MAX_PAYLOAD) req_len = MAX_PAYLOAD;
|
|
79
|
+
if (offset + req_len > g_peer.shmem_size) return;
|
|
80
|
+
|
|
81
|
+
printf("[mproc-peer] request offset=%u len=%u\n", (unsigned)offset, (unsigned)req_len);
|
|
82
|
+
|
|
83
|
+
/* Pull the request bytes out of shared memory. The region
|
|
84
|
+
* is non-cacheable, so no cache invalidate is needed before
|
|
85
|
+
* the read. */
|
|
86
|
+
char request_buf[MAX_PAYLOAD + 1] = { 0 };
|
|
87
|
+
memcpy(request_buf, (const uint8_t *)g_peer.shmem_base + offset, req_len);
|
|
88
|
+
request_buf[req_len] = '\0';
|
|
89
|
+
printf("[mproc-peer] payload \"%s\"\n", request_buf);
|
|
90
|
+
|
|
91
|
+
/* Build the echo response. Truncate if prefix + payload
|
|
92
|
+
* would exceed MAX_PAYLOAD; the protocol is a demo so
|
|
93
|
+
* silent-truncate is acceptable. */
|
|
94
|
+
char response_buf[MAX_PAYLOAD + sizeof(ECHO_PREFIX)] = { 0 };
|
|
95
|
+
const size_t prefix_len = sizeof(ECHO_PREFIX) - 1u;
|
|
96
|
+
memcpy(response_buf, ECHO_PREFIX, prefix_len);
|
|
97
|
+
size_t response_len = prefix_len + req_len;
|
|
98
|
+
if (response_len > MAX_PAYLOAD) response_len = MAX_PAYLOAD;
|
|
99
|
+
memcpy(response_buf + prefix_len, request_buf, response_len - prefix_len);
|
|
100
|
+
|
|
101
|
+
/* Stage the response at RESPONSE_OFFSET. HP's mbox callback
|
|
102
|
+
* reads back via this offset. */
|
|
103
|
+
memcpy((uint8_t *)g_peer.shmem_base + RESPONSE_OFFSET, response_buf, response_len);
|
|
104
|
+
|
|
105
|
+
/* Signal the HP -- (offset, length) tuple pointing at the
|
|
106
|
+
* staged response. */
|
|
107
|
+
const uint8_t reply_tuple[8] = {
|
|
108
|
+
(uint8_t)(RESPONSE_OFFSET & 0xFFu),
|
|
109
|
+
(uint8_t)((RESPONSE_OFFSET >> 8) & 0xFFu),
|
|
110
|
+
(uint8_t)((RESPONSE_OFFSET >> 16) & 0xFFu),
|
|
111
|
+
(uint8_t)((RESPONSE_OFFSET >> 24) & 0xFFu),
|
|
112
|
+
(uint8_t)(response_len & 0xFFu),
|
|
113
|
+
(uint8_t)((response_len >> 8) & 0xFFu),
|
|
114
|
+
(uint8_t)((response_len >> 16) & 0xFFu),
|
|
115
|
+
(uint8_t)((response_len >> 24) & 0xFFu),
|
|
116
|
+
};
|
|
117
|
+
if (alp_mbox_send(g_peer.mbox, reply_tuple, sizeof(reply_tuple), 100u) != ALP_OK) {
|
|
118
|
+
printf("[mproc-peer] mbox send failed\n");
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
printf("[mproc-peer] replied \"%s\" (%u bytes)\n", response_buf, (unsigned)response_len);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
int main(void)
|
|
125
|
+
{
|
|
126
|
+
printf("[mproc-peer] HE side coming up\n");
|
|
127
|
+
|
|
128
|
+
const alp_shmem_config_t shmem_cfg = {
|
|
129
|
+
.name = SHMEM_REGION_NAME,
|
|
130
|
+
.size = SHMEM_REGION_SIZE,
|
|
131
|
+
};
|
|
132
|
+
g_peer.shmem = alp_shmem_open(&shmem_cfg);
|
|
133
|
+
|
|
134
|
+
const alp_mbox_config_t mbox_cfg = {
|
|
135
|
+
.channel = MBOX_CHANNEL,
|
|
136
|
+
.peer = ALP_CORE_M55_HP,
|
|
137
|
+
};
|
|
138
|
+
g_peer.mbox = alp_mbox_open(&mbox_cfg);
|
|
139
|
+
|
|
140
|
+
if (g_peer.shmem == NULL || g_peer.mbox == NULL) {
|
|
141
|
+
printf("[mproc-peer] open failed: last_err=%d\n", (int)alp_last_error());
|
|
142
|
+
return 1;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (alp_shmem_view(g_peer.shmem, &g_peer.shmem_base, &g_peer.shmem_size) != ALP_OK) {
|
|
146
|
+
printf("[mproc-peer] shmem view failed\n");
|
|
147
|
+
return 1;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if (alp_mbox_set_callback(g_peer.mbox, mbox_inbound, NULL) != ALP_OK) {
|
|
151
|
+
printf("[mproc-peer] set_callback failed\n");
|
|
152
|
+
return 1;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
printf("[mproc-peer] waiting on mbox channel=%u shmem=%zu bytes\n",
|
|
156
|
+
(unsigned)MBOX_CHANNEL,
|
|
157
|
+
g_peer.shmem_size);
|
|
158
|
+
|
|
159
|
+
/* Steady-state idle. The mbox callback fires from the SDK
|
|
160
|
+
* thread on every HP send; main just keeps the system
|
|
161
|
+
* alive. k_sleep instead of busy-wait so the core can
|
|
162
|
+
* enter WFI between events. */
|
|
163
|
+
for (;;) {
|
|
164
|
+
k_sleep(K_FOREVER);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/* Unreachable but kept for documentation. */
|
|
168
|
+
alp_mbox_close(g_peer.mbox);
|
|
169
|
+
alp_shmem_close(g_peer.shmem);
|
|
170
|
+
return 0;
|
|
171
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
#
|
|
3
|
+
# Peer image stays small -- no IoT stack, no inference runtime,
|
|
4
|
+
# just the mproc framing + a printk console. Sysbuild will layer
|
|
5
|
+
# its own overlay once the v0.4 dual-image flow lands.
|
|
6
|
+
|
|
7
|
+
CONFIG_PRINTK=y
|
|
8
|
+
CONFIG_ALP_SDK=y
|
|
9
|
+
|
|
10
|
+
# Shared global-SRAM0 mailbox+shmem region is read/written by BOTH M55 cores
|
|
11
|
+
# (this peer and ../src, its HP-side sibling), each with its own D-cache ->
|
|
12
|
+
# the region must be coherent. Disable the D-cache (the AEN SRAM-coherency
|
|
13
|
+
# precedent: the NPU apps do the same) so cross-core reads see the other
|
|
14
|
+
# core's writes without explicit clean/invalidate. (A cache-on variant would
|
|
15
|
+
# sys_cache_data_flush_range on the writer + invd_range on the reader, on
|
|
16
|
+
# silicon where the D-cache can be enabled at all.)
|
|
17
|
+
CONFIG_DCACHE=n
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
#
|
|
3
|
+
# HE-side peer slice of mproc-mailbox. `board.yaml` (one level up)
|
|
4
|
+
# wires this directory as the `m55_he` core's `app:`, so Twister
|
|
5
|
+
# discovers this as its own app root, separate from the HP-side
|
|
6
|
+
# `../testcase.yaml` (rooted at the example's `./src`). No
|
|
7
|
+
# native_sim overlay exists under this directory -- the `alp_shmem0`
|
|
8
|
+
# DT alias is provided only by `../boards/native_sim_native_64.overlay`,
|
|
9
|
+
# which applies to the HP-side (`../src`) build, not this one -- so
|
|
10
|
+
# this testcase carries AEN-board coverage only.
|
|
11
|
+
|
|
12
|
+
sample:
|
|
13
|
+
name: mproc-mailbox-peer
|
|
14
|
+
description: |
|
|
15
|
+
M55-HE side of the mproc-mailbox roundtrip: waits on the same
|
|
16
|
+
mbox + shmem region as ../src (m55_hp), echoes the payload back.
|
|
17
|
+
|
|
18
|
+
tests:
|
|
19
|
+
alp_sdk.examples.mproc_mailbox.peer.aen:
|
|
20
|
+
platform_allow:
|
|
21
|
+
- alp_e1m_aen801_m55_he/ae822fa0e5597ls0/rtss_he
|
|
22
|
+
extra_args: EXTRA_CONF_FILE=generated/alp.conf CONFIG_ALP_SDK_MPROC=y
|
|
23
|
+
build_only: true # roundtrip verification is HiL (dual-ATOC bench flash), not a CI run.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
#
|
|
3
|
+
# Otherwise empty by design. The build's effective Kconfig is
|
|
4
|
+
# build/generated/alp.conf -- emitted from this app's board.yaml
|
|
5
|
+
# by `tan build` and layered over this file via
|
|
6
|
+
# EXTRA_CONF_FILE (see README.md: `tan generate --target zephyr-conf`). board.yaml's `ipc:` block (kind:
|
|
7
|
+
# raw_shmem, endpoints: [m55_hp, m55_he]) now makes kconfig.py's
|
|
8
|
+
# `_emit_cross_core_shmem_cache` emit CONFIG_DCACHE=n into the generated
|
|
9
|
+
# conf too (PR #1080 follow-up -- this used to be the Ethos-U inference
|
|
10
|
+
# branch's job alone). The line below is kept anyway: it predates the
|
|
11
|
+
# generator support, is bench-proven, and removing a hand-written line in
|
|
12
|
+
# the same change that adds the generator path would make it impossible
|
|
13
|
+
# to tell which one was doing the work if something regressed. Dropping
|
|
14
|
+
# it is a clean follow-up once the generator path is trusted.
|
|
15
|
+
|
|
16
|
+
# Shared global-SRAM0 mailbox is read/written by BOTH M55 cores, each with its
|
|
17
|
+
# own D-cache -> the region must be coherent. Disable the D-cache (the AEN
|
|
18
|
+
# SRAM-coherency precedent: the NPU apps do the same) so cross-core reads see
|
|
19
|
+
# the other core's writes without explicit clean/invalidate. (A cache-on variant
|
|
20
|
+
# would sys_cache_data_flush_range on the writer + invd_range on the reader, on
|
|
21
|
+
# silicon where the D-cache can be enabled at all.)
|
|
22
|
+
CONFIG_DCACHE=n
|