diff --git a/.checkpatch.conf b/.checkpatch.conf
index accee08b149..a6d9a31f11d 100644
--- a/.checkpatch.conf
+++ b/.checkpatch.conf
@@ -5,7 +5,6 @@
--min-conf-desc-length=1
--typedefsfile=scripts/checkpatch/typedefsfile
---ignore BRACES
--ignore PRINTK_WITHOUT_KERN_LEVEL
--ignore SPLIT_STRING
--ignore VOLATILE
diff --git a/.clang-format b/.clang-format
index 2b438bf57cc..940f22994b8 100644
--- a/.clang-format
+++ b/.clang-format
@@ -46,6 +46,7 @@ ForEachMacros:
- 'SYS_DLIST_FOR_EACH_CONTAINER_SAFE'
- 'SYS_DLIST_FOR_EACH_NODE'
- 'SYS_DLIST_FOR_EACH_NODE_SAFE'
+ - 'SYS_SEM_LOCK'
- 'SYS_SFLIST_FOR_EACH_CONTAINER'
- 'SYS_SFLIST_FOR_EACH_CONTAINER_SAFE'
- 'SYS_SFLIST_FOR_EACH_NODE'
@@ -79,6 +80,8 @@ ForEachMacros:
- 'HTTP_SERVER_CONTENT_TYPE_FOREACH'
- 'HTTP_SERVICE_FOREACH'
- 'HTTP_SERVICE_FOREACH_RESOURCE'
+ - 'I3C_BUS_FOR_EACH_I3CDEV'
+ - 'I3C_BUS_FOR_EACH_I2CDEV'
IfMacros:
- 'CHECKIF'
# Disabled for now, see bug https://github.com/zephyrproject-rtos/zephyr/issues/48520
@@ -101,5 +104,11 @@ SpaceBeforeParens: ControlStatementsExceptControlMacros
SortIncludes: Never
UseTab: ForContinuationAndIndentation
WhitespaceSensitiveMacros:
+ - COND_CODE_0
+ - COND_CODE_1
+ - IF_DISABLED
+ - IF_ENABLED
+ - LISTIFY
- STRINGIFY
- Z_STRINGIFY
+ - DT_FOREACH_PROP_ELEM_SEP
diff --git a/.github/SECURITY.md b/.github/SECURITY.md
index 42354f627cf..ba2dedb99e4 100644
--- a/.github/SECURITY.md
+++ b/.github/SECURITY.md
@@ -8,11 +8,11 @@ updates:
- The most recent release, and the release prior to that.
- Active LTS releases.
-At this time, with the latest release of v3.6, the supported
+At this time, with the latest release of v4.0, the supported
versions are:
- - v3.7: Current LTS
- - v3.6: Prior release
+ - v4.0: Current release
+ - v3.7: Prior release and Current LTS
- v2.7: Prior LTS
## Reporting process
diff --git a/.github/workflows/assigner.yml b/.github/workflows/assigner.yml
index 6e4e01c8ea1..be3696c4d30 100644
--- a/.github/workflows/assigner.yml
+++ b/.github/workflows/assigner.yml
@@ -24,8 +24,7 @@ jobs:
steps:
- name: Install Python dependencies
run: |
- sudo pip3 install -U setuptools wheel pip
- pip3 install -U PyGithub>=1.55 west
+ pip install -U PyGithub>=1.55 west
- name: Check out source code
uses: actions/checkout@v4
diff --git a/.github/workflows/backport_issue_check.yml b/.github/workflows/backport_issue_check.yml
index ecaaf352827..2d2c4fda6a8 100644
--- a/.github/workflows/backport_issue_check.yml
+++ b/.github/workflows/backport_issue_check.yml
@@ -25,8 +25,7 @@ jobs:
- name: Install Python dependencies
run: |
- sudo pip3 install -U setuptools wheel pip
- pip3 install -U pygithub
+ pip install -U pygithub
- name: Run backport issue checker
env:
diff --git a/.github/workflows/bsim-tests.yaml b/.github/workflows/bsim-tests.yaml
index 0c50ca5d6fd..66d47c68a1c 100644
--- a/.github/workflows/bsim-tests.yaml
+++ b/.github/workflows/bsim-tests.yaml
@@ -12,12 +12,14 @@ on:
- "dts/*/nordic/**"
- "tests/bluetooth/common/testlib/**"
- "samples/bluetooth/**"
- - "boards/posix/**"
- - "soc/posix/**"
+ - "boards/native/**"
+ - "soc/native/**"
- "arch/posix/**"
- "include/zephyr/arch/posix/**"
- "scripts/native_simulator/**"
- "samples/net/sockets/echo_*/**"
+ - "modules/hal_nordic/**"
+ - "modules/mbedtls/**"
- "modules/openthread/**"
- "subsys/net/l2/openthread/**"
- "include/zephyr/net/openthread.h"
@@ -36,7 +38,7 @@ jobs:
runs-on:
group: zephyr-runner-v2-linux-x64-4xlarge
container:
- image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.26.14.20240823
+ image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.27.4.20241026
options: '--entrypoint /bin/bash'
env:
ZEPHYR_TOOLCHAIN_VARIANT: zephyr
@@ -76,7 +78,9 @@ jobs:
git config --global user.email "bot@zephyrproject.org"
git config --global user.name "Zephyr Bot"
rm -fr ".git/rebase-apply"
+ rm -fr ".git/rebase-merge"
git rebase origin/${BASE_REF}
+ git clean -f -d
git log --pretty=oneline | head -n 10
west init -l . || true
west config manifest.group-filter -- +ci
@@ -94,14 +98,16 @@ jobs:
.github/workflows/bsim-tests.yaml
.github/workflows/bsim-tests-publish.yaml
west.yml
- boards/posix/
- soc/posix/
+ boards/native/
+ soc/native/
arch/posix/
include/zephyr/arch/posix/
scripts/native_simulator/
tests/bsim/*
boards/nordic/nrf5*/*dt*
dts/*/nordic/
+ modules/mbedtls/**
+ modules/hal_nordic/**
- name: Check if Bluethooth files changed
uses: tj-actions/changed-files@v45
@@ -166,7 +172,7 @@ jobs:
- name: Merge Test Results
run: |
- pip3 install junitparser junit2html
+ pip install junitparser junit2html
junitparser merge --glob "./bsim_*/*bsim_results.*.xml" "./twister-out/twister.xml" junit.xml
junit2html junit.xml junit.html
diff --git a/.github/workflows/bug_snapshot.yaml b/.github/workflows/bug_snapshot.yaml
index b4f9022bf28..f10dc718b6e 100644
--- a/.github/workflows/bug_snapshot.yaml
+++ b/.github/workflows/bug_snapshot.yaml
@@ -25,8 +25,7 @@ jobs:
- name: Install Python dependencies
run: |
- sudo pip3 install -U setuptools wheel pip
- pip3 install -U pygithub
+ pip install -U pygithub
- name: Snapshot bugs
env:
diff --git a/.github/workflows/clang.yaml b/.github/workflows/clang.yaml
index e88141a9e23..11d249cd937 100644
--- a/.github/workflows/clang.yaml
+++ b/.github/workflows/clang.yaml
@@ -12,7 +12,7 @@ jobs:
runs-on:
group: zephyr-runner-v2-linux-x64-4xlarge
container:
- image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.26.14.20240823
+ image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.27.4.20241026
options: '--entrypoint /bin/bash'
strategy:
fail-fast: false
@@ -61,7 +61,9 @@ jobs:
git config --global user.email "bot@zephyrproject.org"
git config --global user.name "Zephyr Bot"
rm -fr ".git/rebase-apply"
+ rm -fr ".git/rebase-merge"
git rebase origin/${BASE_REF}
+ git clean -f -d
git log --pretty=oneline | head -n 10
west init -l . || true
west config --global update.narrow true
@@ -106,13 +108,13 @@ jobs:
export ZEPHYR_TOOLCHAIN_VARIANT=llvm
# check if we need to run a full twister or not based on files changed
- python3 ./scripts/ci/test_plan.py --platform ${{ matrix.platform }} -c origin/${BASE_REF}..
+ python3 ./scripts/ci/test_plan.py --no-detailed-test-id --platform ${{ matrix.platform }} -c origin/${BASE_REF}..
# We can limit scope to just what has changed
if [ -s testplan.json ]; then
echo "report_needed=1" >> $GITHUB_OUTPUT
# Full twister but with options based on changes
- ./scripts/twister --force-color --inline-logs -M -N -v --load-tests testplan.json --retry-failed 2
+ ./scripts/twister --no-detailed-test-id --force-color --inline-logs -M -N -v --load-tests testplan.json --retry-failed 2
else
# if nothing is run, skip reporting step
echo "report_needed=0" >> $GITHUB_OUTPUT
@@ -142,7 +144,7 @@ jobs:
path: artifacts
- name: Merge Test Results
run: |
- pip3 install junitparser junit2html
+ pip install junitparser junit2html
junitparser merge artifacts/*/twister.xml junit.xml
junit2html junit.xml junit-clang.html
diff --git a/.github/workflows/codecov.yaml b/.github/workflows/codecov.yaml
index aa81056cdfd..d03ced6e474 100644
--- a/.github/workflows/codecov.yaml
+++ b/.github/workflows/codecov.yaml
@@ -14,7 +14,7 @@ jobs:
runs-on:
group: zephyr-runner-v2-linux-x64-4xlarge
container:
- image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.26.14.20240823
+ image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.27.4.20241026
options: '--entrypoint /bin/bash'
strategy:
fail-fast: false
@@ -34,7 +34,7 @@ jobs:
CCACHE_REMOTE_STORAGE: "redis://cache-*.keydb-cache.svc.cluster.local|shards=1,2,3"
CCACHE_REMOTE_ONLY: "true"
# `--specs` is ignored because ccache is unable to resovle the toolchain specs file path.
- CCACHE_IGNOREOPTIONS: '--specs=*'
+ CCACHE_IGNOREOPTIONS: '-specs=* --specs=*'
steps:
- name: Apply container owner mismatch workaround
run: |
@@ -101,7 +101,7 @@ jobs:
export ZEPHYR_BASE=${PWD}
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
mkdir -p coverage/reports
- pip3 install gcovr==6.0
+ pip install gcovr==6.0
./scripts/twister -E ${{matrix.normalized}}-testplan.json
ls -la
./scripts/twister \
@@ -182,7 +182,7 @@ jobs:
- name: Merge coverage files
run: |
pushd ./coverage/reports
- pip3 install gcovr==6.0
+ pip install gcovr==6.0
gcovr ${{ steps.get-coverage-files.outputs.mergefiles }} --merge-mode-functions=separate --json merged.json
gcovr ${{ steps.get-coverage-files.outputs.mergefiles }} --merge-mode-functions=separate --cobertura merged.xml
popd
diff --git a/.github/workflows/coding_guidelines.yml b/.github/workflows/coding_guidelines.yml
index 1bc6ee2e666..9ab2bc974b1 100644
--- a/.github/workflows/coding_guidelines.yml
+++ b/.github/workflows/coding_guidelines.yml
@@ -21,9 +21,8 @@ jobs:
- name: Install python dependencies
run: |
- pip3 install unidiff
- pip3 install wheel
- pip3 install sh
+ pip install unidiff
+ pip install sh
- name: Install Packages
run: |
@@ -40,7 +39,10 @@ jobs:
git config --global user.email "actions@zephyrproject.org"
git config --global user.name "Github Actions"
git remote -v
+ rm -fr ".git/rebase-apply"
+ rm -fr ".git/rebase-merge"
git rebase origin/${BASE_REF}
+ git clean -f -d
source zephyr-env.sh
# debug
ls -la
diff --git a/.github/workflows/compliance.yml b/.github/workflows/compliance.yml
index c8ffedcb77b..56927365550 100644
--- a/.github/workflows/compliance.yml
+++ b/.github/workflows/compliance.yml
@@ -23,6 +23,23 @@ jobs:
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
+ - name: Rebase onto the target branch
+ env:
+ BASE_REF: ${{ github.base_ref }}
+ run: |
+ git config --global user.email "you@example.com"
+ git config --global user.name "Your Name"
+ git remote -v
+ # Ensure there's no merge commits in the PR
+ #[[ "$(git rev-list --merges --count origin/${BASE_REF}..)" == "0" ]] || \
+ #(echo "::error ::Merge commits not allowed, rebase instead";false)
+ rm -fr ".git/rebase-apply"
+ rm -fr ".git/rebase-merge"
+ git rebase origin/${BASE_REF}
+ git clean -f -d
+ # debug
+ git log --pretty=oneline | head -n 10
+
- name: Set up Python
uses: actions/setup-python@v5
with:
@@ -36,24 +53,11 @@ jobs:
- name: Install python dependencies
run: |
- pip3 install setuptools
- pip3 install wheel
- pip3 install python-magic lxml junitparser gitlint pylint pykwalify yamllint clang-format unidiff sphinx-lint
- pip3 install west
+ pip install -r scripts/requirements-compliance.txt
+ pip install west
- name: west setup
- env:
- BASE_REF: ${{ github.base_ref }}
run: |
- git config --global user.email "you@example.com"
- git config --global user.name "Your Name"
- git remote -v
- # Ensure there's no merge commits in the PR
- #[[ "$(git rev-list --merges --count origin/${BASE_REF}..)" == "0" ]] || \
- #(echo "::error ::Merge commits not allowed, rebase instead";false)
- git rebase origin/${BASE_REF}
- # debug
- git log --pretty=oneline | head -n 10
west init -l . || true
west config manifest.group-filter -- +ci,-optional
west update -o=--depth=1 -n 2>&1 1> west.update.log || west update -o=--depth=1 -n 2>&1 1> west.update2.log
@@ -78,8 +82,8 @@ jobs:
git log --pretty=oneline | head -n 10
# Increase rename limit to allow for large PRs
git config diff.renameLimit 10000
- ./scripts/ci/check_compliance.py --annotate -e KconfigBasic -e Kconfig \
- -e KconfigBasicNoModules -e ModulesMaintainers -c origin/${BASE_REF}..
+ ./scripts/ci/check_compliance.py --annotate -e KconfigBasic -e ClangFormat \
+ -e Kconfig -e KconfigBasicNoModules -e ModulesMaintainers -c origin/${BASE_REF}..
- name: upload-results
uses: actions/upload-artifact@v4
diff --git a/.github/workflows/daily_test_version.yml b/.github/workflows/daily_test_version.yml
index 1886b4a8c80..3a43ac64300 100644
--- a/.github/workflows/daily_test_version.yml
+++ b/.github/workflows/daily_test_version.yml
@@ -25,7 +25,7 @@ jobs:
- name: install-pip
run: |
- pip3 install gitpython
+ pip install gitpython
- name: checkout
uses: actions/checkout@v4
diff --git a/.github/workflows/devicetree_checks.yml b/.github/workflows/devicetree_checks.yml
index 060a5d95973..345eb5b7db0 100644
--- a/.github/workflows/devicetree_checks.yml
+++ b/.github/workflows/devicetree_checks.yml
@@ -26,7 +26,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
- python-version: ['3.10', '3.11', '3.12']
+ python-version: ['3.10', '3.11', '3.12', '3.13']
os: [ubuntu-22.04, macos-14, windows-2022]
steps:
- name: checkout
@@ -62,8 +62,7 @@ jobs:
${{ runner.os }}-pip-${{ matrix.python-version }}
- name: install python dependencies
run: |
- pip3 install wheel
- pip3 install pytest pyyaml tox
+ pip install pytest pyyaml tox
- name: run tox
working-directory: scripts/dts/python-devicetree
run: |
diff --git a/.github/workflows/do_not_merge.yml b/.github/workflows/do_not_merge.yml
index b6954e288c9..b2bbefdc6fe 100644
--- a/.github/workflows/do_not_merge.yml
+++ b/.github/workflows/do_not_merge.yml
@@ -6,14 +6,14 @@ on:
jobs:
do-not-merge:
- if: ${{ contains(github.event.*.labels.*.name, 'DNM') ||
- contains(github.event.*.labels.*.name, 'TSC') ||
- contains(github.event.*.labels.*.name, 'Architecture Review') ||
- contains(github.event.*.labels.*.name, 'dev-review') }}
name: Prevent Merging
runs-on: ubuntu-22.04
steps:
- name: Check for label
+ if: ${{ contains(github.event.*.labels.*.name, 'DNM') ||
+ contains(github.event.*.labels.*.name, 'TSC') ||
+ contains(github.event.*.labels.*.name, 'Architecture Review') ||
+ contains(github.event.*.labels.*.name, 'dev-review') }}
run: |
echo "Pull request is labeled as 'DNM', 'TSC', 'Architecture Review' or 'dev-review'."
echo "This workflow fails so that the pull request cannot be merged."
diff --git a/.github/workflows/doc-build.yml b/.github/workflows/doc-build.yml
index 1872a824604..69c7b787c45 100644
--- a/.github/workflows/doc-build.yml
+++ b/.github/workflows/doc-build.yml
@@ -42,6 +42,7 @@ jobs:
with:
files: |
doc/
+ boards/**/doc/
**.rst
include/
kernel/include/kernel_arch_interface.h
@@ -93,7 +94,10 @@ jobs:
run: |
git config --global user.email "actions@zephyrproject.org"
git config --global user.name "Github Actions"
+ rm -fr ".git/rebase-apply"
+ rm -fr ".git/rebase-merge"
git rebase origin/${BASE_REF}
+ git clean -f -d
git log --graph --oneline HEAD...${PR_HEAD}
- name: cache-pip
@@ -104,11 +108,10 @@ jobs:
- name: install-pip
run: |
- sudo pip3 install -U setuptools wheel pip
- pip3 install -r doc/requirements.txt
- pip3 install west==${WEST_VERSION}
- pip3 install cmake==${CMAKE_VERSION}
- pip3 install coverxygen
+ pip install -r doc/requirements.txt
+ pip install west==${WEST_VERSION}
+ pip install cmake==${CMAKE_VERSION}
+ pip install coverxygen
- name: west setup
run: |
@@ -219,10 +222,9 @@ jobs:
- name: install-pip
run: |
- pip3 install -U setuptools wheel pip
- pip3 install -r doc/requirements.txt
- pip3 install west==${WEST_VERSION}
- pip3 install cmake==${CMAKE_VERSION}
+ pip install -r doc/requirements.txt
+ pip install west==${WEST_VERSION}
+ pip install cmake==${CMAKE_VERSION}
- name: west setup
run: |
diff --git a/.github/workflows/doc-publish-pr.yml b/.github/workflows/doc-publish-pr.yml
index b202b0a790a..786bd14aed2 100644
--- a/.github/workflows/doc-publish-pr.yml
+++ b/.github/workflows/doc-publish-pr.yml
@@ -21,16 +21,24 @@ jobs:
steps:
- name: Download artifacts
+ id: download-artifacts
uses: dawidd6/action-download-artifact@v6
with:
workflow: doc-build.yml
run_id: ${{ github.event.workflow_run.id }}
+ if_no_artifact_found: ignore
- name: Load PR number
- run: |
- echo "PR_NUM=$(> $GITHUB_ENV
+ if: steps.download-artifacts.outputs.found_artifact == 'true'
+ uses: actions/github-script@v7
+ with:
+ script: |
+ let fs = require("fs");
+ let pr_number = Number(fs.readFileSync("./pr_num/pr_num"));
+ core.exportVariable("PR_NUM", pr_number);
- name: Check PR number
+ if: steps.download-artifacts.outputs.found_artifact == 'true'
id: check-pr
uses: carpentries/actions/check-valid-pr@v0.14.0
with:
@@ -38,12 +46,15 @@ jobs:
sha: ${{ github.event.workflow_run.head_sha }}
- name: Validate PR number
- if: steps.check-pr.outputs.VALID != 'true'
+ if: |
+ steps.download-artifacts.outputs.found_artifact == 'true' &&
+ steps.check-pr.outputs.VALID != 'true'
run: |
echo "ABORT: PR number validation failed!"
exit 1
- name: Uncompress HTML docs
+ if: steps.download-artifacts.outputs.found_artifact == 'true'
run: |
tar xf html-output/html-output.tar.xz -C html-output
if [ -f api-coverage/api-coverage.tar.xz ]; then
@@ -51,6 +62,7 @@ jobs:
fi
- name: Configure AWS Credentials
+ if: steps.download-artifacts.outputs.found_artifact == 'true'
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ vars.AWS_BUILDS_ZEPHYR_PR_ACCESS_KEY_ID }}
@@ -58,6 +70,7 @@ jobs:
aws-region: us-east-1
- name: Upload to AWS S3
+ if: steps.download-artifacts.outputs.found_artifact == 'true'
env:
HEAD_BRANCH: ${{ github.event.workflow_run.head_branch }}
run: |
diff --git a/.github/workflows/errno.yml b/.github/workflows/errno.yml
index b1f7e6f4e62..d3fe1b0dcae 100644
--- a/.github/workflows/errno.yml
+++ b/.github/workflows/errno.yml
@@ -10,7 +10,7 @@ jobs:
check-errno:
runs-on: ubuntu-22.04
container:
- image: ghcr.io/zephyrproject-rtos/ci:v0.26.13
+ image: ghcr.io/zephyrproject-rtos/ci:v0.27.4
steps:
- name: Apply container owner mismatch workaround
diff --git a/.github/workflows/footprint-tracking.yml b/.github/workflows/footprint-tracking.yml
index 08b858af477..78f761cb545 100644
--- a/.github/workflows/footprint-tracking.yml
+++ b/.github/workflows/footprint-tracking.yml
@@ -26,8 +26,11 @@ jobs:
group: zephyr-runner-v2-linux-x64-4xlarge
if: github.repository_owner == 'zephyrproject-rtos'
container:
- image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.26.14.20240823
+ image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.27.4.20241026
options: '--entrypoint /bin/bash'
+ defaults:
+ run:
+ shell: bash
strategy:
fail-fast: false
env:
@@ -55,7 +58,7 @@ jobs:
run: |
sudo apt-get update
sudo apt-get install -y python3-venv
- sudo pip3 install -U setuptools wheel pip gitpython
+ pip install -U gitpython
- name: checkout
uses: actions/checkout@v4
@@ -91,5 +94,35 @@ jobs:
run: |
python3 -m venv .venv
. .venv/bin/activate
- pip3 install awscli
+ pip install awscli
aws s3 sync --quiet footprint_data/ s3://testing.zephyrproject.org/footprint_data/
+
+ - name: Transform Footprint data to Twister JSON reports
+ run: |
+ shopt -s globstar
+ export ZEPHYR_BASE=${PWD}
+ python3 ./scripts/footprint/pack_as_twister.py -vvv \
+ --plan ./scripts/footprint/plan.txt \
+ --test-name='name.feature' \
+ ./footprint_data/**/
+
+ - name: Upload to ElasticSearch
+ env:
+ ELASTICSEARCH_KEY: ${{ secrets.ELASTICSEARCH_KEY }}
+ ELASTICSEARCH_SERVER: "https://elasticsearch.zephyrproject.io:443"
+ ELASTICSEARCH_INDEX: ${{ vars.FOOTPRINT_TRACKING_INDEX }}
+ run: |
+ shopt -s globstar
+ pip install -U elasticsearch
+ run_date=`date --iso-8601=minutes`
+ python3 ./scripts/ci/upload_test_results_es.py -r ${run_date} \
+ --flatten footprint \
+ --flatten-list-names "{'children':'name'}" \
+ --transform "{ 'footprint_name': '^(?P([^\/]+\/){0,2})(?P([^\/]*\/)*)(?P[^\/]*)$' }" \
+ --run-id "${{ github.run_id }}" \
+ --run-attempt "${{ github.run_attempt }}" \
+ --run-workflow "footprint-tracking:${{ github.event_name }}" \
+ --run-branch "${{ github.ref_name }}" \
+ -i ${ELASTICSEARCH_INDEX} \
+ ./footprint_data/**/twister_footprint.json
+ #
diff --git a/.github/workflows/hello_world_multiplatform.yaml b/.github/workflows/hello_world_multiplatform.yaml
index 08fd42d7866..59d622149a2 100644
--- a/.github/workflows/hello_world_multiplatform.yaml
+++ b/.github/workflows/hello_world_multiplatform.yaml
@@ -12,8 +12,7 @@ on:
- v*-branch
- collab-*
paths:
- - 'scripts/build/**'
- - 'scripts/requirements*.txt'
+ - 'scripts/**'
- '.github/workflows/hello_world_multiplatform.yaml'
- 'SDK_VERSION'
@@ -45,7 +44,10 @@ jobs:
run: |
git config --global user.email "actions@zephyrproject.org"
git config --global user.name "Github Actions"
+ rm -fr ".git/rebase-apply"
+ rm -fr ".git/rebase-merge"
git rebase origin/${BASE_REF}
+ git clean -f -d
git log --graph --oneline HEAD...${PR_HEAD}
- name: Set up Python
@@ -68,7 +70,7 @@ jobs:
elif [ "${{ runner.os }}" = "Windows" ]; then
EXTRA_TWISTER_FLAGS="-P native_sim --short-build-path -O/tmp/twister-out"
fi
- ./scripts/twister --force-color --inline-logs -T samples/hello_world -v $EXTRA_TWISTER_FLAGS
+ ./scripts/twister --force-color --inline-logs -T samples/hello_world -T samples/cpp/hello_world -v $EXTRA_TWISTER_FLAGS
- name: Upload artifacts
if: failure()
@@ -77,3 +79,4 @@ jobs:
if-no-files-found: ignore
path:
zephyr/twister-out/*/samples/hello_world/sample.basic.helloworld/build.log
+ zephyr/twister-out/*/samples/cpp/hello_world/sample.cpp.helloworld/build.log
diff --git a/.github/workflows/manifest.yml b/.github/workflows/manifest.yml
index 76b80f66504..c3bdc4ff6c8 100644
--- a/.github/workflows/manifest.yml
+++ b/.github/workflows/manifest.yml
@@ -20,13 +20,13 @@ jobs:
BASE_REF: ${{ github.base_ref }}
working-directory: zephyrproject/zephyr
run: |
- pip3 install west
+ pip install west
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
west init -l . || true
- name: Manifest
- uses: zephyrproject-rtos/action-manifest@v1.3.1
+ uses: zephyrproject-rtos/action-manifest@v1.7.0
with:
github-token: ${{ secrets.ZB_GITHUB_TOKEN }}
manifest-path: 'west.yml'
diff --git a/.github/workflows/pylib_tests.yml b/.github/workflows/pylib_tests.yml
index 8827acebdb4..bf9d8289212 100644
--- a/.github/workflows/pylib_tests.yml
+++ b/.github/workflows/pylib_tests.yml
@@ -25,7 +25,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
- python-version: ['3.10', '3.11', '3.12']
+ python-version: ['3.10', '3.11', '3.12', '3.13']
os: [ubuntu-22.04]
steps:
- name: checkout
@@ -44,7 +44,7 @@ jobs:
${{ runner.os }}-pip-${{ matrix.python-version }}
- name: install-packages
run: |
- pip3 install -r scripts/requirements-base.txt -r scripts/requirements-build-test.txt
+ pip install -r scripts/requirements-base.txt -r scripts/requirements-build-test.txt
- name: Run pytest for build_helpers
env:
ZEPHYR_BASE: ./
diff --git a/.github/workflows/scripts_tests.yml b/.github/workflows/scripts_tests.yml
index 86db35ae02e..06e12ada528 100644
--- a/.github/workflows/scripts_tests.yml
+++ b/.github/workflows/scripts_tests.yml
@@ -25,7 +25,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
- python-version: ['3.10', '3.11', '3.12']
+ python-version: ['3.10', '3.11', '3.12', '3.13']
os: [ubuntu-20.04]
steps:
- name: checkout
@@ -42,7 +42,10 @@ jobs:
run: |
git config --global user.email "actions@zephyrproject.org"
git config --global user.name "Github Actions"
+ rm -fr ".git/rebase-apply"
+ rm -fr ".git/rebase-merge"
git rebase origin/${BASE_REF}
+ git clean -f -d
git log --graph --oneline HEAD...${PR_HEAD}
- name: Set up Python ${{ matrix.python-version }}
@@ -61,7 +64,7 @@ jobs:
- name: install-packages
run: |
- pip3 install -r scripts/requirements-base.txt -r scripts/requirements-build-test.txt
+ pip install -r scripts/requirements-base.txt -r scripts/requirements-build-test.txt
- name: Run pytest
env:
diff --git a/.github/workflows/stats_merged_prs.yml b/.github/workflows/stats_merged_prs.yml
index cd874b65b1a..0f86958e47b 100644
--- a/.github/workflows/stats_merged_prs.yml
+++ b/.github/workflows/stats_merged_prs.yml
@@ -20,5 +20,5 @@ jobs:
ELASTICSEARCH_SERVER: "https://elasticsearch.zephyrproject.io:443"
PR_STAT_ES_INDEX: ${{ vars.PR_STAT_ES_INDEX }}
run: |
- pip3 install pygithub elasticsearch
+ pip install pygithub elasticsearch
python3 ./scripts/ci/stats/merged_prs.py --pull-request ${{ github.event.pull_request.number }} --repo ${{ github.repository }}
diff --git a/.github/workflows/twister-prep.yaml b/.github/workflows/twister-prep.yaml
new file mode 100644
index 00000000000..51bc771059d
--- /dev/null
+++ b/.github/workflows/twister-prep.yaml
@@ -0,0 +1,147 @@
+name: Prepare For a Twister Run
+
+on:
+ workflow_call:
+ outputs:
+ subset:
+ description: subset
+ value: ${{ jobs.prep_push.outputs.subset != '' && jobs.prep_push.outputs.subset || jobs.prep_pr.outputs.subset }}
+ size:
+ description: size
+ value: ${{ jobs.prep_push.outputs.size != '' && jobs.prep_push.outputs.size || jobs.prep_pr.outputs.size }}
+ fullrun:
+ description: fullrun
+ value: ${{ jobs.prep_push.outputs.fullrun != '' && jobs.prep_push.outputs.fullrun || jobs.prep_pr.outputs.size }}
+
+jobs:
+ prep_pr:
+ if: github.repository_owner == 'zephyrproject-rtos' && github.event_name == 'pull_request_target'
+ runs-on:
+ group: zephyr-runner-v2-linux-x64-4xlarge
+ container:
+ image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.27.4.20241026
+ options: '--entrypoint /bin/bash'
+ outputs:
+ subset: ${{ steps.output-services.outputs.subset }}
+ size: ${{ steps.output-services.outputs.size }}
+ fullrun: ${{ steps.output-services.outputs.fullrun }}
+ env:
+ MATRIX_SIZE: 10
+ PUSH_MATRIX_SIZE: 20
+ DAILY_MATRIX_SIZE: 80
+ BSIM_OUT_PATH: /opt/bsim/
+ BSIM_COMPONENTS_PATH: /opt/bsim/components
+ TESTS_PER_BUILDER: 700
+ COMMIT_RANGE: ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}
+ BASE_REF: ${{ github.base_ref }}
+ steps:
+ - name: Apply container owner mismatch workaround
+ run: |
+ # FIXME: The owner UID of the GITHUB_WORKSPACE directory may not
+ # match the container user UID because of the way GitHub
+ # Actions runner is implemented. Remove this workaround when
+ # GitHub comes up with a fundamental fix for this problem.
+ git config --global --add safe.directory ${GITHUB_WORKSPACE}
+
+ - name: Print cloud service information
+ run: |
+ echo "ZEPHYR_RUNNER_CLOUD_PROVIDER = ${ZEPHYR_RUNNER_CLOUD_PROVIDER}"
+ echo "ZEPHYR_RUNNER_CLOUD_NODE = ${ZEPHYR_RUNNER_CLOUD_NODE}"
+ echo "ZEPHYR_RUNNER_CLOUD_POD = ${ZEPHYR_RUNNER_CLOUD_POD}"
+
+ - name: Clone cached Zephyr repository
+ continue-on-error: true
+ run: |
+ git clone --shared /repo-cache/zephyrproject/zephyr .
+ git remote set-url origin ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}
+
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ github.event.pull_request.head.sha }}
+ fetch-depth: 0
+ persist-credentials: false
+
+ - name: Environment Setup
+ run: |
+ git config --global user.email "bot@zephyrproject.org"
+ git config --global user.name "Zephyr Bot"
+ rm -fr ".git/rebase-apply"
+ rm -fr ".git/rebase-merge"
+ git rebase origin/${BASE_REF}
+ git clean -f -d
+ git log --pretty=oneline | head -n 10
+ west init -l . || true
+ west config manifest.group-filter -- +ci,+optional
+ west config --global update.narrow true
+ west update --path-cache /repo-cache/zephyrproject 2>&1 1> west.update.log || west update --path-cache /repo-cache/zephyrproject 2>&1 1> west.update.log || ( rm -rf ../modules ../bootloader ../tools && west update --path-cache /repo-cache/zephyrproject)
+ west forall -c 'git reset --hard HEAD'
+
+ echo "ZEPHYR_SDK_INSTALL_DIR=/opt/toolchains/zephyr-sdk-$( cat SDK_VERSION )" >> $GITHUB_ENV
+
+ - name: Generate Test Plan with Twister
+ id: test-plan
+ run: |
+ export ZEPHYR_BASE=${PWD}
+ export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
+ python3 ./scripts/ci/test_plan.py -c origin/${BASE_REF}.. --no-detailed-test-id --pull-request -t $TESTS_PER_BUILDER
+ if [ -s .testplan ]; then
+ cat .testplan >> $GITHUB_ENV
+ else
+ echo "TWISTER_NODES=${MATRIX_SIZE}" >> $GITHUB_ENV
+ fi
+ rm -f testplan.json .testplan
+
+ - name: Determine matrix size
+ id: output-services
+ run: |
+ if [ -n "${TWISTER_NODES}" ]; then
+ subset="[$(seq -s',' 1 ${TWISTER_NODES})]"
+ else
+ subset="[$(seq -s',' 1 ${MATRIX_SIZE})]"
+ fi
+ size=${TWISTER_NODES}
+
+ echo "subset=${subset}" >> $GITHUB_OUTPUT
+ echo "size=${size}" >> $GITHUB_OUTPUT
+ echo "fullrun=${TWISTER_FULL}" >> $GITHUB_OUTPUT
+
+ prep_push:
+ if: github.repository_owner == 'zephyrproject-rtos' && (github.event_name == 'push' || github.event_name == 'schedule')
+ runs-on: ubuntu-22.04
+ outputs:
+ subset: ${{ steps.output-services.outputs.subset }}
+ size: ${{ steps.output-services.outputs.size }}
+ fullrun: ${{ steps.output-services.outputs.fullrun }}
+ env:
+ MATRIX_SIZE: 10
+ PUSH_MATRIX_SIZE: 20
+ DAILY_MATRIX_SIZE: 80
+ BSIM_OUT_PATH: /opt/bsim/
+ BSIM_COMPONENTS_PATH: /opt/bsim/components
+ TESTS_PER_BUILDER: 700
+ COMMIT_RANGE: ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}
+ BASE_REF: ${{ github.base_ref }}
+ steps:
+ - name: Print cloud service information
+ run: |
+ echo "ZEPHYR_RUNNER_CLOUD_PROVIDER = ${ZEPHYR_RUNNER_CLOUD_PROVIDER}"
+ echo "ZEPHYR_RUNNER_CLOUD_NODE = ${ZEPHYR_RUNNER_CLOUD_NODE}"
+ echo "ZEPHYR_RUNNER_CLOUD_POD = ${ZEPHYR_RUNNER_CLOUD_POD}"
+
+ - name: Determine matrix size
+ id: output-services
+ run: |
+ if [ "${{github.event_name}}" = "push" ]; then
+ subset="[$(seq -s',' 1 ${PUSH_MATRIX_SIZE})]"
+ size=${MATRIX_SIZE}
+ elif [ "${{github.event_name}}" = "schedule" -a "${{github.repository}}" = "zephyrproject-rtos/zephyr" ]; then
+ subset="[$(seq -s',' 1 ${DAILY_MATRIX_SIZE})]"
+ size=${DAILY_MATRIX_SIZE}
+ else
+ size=0
+ fi
+
+ echo "subset=${subset}" >> $GITHUB_OUTPUT
+ echo "size=${size}" >> $GITHUB_OUTPUT
+ echo "fullrun=${TWISTER_FULL}" >> $GITHUB_OUTPUT
diff --git a/.github/workflows/twister-publish.yaml b/.github/workflows/twister-publish.yaml
new file mode 100644
index 00000000000..3695d060726
--- /dev/null
+++ b/.github/workflows/twister-publish.yaml
@@ -0,0 +1,53 @@
+name: Publish Twister Test Results
+
+on:
+ workflow_run:
+ workflows: ["Run tests with twister"]
+ branches:
+ - main
+ types:
+ - completed
+
+jobs:
+ upload-to-elasticsearch:
+ if: |
+ github.repository == 'zephyrproject-rtos/zephyr' &&
+ github.event.workflow_run.event != 'pull_request_target'
+ env:
+ ELASTICSEARCH_KEY: ${{ secrets.ELASTICSEARCH_KEY }}
+ ELASTICSEARCH_SERVER: "https://elasticsearch.zephyrproject.io:443"
+ runs-on: ubuntu-22.04
+ steps:
+ # Needed for elasticearch and upload script
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ persist-credentials: false
+
+ - name: Download Artifacts
+ id: download-artifacts
+ uses: dawidd6/action-download-artifact@v6
+ with:
+ path: artifacts
+ workflow: twister.yml
+ run_id: ${{ github.event.workflow_run.id }}
+ if_no_artifact_found: ignore
+
+ - name: Upload to elasticsearch
+ if: steps.download-artifacts.outputs.found_artifact == 'true'
+ run: |
+ pip install elasticsearch
+ # set run date on upload to get consistent and unified data across the matrix.
+ run_date=`date --iso-8601=minutes`
+ if [ "${{github.event.workflow_run.event}}" = "push" ]; then
+ python3 ./scripts/ci/upload_test_results_es.py -r ${run_date} \
+ --run-attempt ${{github.run_attempt}} \
+ --run-branch ${{github.ref_name}} \
+ --index zephyr-main-ci-push-1 artifacts/*/*/twister.json
+ elif [ "${{github.event.workflow_run.event}}" = "schedule" ]; then
+ python3 ./scripts/ci/upload_test_results_es.py -r ${run_date} \
+ --run-attempt ${{github.run_attempt}} \
+ --run-branch ${{github.ref_name}} \
+ --index zephyr-main-ci-weekly-1 artifacts/*/*/twister.json
+ fi
diff --git a/.github/workflows/twister.yaml b/.github/workflows/twister.yaml
index cc3c9e3ffdf..8d3b29fa433 100644
--- a/.github/workflows/twister.yaml
+++ b/.github/workflows/twister.yaml
@@ -21,107 +21,7 @@ concurrency:
jobs:
twister-build-prep:
- if: github.repository_owner == 'zephyrproject-rtos'
- runs-on:
- group: zephyr-runner-v2-linux-x64-4xlarge
- container:
- image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.26.14.20240823
- options: '--entrypoint /bin/bash'
- outputs:
- subset: ${{ steps.output-services.outputs.subset }}
- size: ${{ steps.output-services.outputs.size }}
- fullrun: ${{ steps.output-services.outputs.fullrun }}
- env:
- MATRIX_SIZE: 10
- PUSH_MATRIX_SIZE: 20
- DAILY_MATRIX_SIZE: 80
- BSIM_OUT_PATH: /opt/bsim/
- BSIM_COMPONENTS_PATH: /opt/bsim/components
- TESTS_PER_BUILDER: 700
- COMMIT_RANGE: ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}
- BASE_REF: ${{ github.base_ref }}
- steps:
- - name: Apply container owner mismatch workaround
- run: |
- # FIXME: The owner UID of the GITHUB_WORKSPACE directory may not
- # match the container user UID because of the way GitHub
- # Actions runner is implemented. Remove this workaround when
- # GitHub comes up with a fundamental fix for this problem.
- git config --global --add safe.directory ${GITHUB_WORKSPACE}
-
- - name: Print cloud service information
- run: |
- echo "ZEPHYR_RUNNER_CLOUD_PROVIDER = ${ZEPHYR_RUNNER_CLOUD_PROVIDER}"
- echo "ZEPHYR_RUNNER_CLOUD_NODE = ${ZEPHYR_RUNNER_CLOUD_NODE}"
- echo "ZEPHYR_RUNNER_CLOUD_POD = ${ZEPHYR_RUNNER_CLOUD_POD}"
-
- - name: Clone cached Zephyr repository
- if: github.event_name == 'pull_request_target'
- continue-on-error: true
- run: |
- git clone --shared /repo-cache/zephyrproject/zephyr .
- git remote set-url origin ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}
-
- - name: Checkout
- if: github.event_name == 'pull_request_target'
- uses: actions/checkout@v4
- with:
- ref: ${{ github.event.pull_request.head.sha }}
- fetch-depth: 0
- persist-credentials: false
-
- - name: Environment Setup
- if: github.event_name == 'pull_request_target'
- run: |
- git config --global user.email "bot@zephyrproject.org"
- git config --global user.name "Zephyr Bot"
- rm -fr ".git/rebase-apply"
- git rebase origin/${BASE_REF}
- git log --pretty=oneline | head -n 10
- west init -l . || true
- west config manifest.group-filter -- +ci,+optional
- west config --global update.narrow true
- west update --path-cache /repo-cache/zephyrproject 2>&1 1> west.update.log || west update --path-cache /repo-cache/zephyrproject 2>&1 1> west.update.log || ( rm -rf ../modules ../bootloader ../tools && west update --path-cache /repo-cache/zephyrproject)
- west forall -c 'git reset --hard HEAD'
-
- echo "ZEPHYR_SDK_INSTALL_DIR=/opt/toolchains/zephyr-sdk-$( cat SDK_VERSION )" >> $GITHUB_ENV
-
- - name: Generate Test Plan with Twister
- if: github.event_name == 'pull_request_target'
- id: test-plan
- run: |
- export ZEPHYR_BASE=${PWD}
- export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
- python3 ./scripts/ci/test_plan.py -c origin/${BASE_REF}.. --pull-request -t $TESTS_PER_BUILDER
- if [ -s .testplan ]; then
- cat .testplan >> $GITHUB_ENV
- else
- echo "TWISTER_NODES=${MATRIX_SIZE}" >> $GITHUB_ENV
- fi
- rm -f testplan.json .testplan
-
- - name: Determine matrix size
- id: output-services
- run: |
- if [ "${{github.event_name}}" = "pull_request_target" ]; then
- if [ -n "${TWISTER_NODES}" ]; then
- subset="[$(seq -s',' 1 ${TWISTER_NODES})]"
- else
- subset="[$(seq -s',' 1 ${MATRIX_SIZE})]"
- fi
- size=${TWISTER_NODES}
- elif [ "${{github.event_name}}" = "push" ]; then
- subset="[$(seq -s',' 1 ${PUSH_MATRIX_SIZE})]"
- size=${MATRIX_SIZE}
- elif [ "${{github.event_name}}" = "schedule" -a "${{github.repository}}" = "zephyrproject-rtos/zephyr" ]; then
- subset="[$(seq -s',' 1 ${DAILY_MATRIX_SIZE})]"
- size=${DAILY_MATRIX_SIZE}
- else
- size=0
- fi
- echo "subset=${subset}" >> $GITHUB_OUTPUT
- echo "size=${size}" >> $GITHUB_OUTPUT
- echo "fullrun=${TWISTER_FULL}" >> $GITHUB_OUTPUT
+ uses: ./.github/workflows/twister-prep.yaml
twister-build:
runs-on:
@@ -129,7 +29,7 @@ jobs:
needs: twister-build-prep
if: needs.twister-build-prep.outputs.size != 0
container:
- image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.26.14.20240823
+ image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.27.4.20241026
options: '--entrypoint /bin/bash'
strategy:
fail-fast: false
@@ -141,15 +41,16 @@ jobs:
CCACHE_REMOTE_STORAGE: "redis://cache-*.keydb-cache.svc.cluster.local|shards=1,2,3"
CCACHE_REMOTE_ONLY: "true"
# `--specs` is ignored because ccache is unable to resolve the toolchain specs file path.
- CCACHE_IGNOREOPTIONS: '--specs=*'
+ CCACHE_IGNOREOPTIONS: '-specs=* --specs=*'
BSIM_OUT_PATH: /opt/bsim/
BSIM_COMPONENTS_PATH: /opt/bsim/components
- TWISTER_COMMON: ' --force-color --inline-logs -v -N -M --retry-failed 3 --timeout-multiplier 2 '
- DAILY_OPTIONS: ' -M --build-only --all --show-footprint'
+ TWISTER_COMMON: '--no-detailed-test-id --force-color --inline-logs -v -N -M --retry-failed 3 --timeout-multiplier 2 '
+ WEEKLY_OPTIONS: ' -M --build-only --all --show-footprint --report-filtered'
PR_OPTIONS: ' --clobber-output --integration'
- PUSH_OPTIONS: ' --clobber-output -M --show-footprint'
+ PUSH_OPTIONS: ' --clobber-output -M --show-footprint --report-filtered'
COMMIT_RANGE: ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}
BASE_REF: ${{ github.base_ref }}
+ LLVM_TOOLCHAIN_PATH: /usr/lib/llvm-16
steps:
- name: Print cloud service information
run: |
@@ -184,10 +85,13 @@ jobs:
git config --global user.email "bot@zephyrproject.org"
git config --global user.name "Zephyr Builder"
rm -fr ".git/rebase-apply"
+ rm -fr ".git/rebase-merge"
git rebase origin/${BASE_REF}
+ git clean -f -d
git log --pretty=oneline | head -n 10
fi
echo "$HOME/.local/bin" >> $GITHUB_PATH
+ echo "$HOME/.cargo/bin" >> $GITHUB_PATH
west init -l . || true
west config manifest.group-filter -- +ci,+optional
@@ -201,6 +105,8 @@ jobs:
run: |
cmake --version
gcc --version
+ cargo --version
+ rustup target list --installed
ls -la
echo "github.ref: ${{ github.ref }}"
echo "github.base_ref: ${{ github.base_ref }}"
@@ -225,6 +131,7 @@ jobs:
- if: github.event_name == 'push'
name: Run Tests with Twister (Push)
+ id: run_twister
run: |
export ZEPHYR_BASE=${PWD}
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
@@ -238,11 +145,12 @@ jobs:
- if: github.event_name == 'pull_request_target'
name: Run Tests with Twister (Pull Request)
+ id: run_twister_pr
run: |
rm -f testplan.json
export ZEPHYR_BASE=${PWD}
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
- python3 ./scripts/ci/test_plan.py -c origin/${BASE_REF}.. --pull-request
+ python3 ./scripts/ci/test_plan.py -c origin/${BASE_REF}.. --pull-request --no-detailed-test-id
./scripts/twister --subset ${{matrix.subset}}/${{ strategy.job-total }} --load-tests testplan.json ${TWISTER_COMMON} ${PR_OPTIONS}
if [ "${{matrix.subset}}" = "1" -a ${{needs.twister-build-prep.outputs.fullrun}} = 'True' ]; then
./scripts/zephyr_module.py --twister-out module_tests.args
@@ -253,14 +161,15 @@ jobs:
- if: github.event_name == 'schedule'
name: Run Tests with Twister (Daily)
+ id: run_twister_sched
run: |
export ZEPHYR_BASE=${PWD}
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
- ./scripts/twister --subset ${{matrix.subset}}/${{ strategy.job-total }} ${TWISTER_COMMON} ${DAILY_OPTIONS}
+ ./scripts/twister --subset ${{matrix.subset}}/${{ strategy.job-total }} ${TWISTER_COMMON} ${WEEKLY_OPTIONS}
if [ "${{matrix.subset}}" = "1" ]; then
./scripts/zephyr_module.py --twister-out module_tests.args
if [ -s module_tests.args ]; then
- ./scripts/twister +module_tests.args --outdir module_tests ${TWISTER_COMMON} ${DAILY_OPTIONS}
+ ./scripts/twister +module_tests.args --outdir module_tests ${TWISTER_COMMON} ${WEEKLY_OPTIONS}
fi
fi
@@ -289,7 +198,7 @@ jobs:
timestamp="$(date)"
version="$(git describe --abbrev=12 --always)"
echo -e "# Generated at $timestamp ($version)\n" > $FREEZE_FILE
- pip3 freeze | tee -a $FREEZE_FILE
+ pip freeze | tee -a $FREEZE_FILE
- if: matrix.subset == 1 && github.event_name == 'push'
name: Upload the list of Python packages
@@ -301,45 +210,21 @@ jobs:
twister-test-results:
name: "Publish Unit Tests Results"
- env:
- ELASTICSEARCH_KEY: ${{ secrets.ELASTICSEARCH_KEY }}
- ELASTICSEARCH_SERVER: "https://elasticsearch.zephyrproject.io:443"
- needs: twister-build
+ needs:
+ - twister-build
runs-on: ubuntu-22.04
# the build-and-test job might be skipped, we don't need to run this job then
if: success() || failure()
steps:
- # Needed for elasticearch and upload script
- - if: github.event_name == 'push' || github.event_name == 'schedule'
- name: Checkout
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
- persist-credentials: false
-
- name: Download Artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- - if: github.event_name == 'push' || github.event_name == 'schedule'
- name: Upload to elasticsearch
- run: |
- pip3 install elasticsearch
- # set run date on upload to get consistent and unified data across the matrix.
- run_date=`date --iso-8601=minutes`
- if [ "${{github.event_name}}" = "push" ]; then
- python3 ./scripts/ci/upload_test_results_es.py -r ${run_date} \
- --index zephyr-main-ci-push-1 artifacts/*/*/twister.json
- elif [ "${{github.event_name}}" = "schedule" ]; then
- python3 ./scripts/ci/upload_test_results_es.py -r ${run_date} \
- --index zephyr-main-ci-weekly-1 artifacts/*/*/twister.json
- fi
-
- name: Merge Test Results
run: |
- pip3 install junitparser junit2html
+ pip install junitparser junit2html
junitparser merge artifacts/*/*/twister.xml junit.xml
junit2html junit.xml junit.html
diff --git a/.github/workflows/twister_tests.yml b/.github/workflows/twister_tests.yml
index fa6737badb8..66409bce876 100644
--- a/.github/workflows/twister_tests.yml
+++ b/.github/workflows/twister_tests.yml
@@ -32,7 +32,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
- python-version: ['3.10', '3.11', '3.12']
+ python-version: ['3.10', '3.11', '3.12', '3.13']
os: [ubuntu-22.04]
steps:
- name: checkout
@@ -51,7 +51,7 @@ jobs:
${{ runner.os }}-pip-${{ matrix.python-version }}
- name: install-packages
run: |
- pip3 install -r scripts/requirements-base.txt -r scripts/requirements-build-test.txt -r scripts/requirements-run-test.txt
+ pip install -r scripts/requirements-base.txt -r scripts/requirements-build-test.txt -r scripts/requirements-run-test.txt
- name: Run pytest for twisterlib
env:
ZEPHYR_BASE: ./
diff --git a/.github/workflows/twister_tests_blackbox.yml b/.github/workflows/twister_tests_blackbox.yml
index b19bce0c535..cd24a2a39ae 100644
--- a/.github/workflows/twister_tests_blackbox.yml
+++ b/.github/workflows/twister_tests_blackbox.yml
@@ -21,10 +21,10 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
- python-version: ['3.10', '3.11', '3.12']
+ python-version: ['3.10', '3.11', '3.12', '3.13']
os: [ubuntu-22.04]
container:
- image: ghcr.io/zephyrproject-rtos/ci:v0.26.13
+ image: ghcr.io/zephyrproject-rtos/ci:v0.27.4
steps:
- name: Apply Container Owner Mismatch Workaround
diff --git a/.github/workflows/west_cmds.yml b/.github/workflows/west_cmds.yml
index d910bf15a29..3d4802f0170 100644
--- a/.github/workflows/west_cmds.yml
+++ b/.github/workflows/west_cmds.yml
@@ -29,7 +29,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
- python-version: ['3.10', '3.11', '3.12']
+ python-version: ['3.10', '3.11', '3.12', '3.13']
os: [ubuntu-22.04, macos-14, windows-2022]
steps:
- name: checkout
@@ -65,8 +65,7 @@ jobs:
${{ runner.os }}-pip-${{ matrix.python-version }}
- name: install pytest
run: |
- pip3 install wheel
- pip3 install pytest west pyelftools canopen natsort progress mypy intelhex psutil ply pyserial
+ pip install pytest west pyelftools canopen natsort progress mypy intelhex psutil ply pyserial anytree
- name: run pytest-win
if: runner.os == 'Windows'
run: |
diff --git a/.gitignore b/.gitignore
index 266b95a424a..b545443db31 100644
--- a/.gitignore
+++ b/.gitignore
@@ -59,6 +59,17 @@ venv
.clangd
new.info
+# Cargo drops lock files in projects to capture resolved dependencies.
+# We don't want to record these.
+Cargo.lock
+
+# Cargo encourages a .cargo/config.toml file to symlink to a generated file. Don't save these.
+.cargo/
+
+# Normal west builds will place the Rust target directory under the build directory. However,
+# sometimes IDEs and such will litter these target directories as well.
+target/
+
# CI output
compliance.xml
_error.types
@@ -91,5 +102,7 @@ MaintainersFormat.txt
ModulesMaintainers.txt
Nits.txt
Pylint.txt
+Ruff.txt
SphinxLint.txt
+TextEncoding.txt
YAMLLint.txt
diff --git a/.ruff-excludes.toml b/.ruff-excludes.toml
new file mode 100644
index 00000000000..ac26af8b3c8
--- /dev/null
+++ b/.ruff-excludes.toml
@@ -0,0 +1,1796 @@
+# SPDX-License-Identifier: Apache-2.0
+
+# This list is generated, it contains all python scripts that existed before ruff was introduced,
+# remove entries for files that pass CI compliance testing.
+
+[lint.per-file-ignores]
+"./arch/x86/gen_gdt.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./arch/x86/gen_idt.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP030", # https://docs.astral.sh/ruff/rules/format-literals
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./arch/x86/gen_mmu.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+ "UP034", # https://docs.astral.sh/ruff/rules/extraneous-parentheses
+ "UP039", # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./arch/x86/zefi/zefi.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./arch/xtensa/core/gen_vectors.py" = [
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./arch/xtensa/core/gen_zsr.py" = [
+ "SIM401", # https://docs.astral.sh/ruff/rules/if-else-block-instead-of-dict-get
+]
+"./arch/xtensa/core/xtensa_intgen.py" = [
+ "E713", # https://docs.astral.sh/ruff/rules/not-in-test
+ "E741", # https://docs.astral.sh/ruff/rules/ambiguous-variable-name
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./boards/microchip/mec172xevb_assy6906/support/mec172x_remote_flasher.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./doc/_scripts/redirects.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+]
+"./modules/mbedtls/create_psa_files.py" = [
+ "E101", # https://docs.astral.sh/ruff/rules/mixed-spaces-and-tabs
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP006", # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./samples/modules/tflite-micro/magic_wand/train/data_augmentation.py" = [
+ "B007", # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP010", # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+]
+"./samples/modules/tflite-micro/magic_wand/train/data_augmentation_test.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP010", # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+]
+"./samples/modules/tflite-micro/magic_wand/train/data_load.py" = [
+ "B007", # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+ "B020", # https://docs.astral.sh/ruff/rules/loop-variable-overrides-iterator
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP004", # https://docs.astral.sh/ruff/rules/useless-object-inheritance
+ "UP010", # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./samples/modules/tflite-micro/magic_wand/train/data_load_test.py" = [
+ "B007", # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP010", # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+]
+"./samples/modules/tflite-micro/magic_wand/train/data_prepare.py" = [
+ "B007", # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP009", # https://docs.astral.sh/ruff/rules/utf8-encoding-declaration
+ "UP010", # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./samples/modules/tflite-micro/magic_wand/train/data_prepare_test.py" = [
+ "B007", # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+ "F821", # https://docs.astral.sh/ruff/rules/undefined-name
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP010", # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./samples/modules/tflite-micro/magic_wand/train/data_split.py" = [
+ "B007", # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP009", # https://docs.astral.sh/ruff/rules/utf8-encoding-declaration
+ "UP010", # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./samples/modules/tflite-micro/magic_wand/train/data_split_person.py" = [
+ "B007", # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP009", # https://docs.astral.sh/ruff/rules/utf8-encoding-declaration
+ "UP010", # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+]
+"./samples/modules/tflite-micro/magic_wand/train/data_split_person_test.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP010", # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+]
+"./samples/modules/tflite-micro/magic_wand/train/data_split_test.py" = [
+ "B007", # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP010", # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./samples/modules/tflite-micro/magic_wand/train/train.py" = [
+ "B007", # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM113", # https://docs.astral.sh/ruff/rules/enumerate-for-loop
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP010", # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./samples/modules/tflite-micro/magic_wand/train/train_test.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP010", # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+]
+"./samples/net/cellular_modem/server/te_udp_echo.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP039", # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./samples/net/cellular_modem/server/te_udp_receive.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP039", # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./samples/sensor/sensor_shell/pytest/test_sensor_shell.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+]
+"./samples/subsys/testsuite/pytest/basic/pytest/test_sample.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM112", # https://docs.astral.sh/ruff/rules/uncapitalized-environment-variables
+]
+"./scripts/build/check_init_priorities.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "F401", # https://docs.astral.sh/ruff/rules/unused-import
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+ "UP039", # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/build/check_init_priorities_test.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/build/elf_parser.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/build/file2hex.py" = [
+ "B023", # https://docs.astral.sh/ruff/rules/function-uses-loop-variable
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+]
+"./scripts/build/gen_app_partitions.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP030", # https://docs.astral.sh/ruff/rules/format-literals
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/build/gen_cfb_font_header.py" = [
+ "E101", # https://docs.astral.sh/ruff/rules/mixed-spaces-and-tabs
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/build/gen_device_deps.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/build/gen_image_info.py" = [
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+]
+"./scripts/build/gen_isr_tables.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/build/gen_isr_tables_parser_carrays.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP030", # https://docs.astral.sh/ruff/rules/format-literals
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/build/gen_isr_tables_parser_local.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP030", # https://docs.astral.sh/ruff/rules/format-literals
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/build/gen_kobject_list.py" = [
+ "E101", # https://docs.astral.sh/ruff/rules/mixed-spaces-and-tabs
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM102", # https://docs.astral.sh/ruff/rules/collapsible-if
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "SIM401", # https://docs.astral.sh/ruff/rules/if-else-block-instead-of-dict-get
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+ "W191", # https://docs.astral.sh/ruff/rules/tab-indentation
+]
+"./scripts/build/gen_kobject_placeholders.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+]
+"./scripts/build/gen_offset_header.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/build/gen_relocate_app.py" = [
+ "B028", # https://docs.astral.sh/ruff/rules/no-explicit-stacklevel
+ "E101", # https://docs.astral.sh/ruff/rules/mixed-spaces-and-tabs
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM102", # https://docs.astral.sh/ruff/rules/collapsible-if
+ "SIM401", # https://docs.astral.sh/ruff/rules/if-else-block-instead-of-dict-get
+ "UP006", # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+ "UP037", # https://docs.astral.sh/ruff/rules/quoted-annotation
+]
+"./scripts/build/gen_strerror_table.py" = [
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "SIM105", # https://docs.astral.sh/ruff/rules/suppressible-exception
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/build/gen_strsignal_table.py" = [
+ "SIM105", # https://docs.astral.sh/ruff/rules/suppressible-exception
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/build/gen_symtab.py" = [
+ "B007", # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/build/gen_syscalls.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "E713", # https://docs.astral.sh/ruff/rules/not-in-test
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/build/llext_inject_slids.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM113", # https://docs.astral.sh/ruff/rules/enumerate-for-loop
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP039", # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/build/llext_prepare_exptab.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM113", # https://docs.astral.sh/ruff/rules/enumerate-for-loop
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP039", # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/build/mergehex.py" = [
+ "B904", # https://docs.astral.sh/ruff/rules/raise-without-from-inside-except
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/build/parse_syscalls.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/build/process_gperf.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/build/subfolder_list.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/build/uf2conv.py" = [
+ "B011", # https://docs.astral.sh/ruff/rules/assert-false
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "E711", # https://docs.astral.sh/ruff/rules/none-comparison
+ "E722", # https://docs.astral.sh/ruff/rules/bare-except
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM102", # https://docs.astral.sh/ruff/rules/collapsible-if
+ "SIM103", # https://docs.astral.sh/ruff/rules/needless-bool
+ "SIM118", # https://docs.astral.sh/ruff/rules/in-dict-keys
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/ci/check_compliance.py" = [
+ "B904", # https://docs.astral.sh/ruff/rules/raise-without-from-inside-except
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "E741", # https://docs.astral.sh/ruff/rules/ambiguous-variable-name
+ "F401", # https://docs.astral.sh/ruff/rules/unused-import
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM112", # https://docs.astral.sh/ruff/rules/uncapitalized-environment-variables
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/ci/coverage/coverage_analysis.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/ci/errno.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/ci/guideline_check.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/ci/stats/merged_prs.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/ci/test_plan.py" = [
+ "B006", # https://docs.astral.sh/ruff/rules/mutable-argument-default
+ "E401", # https://docs.astral.sh/ruff/rules/multiple-imports-on-one-line
+ "E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM102", # https://docs.astral.sh/ruff/rules/collapsible-if
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/ci/upload_test_results_es.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "E713", # https://docs.astral.sh/ruff/rules/not-in-test
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/ci/version_mgr.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/coredump/coredump_gdbserver.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/coredump/coredump_parser/elf_parser.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+ "UP039", # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/coredump/coredump_parser/log_parser.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP030", # https://docs.astral.sh/ruff/rules/format-literals
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/coredump/coredump_serial_log_parser.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/coredump/gdbstubs/arch/arm64.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP039", # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/coredump/gdbstubs/arch/arm_cortex_m.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP039", # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/coredump/gdbstubs/arch/risc_v.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP039", # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/coredump/gdbstubs/arch/x86.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP039", # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/coredump/gdbstubs/arch/x86_64.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP039", # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/coredump/gdbstubs/arch/xtensa.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM113", # https://docs.astral.sh/ruff/rules/enumerate-for-loop
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/coredump/gdbstubs/gdbstub.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/dts/gen_defines.py" = [
+ "B007", # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "E741", # https://docs.astral.sh/ruff/rules/ambiguous-variable-name
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM102", # https://docs.astral.sh/ruff/rules/collapsible-if
+ "UP007", # https://docs.astral.sh/ruff/rules/non-pep604-annotation
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/dts/gen_driver_kconfig_dts.py" = [
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/dts/gen_dts_cmake.py" = [
+ "SIM118", # https://docs.astral.sh/ruff/rules/in-dict-keys
+]
+"./scripts/dts/python-devicetree/src/devicetree/_private.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/dts/python-devicetree/src/devicetree/dtlib.py" = [
+ "E701", # https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-colon
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM201", # https://docs.astral.sh/ruff/rules/negate-equal-op
+ "UP007", # https://docs.astral.sh/ruff/rules/non-pep604-annotation
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+ "UP037", # https://docs.astral.sh/ruff/rules/quoted-annotation
+]
+"./scripts/dts/python-devicetree/src/devicetree/edtlib.py" = [
+ "B904", # https://docs.astral.sh/ruff/rules/raise-without-from-inside-except
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "E713", # https://docs.astral.sh/ruff/rules/not-in-test
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM102", # https://docs.astral.sh/ruff/rules/collapsible-if
+ "SIM118", # https://docs.astral.sh/ruff/rules/in-dict-keys
+ "UP007", # https://docs.astral.sh/ruff/rules/non-pep604-annotation
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+ "UP037", # https://docs.astral.sh/ruff/rules/quoted-annotation
+]
+"./scripts/dts/python-devicetree/src/devicetree/grutils.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/dts/python-devicetree/tests/test_dtlib.py" = [
+ "B011", # https://docs.astral.sh/ruff/rules/assert-false
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "E101", # https://docs.astral.sh/ruff/rules/mixed-spaces-and-tabs
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP007", # https://docs.astral.sh/ruff/rules/non-pep604-annotation
+]
+"./scripts/dts/python-devicetree/tests/test_edtlib.py" = [
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "E701", # https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-colon
+ "E731", # https://docs.astral.sh/ruff/rules/lambda-assignment
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM117", # https://docs.astral.sh/ruff/rules/multiple-with-statements
+]
+"./scripts/dump_bugs_pickle.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM110", # https://docs.astral.sh/ruff/rules/reimplemented-builtin
+ "UP006", # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/footprint/fpdiff.py" = [
+ "B023", # https://docs.astral.sh/ruff/rules/function-uses-loop-variable
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM102", # https://docs.astral.sh/ruff/rules/collapsible-if
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/footprint/pack_as_twister.py" = [
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM401", # https://docs.astral.sh/ruff/rules/if-else-block-instead-of-dict-get
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/footprint/track.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/footprint/upload_data.py" = [
+ "E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM118", # https://docs.astral.sh/ruff/rules/in-dict-keys
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/gen_gcov_files.py" = [
+ "SIM105", # https://docs.astral.sh/ruff/rules/suppressible-exception
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/generate_usb_vif/generate_vif.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM103", # https://docs.astral.sh/ruff/rules/needless-bool
+ "UP038", # https://docs.astral.sh/ruff/rules/non-pep604-isinstance
+]
+"./scripts/get_maintainer.py" = [
+ "B904", # https://docs.astral.sh/ruff/rules/raise-without-from-inside-except
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM102", # https://docs.astral.sh/ruff/rules/collapsible-if
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/github_helpers.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP006", # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/gitlint/zephyr_commit_rules.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP030", # https://docs.astral.sh/ruff/rules/format-literals
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/kconfig/guiconfig.py" = [
+ "B006", # https://docs.astral.sh/ruff/rules/mutable-argument-default
+ "E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "F403", # https://docs.astral.sh/ruff/rules/undefined-local-with-import-star
+ "F405", # https://docs.astral.sh/ruff/rules/undefined-local-with-import-star-usage
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP024", # https://docs.astral.sh/ruff/rules/os-error-alias
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+ "UP038", # https://docs.astral.sh/ruff/rules/non-pep604-isinstance
+]
+"./scripts/kconfig/hardenconfig.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/kconfig/kconfigfunctions.py" = [
+ "B011", # https://docs.astral.sh/ruff/rules/assert-false
+ "SIM114", # https://docs.astral.sh/ruff/rules/if-with-same-arms
+ "SIM118", # https://docs.astral.sh/ruff/rules/in-dict-keys
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/kconfig/kconfiglib.py" = [
+ "B904", # https://docs.astral.sh/ruff/rules/raise-without-from-inside-except
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "F841", # https://docs.astral.sh/ruff/rules/unused-variable
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM102", # https://docs.astral.sh/ruff/rules/collapsible-if
+ "SIM105", # https://docs.astral.sh/ruff/rules/suppressible-exception
+ "SIM112", # https://docs.astral.sh/ruff/rules/uncapitalized-environment-variables
+ "UP004", # https://docs.astral.sh/ruff/rules/useless-object-inheritance
+ "UP008", # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+ "UP024", # https://docs.astral.sh/ruff/rules/os-error-alias
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/kconfig/lint.py" = [
+ "E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/kconfig/menuconfig.py" = [
+ "B006", # https://docs.astral.sh/ruff/rules/mutable-argument-default
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM105", # https://docs.astral.sh/ruff/rules/suppressible-exception
+ "UP010", # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+ "UP024", # https://docs.astral.sh/ruff/rules/os-error-alias
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+ "UP036", # https://docs.astral.sh/ruff/rules/outdated-version-block
+ "UP038", # https://docs.astral.sh/ruff/rules/non-pep604-isinstance
+]
+"./scripts/list_boards.py" = [
+ "E731", # https://docs.astral.sh/ruff/rules/lambda-assignment
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM102", # https://docs.astral.sh/ruff/rules/collapsible-if
+ "UP006", # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+ "UP007", # https://docs.astral.sh/ruff/rules/non-pep604-annotation
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/list_hardware.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP006", # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/logging/dictionary/database_gen.py" = [
+ "E713", # https://docs.astral.sh/ruff/rules/not-in-test
+ "E741", # https://docs.astral.sh/ruff/rules/ambiguous-variable-name
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM102", # https://docs.astral.sh/ruff/rules/collapsible-if
+ "SIM103", # https://docs.astral.sh/ruff/rules/needless-bool
+ "SIM113", # https://docs.astral.sh/ruff/rules/enumerate-for-loop
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+]
+"./scripts/logging/dictionary/dictionary_parser/data_types.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP039", # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/logging/dictionary/dictionary_parser/log_database.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM103", # https://docs.astral.sh/ruff/rules/needless-bool
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP039", # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/logging/dictionary/dictionary_parser/log_parser.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/logging/dictionary/dictionary_parser/log_parser_v1.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP030", # https://docs.astral.sh/ruff/rules/format-literals
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/logging/dictionary/dictionary_parser/log_parser_v3.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM401", # https://docs.astral.sh/ruff/rules/if-else-block-instead-of-dict-get
+]
+"./scripts/logging/dictionary/dictionary_parser/mipi_syst.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/logging/dictionary/dictionary_parser/utils.py" = [
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/logging/dictionary/log_parser.py" = [
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/make_bugs_pickle.py" = [
+ "UP006", # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/net/enumerate_http_status.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/profiling/stackcollapse.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP033", # https://docs.astral.sh/ruff/rules/lru-cache-with-maxsize-none
+]
+"./scripts/pylib/build_helpers/domains.py" = [
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/device/binary_adapter.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "SIM103", # https://docs.astral.sh/ruff/rules/needless-bool
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/device/device_adapter.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/device/factory.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP006", # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/device/fifo_handler.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/device/hardware_adapter.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP024", # https://docs.astral.sh/ruff/rules/os-error-alias
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/device/qemu_adapter.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/device/utils.py" = [
+ "SIM105", # https://docs.astral.sh/ruff/rules/suppressible-exception
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/fixtures.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP006", # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/helpers/domains_helper.py" = [
+ "E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/helpers/shell.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "E741", # https://docs.astral.sh/ruff/rules/ambiguous-variable-name
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM102", # https://docs.astral.sh/ruff/rules/collapsible-if
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/helpers/utils.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/twister_harness_config.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/pylib/pytest-twister-harness/tests/conftest.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/pylib/pytest-twister-harness/tests/device/binary_adapter_test.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/pylib/pytest-twister-harness/tests/device/hardware_adapter_test.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/pylib/pytest-twister-harness/tests/device/qemu_adapter_test.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/pylib/pytest-twister-harness/tests/helpers/shell_test.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+]
+"./scripts/pylib/pytest-twister-harness/tests/resources/fifo_mock.py" = [
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP012", # https://docs.astral.sh/ruff/rules/unnecessary-encode-utf8
+]
+"./scripts/pylib/twister/expr_parser.py" = [
+ "SIM103", # https://docs.astral.sh/ruff/rules/needless-bool
+ "SIM110", # https://docs.astral.sh/ruff/rules/reimplemented-builtin
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/pylib/twister/scl.py" = [
+ "F401", # https://docs.astral.sh/ruff/rules/unused-import
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/pylib/twister/twisterlib/testplan.py" = [
+ "E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+ "F401", # https://docs.astral.sh/ruff/rules/unused-import
+]
+"./scripts/pylint/checkers/argparse-checker.py" = [
+ "F821", # https://docs.astral.sh/ruff/rules/undefined-name
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/release/bug_bash.py" = [
+ "B010", # https://docs.astral.sh/ruff/rules/set-attr-with-constant
+ "B904", # https://docs.astral.sh/ruff/rules/raise-without-from-inside-except
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP004", # https://docs.astral.sh/ruff/rules/useless-object-inheritance
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP030", # https://docs.astral.sh/ruff/rules/format-literals
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/release/list_backports.py" = [
+ "B009", # https://docs.astral.sh/ruff/rules/get-attr-with-constant
+ "B010", # https://docs.astral.sh/ruff/rules/set-attr-with-constant
+ "B904", # https://docs.astral.sh/ruff/rules/raise-without-from-inside-except
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP004", # https://docs.astral.sh/ruff/rules/useless-object-inheritance
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP030", # https://docs.astral.sh/ruff/rules/format-literals
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/release/list_devicetree_bindings_changes.py" = [
+ "E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM117", # https://docs.astral.sh/ruff/rules/multiple-with-statements
+ "UP006", # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+ "UP007", # https://docs.astral.sh/ruff/rules/non-pep604-annotation
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/set_assignees.py" = [
+ "E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "E741", # https://docs.astral.sh/ruff/rules/ambiguous-variable-name
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM113", # https://docs.astral.sh/ruff/rules/enumerate-for-loop
+]
+"./scripts/snippets.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP006", # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/support/quartus-flash.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+]
+"./scripts/tests/twister/conftest.py" = [
+ "E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/tests/twister/pytest_integration/test_harness_pytest.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/tests/twister/test_cmakecache.py" = [
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_config_parser.py" = [
+ "B017", # https://docs.astral.sh/ruff/rules/assert-raises-exception
+ "B033", # https://docs.astral.sh/ruff/rules/duplicate-value
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM117", # https://docs.astral.sh/ruff/rules/multiple-with-statements
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_data/mixins/test_to_ignore.py" = [
+ "B011", # https://docs.astral.sh/ruff/rules/assert-false
+]
+"./scripts/tests/twister/test_environment.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM117", # https://docs.astral.sh/ruff/rules/multiple-with-statements
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_errors.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/tests/twister/test_handlers.py" = [
+ "B011", # https://docs.astral.sh/ruff/rules/assert-false
+ "E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP012", # https://docs.astral.sh/ruff/rules/unnecessary-encode-utf8
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_hardwaremap.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/tests/twister/test_harness.py" = [
+ "B017", # https://docs.astral.sh/ruff/rules/assert-raises-exception
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "E713", # https://docs.astral.sh/ruff/rules/not-in-test
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_jobserver.py" = [
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_log_helper.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_platform.py" = [
+ "B011", # https://docs.astral.sh/ruff/rules/assert-false
+ "E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_quarantine.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_runner.py" = [
+ "E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP006", # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/tests/twister/test_scl.py" = [
+ "E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM117", # https://docs.astral.sh/ruff/rules/multiple-with-statements
+ "UP025", # https://docs.astral.sh/ruff/rules/unicode-kind-prefix
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_testinstance.py" = [
+ "E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_testplan.py" = [
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "E101", # https://docs.astral.sh/ruff/rules/mixed-spaces-and-tabs
+ "E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM118", # https://docs.astral.sh/ruff/rules/in-dict-keys
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+ "W191", # https://docs.astral.sh/ruff/rules/tab-indentation
+]
+"./scripts/tests/twister/test_testsuite.py" = [
+ "B011", # https://docs.astral.sh/ruff/rules/assert-false
+ "E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_twister.py" = [
+ "E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/conftest.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_addon.py" = [
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_config.py" = [
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_coverage.py" = [
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_data/tests/pytest/pytest/test_sample.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM112", # https://docs.astral.sh/ruff/rules/uncapitalized-environment-variables
+]
+"./scripts/tests/twister_blackbox/test_device.py" = [
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/tests/twister_blackbox/test_disable.py" = [
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_error.py" = [
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "E721", # https://docs.astral.sh/ruff/rules/type-comparison
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_filter.py" = [
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_footprint.py" = [
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_hardwaremap.py" = [
+ "B007", # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_outfile.py" = [
+ "B011", # https://docs.astral.sh/ruff/rules/assert-false
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_output.py" = [
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_platform.py" = [
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_printouts.py" = [
+ "B011", # https://docs.astral.sh/ruff/rules/assert-false
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_quarantine.py" = [
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_report.py" = [
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "E701", # https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-colon
+ "E713", # https://docs.astral.sh/ruff/rules/not-in-test
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_runner.py" = [
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_shuffle.py" = [
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_testlist.py" = [
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_testplan.py" = [
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "E721", # https://docs.astral.sh/ruff/rules/type-comparison
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_tooling.py" = [
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tracing/parse_ctf.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/tracing/trace_capture_uart.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP012", # https://docs.astral.sh/ruff/rules/unnecessary-encode-utf8
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/tracing/trace_capture_usb.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/utils/board_v1_to_v2.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/utils/convert_guidelines.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/utils/gen_util_macros.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/utils/migrate_mcumgr_kconfigs.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/utils/ntc_thermistor_table.py" = [
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/utils/pinctrl_nrf_migrate.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP004", # https://docs.astral.sh/ruff/rules/useless-object-inheritance
+ "UP006", # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+ "UP007", # https://docs.astral.sh/ruff/rules/non-pep604-annotation
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/west_commands/bindesc.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP038", # https://docs.astral.sh/ruff/rules/non-pep604-isinstance
+]
+"./scripts/west_commands/blobs.py" = [
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/build.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM105", # https://docs.astral.sh/ruff/rules/suppressible-exception
+ "UP008", # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/build_helpers.py" = [
+ "E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/completion.py" = [
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/debug.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP008", # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+]
+"./scripts/west_commands/export.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/fetchers/__init__.py" = [
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/fetchers/core.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP006", # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/west_commands/fetchers/http.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+]
+"./scripts/west_commands/flash.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP008", # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+]
+"./scripts/west_commands/robot.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP008", # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+]
+"./scripts/west_commands/run_common.py" = [
+ "B904", # https://docs.astral.sh/ruff/rules/raise-without-from-inside-except
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "E741", # https://docs.astral.sh/ruff/rules/ambiguous-variable-name
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM102", # https://docs.astral.sh/ruff/rules/collapsible-if
+ "SIM114", # https://docs.astral.sh/ruff/rules/if-with-same-arms
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/sdk.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "E713", # https://docs.astral.sh/ruff/rules/not-in-test
+ "E741", # https://docs.astral.sh/ruff/rules/ambiguous-variable-name
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "SIM300", # https://docs.astral.sh/ruff/rules/yoda-conditions
+]
+"./scripts/west_commands/sign.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP008", # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/simulate.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP008", # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+]
+"./scripts/west_commands/spdx.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/tests/conftest.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/tests/test_blackmagicprobe.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/tests/test_bossac.py" = [
+ "E101", # https://docs.astral.sh/ruff/rules/mixed-spaces-and-tabs
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM117", # https://docs.astral.sh/ruff/rules/multiple-with-statements
+ "W191", # https://docs.astral.sh/ruff/rules/tab-indentation
+]
+"./scripts/west_commands/tests/test_build.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/tests/test_canopen_program.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/tests/test_dediprog.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/tests/test_dfu_util.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/tests/test_gd32isp.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/tests/test_mdb.py" = [
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/tests/test_nrf.py" = [
+ "B011", # https://docs.astral.sh/ruff/rules/assert-false
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP007", # https://docs.astral.sh/ruff/rules/non-pep604-annotation
+]
+"./scripts/west_commands/tests/test_nxp_s32dbg.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+]
+"./scripts/west_commands/tests/test_pyocd.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/tests/test_stm32cubeprogrammer.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/tests/test_stm32flash.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM117", # https://docs.astral.sh/ruff/rules/multiple-with-statements
+]
+"./scripts/west_commands/tests/test_xsdb.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/twister_cmd.py" = [
+ "E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP008", # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/zcmake.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM102", # https://docs.astral.sh/ruff/rules/collapsible-if
+ "SIM114", # https://docs.astral.sh/ruff/rules/if-with-same-arms
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/zspdx/cmakecache.py" = [
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/west_commands/zspdx/cmakefileapi.py" = [
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP008", # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+]
+"./scripts/west_commands/zspdx/cmakefileapijson.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM116", # https://docs.astral.sh/ruff/rules/if-else-block-instead-of-dict-lookup
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/west_commands/zspdx/datatypes.py" = [
+ "UP008", # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+]
+"./scripts/west_commands/zspdx/getincludes.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP021", # https://docs.astral.sh/ruff/rules/replace-universal-newlines
+ "UP022", # https://docs.astral.sh/ruff/rules/replace-stdout-stderr
+]
+"./scripts/west_commands/zspdx/sbom.py" = [
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP008", # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+]
+"./scripts/west_commands/zspdx/scanner.py" = [
+ "SIM113", # https://docs.astral.sh/ruff/rules/enumerate-for-loop
+ "UP008", # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/west_commands/zspdx/walker.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP008", # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+]
+"./scripts/west_commands/zspdx/writer.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/zephyr_module.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./soc/intel/intel_adsp/tools/cavstool.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "E701", # https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-colon
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./soc/intel/intel_adsp/tools/cavstool_client.py" = [
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM115", # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+ "SIM201", # https://docs.astral.sh/ruff/rules/negate-equal-op
+ "UP039", # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./soc/intel/intel_adsp/tools/remote-fw-service.py" = [
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP012", # https://docs.astral.sh/ruff/rules/unnecessary-encode-utf8
+ "UP039", # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./soc/intel/intel_ish/utils/build_ish_firmware.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP009", # https://docs.astral.sh/ruff/rules/utf8-encoding-declaration
+]
+"./soc/microchip/mec/common/spigen/mec_spi_gen.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP030", # https://docs.astral.sh/ruff/rules/format-literals
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./soc/nuvoton/npcm/common/esiost/esiost.py" = [
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./soc/nuvoton/npcm/common/esiost/esiost_args.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./soc/nuvoton/npcx/common/ecst/ecst.py" = [
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./soc/nuvoton/npcx/common/ecst/ecst_args.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM110", # https://docs.astral.sh/ruff/rules/reimplemented-builtin
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./soc/silabs/silabs_sim3/sim3u/gen_crossbar_config.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+]
+"./tests/boot/with_mcumgr/pytest/west_sign_wrapper.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./tests/drivers/can/host/pytest/can_shell.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM401", # https://docs.astral.sh/ruff/rules/if-else-block-instead-of-dict-get
+ "UP006", # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+ "UP007", # https://docs.astral.sh/ruff/rules/non-pep604-annotation
+ "UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./tests/drivers/can/host/pytest/test_can.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP039", # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./tests/kernel/timer/timer_behavior/pytest/saleae_logic2.py" = [
+ "B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./tests/kernel/timer/timer_behavior/pytest/test_timer.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./tests/misc/check_init_priorities/validate_check_init_priorities_output.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./tests/net/lib/lwm2m/interop/pytest/conftest.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./tests/net/lib/lwm2m/interop/pytest/leshan.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./tests/net/lib/lwm2m/interop/pytest/test_bootstrap.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./tests/net/lib/lwm2m/interop/pytest/test_lwm2m.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM118", # https://docs.astral.sh/ruff/rules/in-dict-keys
+ "UP018", # https://docs.astral.sh/ruff/rules/native-literals
+]
+"./tests/net/lib/lwm2m/interop/pytest/test_nosec.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./tests/net/lib/lwm2m/interop/pytest/test_portfolio.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "SIM118", # https://docs.astral.sh/ruff/rules/in-dict-keys
+]
+"./tests/net/socket/tls_configurations/pytest/test_app_vs_openssl.py" = [
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+ "UP032", # https://docs.astral.sh/ruff/rules/f-string
+]
+"./tests/subsys/debug/gdbstub/pytest/test_gdbstub.py" = [
+ "E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./tests/ztest/ztest_param/pytest/test_parameters.py" = [
+ "E501", # https://docs.astral.sh/ruff/rules/line-too-long
+ "I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+
+[format]
+exclude = [
+ "./arch/x86/gen_gdt.py",
+ "./arch/x86/gen_idt.py",
+ "./arch/x86/gen_mmu.py",
+ "./arch/x86/zefi/zefi.py",
+ "./arch/xtensa/core/gen_vectors.py",
+ "./arch/xtensa/core/gen_zsr.py",
+ "./arch/xtensa/core/xtensa_intgen.py",
+ "./boards/microchip/mec172xevb_assy6906/support/mec172x_remote_flasher.py",
+ "./doc/_extensions/zephyr/api_overview.py",
+ "./doc/_extensions/zephyr/application.py",
+ "./doc/_extensions/zephyr/doxybridge.py",
+ "./doc/_extensions/zephyr/doxyrunner.py",
+ "./doc/_extensions/zephyr/doxytooltip/__init__.py",
+ "./doc/_extensions/zephyr/dtcompatible-role.py",
+ "./doc/_extensions/zephyr/external_content.py",
+ "./doc/_extensions/zephyr/gh_utils.py",
+ "./doc/_extensions/zephyr/html_redirects.py",
+ "./doc/_extensions/zephyr/kconfig/__init__.py",
+ "./doc/_extensions/zephyr/link-roles.py",
+ "./doc/_scripts/gen_boards_catalog.py",
+ "./doc/_scripts/gen_devicetree_rest.py",
+ "./doc/_scripts/redirects.py",
+ "./doc/conf.py",
+ "./doc/develop/test/twister/sample_blackbox_test.py",
+ "./modules/mbedtls/create_psa_files.py",
+ "./samples/boards/nordic/coresight_stm/pytest/test_stm.py",
+ "./samples/modules/tflite-micro/magic_wand/train/data_augmentation.py",
+ "./samples/modules/tflite-micro/magic_wand/train/data_augmentation_test.py",
+ "./samples/modules/tflite-micro/magic_wand/train/data_load.py",
+ "./samples/modules/tflite-micro/magic_wand/train/data_load_test.py",
+ "./samples/modules/tflite-micro/magic_wand/train/data_prepare.py",
+ "./samples/modules/tflite-micro/magic_wand/train/data_prepare_test.py",
+ "./samples/modules/tflite-micro/magic_wand/train/data_split.py",
+ "./samples/modules/tflite-micro/magic_wand/train/data_split_person.py",
+ "./samples/modules/tflite-micro/magic_wand/train/data_split_person_test.py",
+ "./samples/modules/tflite-micro/magic_wand/train/data_split_test.py",
+ "./samples/modules/tflite-micro/magic_wand/train/train.py",
+ "./samples/modules/tflite-micro/magic_wand/train/train_test.py",
+ "./samples/modules/thrift/hello/client/hello_client.py",
+ "./samples/net/cellular_modem/server/te_udp_echo.py",
+ "./samples/net/cellular_modem/server/te_udp_receive.py",
+ "./samples/net/cloud/aws_iot_mqtt/src/creds/convert_keys.py",
+ "./samples/sensor/sensor_shell/pytest/test_sensor_shell.py",
+ "./samples/subsys/profiling/perf/pytest/test_perf.py",
+ "./samples/subsys/testsuite/pytest/basic/pytest/conftest.py",
+ "./samples/subsys/testsuite/pytest/basic/pytest/test_sample.py",
+ "./samples/subsys/zbus/remote_mock/remote_mock.py",
+ "./scripts/build/check_init_priorities.py",
+ "./scripts/build/check_init_priorities_test.py",
+ "./scripts/build/elf_parser.py",
+ "./scripts/build/file2hex.py",
+ "./scripts/build/gen_app_partitions.py",
+ "./scripts/build/gen_cfb_font_header.py",
+ "./scripts/build/gen_device_deps.py",
+ "./scripts/build/gen_image_info.py",
+ "./scripts/build/gen_isr_tables.py",
+ "./scripts/build/gen_isr_tables_parser_carrays.py",
+ "./scripts/build/gen_isr_tables_parser_local.py",
+ "./scripts/build/gen_kobject_list.py",
+ "./scripts/build/gen_kobject_placeholders.py",
+ "./scripts/build/gen_offset_header.py",
+ "./scripts/build/gen_relocate_app.py",
+ "./scripts/build/gen_strerror_table.py",
+ "./scripts/build/gen_strsignal_table.py",
+ "./scripts/build/gen_symtab.py",
+ "./scripts/build/gen_syscalls.py",
+ "./scripts/build/llext_inject_slids.py",
+ "./scripts/build/llext_prepare_exptab.py",
+ "./scripts/build/mergehex.py",
+ "./scripts/build/parse_syscalls.py",
+ "./scripts/build/process_gperf.py",
+ "./scripts/build/subfolder_list.py",
+ "./scripts/build/uf2conv.py",
+ "./scripts/check_maintainers.py",
+ "./scripts/ci/check_compliance.py",
+ "./scripts/ci/coverage/coverage_analysis.py",
+ "./scripts/ci/errno.py",
+ "./scripts/ci/guideline_check.py",
+ "./scripts/ci/stats/merged_prs.py",
+ "./scripts/ci/test_plan.py",
+ "./scripts/ci/upload_test_results_es.py",
+ "./scripts/ci/version_mgr.py",
+ "./scripts/coredump/coredump_gdbserver.py",
+ "./scripts/coredump/coredump_parser/elf_parser.py",
+ "./scripts/coredump/coredump_parser/log_parser.py",
+ "./scripts/coredump/coredump_serial_log_parser.py",
+ "./scripts/coredump/gdbstubs/arch/arm64.py",
+ "./scripts/coredump/gdbstubs/arch/arm_cortex_m.py",
+ "./scripts/coredump/gdbstubs/arch/risc_v.py",
+ "./scripts/coredump/gdbstubs/arch/x86.py",
+ "./scripts/coredump/gdbstubs/arch/x86_64.py",
+ "./scripts/coredump/gdbstubs/arch/xtensa.py",
+ "./scripts/coredump/gdbstubs/gdbstub.py",
+ "./scripts/dts/gen_defines.py",
+ "./scripts/dts/gen_driver_kconfig_dts.py",
+ "./scripts/dts/gen_dts_cmake.py",
+ "./scripts/dts/gen_edt.py",
+ "./scripts/dts/python-devicetree/src/devicetree/_private.py",
+ "./scripts/dts/python-devicetree/src/devicetree/dtlib.py",
+ "./scripts/dts/python-devicetree/src/devicetree/edtlib.py",
+ "./scripts/dts/python-devicetree/src/devicetree/grutils.py",
+ "./scripts/dts/python-devicetree/tests/test_dtlib.py",
+ "./scripts/dts/python-devicetree/tests/test_edtlib.py",
+ "./scripts/dump_bugs_pickle.py",
+ "./scripts/footprint/fpdiff.py",
+ "./scripts/footprint/pack_as_twister.py",
+ "./scripts/footprint/track.py",
+ "./scripts/footprint/upload_data.py",
+ "./scripts/gen_gcov_files.py",
+ "./scripts/generate_usb_vif/constants/xml_constants.py",
+ "./scripts/generate_usb_vif/generate_vif.py",
+ "./scripts/get_maintainer.py",
+ "./scripts/github_helpers.py",
+ "./scripts/gitlint/zephyr_commit_rules.py",
+ "./scripts/kconfig/guiconfig.py",
+ "./scripts/kconfig/hardenconfig.py",
+ "./scripts/kconfig/kconfig.py",
+ "./scripts/kconfig/kconfigfunctions.py",
+ "./scripts/kconfig/kconfiglib.py",
+ "./scripts/kconfig/lint.py",
+ "./scripts/kconfig/menuconfig.py",
+ "./scripts/list_boards.py",
+ "./scripts/list_hardware.py",
+ "./scripts/list_shields.py",
+ "./scripts/logging/dictionary/database_gen.py",
+ "./scripts/logging/dictionary/dictionary_parser/data_types.py",
+ "./scripts/logging/dictionary/dictionary_parser/log_database.py",
+ "./scripts/logging/dictionary/dictionary_parser/log_parser.py",
+ "./scripts/logging/dictionary/dictionary_parser/log_parser_v1.py",
+ "./scripts/logging/dictionary/dictionary_parser/log_parser_v3.py",
+ "./scripts/logging/dictionary/dictionary_parser/utils.py",
+ "./scripts/logging/dictionary/log_parser.py",
+ "./scripts/logging/dictionary/log_parser_uart.py",
+ "./scripts/make_bugs_pickle.py",
+ "./scripts/net/enumerate_http_status.py",
+ "./scripts/profiling/stackcollapse.py",
+ "./scripts/pylib/build_helpers/domains.py",
+ "./scripts/pylib/pytest-twister-harness/src/twister_harness/device/binary_adapter.py",
+ "./scripts/pylib/pytest-twister-harness/src/twister_harness/device/device_adapter.py",
+ "./scripts/pylib/pytest-twister-harness/src/twister_harness/device/fifo_handler.py",
+ "./scripts/pylib/pytest-twister-harness/src/twister_harness/device/hardware_adapter.py",
+ "./scripts/pylib/pytest-twister-harness/src/twister_harness/device/qemu_adapter.py",
+ "./scripts/pylib/pytest-twister-harness/src/twister_harness/fixtures.py",
+ "./scripts/pylib/pytest-twister-harness/src/twister_harness/helpers/mcumgr.py",
+ "./scripts/pylib/pytest-twister-harness/src/twister_harness/helpers/shell.py",
+ "./scripts/pylib/pytest-twister-harness/src/twister_harness/plugin.py",
+ "./scripts/pylib/pytest-twister-harness/src/twister_harness/twister_harness_config.py",
+ "./scripts/pylib/pytest-twister-harness/tests/conftest.py",
+ "./scripts/pylib/pytest-twister-harness/tests/device/binary_adapter_test.py",
+ "./scripts/pylib/pytest-twister-harness/tests/device/hardware_adapter_test.py",
+ "./scripts/pylib/pytest-twister-harness/tests/device/qemu_adapter_test.py",
+ "./scripts/pylib/pytest-twister-harness/tests/helpers/shell_test.py",
+ "./scripts/pylib/pytest-twister-harness/tests/plugin_test.py",
+ "./scripts/pylib/twister/expr_parser.py",
+ "./scripts/pylib/twister/scl.py",
+ "./scripts/pylib/twister/twisterlib/cmakecache.py",
+ "./scripts/pylib/twister/twisterlib/config_parser.py",
+ "./scripts/pylib/twister/twisterlib/coverage.py",
+ "./scripts/pylib/twister/twisterlib/environment.py",
+ "./scripts/pylib/twister/twisterlib/error.py",
+ "./scripts/pylib/twister/twisterlib/handlers.py",
+ "./scripts/pylib/twister/twisterlib/hardwaremap.py",
+ "./scripts/pylib/twister/twisterlib/harness.py",
+ "./scripts/pylib/twister/twisterlib/jobserver.py",
+ "./scripts/pylib/twister/twisterlib/log_helper.py",
+ "./scripts/pylib/twister/twisterlib/package.py",
+ "./scripts/pylib/twister/twisterlib/platform.py",
+ "./scripts/pylib/twister/twisterlib/quarantine.py",
+ "./scripts/pylib/twister/twisterlib/reports.py",
+ "./scripts/pylib/twister/twisterlib/runner.py",
+ "./scripts/pylib/twister/twisterlib/size_calc.py",
+ "./scripts/pylib/twister/twisterlib/statuses.py",
+ "./scripts/pylib/twister/twisterlib/testinstance.py",
+ "./scripts/pylib/twister/twisterlib/testplan.py",
+ "./scripts/pylib/twister/twisterlib/testsuite.py",
+ "./scripts/pylib/twister/twisterlib/twister_main.py",
+ "./scripts/pylint/checkers/argparse-checker.py",
+ "./scripts/release/bug_bash.py",
+ "./scripts/release/list_backports.py",
+ "./scripts/release/list_devicetree_bindings_changes.py",
+ "./scripts/set_assignees.py",
+ "./scripts/snippets.py",
+ "./scripts/support/quartus-flash.py",
+ "./scripts/tests/twister/conftest.py",
+ "./scripts/tests/twister/pytest_integration/test_harness_pytest.py",
+ "./scripts/tests/twister/test_cmakecache.py",
+ "./scripts/tests/twister/test_config_parser.py",
+ "./scripts/tests/twister/test_environment.py",
+ "./scripts/tests/twister/test_errors.py",
+ "./scripts/tests/twister/test_handlers.py",
+ "./scripts/tests/twister/test_hardwaremap.py",
+ "./scripts/tests/twister/test_harness.py",
+ "./scripts/tests/twister/test_jobserver.py",
+ "./scripts/tests/twister/test_log_helper.py",
+ "./scripts/tests/twister/test_platform.py",
+ "./scripts/tests/twister/test_quarantine.py",
+ "./scripts/tests/twister/test_runner.py",
+ "./scripts/tests/twister/test_scl.py",
+ "./scripts/tests/twister/test_testinstance.py",
+ "./scripts/tests/twister/test_testplan.py",
+ "./scripts/tests/twister/test_testsuite.py",
+ "./scripts/tests/twister/test_twister.py",
+ "./scripts/tests/twister_blackbox/conftest.py",
+ "./scripts/tests/twister_blackbox/test_addon.py",
+ "./scripts/tests/twister_blackbox/test_config.py",
+ "./scripts/tests/twister_blackbox/test_coverage.py",
+ "./scripts/tests/twister_blackbox/test_data/tests/pytest/pytest/conftest.py",
+ "./scripts/tests/twister_blackbox/test_data/tests/pytest/pytest/test_sample.py",
+ "./scripts/tests/twister_blackbox/test_device.py",
+ "./scripts/tests/twister_blackbox/test_disable.py",
+ "./scripts/tests/twister_blackbox/test_error.py",
+ "./scripts/tests/twister_blackbox/test_filter.py",
+ "./scripts/tests/twister_blackbox/test_footprint.py",
+ "./scripts/tests/twister_blackbox/test_hardwaremap.py",
+ "./scripts/tests/twister_blackbox/test_outfile.py",
+ "./scripts/tests/twister_blackbox/test_output.py",
+ "./scripts/tests/twister_blackbox/test_platform.py",
+ "./scripts/tests/twister_blackbox/test_printouts.py",
+ "./scripts/tests/twister_blackbox/test_quarantine.py",
+ "./scripts/tests/twister_blackbox/test_report.py",
+ "./scripts/tests/twister_blackbox/test_runner.py",
+ "./scripts/tests/twister_blackbox/test_shuffle.py",
+ "./scripts/tests/twister_blackbox/test_testlist.py",
+ "./scripts/tests/twister_blackbox/test_testplan.py",
+ "./scripts/tests/twister_blackbox/test_tooling.py",
+ "./scripts/tracing/parse_ctf.py",
+ "./scripts/tracing/trace_capture_uart.py",
+ "./scripts/tracing/trace_capture_usb.py",
+ "./scripts/utils/board_v1_to_v2.py",
+ "./scripts/utils/convert_guidelines.py",
+ "./scripts/utils/gen_util_macros.py",
+ "./scripts/utils/migrate_includes.py",
+ "./scripts/utils/migrate_mcumgr_kconfigs.py",
+ "./scripts/utils/migrate_posix_kconfigs.py",
+ "./scripts/utils/ntc_thermistor_table.py",
+ "./scripts/utils/pinctrl_nrf_migrate.py",
+ "./scripts/utils/twister_to_list.py",
+ "./scripts/west_commands/bindesc.py",
+ "./scripts/west_commands/blobs.py",
+ "./scripts/west_commands/boards.py",
+ "./scripts/west_commands/build.py",
+ "./scripts/west_commands/build_helpers.py",
+ "./scripts/west_commands/completion.py",
+ "./scripts/west_commands/debug.py",
+ "./scripts/west_commands/export.py",
+ "./scripts/west_commands/fetchers/__init__.py",
+ "./scripts/west_commands/fetchers/core.py",
+ "./scripts/west_commands/fetchers/http.py",
+ "./scripts/west_commands/flash.py",
+ "./scripts/west_commands/robot.py",
+ "./scripts/west_commands/run_common.py",
+ "./scripts/west_commands/run_tests.py",
+ "./scripts/west_commands/runners/__init__.py",
+ "./scripts/west_commands/runners/blackmagicprobe.py",
+ "./scripts/west_commands/runners/bossac.py",
+ "./scripts/west_commands/runners/canopen_program.py",
+ "./scripts/west_commands/runners/core.py",
+ "./scripts/west_commands/runners/dediprog.py",
+ "./scripts/west_commands/runners/dfu.py",
+ "./scripts/west_commands/runners/esp32.py",
+ "./scripts/west_commands/runners/ezflashcli.py",
+ "./scripts/west_commands/runners/gd32isp.py",
+ "./scripts/west_commands/runners/hifive1.py",
+ "./scripts/west_commands/runners/intel_adsp.py",
+ "./scripts/west_commands/runners/intel_cyclonev.py",
+ "./scripts/west_commands/runners/jlink.py",
+ "./scripts/west_commands/runners/linkserver.py",
+ "./scripts/west_commands/runners/mdb.py",
+ "./scripts/west_commands/runners/misc.py",
+ "./scripts/west_commands/runners/native.py",
+ "./scripts/west_commands/runners/nios2.py",
+ "./scripts/west_commands/runners/nrf_common.py",
+ "./scripts/west_commands/runners/nrfjprog.py",
+ "./scripts/west_commands/runners/nrfutil.py",
+ "./scripts/west_commands/runners/nsim.py",
+ "./scripts/west_commands/runners/nxp_s32dbg.py",
+ "./scripts/west_commands/runners/openocd.py",
+ "./scripts/west_commands/runners/probe_rs.py",
+ "./scripts/west_commands/runners/pyocd.py",
+ "./scripts/west_commands/runners/qemu.py",
+ "./scripts/west_commands/runners/renode-robot.py",
+ "./scripts/west_commands/runners/renode.py",
+ "./scripts/west_commands/runners/silabs_commander.py",
+ "./scripts/west_commands/runners/spi_burn.py",
+ "./scripts/west_commands/runners/stm32cubeprogrammer.py",
+ "./scripts/west_commands/runners/stm32flash.py",
+ "./scripts/west_commands/runners/teensy.py",
+ "./scripts/west_commands/runners/trace32.py",
+ "./scripts/west_commands/runners/uf2.py",
+ "./scripts/west_commands/runners/xsdb.py",
+ "./scripts/west_commands/runners/xtensa.py",
+ "./scripts/west_commands/sdk.py",
+ "./scripts/west_commands/shields.py",
+ "./scripts/west_commands/sign.py",
+ "./scripts/west_commands/simulate.py",
+ "./scripts/west_commands/spdx.py",
+ "./scripts/west_commands/tests/conftest.py",
+ "./scripts/west_commands/tests/test_blackmagicprobe.py",
+ "./scripts/west_commands/tests/test_bossac.py",
+ "./scripts/west_commands/tests/test_build.py",
+ "./scripts/west_commands/tests/test_canopen_program.py",
+ "./scripts/west_commands/tests/test_dediprog.py",
+ "./scripts/west_commands/tests/test_dfu_util.py",
+ "./scripts/west_commands/tests/test_gd32isp.py",
+ "./scripts/west_commands/tests/test_imports.py",
+ "./scripts/west_commands/tests/test_mdb.py",
+ "./scripts/west_commands/tests/test_nrf.py",
+ "./scripts/west_commands/tests/test_nxp_s32dbg.py",
+ "./scripts/west_commands/tests/test_pyocd.py",
+ "./scripts/west_commands/tests/test_stm32cubeprogrammer.py",
+ "./scripts/west_commands/tests/test_stm32flash.py",
+ "./scripts/west_commands/tests/test_twister.py",
+ "./scripts/west_commands/twister_cmd.py",
+ "./scripts/west_commands/zcmake.py",
+ "./scripts/west_commands/zephyr_ext_common.py",
+ "./scripts/west_commands/zspdx/cmakefileapi.py",
+ "./scripts/west_commands/zspdx/cmakefileapijson.py",
+ "./scripts/west_commands/zspdx/licenses.py",
+ "./scripts/west_commands/zspdx/walker.py",
+ "./scripts/west_commands/zspdx/writer.py",
+ "./scripts/zephyr_module.py",
+ "./soc/aspeed/ast10x0/tools/gen_uart_booting_image.py",
+ "./soc/intel/intel_adsp/tools/cavstool.py",
+ "./soc/intel/intel_adsp/tools/cavstool_client.py",
+ "./soc/intel/intel_adsp/tools/remote-fw-service.py",
+ "./soc/intel/intel_ish/utils/build_ish_firmware.py",
+ "./soc/microchip/mec/common/spigen/mec_spi_gen.py",
+ "./soc/nuvoton/npcm/common/esiost/esiost.py",
+ "./soc/nuvoton/npcm/common/esiost/esiost_args.py",
+ "./soc/nuvoton/npcx/common/ecst/ecst.py",
+ "./soc/nuvoton/npcx/common/ecst/ecst_args.py",
+ "./soc/silabs/silabs_sim3/sim3u/gen_crossbar_config.py",
+ "./tests/boot/with_mcumgr/pytest/test_downgrade_prevention.py",
+ "./tests/boot/with_mcumgr/pytest/test_upgrade.py",
+ "./tests/boot/with_mcumgr/pytest/west_sign_wrapper.py",
+ "./tests/drivers/can/host/pytest/can_shell.py",
+ "./tests/drivers/can/host/pytest/conftest.py",
+ "./tests/drivers/can/host/pytest/test_can.py",
+ "./tests/kernel/timer/timer_behavior/pytest/saleae_logic2.py",
+ "./tests/kernel/timer/timer_behavior/pytest/test_timer.py",
+ "./tests/misc/check_init_priorities/validate_check_init_priorities_output.py",
+ "./tests/misc/llext-edk/pytest/test_edk.py",
+ "./tests/net/lib/lwm2m/interop/pytest/conftest.py",
+ "./tests/net/lib/lwm2m/interop/pytest/leshan.py",
+ "./tests/net/lib/lwm2m/interop/pytest/test_blockwise.py",
+ "./tests/net/lib/lwm2m/interop/pytest/test_bootstrap.py",
+ "./tests/net/lib/lwm2m/interop/pytest/test_lwm2m.py",
+ "./tests/net/lib/lwm2m/interop/pytest/test_nosec.py",
+ "./tests/net/lib/lwm2m/interop/pytest/test_portfolio.py",
+ "./tests/net/socket/tls_configurations/pytest/test_app_vs_openssl.py",
+ "./tests/net/socket/udp/generate-c-string.py",
+ "./tests/subsys/debug/gdbstub/pytest/test_gdbstub.py",
+ "./tests/subsys/logging/dictionary/pytest/test_logging_dictionary.py",
+ "./tests/ztest/ztest_param/pytest/test_parameters.py",
+]
diff --git a/.ruff.toml b/.ruff.toml
new file mode 100644
index 00000000000..c9be3b43104
--- /dev/null
+++ b/.ruff.toml
@@ -0,0 +1,30 @@
+# Copyright (c) 2024 Basalte bv
+# SPDX-License-Identifier: Apache-2.0
+
+extend = ".ruff-excludes.toml"
+
+line-length = 100
+target-version = "py310"
+
+[lint]
+select = [
+ # zephyr-keep-sorted-start
+ "B", # flake8-bugbear
+ "E", # pycodestyle
+ "F", # pyflakes
+ "I", # isort
+ "SIM", # flake8-simplify
+ "UP", # pyupgrade
+ "W", # pycodestyle warnings
+ # zephyr-keep-sorted-stop
+]
+
+ignore = [
+ # zephyr-keep-sorted-start
+ "SIM108", # Allow if-else blocks instead of forcing ternary operator
+ # zephyr-keep-sorted-stop
+]
+
+[format]
+quote-style = "preserve"
+line-ending = "lf"
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 64c0f1f8ef5..5bd9348cb57 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -88,6 +88,7 @@ set(SYSCALL_LIST_H_TARGET syscall_list_h_target)
set(DRIVER_VALIDATION_H_TARGET driver_validation_h_target)
set(KOBJ_TYPES_H_TARGET kobj_types_h_target)
set(PARSE_SYSCALLS_TARGET parse_syscalls_target)
+set(DEVICE_API_LD_TARGET device_api_ld_target)
define_property(GLOBAL PROPERTY PROPERTY_OUTPUT_FORMAT BRIEF_DOCS " " FULL_DOCS " ")
set_property( GLOBAL PROPERTY PROPERTY_OUTPUT_FORMAT elf32-little${ARCH}) # BFD format
@@ -152,6 +153,7 @@ zephyr_compile_options($<$:$:$>)
+ zephyr_compile_options($<$:$>)
zephyr_compile_options($<$:$>)
zephyr_link_libraries($)
endif()
@@ -173,6 +175,12 @@ endif()
# @Intent: Set compiler flags to detect general stack overflows across all functions
if(CONFIG_STACK_CANARIES)
zephyr_compile_options($)
+elseif(CONFIG_STACK_CANARIES_STRONG)
+ zephyr_compile_options($)
+elseif(CONFIG_STACK_CANARIES_ALL)
+ zephyr_compile_options($)
+elseif(CONFIG_STACK_CANARIES_EXPLICIT)
+ zephyr_compile_options($)
endif()
# @Intent: Obtain compiler optimizations flags and store in variables
@@ -597,6 +605,8 @@ add_custom_command(
COMMAND_EXPAND_LISTS
)
add_custom_target(version_h DEPENDS ${PROJECT_BINARY_DIR}/include/generated/zephyr/version.h)
+zephyr_get(KERNEL_VERSION_CUSTOMIZATION SYSBUILD LOCAL)
+set_property(TARGET version_h PROPERTY KERNEL_VERSION_CUSTOMIZATION ${KERNEL_VERSION_CUSTOMIZATION})
if(EXISTS ${APPLICATION_SOURCE_DIR}/VERSION)
add_custom_command(
@@ -615,6 +625,8 @@ if(EXISTS ${APPLICATION_SOURCE_DIR}/VERSION)
app_version_h
DEPENDS ${PROJECT_BINARY_DIR}/include/generated/zephyr/app_version.h)
add_dependencies(zephyr_interface app_version_h)
+ zephyr_get(APP_VERSION_CUSTOMIZATION SYSBUILD LOCAL)
+ set_property(TARGET app_version_h PROPERTY APP_VERSION_CUSTOMIZATION ${APP_VERSION_CUSTOMIZATION})
endif()
# Unfortunately, the order in which CMakeLists.txt code is processed
@@ -836,7 +848,12 @@ if(CONFIG_LEGACY_GENERATED_INCLUDE_PATH)
${CMAKE_CURRENT_BINARY_DIR}/include/generated/syscall_list.h)
endif()
-add_custom_command(OUTPUT include/generated/zephyr/syscall_dispatch.c ${syscall_list_h}
+add_custom_command(
+ OUTPUT
+ include/generated/zephyr/syscall_dispatch.c
+ include/generated/zephyr/syscall_exports_llext.c
+ syscall_weakdefs_llext.c
+ ${syscall_list_h}
# Also, some files are written to include/generated/zephyr/syscalls/
COMMAND
${PYTHON_EXECUTABLE}
@@ -844,7 +861,8 @@ add_custom_command(OUTPUT include/generated/zephyr/syscall_dispatch.c ${syscall_
--json-file ${syscalls_json} # Read this file
--base-output include/generated/zephyr/syscalls # Write to this dir
--syscall-dispatch include/generated/zephyr/syscall_dispatch.c # Write this file
- --syscall-export-llext include/generated/zephyr/syscall_export_llext.c
+ --syscall-exports-llext include/generated/zephyr/syscall_exports_llext.c
+ --syscall-weakdefs-llext syscall_weakdefs_llext.c # compiled in CMake library 'syscall_weakdefs'
--syscall-list ${syscall_list_h}
$<$:--gen-mrsh-files>
${SYSCALL_LONG_REGISTERS_ARG}
@@ -877,6 +895,37 @@ add_custom_target(${DRIVER_VALIDATION_H_TARGET} DEPENDS ${DRV_VALIDATION})
include(${ZEPHYR_BASE}/cmake/kobj.cmake)
gen_kobj(KOBJ_INCLUDE_PATH)
+# Generate sections for kernel device subsystems
+set(
+ DEVICE_API_LD_SECTIONS
+ ${CMAKE_CURRENT_BINARY_DIR}/include/generated/device-api-sections.ld
+ )
+
+set(DEVICE_API_LINKER_SECTIONS_CMAKE
+ ${CMAKE_CURRENT_BINARY_DIR}/include/generated/device-api-sections.cmake
+)
+
+add_custom_command(
+ OUTPUT ${DEVICE_API_LD_SECTIONS} ${DEVICE_API_LINKER_SECTIONS_CMAKE}
+ COMMAND
+ ${PYTHON_EXECUTABLE}
+ ${ZEPHYR_BASE}/scripts/build/gen_iter_sections.py
+ --alignment ${CONFIG_LINKER_ITERABLE_SUBALIGN}
+ --input ${struct_tags_json}
+ --tag __subsystem
+ --ld-output ${DEVICE_API_LD_SECTIONS}
+ --cmake-output ${DEVICE_API_LINKER_SECTIONS_CMAKE}
+ DEPENDS
+ ${ZEPHYR_BASE}/scripts/build/gen_iter_sections.py
+ ${struct_tags_json}
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ )
+
+add_custom_target(${DEVICE_API_LD_TARGET}
+ DEPENDS ${DEVICE_API_LD_SECTIONS}
+ ${DEVICE_API_LINKER_SECTIONS_CMAKE}
+)
+
# Add a pseudo-target that is up-to-date when all generated headers
# are up-to-date.
@@ -907,6 +956,7 @@ add_dependencies(zephyr_interface
${SYSCALL_LIST_H_TARGET}
${DRIVER_VALIDATION_H_TARGET}
${KOBJ_TYPES_H_TARGET}
+ ${DEVICE_API_LD_TARGET}
)
add_custom_command(
@@ -971,6 +1021,16 @@ else()
set(NO_WHOLE_ARCHIVE_LIBS kernel)
endif()
+if(CONFIG_LLEXT)
+ # LLEXT exports symbols for all syscalls, including unimplemented ones.
+ # Weak definitions for these must be added at the end of the link order
+ # to avoid shadowing actual implementations.
+ add_library(syscall_weakdefs syscall_weakdefs_llext.c)
+ add_dependencies(syscall_weakdefs zephyr_generated_headers)
+ target_link_libraries(syscall_weakdefs zephyr_interface)
+ list(APPEND NO_WHOLE_ARCHIVE_LIBS syscall_weakdefs)
+endif()
+
get_property(OUTPUT_FORMAT GLOBAL PROPERTY PROPERTY_OUTPUT_FORMAT)
if (CONFIG_CODE_DATA_RELOCATION)
@@ -1034,14 +1094,6 @@ if(CONFIG_USERSPACE)
set(PROCESS_GPERF ${ZEPHYR_BASE}/scripts/build/process_gperf.py)
endif()
-get_property(GLOBAL_CSTD GLOBAL PROPERTY CSTD)
-if(DEFINED GLOBAL_CSTD)
- message(DEPRECATION
- "Global CSTD property is deprecated, see Kconfig.zephyr for C Standard options.")
- set(CSTD ${GLOBAL_CSTD})
- list(APPEND CMAKE_C_COMPILE_FEATURES ${compile_features_${CSTD}})
-endif()
-
# @Intent: Obtain compiler specific flag for specifying the c standard
zephyr_compile_options(
$<$:$${CSTD}>
diff --git a/CODEOWNERS b/CODEOWNERS
deleted file mode 100644
index 8ba6e3c5b78..00000000000
--- a/CODEOWNERS
+++ /dev/null
@@ -1,492 +0,0 @@
-# CODEOWNERS for autoreview assigning in github
-
-# https://help.github.com/en/articles/about-code-owners#codeowners-syntax
-
-# Order is important; for each modified file, the last matching
-# pattern takes the most precedence.
-# That is, with the last pattern being
-# *.rst @nashif
-# if only .rst files are being modified, only nashif is
-# automatically requested for review, but you can manually
-# add others as needed.
-
-# Do not use wildcard on all source yet
-#
-# +++++++++++ NOTE ++++++++++++++++
-#
-# Please use the MAINTAINERS file to add yourself in an area or to add a new
-# component or code. This file is going to be deprecated and currently only had
-# entries that are not covered by the MAINTAINERS file.
-
-/.github/test-spec.yml @nrfconnect/ncs-test-leads
-/soc/arm/aspeed/ @aspeeddylan
-/soc/atmel/ @nandojve
-/soc/arm/bcm*/ @sbranden
-/soc/arm/ene/ @ene-steven
-/soc/arm/infineon_cat1/ @ifyall @npal-cy
-/soc/arm/infineon_xmc/ @parthitce
-/soc/arm/silabs_exx32/efm32pg1b/ @rdmeneze
-/soc/arm/silabs_exx32/efr32mg21/ @l-alfred
-/soc/arm/st_stm32/stm32mp1/ @arnopo
-/soc/arm/st_stm32/stm32h7/*stm32h735* @benediktibk
-/soc/arm/st_stm32/stm32l4/*stm32l451* @benediktibk
-/soc/arm/ti_simplelink/cc13x2_cc26x2/ @bwitherspoon
-/soc/arm/ti_simplelink/cc32xx/ @vanti
-/soc/arm/ti_simplelink/msp432p4xx/ @Mani-Sadhasivam
-/soc/arm/xilinx_zynq7000/ @ibirnbaum
-/soc/arm/xilinx_zynqmp/ @stephanosio
-/soc/arm/renesas_rcar/ @aaillet
-/soc/riscv/openisa*/ @dleach02
-/soc/riscv/riscv-privileged/andes_v5/ @cwshu @kevinwang821020 @jimmyzhe
-/soc/riscv/riscv-privileged/neorv32/ @henrikbrixandersen
-/soc/riscv/riscv-privileged/gd32vf103/ @soburi
-/soc/starfive/jh71xx/ @pfarwsi
-/soc/riscv/riscv-privileged/niosv/ @sweeaun
-/boards/adafruit/feather_nrf52840/ @jacobw
-/boards/ene/ @ene-steven
-/boards/arm/96b_argonkey/ @avisconti
-/boards/arm/96b_avenger96/ @Mani-Sadhasivam
-/boards/arm/96b_carbon/ @idlethread
-/boards/arm/96b_meerkat96/ @Mani-Sadhasivam
-/boards/arm/96b_nitrogen/ @idlethread
-/boards/arm/96b_neonkey/ @Mani-Sadhasivam
-/boards/arm/96b_stm32_sensor_mez/ @Mani-Sadhasivam
-/boards/arm/96b_wistrio/ @Mani-Sadhasivam
-/boards/arm/acn52832/ @sven-hm
-/boards/arm/arduino_mkrzero/ @soburi
-/boards/arm/bbc_microbit_v2/ @LingaoM
-/boards/arm/blackpill_f401ce/ @coderkalyan
-/boards/arm/blackpill_f411ce/ @coderkalyan
-/boards/arm/bt*10/ @greg-leach
-/boards/arm/cc1352r1_launchxl/ @bwitherspoon
-/boards/arm/cc26x2r1_launchxl/ @bwitherspoon
-/boards/arm/cc3220sf_launchxl/ @vanti
-/boards/arm/cy8ckit_062_ble/ @ifyall @npal-cy
-/boards/arm/cy8ckit_062s4/ @DaWei8823
-/boards/arm/cy8ckit_062_wifi_bt/ @ifyall @npal-cy
-/boards/arm/cy8cproto_062_4343w/ @ifyall @npal-cy
-/boards/arm/efm32pg_stk3401a/ @rdmeneze
-/boards/arm/faze/ @mbittan @simonguinot
-/boards/arm/frdm*/ @mmahadevan108 @dleach02
-/boards/arm/gd32*/ @nandojve
-/boards/arm/google_*/ @jackrosenthal
-/boards/arm/hexiwear*/ @mmahadevan108 @dleach02
-/boards/arm/ip_k66f/ @parthitce @lmajewski
-/boards/arm/legend/ @mbittan @simonguinot
-/boards/arm/lpcxpresso*/ @mmahadevan108 @dleach02
-/boards/arm/mimx8mm_evk/ @Mani-Sadhasivam
-/boards/arm/mimx8mm_phyboard_polis @pefech
-/boards/arm/mimxrt*/ @mmahadevan108 @dleach02
-/boards/arm/mps2_an385/ @fvincenzo
-/boards/arm/msp_exp432p401r_launchxl/ @Mani-Sadhasivam
-/boards/arm/npcx7m6fb_evb/ @MulinChao @ChiHuaL
-/boards/arm/nrf*/ @carlescufi @lemrey
-/boards/arm/nucleo_f401re/ @idlethread
-/boards/arm/nuvoton_pfm_m487/ @ssekar15
-/boards/arm/qemu_cortex_a9/ @ibirnbaum
-/boards/arm/qemu_cortex_r*/ @stephanosio
-/boards/arm/qemu_cortex_m*/ @ioannisg @stephanosio
-/boards/arm/quick_feather/ @fkokosinski @kgugala
-/boards/arm/rak4631_nrf52840/ @gpaquet85
-/boards/arm/rak5010_nrf52840/ @gpaquet85
-/boards/arm/rpi_pico/ @yonsch
-/boards/arm/ronoth_lodev/ @NorthernDean
-/boards/arm/xmc45_relax_kit/ @parthitce
-/boards/atmel/ @nandojve
-/boards/arm/scobc_module1/ @yashi
-/boards/arm/v2m_beetle/ @fvincenzo
-/boards/arm/olimexino_stm32/ @ydamigos
-/boards/arm/s32*/ @manuargue
-/boards/arm/sensortile_box/ @avisconti
-/boards/arm/steval_fcu001v1/ @Navin-Sankar
-/boards/arm/stm32l1_disco/ @karlp
-/boards/arm/stm32h735g_disco/ @benediktibk
-/boards/arm/stm32f3_disco/ @ydamigos
-/boards/arm/rcar_*/ @aaillet
-/boards/arm/ubx_bmd345eval_nrf52840/ @Navin-Sankar @brec-u-blox
-/boards/arm/nrf5340_audio_dk_nrf5340 @koffes @alexsven @erikrobstad @rick1082 @gWacey
-/boards/arm/stm32_min_dev/ @sidcha
-/boards/ezurio/* @rerickson1
-/boards/riscv/rv32m1_vega/ @dleach02
-/boards/riscv/adp_xc7k_ae350/ @cwshu @kevinwang821020 @jimmyzhe
-/boards/riscv/longan_nano/ @soburi
-/boards/riscv/neorv32/ @henrikbrixandersen
-/boards/riscv/niosv*/ @sweeaun
-/boards/riscv/sparkfun_red_v_things_plus/ @soburi
-/boards/riscv/stamp_c3/ @soburi
-/boards/starfive/visionfive2/ @kanakshilledar @pfarwsi
-/boards/shields/atmel_rf2xx/ @nandojve
-/boards/shields/esp_8266/ @nandojve
-/boards/shields/inventek_eswifi/ @nandojve
-/boards/xtensa/odroid_go/ @ydamigos
-/boards/xtensa/nxp_adsp_imx8/ @iuliana-prodan @dbaluta
-/boards/xtensa/kincony_kc868_a32/ @bbilas
-/boards/arm64/qemu_cortex_a53/ @carlocaione
-/boards/arm64/bcm958402m2_a72/ @abhishek-brcm
-/boards/arm64/mimx8mm_evk/ @MrVan @JiafeiPan
-/boards/arm64/mimx8mp_evk/ @MrVan @JiafeiPan
-/boards/arm64/mimx8mn_evk/ @JiafeiPan
-/boards/arm64/mimx93_evk/ @JiafeiPan
-/boards/arm64/nxp_ls1046ardb/ @JiafeiPan
-/boards/arm64/xenvm/ @lorc @firscity
-/boards/arm64/fvp_baser_aemv8r/ @povergoing
-/boards/arm64/fvp_base_revc_2xaemv8a/ @carlocaione
-/boards/arm64/intel_socfpga_agilex_socdk/ @siclim @ngboonkhai
-/boards/arm64/intel_socfpga_agilex5_socdk/ @teikheng @gdengi
-/boards/arm64/rcar_*/ @lorc @xakep-amatop
-# All cmake related files
-/doc/develop/tools/coccinelle.rst @himanshujha199640 @JuliaLawall
-/doc/services/device_mgmt/smp_protocol.rst @de-nordic @nordicjm
-/doc/services/device_mgmt/smp_groups/ @de-nordic @nordicjm
-/doc/services/sensing/ @lixuzha @ghu0510 @qianruh
-/doc/CMakeLists.txt @carlescufi
-/doc/_scripts/ @carlescufi
-/drivers/*/*sam4l* @nandojve
-/drivers/*/*cc13xx_cc26xx* @bwitherspoon
-/drivers/*/*gd32* @nandojve
-/drivers/*/*mcux* @mmahadevan108 @dleach02
-/drivers/*/*native_posix* @aescolar @daor-oti
-/drivers/*/*lpc11u6x* @mbittan @simonguinot
-/drivers/*/*npcx* @MulinChao @ChiHuaL
-/drivers/*/*andes* @cwshu @kevinwang821020 @jimmyzhe
-/drivers/*/*ifx_cat1* @ifyall @npal-cy
-/drivers/*/*neorv32* @henrikbrixandersen
-/drivers/*/*_s32* @manuargue
-/drivers/adc/adc_ads1x1x.c @XenuIsWatching
-/drivers/adc/adc_stm32.c @cybertale
-/drivers/adc/adc_rpi_pico.c @soburi
-/drivers/adc/*ads114s0x* @benediktibk
-/drivers/adc/*max11102_17* @benediktibk
-/drivers/adc/*kb1200* @ene-steven
-/drivers/adc/adc_ad559x.c @bbilas
-/drivers/audio/*nrfx* @anangl
-/drivers/auxdisplay/*pt6314* @xingrz
-/drivers/auxdisplay/* @thedjnK
-/drivers/bbram/* @yperess @sjg20 @jackrosenthal
-/drivers/bluetooth/ @alwa-nordic @jhedberg @Vudentz
-/drivers/bluetooth/hci/hci_esp32.c @sylvioalves
-/drivers/can/*mcp2515* @karstenkoenig
-/drivers/can/*rcar* @aaillet
-/drivers/clock_control/*agilex* @siclim @gdengi
-/drivers/clock_control/*nrf* @nordic-krch
-/drivers/clock_control/*esp32* @extremegtx @sylvioalves
-/drivers/clock_control/*cpg_mssr* @aaillet
-/drivers/console/ipm_console.c @finikorg
-/drivers/console/semihost_console.c @luozhongyao
-/drivers/console/jailhouse_debug_console.c @MrVan
-/drivers/counter/counter_cmos.c @dcpleung
-/drivers/counter/counter_ll_stm32_timer.c @kentjhall
-/drivers/counter/*esp32* @sylvioalves
-/drivers/counter/dw_timer.c @pbalsundar
-/drivers/counter/counter_timer_shell.c @pbalsundar
-/drivers/crypto/*nrf_ecb* @maciekfabia @anangl
-/drivers/display/*rm68200* @mmahadevan108
-/drivers/display/display_ili9342c.* @extremegtx
-/drivers/dac/*ad56xx* @benediktibk
-/drivers/dac/dac_ad559x.c @bbilas
-/drivers/dai/ @kv2019i @marcinszkudlinski @abonislawski
-/drivers/dai/intel/ @kv2019i @marcinszkudlinski @abonislawski
-/drivers/dai/intel/ssp/ @kv2019i @marcinszkudlinski @abonislawski
-/drivers/dai/intel/dmic/ @marcinszkudlinski @abonislawski
-/drivers/dai/intel/alh/ @abonislawski
-/drivers/dma/dma_dw_axi.c @pbalsundar
-/drivers/dma/*dw* @tbursztyka
-/drivers/dma/*dw_common* @abonislawski
-/drivers/dma/*sam0* @Sizurka
-/drivers/dma/dma_stm32* @cybertale @lowlander
-/drivers/dma/*pl330* @raveenp
-/drivers/dma/*iproc_pax* @raveenp
-/drivers/dma/*intel_adsp* @teburd @abonislawski
-/drivers/dma/*rpi_pico* @soburi
-/drivers/dma/*xmc4xxx* @talih0
-/drivers/eeprom/eeprom_stm32.c @KwonTae-young
-/drivers/entropy/*b91* @andy-liu-telink
-/drivers/entropy/*bt_hci* @JordanYates
-/drivers/entropy/*rv32m1* @dleach02
-/drivers/ethernet/*dwmac* @npitre
-/drivers/ethernet/*stm32* @Nukersson @lochej
-/drivers/ethernet/*w5500* @parthitce
-/drivers/ethernet/*xlnx_gem* @ibirnbaum
-/drivers/ethernet/*smsc91x* @sgrrzhf
-/drivers/ethernet/*adin2111* @GeorgeCGV
-/drivers/ethernet/*oa_tc6* @lmajewski
-/drivers/ethernet/*lan865x* @lmajewski
-/drivers/ethernet/dwc_xgmac @Smale-12048867
-/drivers/ethernet/dwc_xgmac/dwc_xgmac @Smale-12048867
-/drivers/ethernet/phy/ @rlubos @tbursztyka @arvinf @jukkar
-/drivers/ethernet/phy/*adin2111* @GeorgeCGV
-/drivers/mdio/*adin2111* @GeorgeCGV
-/drivers/flash/*stm32_qspi* @lmajewski
-/drivers/flash/*b91* @andy-liu-telink
-/drivers/flash/*cadence* @ngboonkhai
-/drivers/flash/*cc13xx_cc26xx* @pepe2k
-/drivers/flash/*nrf* @de-nordic
-/drivers/flash/*esp32* @sylvioalves
-/drivers/flash/flash_cadence_nand* @nbalabak
-/drivers/gpio/*b91* @andy-liu-telink
-/drivers/gpio/*lmp90xxx* @henrikbrixandersen
-/drivers/gpio/*nct38xx* @MulinChao @ChiHuaL
-/drivers/gpio/*eos_s3* @fkokosinski @kgugala
-/drivers/gpio/*rcar* @aaillet
-/drivers/gpio/*esp32* @sylvioalves
-/drivers/gpio/*rpi_pico* @yonsch
-/drivers/gpio/*xlnx_ps* @ibirnbaum
-/drivers/gpio/*ads114s0x* @benediktibk
-/drivers/gpio/*bd8lb600fs* @benediktibk
-/drivers/gpio/*pcal64xxa* @benediktibk
-/drivers/gpio/*kb1200* @ene-steven
-/drivers/gpio/gpio_altera_pio.c @shilinte
-/drivers/gpio/gpio_ad559x.c @bbilas
-/drivers/i2c/i2c_common.c @sjg20
-/drivers/i2c/i2c_emul.c @sjg20
-/drivers/i2c/i2c_ite_enhance.c @GTLin08
-/drivers/i2c/i2c_ite_it8xxx2.c @GTLin08
-/drivers/i2c/i2c_shell.c @nashif
-/drivers/i2c/Kconfig.i2c_emul @sjg20
-/drivers/i2c/Kconfig.it8xxx2 @GTLin08
-/drivers/i2c/target/*eeprom* @henrikbrixandersen
-/drivers/i2c/Kconfig.test @mbolivar-ampere
-/drivers/i2c/i2c_test.c @mbolivar-ampere
-/drivers/i2c/*rcar* @aaillet
-/drivers/i2c/*kb1200* @ene-steven
-/drivers/i2s/i2s_ll_stm32* @avisconti
-/drivers/i2s/*nrfx* @anangl
-/drivers/i3c/i3c_cdns.c @XenuIsWatching
-/drivers/ieee802154/ @rlubos @tbursztyka @jukkar @fgrandel
-/drivers/ieee802154/*b91* @andy-liu-telink
-/drivers/ieee802154/ieee802154_nrf5* @ankuns
-/drivers/ieee802154/ieee802154_rf2xx* @tbursztyka @nandojve
-/drivers/ieee802154/ieee802154_cc13xx* @bwitherspoon @cfriedt @vaishnavachath
-/drivers/interrupt_controller/ @dcpleung @nashif
-/drivers/interrupt_controller/intc_gic.c @stephanosio
-/drivers/interrupt_controller/*esp32* @sylvioalves
-/drivers/interrupt_controller/intc_nuclei_eclic.c @soburi
-/drivers/ipm/ipm_mhu* @karl-zh
-/drivers/ipm/Kconfig.nrfx @masz-nordic
-/drivers/ipm/Kconfig.nrfx_ipc_channel @masz-nordic
-/drivers/ipm/ipm_cavs* @dcpleung @andyross
-/drivers/ipm/ipm_nrfx_ipc.c @masz-nordic
-/drivers/ipm/ipm_nrfx_ipc.h @masz-nordic
-/drivers/ipm/ipm_stm32_ipcc.c @arnopo
-/drivers/ipm/ipm_stm32_hsem.c @cameled
-/drivers/ipm/ipm_esp32.c @uLipe
-/drivers/ipm/ipm_ivshmem.c @uLipe
-/drivers/kscan/*xec* @franciscomunoz @sjvasanth1
-/drivers/kscan/*ft5336* @MaureenHelm
-/drivers/kscan/*ht16k33* @henrikbrixandersen
-/drivers/led_strip/ @mbolivar-ampere
-/drivers/mfd/mfd_ad559x.c @bbilas
-/drivers/mfd/mfd_max20335.c @bbilas
-/drivers/misc/ft8xx/ @hubertmis
-/drivers/modem/hl7800.c @rerickson1
-/drivers/modem/simcom-sim7080.c @lgehreke
-/drivers/modem/simcom-sim7080.h @lgehreke
-/drivers/modem/Kconfig.hl7800 @rerickson1
-/drivers/modem/Kconfig.simcom-sim7080 @lgehreke
-/drivers/pinctrl/*esp32* @sylvioalves
-/drivers/pinctrl/*it8xxx2* @ite
-/drivers/pinctrl/*kb1200* @ene-steven
-/drivers/pm_cpu_ops/psci_shell.c @nbalabak @gdengi
-/drivers/power_domain/ @ceolin
-/drivers/ps2/*xec* @franciscomunoz @sjvasanth1
-/drivers/ps2/*npcx* @MulinChao @ChiHuaL
-/drivers/pwm/*b91* @andy-liu-telink
-/drivers/pwm/*pca9685* @nixward
-/drivers/pwm/*rpi_pico* @burumaj
-/drivers/pwm/*rv32m1* @henrikbrixandersen
-/drivers/pwm/*sam0* @nzmichaelh
-/drivers/pwm/*test* @JordanYates
-/drivers/pwm/*xlnx* @henrikbrixandersen
-/drivers/pwm/pwm_capture.c @henrikbrixandersen
-/drivers/pwm/pwm_shell.c @henrikbrixandersen
-/drivers/pwm/*gecko* @sun681
-/drivers/pwm/*it8xxx2* @RuibinChang
-/drivers/pwm/*esp32* @LucasTambor
-/drivers/pwm/*rcar* @aaillet
-/drivers/pwm/*max31790* @benediktibk
-/drivers/pwm/*kb1200* @ene-steven
-/drivers/regulator/* @gmarull
-/drivers/regulator/regulator_max20335.c @bbilas
-/drivers/regulator/regulator_pca9420.c @danieldegrasse
-/drivers/regulator/regulator_rpi_pico.c @soburi
-/drivers/regulator/regulator_shell.c @danieldegrasse
-/drivers/reset/reset_intel_socfpga.c @nbalabak
-/drivers/reset/Kconfig.intel_socfpga @nbalabak
-/drivers/sensor/ams_iAQcore/ @alexanderwachter
-/drivers/sensor/ens210/ @alexanderwachter
-/drivers/sensor/grow_r502a/ @DineshDK03
-/drivers/sensor/hts*/ @avisconti
-/drivers/sensor/ina23*/ @bbilas
-/drivers/sensor/lis*/ @avisconti
-/drivers/sensor/lps*/ @avisconti
-/drivers/sensor/lsm*/ @avisconti
-/drivers/sensor/mpr/ @sven-hm
-/drivers/sensor/qdec_stm32/ @valeriosetti
-/drivers/sensor/rpi_pico_temp/ @soburi
-/drivers/sensor/st*/ @avisconti
-/drivers/sensor/veaa_x_3/ @jeppenodgaard @MaureenHelm
-/drivers/sensor/ene_tack_kb1200/ @ene-steven
-/drivers/serial/*b91* @andy-liu-telink
-/drivers/serial/uart_altera_jtag.c @nashif @gohshunjing
-/drivers/serial/uart_altera.c @gohshunjing
-/drivers/serial/*ns16550* @dcpleung @nashif @gdengi
-/drivers/serial/*nrfx* @anangl
-/drivers/serial/Kconfig.mcux_iuart @Mani-Sadhasivam
-/drivers/serial/uart_mcux_iuart.c @Mani-Sadhasivam
-/drivers/serial/Kconfig.rtt @carlescufi @pkral78
-/drivers/serial/uart_rtt.c @carlescufi @pkral78
-/drivers/serial/*rpi_pico* @yonsch
-/drivers/serial/Kconfig.xlnx @wjliang
-/drivers/serial/uart_xlnx_ps.c @wjliang
-/drivers/serial/uart_xlnx_uartlite.c @henrikbrixandersen
-/drivers/serial/*xmc4xxx* @parthitce
-/drivers/serial/*numicro* @ssekar15
-/drivers/serial/*apbuart* @julius-barendt
-/drivers/serial/*rcar* @aaillet
-/drivers/serial/Kconfig.xen @lorc @firscity
-/drivers/serial/uart_hvc_xen.c @lorc @firscity
-/drivers/serial/uart_hvc_xen_consoleio.c @lorc @firscity
-/drivers/serial/Kconfig.it8xxx2 @GTLin08
-/drivers/serial/uart_ite_it8xxx2.c @GTLin08
-/drivers/serial/*intel_lw* @shilinte
-/drivers/serial/*kb1200* @ene-steven
-/drivers/disk/sdmmc_stm32.c @anthonybrandon
-/drivers/ptp_clock/ @tbursztyka @jukkar
-/drivers/spi/*b91* @andy-liu-telink
-/drivers/spi/spi_rv32m1_lpspi* @karstenkoenig
-/drivers/spi/*esp32* @sylvioalves
-/drivers/spi/*pl022* @soburi
-/drivers/sdhc/ @danieldegrasse
-/drivers/sdhc/sdhc_cdns* @roymurlidhar @tanmaykathpalia
-/drivers/timer/*arm_arch* @carlocaione
-/drivers/timer/*cortex_m_systick* @anangl
-/drivers/timer/*altera_avalon* @nashif
-/drivers/timer/*riscv_machine* @kgugala @pgielda
-/drivers/timer/*ite_it8xxx2* @ite
-/drivers/timer/*xlnx_psttc* @wjliang @stephanosio
-/drivers/timer/*cc13xx_cc26xx_rtc* @vanti
-/drivers/timer/*cavs* @dcpleung
-/drivers/timer/*leon_gptimer* @julius-barendt
-/drivers/timer/*mips_cp0* @frantony
-/drivers/timer/*rcar_cmt* @aaillet
-/drivers/timer/*esp32_sys* @uLipe
-/drivers/timer/*sam0_rtc* @bendiscz
-/drivers/timer/*xtensa* @dcpleung
-/drivers/timer/*rv32m1_lptmr* @mbolivar
-/drivers/timer/*nrf_rtc* @anangl
-/drivers/timer/*hpet* @dcpleung
-/drivers/usb/device/usb_dc_stm32.c @ydamigos @loicpoulain
-/drivers/i2c/*b91* @andy-liu-telink
-/drivers/i2c/i2c_ll_stm32* @ydamigos
-/drivers/i2c/i2c_rv32m1_lpi2c* @henrikbrixandersen
-/drivers/i2c/*sam0* @Sizurka
-/drivers/i2c/i2c_dw* @dcpleung
-/drivers/i2c/*tca954x* @kurddt
-/drivers/*/*xec* @franciscomunoz @albertofloyd @sjvasanth1
-/drivers/watchdog/*gecko* @oanerer
-/drivers/watchdog/*sifive* @katsuster
-/drivers/watchdog/wdt_handlers.c @dcpleung @nashif
-/drivers/watchdog/*cc32xx* @pavlohamov
-/drivers/watchdog/wdt_ite_it8xxx2.c @RuibinChang
-/drivers/watchdog/Kconfig.it8xxx2 @RuibinChang
-/drivers/watchdog/wdt_counter.c @nordic-krch
-/drivers/watchdog/*rpi_pico* @thedjnK
-/drivers/watchdog/*dw* @softwarecki @pbalsundar
-/drivers/watchdog/*ifx* @sreeramIfx
-/drivers/watchdog/*kb1200* @ene-steven
-/drivers/wifi/esp_at/ @mniestroj
-/drivers/wifi/eswifi/ @loicpoulain @nandojve
-/drivers/wifi/winc1500/ @kludentwo
-/drivers/virtualization/ @tbursztyka
-/dts/arm/acsip/ @NorthernDean
-/dts/arm/aspeed/ @aspeeddylan
-/dts/arm/atmel/ @galak @nandojve
-/dts/arm/broadcom/ @sbranden
-/dts/arm/cypress/ @ifyall @npal-cy
-/dts/arm/ene/kb1200 @ene-steven
-/dts/arm/gd/ @nandojve
-/dts/arm/infineon/xmc4* @parthitce @ifyall @npal-cy
-/dts/arm/infineon/psoc6/ @ifyall @npal-cy
-/dts/arm64/armv8-r.dtsi @povergoing
-/dts/arm64/intel/*intel_socfpga* @siclim
-/dts/arm64/nxp/ @JiafeiPan
-/dts/arm64/renesas/ @lorc @xakep-amatop
-/dts/arm/quicklogic/ @fkokosinski @kgugala
-/dts/arm/seeed_studio/ @str4t0m
-/dts/arm/st/h7/*stm32h735* @benediktibk
-/dts/arm/st/l4/*stm32l451* @benediktibk
-/dts/arm/ti/cc13?2* @bwitherspoon
-/dts/arm/ti/cc26?2* @bwitherspoon
-/dts/arm/ti/cc3235* @vanti
-/dts/arm/nordic/ @anangl @carlescufi
-/dts/arm/nuvoton/ @ssekar15 @MulinChao @ChiHuaL
-/dts/arm/nxp/ @mmahadevan108 @dleach02
-/dts/arm/nxp/nxp_s32* @manuargue
-/dts/arm/microchip/ @franciscomunoz @albertofloyd @sjvasanth1
-/dts/arm/rpi_pico/ @yonsch
-/dts/arm/silabs/efm32_pg_1b.dtsi @rdmeneze
-/dts/arm/silabs/efm32gg11b* @oanerer
-/dts/arm/silabs/efr32bg13p* @mnkp
-/dts/arm/silabs/efr32bg22* @kgugala @fkokosinski @pczarnecki
-/dts/arm/silabs/efr32xg13p* @mnkp
-/dts/arm/silabs/efm32pg1b* @rdmeneze
-/dts/arm/silabs/efr32mg21* @l-alfred
-/dts/arm/silabs/efr32fg13* @yonsch
-/dts/riscv/ite/ @ite
-/dts/riscv/microchip/microchip-miv.dtsi @galak
-/dts/riscv/openisa/rv32m1* @dleach02
-/dts/riscv/starfive/ @rajnesh-kanwal @pfarwsi
-/dts/riscv/andes/andes_v5* @cwshu @kevinwang821020 @jimmyzhe
-/dts/riscv/niosv/ @sweeaun
-/dts/arm/armv*m.dtsi @galak @ioannisg
-/dts/arm/armv7-a.dtsi @ibirnbaum
-/dts/arm/armv7-r.dtsi @bbolen @stephanosio
-/dts/arm/xilinx/ @bbolen @stephanosio
-/dts/arm/renesas/rcar/ @aaillet
-/dts/xtensa/xtensa.dtsi @ydamigos
-/dts/xtensa/intel/ @dcpleung
-/dts/xtensa/espressif/ @sylvioalves
-/dts/xtensa/nxp/ @iuliana-prodan @dbaluta
-/dts/bindings/can/ @alexanderwachter @henrikbrixandersen
-/dts/bindings/i2c/zephyr*i2c-emul*.yaml @sjg20
-/dts/bindings/adc/st*stm32-adc.yaml @cybertale
-/dts/bindings/adc/*ads114s08.yaml @benediktibk
-/dts/bindings/adc/*max111* @benediktibk
-/dts/bindings/modem/*hl7800.yaml @rerickson1
-/dts/bindings/serial/ns16550.yaml @dcpleung @nashif
-/dts/bindings/counter/snps,dw-timers.yaml @pbalsundar
-/dts/bindings/wifi/*esp-at.yaml @mniestroj
-/dts/bindings/*/*gd32* @nandojve
-/dts/bindings/*/*sam* @nandojve
-/dts/bindings/*/*npcx* @MulinChao @ChiHuaL
-/dts/bindings/*/*psoc6* @ifyall @npal-cy
-/dts/bindings/*/*infineon*cat1* @ifyall @npal-cy
-/dts/bindings/*/nordic* @anangl
-/dts/bindings/*/nxp* @mmahadevan108 @dleach02
-/dts/bindings/*/nxp*s32* @manuargue
-/dts/bindings/*/openisa* @dleach02
-/dts/bindings/*/raspberrypi*pico* @yonsch
-/dts/bindings/sensor/ams* @alexanderwachter
-/dts/bindings/*/sifive* @mateusz-holenko @kgugala @pgielda
-/dts/bindings/*/andes* @cwshu @kevinwang821020 @jimmyzhe
-/dts/bindings/*/neorv32* @henrikbrixandersen
-/dts/bindings/*/*lan91c111* @sgrrzhf
-/dts/bindings/i3c/ @dcpleung
-/dts/bindings/pm_cpu_ops/* @carlocaione
-/dts/bindings/ethernet/*gem.yaml @ibirnbaum
-/dts/bindings/auxdisplay/*pt6314.yaml @xingrz
-/dts/bindings/auxdisplay/* @thedjnK
-/dts/bindings/sensor/*bme680* @BoschSensortec
-/dts/bindings/sensor/*ina23* @bbilas
-/dts/bindings/sensor/st* @avisconti
-/dts/bindings/sensor/zephyr,sensing.yaml @lixuzha @ghu0510 @qianruh
-/dts/bindings/sensor/zephyr,sensing*.yaml @lixuzha @ghu0510 @qianruh
-/dts/bindings/smbus/ @finikorg
-/dts/bindings/sip_svc/ @maheshraotm
-/dts/bindings/cpu/intel,niosv.yaml @sweeaun
-/dts/bindings/reset/intel,socfpga-reset.yaml @nbalabak
-/dts/bindings/gpio/*pcal64* @benediktibk
-/dts/bindings/gpio/*bd8lb600fs* @benediktibk
-/dts/bindings/gpio/*ads114s0x* @benediktibk
-/dts/bindings/pwm/*max31790* @benediktibk
-/dts/bindings/dac/*ad56* @benediktibk
diff --git a/Kconfig.zephyr b/Kconfig.zephyr
index 510769d8aa7..2d8031260ce 100644
--- a/Kconfig.zephyr
+++ b/Kconfig.zephyr
@@ -448,6 +448,7 @@ config CODING_GUIDELINE_CHECK
config NATIVE_LIBC
bool
select FULL_LIBC_SUPPORTED
+ select TC_PROVIDES_POSIX_C_LANG_SUPPORT_R
help
Zephyr will use the host system C library.
@@ -470,9 +471,11 @@ config NATIVE_APPLICATION
default y if ARCH_POSIX
depends on !NATIVE_LIBRARY
select NATIVE_BUILD
+ select DEPRECATED
help
Build as a native application that can run on the host and using
- resources and libraries provided by the host.
+ resources and libraries provided by the host. This option is deprecated
+ and will be removed in Zephyr v4.3
config NATIVE_LIBRARY
bool
@@ -790,7 +793,8 @@ config BUILD_OUTPUT_UF2_FAMILY_ID
default "0xada52840" if SOC_NRF52840_QIAA
default "0x4fb2d5bd" if SOC_SERIES_IMXRT10XX || SOC_SERIES_IMXRT11XX
default "0x2abc77ec" if SOC_SERIES_LPC55XXX
- default "0xe48bff56" if SOC_SERIES_RP2XXX
+ default "0xe48bff56" if SOC_SERIES_RP2040
+ default "0xe48bff57" if SOC_SERIES_RP2350
default "0x68ed2b88" if SOC_SERIES_SAMD21
default "0x55114460" if SOC_SERIES_SAMD51
default "0x647824b6" if SOC_SERIES_STM32F0X
@@ -1046,32 +1050,6 @@ config IS_BOOTLOADER
This option indicates that Zephyr will act as a bootloader to execute
a separate Zephyr image payload.
-config BOOTLOADER_SRAM_SIZE
- int "SRAM reserved for bootloader [DEPRECATED]"
- default 0
- depends on !XIP || IS_BOOTLOADER
- depends on ARM || XTENSA
- help
- This option specifies the amount of SRAM (measure in kB) reserved for
- a bootloader image, when either:
- - the Zephyr image itself is to act as the bootloader, or
- - Zephyr is a !XIP image, which implicitly assumes existence of a
- bootloader that loads the Zephyr !XIP image onto SRAM.
-
- This option is deprecated, users should transition to using DTS to set this, if needed.
- To be removed after Zephyr 3.7 release.
-
-config BOOTLOADER_SRAM_SIZE_DEPRECATED
- bool
- default y
- select DEPRECATED
- depends on BOOTLOADER_SRAM_SIZE != 0
- depends on !XIP || IS_BOOTLOADER
- depends on ARM || XTENSA
- help
- Non-prompt symbol to indicate that the deprecated BOOTLOADER_SRAM_SIZE Kconfig has a
- non-0 value. Please transition to using devicetree.
-
config BOOTLOADER_BOSSA
bool "BOSSA bootloader support"
select USE_DT_CODE_PARTITION
diff --git a/MAINTAINERS.yml b/MAINTAINERS.yml
index fdc0a25a5f1..bd36809edf2 100644
--- a/MAINTAINERS.yml
+++ b/MAINTAINERS.yml
@@ -133,6 +133,7 @@ ARC arch:
- evgeniy-paltsev
collaborators:
- abrodkin
+ - tagunil
files:
- arch/arc/
- include/zephyr/arch/arc/
@@ -158,6 +159,7 @@ ARM arch:
- MaureenHelm
- stephanosio
- bbolen
+ - wearyzen
files:
- arch/arm/
- arch/arm/core/offsets/
@@ -194,6 +196,8 @@ ARM Platforms:
status: maintained
maintainers:
- ithinuel
+ collaborators:
+ - wearyzen
files:
- boards/arm/mps*/
- boards/arm/v2m_*/
@@ -305,34 +309,34 @@ Bluetooth HCI:
status: maintained
maintainers:
- jhedberg
- - jori-nordic
+ - alwa-nordic
collaborators:
- hermabe
- - alwa-nordic
- Thalley
- sjanc
- theob-pro
- HoZHel
+ - cvinayak
files:
- include/zephyr/drivers/bluetooth/
+ - include/zephyr/drivers/bluetooth.h
- drivers/bluetooth/
- samples/bluetooth/hci_*/
- tests/bsim/bluetooth/hci_uart/
- dts/bindings/bluetooth/
labels:
- - "area: Bluetooth Host"
+ - "area: Bluetooth HCI"
- "area: Bluetooth"
tests:
- bluetooth
-Bluetooth controller:
+Bluetooth Controller:
status: maintained
maintainers:
- cvinayak
collaborators:
- carlescufi
- thoh-ot
- - kruithofa
- ppryga
- mtpr-ot
- wopu-ot
@@ -345,9 +349,6 @@ Bluetooth controller:
- subsys/bluetooth/common/
- subsys/bluetooth/controller/
- subsys/bluetooth/crypto/
- - subsys/bluetooth/shell/ll.c
- - subsys/bluetooth/shell/ll.h
- - subsys/bluetooth/shell/ticker.c
- tests/bluetooth/controller/
- tests/bsim/bluetooth/ll/
labels:
@@ -359,14 +360,15 @@ Bluetooth controller:
Bluetooth Host:
status: maintained
maintainers:
- - jori-nordic
- jhedberg
+ - alwa-nordic
collaborators:
- hermabe
- - alwa-nordic
- - Thalley
+ - rugeGerritsen
- sjanc
+ - Thalley
- theob-pro
+ - cvinayak
files:
- doc/connectivity/bluetooth/
- include/zephyr/bluetooth/
@@ -376,7 +378,6 @@ Bluetooth Host:
- subsys/bluetooth/host/
- subsys/bluetooth/lib/
- subsys/bluetooth/services/
- - subsys/bluetooth/shell/
- subsys/bluetooth/CMakeLists.txt
- subsys/bluetooth/Kconfig*
- tests/bluetooth/
@@ -394,28 +395,29 @@ Bluetooth Host:
- doc/connectivity/bluetooth/img/ctlr*
- doc/connectivity/bluetooth/api/audio/
- doc/connectivity/bluetooth/api/mesh/
- - doc/connectivity/bluetooth/api/shell/iso.rst
- doc/connectivity/bluetooth/api/controller.rst
+ - doc/connectivity/bluetooth/shell/classic/a2dp.rst
+ - doc/connectivity/bluetooth/shell/host/iso.rst
+ - doc/connectivity/bluetooth/shell/audio/
- samples/bluetooth/bap*/
- samples/bluetooth/cap*/
+ - samples/bluetooth/ccp*/
- samples/bluetooth/hap*/
- samples/bluetooth/hci_*/
- samples/bluetooth/pbp*/
- samples/bluetooth/tmap*/
- samples/bluetooth/iso_*/
- samples/bluetooth/mesh*/
- - subsys/bluetooth/shell/bredr.c
- - subsys/bluetooth/shell/iso.c
- - subsys/bluetooth/shell/ll.c
- - subsys/bluetooth/shell/ll.h
- - subsys/bluetooth/shell/ticker.c
- subsys/bluetooth/Kconfig.iso
- subsys/bluetooth/host/iso.c
- subsys/bluetooth/host/iso_internal.h
+ - subsys/bluetooth/host/shell/iso.c
- tests/bluetooth/audio/
- tests/bluetooth/controller/
- tests/bluetooth/mesh*/
- tests/bluetooth/qualification/
+ - tests/bluetooth/shell/audio.conf
+ - tests/bluetooth/shell/mesh.conf
- tests/bluetooth/tester/
- tests/bsim/bluetooth/audio/
- tests/bsim/bluetooth/audio_samples/
@@ -446,6 +448,7 @@ Bluetooth Mesh:
- samples/bluetooth/mesh*/
- subsys/bluetooth/mesh/
- tests/bluetooth/mesh*/
+ - tests/bluetooth/shell/mesh.conf
- tests/bsim/bluetooth/mesh/
labels:
- "area: Bluetooth Mesh"
@@ -464,11 +467,11 @@ Bluetooth Audio:
- sjanc
- asbjornsabo
- fredrikdanebjer
- - kruithofa
- larsgk
- pin-zephyr
- niym-ot
- jthm-ot
+ - babrsn
files:
- subsys/bluetooth/audio/
- include/zephyr/bluetooth/audio/
@@ -479,8 +482,10 @@ Bluetooth Audio:
- tests/bluetooth/tester/overlay-le-audio.conf
- tests/bluetooth/tester/src/audio/
- doc/connectivity/bluetooth/api/audio/
+ - doc/connectivity/bluetooth/shell/audio/
- samples/bluetooth/bap*/
- samples/bluetooth/cap*/
+ - samples/bluetooth/ccp*/
- samples/bluetooth/hap*/
- samples/bluetooth/pbp*/
- samples/bluetooth/tmap*/
@@ -496,11 +501,10 @@ Bluetooth Classic:
- lylezhu2012
collaborators:
- jhedberg
- - sjanc
files:
+ - doc/connectivity/bluetooth/shell/classic/a2dp.rst
- subsys/bluetooth/common/
- subsys/bluetooth/host/classic/
- - subsys/bluetooth/shell/bredr.c
- include/zephyr/bluetooth/classic/
labels:
- "area: Bluetooth Classic"
@@ -514,14 +518,16 @@ Bluetooth ISO:
- Thalley
collaborators:
- jhedberg
+ - rugeGerritsen
+ - cvinayak
files:
- include/zephyr/bluetooth/iso.h
- - doc/connectivity/bluetooth/api/shell/iso.rst
+ - doc/connectivity/bluetooth/shell/host/iso.rst
- samples/bluetooth/iso_*/
- - subsys/bluetooth/shell/iso.c
- subsys/bluetooth/Kconfig.iso
- subsys/bluetooth/host/iso.c
- subsys/bluetooth/host/iso_internal.h
+ - subsys/bluetooth/host/shell/iso.c
labels:
- "area: Bluetooth ISO"
- "area: Bluetooth"
@@ -576,6 +582,9 @@ Build system:
- misc/generated/
- snippets/
- modules/Kconfig.sysbuild
+ - scripts/list_boards.py
+ - scripts/list_hardware.py
+ - scripts/schemas/*-schema.yml
labels:
- "area: Build System"
tests:
@@ -884,8 +893,10 @@ Devicetree:
collaborators:
- decsny
- galak
+ - rruuaanng
files-regex:
- - dts/bindings/.*zephyr.*
+ - ^dts/bindings/.*zephyr.*
+ - ^dts/bindings/[^,]+$
files:
- scripts/dts/
- dts/common/
@@ -920,6 +931,7 @@ Disk:
- subsys/sd/
- tests/subsys/sd/
- tests/drivers/disk/
+ - tests/drivers/build_all/disk/
- include/zephyr/sd/
- dts/bindings/sd/
- dts/bindings/mmc/
@@ -1005,8 +1017,8 @@ Documentation Infrastructure:
Release Notes:
status: maintained
maintainers:
- - dkalowsk
- - mmahadevan108
+ - fabiobaltieri
+ - kartben
collaborators:
- kartben
files:
@@ -1019,8 +1031,6 @@ Release Notes:
status: maintained
maintainers:
- anangl
- collaborators:
- - decsny
files:
- drivers/adc/
- include/zephyr/drivers/adc.h
@@ -1055,6 +1065,7 @@ Release Notes:
- yperess
files:
- tests/drivers/bbram/
+ - tests/drivers/build_all/bbram/
- drivers/bbram/
- include/zephyr/drivers/bbram.h
- doc/hardware/peripherals/bbram.rst
@@ -1227,6 +1238,7 @@ Release Notes:
- samples/drivers/crypto/
- tests/crypto/
- doc/services/crypto/
+ - tests/drivers/build_all/crypto/
labels:
- "area: Crypto / RNG"
tests:
@@ -1378,6 +1390,7 @@ Release Notes:
- decsny
- lmajewski
- pdgendt
+ - maass-hamburg
files:
- drivers/ethernet/
- include/zephyr/dt-bindings/ethernet/
@@ -1385,6 +1398,8 @@ Release Notes:
- dts/bindings/ethernet/
- tests/drivers/ethernet/
- include/zephyr/drivers/ethernet/
+ - include/zephyr/net/phy.h
+ - include/zephyr/net/ethernet.h
labels:
- "area: Ethernet"
tests:
@@ -1394,6 +1409,8 @@ Release Notes:
status: maintained
maintainers:
- de-nordic
+ collaborators:
+ - rghaddab
files:
- drivers/flash/
- dts/bindings/flash_controller/
@@ -1405,6 +1422,7 @@ Release Notes:
- doc/hardware/peripherals/flash.rst
- include/zephyr/drivers/flash/
- tests/drivers/flash_simulator/
+ - tests/drivers/build_all/flash/
labels:
- "area: Flash"
tests:
@@ -1580,9 +1598,7 @@ Release Notes:
- drivers.i3c
"Drivers: IEEE 802.15.4":
- status: maintained
- maintainers:
- - fgrandel
+ status: odd fixes
collaborators:
- rlubos
- ankuns
@@ -1631,10 +1647,12 @@ Release Notes:
status: odd fixes
collaborators:
- decsny
+ - maass-hamburg
files:
- doc/hardware/peripherals/mdio.rst
- drivers/mdio/
- include/zephyr/drivers/mdio.h
+ - include/zephyr/net/mdio.h
- tests/drivers/build_all/mdio/
- dts/bindings/mdio/
labels:
@@ -1767,7 +1785,6 @@ Release Notes:
maintainers:
- simonguinot
collaborators:
- - mbolivar-ampere
- soburi
- thedjnK
files:
@@ -2017,6 +2034,7 @@ Release Notes:
- tristan-google
- ubieda
- jeppenodgaard
+ - asemjonovs
files:
- drivers/sensor/
- include/zephyr/drivers/sensor.h
@@ -2071,6 +2089,11 @@ Release Notes:
status: maintained
maintainers:
- jilaypandya
+ collaborators:
+ - bjarki-andreasen
+ - dipakgmx
+ - fabiobaltieri
+ - faxe1008
files:
- drivers/stepper/
- include/zephyr/drivers/stepper.h
@@ -2101,6 +2124,7 @@ Release Notes:
collaborators:
- loicpoulain
- josuah
+ - ngphibang
files:
- drivers/video/
- include/zephyr/drivers/video.h
@@ -2127,6 +2151,7 @@ Release Notes:
- include/zephyr/drivers/w1.h
- include/zephyr/drivers/sensor/w1_sensor.h
- tests/drivers/w1/
+ - tests/drivers/build_all/w1/
- samples/drivers/w1/
labels:
- "area: W1"
@@ -2159,6 +2184,7 @@ Release Notes:
- rlubos
- kludentwo
- krish2718
+ - MaochenWang1
files:
- drivers/wifi/
- dts/bindings/wifi/
@@ -2200,6 +2226,16 @@ Release Notes:
labels:
- "area: Wi-Fi"
+"Drivers: Wi-Fi NXP":
+ status: maintained
+ maintainers:
+ - dleach02
+ - MaochenWang1
+ files:
+ - drivers/wifi/nxp/
+ labels:
+ - "platform: NXP Drivers"
+
"Drivers: Memory Management":
status: maintained
maintainers:
@@ -2293,18 +2329,6 @@ Filesystems:
tests:
- filesystem
-"Filesystems: FatFs reentrant support":
- status: maintained
- maintainers:
- - ox11
- files:
- - modules/fatfs/zfs_ffsystem.c
- - tests/subsys/fs/fat_fs_api/src/test_fat_file_reentrant.c
- labels:
- - "area: File System"
- tests:
- - filesystem.fat
-
Formatted Output:
status: maintained
maintainers:
@@ -2380,6 +2404,8 @@ Input:
IPC:
status: maintained
maintainers:
+ - doki-nordic
+ collaborators:
- carlocaione
- arnopo
files:
@@ -2651,8 +2677,8 @@ MAINTAINERS file:
status: maintained
maintainers:
- MaureenHelm
- collaborators:
- nashif
+ collaborators:
- stephanosio
files:
- MAINTAINERS.yml
@@ -2734,6 +2760,7 @@ hawkBit:
- maass-hamburg
files:
- subsys/mgmt/hawkbit/
+ - include/zephyr/mgmt/hawkbit/
- include/zephyr/mgmt/hawkbit.h
- samples/subsys/mgmt/hawkbit/
labels:
@@ -2806,14 +2833,17 @@ Networking:
- doc/connectivity/networking/api/ieee802154.rst
- doc/connectivity/networking/api/ptp.rst
- doc/connectivity/networking/api/wifi.rst
+ - doc/connectivity/networking/api/http*.rst
- include/zephyr/net/gptp.h
- include/zephyr/net/ieee802154*.h
- include/zephyr/net/ptp.h
- include/zephyr/net/wifi*.h
- include/zephyr/net/buf.h
- include/zephyr/net/dhcpv4*.h
+ - include/zephyr/net/http/
- samples/net/gptp/
- samples/net/sockets/coap_*/
+ - samples/net/sockets/*http*/
- samples/net/lwm2m_client/
- samples/net/wifi/
- samples/net/dhcpv4_client/
@@ -2822,12 +2852,14 @@ Networking:
- subsys/net/l2/wifi/
- subsys/net/lib/coap/
- subsys/net/lib/config/ieee802154*
+ - subsys/net/lib/http/
- subsys/net/lib/lwm2m/
- subsys/net/lib/ptp/
- subsys/net/lib/tls_credentials/
- subsys/net/lib/dhcpv4/
- tests/net/dhcpv4/
- tests/net/ieee802154/
+ - tests/net/lib/http*/
- tests/net/wifi/
labels:
- "area: Networking"
@@ -2923,8 +2955,6 @@ Networking:
status: maintained
maintainers:
- jukkar
- collaborators:
- - fgrandel
files:
- doc/connectivity/networking/api/gptp.rst
- include/zephyr/net/gptp.h
@@ -2991,14 +3021,12 @@ Networking:
- subsys/net/lib/ptp/
- samples/net/ptp/
labels:
- - "area: Networking"
+ - "area: PTP"
tests:
- sample.net.ptp
"Networking: Native IEEE 802.15.4":
- status: maintained
- maintainers:
- - fgrandel
+ status: odd fixes
collaborators:
- rlubos
- jukkar
@@ -3040,6 +3068,7 @@ Networking:
collaborators:
- rlubos
- krish2718
+ - MaochenWang1
files:
- doc/connectivity/networking/api/wifi.rst
- include/zephyr/net/wifi*.h
@@ -3052,6 +3081,25 @@ Networking:
tests:
- net.wifi
+"Networking: HTTP":
+ status: maintained
+ maintainers:
+ - jukkar
+ - rlubos
+ collaborators:
+ - mrodgers-witekio
+ files:
+ - doc/connectivity/networking/api/http*.rst
+ - include/zephyr/net/http/
+ - subsys/net/lib/http/
+ - samples/net/sockets/*http*/
+ - tests/net/lib/http*/
+ labels:
+ - "area: Networking"
+ - "area: HTTP"
+ tests:
+ - net.http
+
NIOS-2 arch:
status: maintained
maintainers:
@@ -3103,6 +3151,18 @@ Open AMP:
tests:
- sample.ipc.openamp
+PHYTEC Platforms:
+ status: maintained
+ maintainers:
+ - dnltz
+ collaborators:
+ - jonas-rem
+ - pefech
+ files:
+ - boards/phytec/
+ labels:
+ - "platform: PHYTEC"
+
POSIX API layer:
status: maintained
maintainers:
@@ -3126,6 +3186,7 @@ Power management:
status: maintained
maintainers:
- ceolin
+ - bjarki-andreasen
collaborators:
- nashif
- teburd
@@ -3318,7 +3379,7 @@ Shields:
SPARC arch:
status: odd fixes
collaborators:
- - julius-barendt
+ - tbr-tt
files:
- arch/sparc/
- include/zephyr/arch/sparc/
@@ -3330,7 +3391,7 @@ SPARC arch:
Gaisler Platforms:
status: odd fixes
collaborators:
- - julius-barendt
+ - tbr-tt
files:
- dts/sparc/gaisler/
- soc/gaisler/
@@ -3481,20 +3542,22 @@ Nuvoton NPCM Platforms:
- soc/nuvoton/npcm/
- boards/nuvoton/npcm*/
- dts/arm/nuvoton/
+ - drivers/*/*_npcm*
+ - include/zephyr/dt-bindings/*/npcm_*
labels:
- "platform: Nuvoton NPCM"
Raspberry Pi Pico Platforms:
status: maintained
maintainers:
- - yonsch
- collaborators:
- soburi
+ collaborators:
+ - yonsch
files:
- boards/raspberrypi/
- boards/adafruit/kb2040/
- boards/sparkfun/pro_micro_rp2040/
- - dts/arm/rpi_pico/
+ - dts/arm/raspberrypi/rpi_pico/
- dts/bindings/*/raspberrypi,pico*
- drivers/*/*rpi_pico
- drivers/*/*rpi_pico*/
@@ -3515,7 +3578,9 @@ Silabs Platforms:
- boards/silabs/
- dts/arm/silabs/
- dts/bindings/*/silabs*
- - drivers/*/*_gecko*
+ - drivers/*/*gecko*
+ - drivers/bluetooth/hci/hci_silabs_*
+ - drivers/*/*silabs*
labels:
- "platform: Silabs"
@@ -3534,12 +3599,26 @@ Silabs SiM3U Platforms:
- drivers/*/Kconfig.si32
- dts/arm/silabs/sim3u*
- dts/bindings/*/*silabs,si32*
+ - include/zephyr/dt-bindings/pinctrl/*si32*
- soc/silabs/silabs_sim3/
labels:
- "platform: Silabs SiM3U"
description: >-
SiM3U SoCs, dts files, and related drivers. Boards based on SiM3U SoCs.
+Gardena Platforms:
+ status: maintained
+ maintainers:
+ - rettichschnidi
+ collaborators:
+ - M1cha
+ files:
+ - boards/gardena/
+ labels:
+ - "platform: Gardena"
+ description: >-
+ Gardena board(s).
+
Intel Platforms (X86):
status: maintained
maintainers:
@@ -3628,11 +3707,9 @@ NXP Drivers:
- dleach02
- mmahadevan108
collaborators:
- - danieldegrasse
- decsny
- manuargue
- dbaluta
- - MarkWangChinese
files-regex:
- ^drivers/.*nxp.*
- ^drivers/.*mcux.*
@@ -3643,7 +3720,7 @@ NXP Drivers:
- drivers/*/*.mcux
- drivers/*/*.nxp
- drivers/*/*nxp*
- - drivers/*/*kinetis*
+ - drivers/*/*/*kinetis*
- drivers/misc/*/nxp*
- include/zephyr/dt-bindings/*/*nxp*
- include/zephyr/dt-bindings/*/*mcux*
@@ -3653,19 +3730,32 @@ NXP Drivers:
- include/zephyr/drivers/*/*mcux*
- arch/arm/core/mpu/nxp_mpu.c
- dts/bindings/*/nxp*
+ files-exclude:
+ - drivers/wifi/nxp/
+ - drivers/usb/*/*mcux*
files-regex-exclude:
- .*s32.*
labels:
- "platform: NXP Drivers"
description: NXP Drivers
+NXP MCUX USB:
+ status: maintained
+ maintainers:
+ - mmahadevan108
+ - MarkWangChinese
+ files:
+ - drivers/usb/*/*mcux*
+ labels:
+ - "platform: NXP Drivers"
+ description: NXP MCUX USB shim drivers
+
NXP Platforms (MCU):
status: maintained
maintainers:
- dleach02
- mmahadevan108
collaborators:
- - danieldegrasse
- DerekSnell
- yvanderv
- EmilioCBen
@@ -3685,6 +3775,8 @@ NXP Platforms (MCU):
- soc/nxp/mcx/
- dts/arm/nxp/
- samples/boards/nxp*/
+ files-exclude:
+ - dts/arm/nxp/nxp_imx*
files-regex-exclude:
- .*s32.*
labels:
@@ -3725,11 +3817,10 @@ NXP Platforms (MPU):
- dleach02
- dbaluta
- iuliana-prodan
- - danieldegrasse
- - decsny
- yvanderv
files:
- dts/arm64/nxp/
+ - dts/arm/nxp/nxp_imx*
- soc/nxp/imx/
- soc/nxp/layerscape/
files-regex:
@@ -3765,7 +3856,8 @@ Microchip MEC Platforms:
- drivers/*/*mchp*.c
- tests/boards/mec15xxevb_assy6853/
- tests/boards/mec172xevb_assy6906/
- - dts/bindings/*/microchip,*
+ - dts/bindings/*/microchip,mec*
+ - dts/bindings/*/microchip,xec*
labels:
- "platform: Microchip MEC"
@@ -3932,6 +4024,7 @@ STM32 Platforms:
- GeorgeCGV
- marwaiehm-st
- mathieuchopstm
+ - djiatsaf-st
files:
- boards/st/
- drivers/*/*stm32*.c
@@ -3942,11 +4035,37 @@ STM32 Platforms:
- dts/bindings/*/*stm32*
- soc/st/stm32/
- samples/boards/st/
+ files-exclude:
+ - boards/st/*wb*/
+ - drivers/bluetooth/hci/*stm32*.c
+ - soc/st/stm32/stm32wb*/
labels:
- "platform: STM32"
description: >-
- STM32 SOCs, dts files and related drivers. ST nucleo, disco and eval
- boards.
+ STM32 SOCs, dts files and related drivers. ST development boards.
+
+STM32 Wireless Platforms:
+ status: maintained
+ maintainers:
+ - erwango
+ collaborators:
+ - asm5878
+ - HoZHel
+ - benothmn-st
+ - mathieuchopstm
+ files:
+ - boards/shields/x_nucleo_bnrg2a1/
+ - boards/shields/x_nucleo_idb05a1/
+ - boards/shields/x_nucleo_wb05kn1/
+ - boards/st/*wb*/
+ - drivers/bluetooth/hci/*stm32*.c
+ - drivers/bluetooth/hci/hci_spi_st.c
+ - soc/st/stm32/stm32wb*/
+ labels:
+ - "platform: STM32"
+ description: >-
+ STM32WB SOCs, dts files and related drivers. STM32WB development boards
+ and ST bluetooth shields.
Espressif Platforms:
status: maintained
@@ -3966,7 +4085,7 @@ Espressif Platforms:
- dts/riscv/espressif/
- dts/bindings/*/*esp32*
- samples/boards/espressif/
- - tests/boards/espressif_esp32/
+ - tests/boards/espressif/
- drivers/*/*esp32*/
labels:
- "platform: ESP32"
@@ -4022,8 +4141,6 @@ TI K3 Platforms:
- gramsay0
- dnltz
files:
- - boards/phytec/phyboard_lyra/
- - boards/phytec/phyboard_electra/
- boards/ti/*am62*/
- drivers/*/*ti_k3*
- dts/bindings/*/ti,k3*
@@ -4044,8 +4161,12 @@ Xilinx Platforms:
collaborators:
- henrikbrixandersen
- ibirnbaum
+ - michalsimek
files:
+ - boards/amd/
+ - drivers/*/*xilinx*
- drivers/*/*xlnx*
+ - drivers/*/*zynq*
- dts/*/xilinx/
- dts/bindings/*/*xlnx*
- include/zephyr/*/*/*xlnx*
@@ -4124,6 +4245,20 @@ RTIO:
tests:
- rtio
+Secure storage:
+ status: maintained
+ maintainers:
+ - tomi-font
+ files:
+ - subsys/secure_storage/
+ - samples/psa/
+ - doc/services/secure_storage.rst
+ - tests/subsys/secure_storage/
+ labels:
+ - "area: Secure storage"
+ tests:
+ - psa.secure_storage
+
Storage:
status: odd fixes
files:
@@ -4136,6 +4271,17 @@ Storage:
tests:
- storage
+Storage ZMS:
+ status: maintained
+ maintainers:
+ - rghaddab
+ files:
+ - subsys/fs/zms/
+ - include/zephyr/fs/zms.h
+ - samples/subsys/fs/zms/
+ - tests/subsys/fs/zms/
+ - doc/services/storage/zms/zms.rst
+
Sysbuild:
status: maintained
maintainers:
@@ -4288,6 +4434,7 @@ USB:
- samples/subsys/usb/
- subsys/usb/
- tests/subsys/usb/
+ - tests/drivers/build_all/usb/
- tests/drivers/usb/
- tests/drivers/udc/
- doc/connectivity/usb/
@@ -4365,12 +4512,13 @@ VFS:
- filesystem
West:
- status: odd fixes
+ status: maintained
+ maintainers:
+ - pdgendt
collaborators:
- - mbolivar-ampere
+ - mbolivar
- carlescufi
- swinslow
- - pdgendt
files:
- scripts/west-commands.yml
- scripts/west_commands/
@@ -4537,6 +4685,17 @@ West:
labels:
- "area: CMSIS-NN"
+"West project: cmsis_6":
+ status: maintained
+ maintainers:
+ - ithinuel
+ collaborators:
+ - tomi-font
+ - wearyzen
+ files: []
+ labels:
+ - "area: CMSIS_6"
+
"West project: edtt":
status: maintained
maintainers:
@@ -4627,6 +4786,9 @@ West:
status: maintained
maintainers:
- kristofer-jonsson-arm
+ - ithinuel
+ collaborators:
+ - wearyzen
files:
- drivers/misc/ethos_u/
- modules/hal_ethos_u/
@@ -4679,11 +4841,6 @@ West:
collaborators:
- hubertmis
- nordic-krch
- - krish2718
- - sachinthegreen
- - udaynordic
- - rajb9
- - srkanordic
files:
- modules/hal_nordic/
labels:
@@ -4704,7 +4861,7 @@ West:
- dleach02
- mmahadevan108
collaborators:
- - danieldegrasse
+ - decsny
- manuargue
- PetervdPerk-NXP
- bperseghetti
@@ -4752,6 +4909,8 @@ West:
"West project: hal_rpi_pico":
status: maintained
maintainers:
+ - soburi
+ collaborators:
- yonsch
files:
- modules/hal_rpi_pico/
@@ -4770,7 +4929,7 @@ West:
- mnkp
- rettichschnidi
files:
- - modules/Kconfig.silabs
+ - modules/hal_silabs/
labels:
- "platform: Silabs"
@@ -4791,11 +4950,25 @@ West:
- FRASTM
- gautierg-st
- marwaiehm-st
+ - asm5878
+ - HoZHel
+ - benothmn-st
files:
- modules/Kconfig.stm32
labels:
- "platform: STM32"
+"West project: hal_tdk":
+ status: maintained
+ maintainers:
+ - afontaine-invn
+ collaborators:
+ - rbuisson-invn
+ - gjabouley-invn
+ - sriccardi-invn
+ files:
+ - modules/hal_tdk/Kconfig
+
"West project: hal_telink":
status: maintained
maintainers:
@@ -4813,6 +4986,14 @@ West:
labels:
- "platform: TI"
+"West project: hal_wch":
+ status: maintained
+ maintainers:
+ - nzmichaelh
+ - kholia
+ files:
+ - modules/hal_wch/
+
"West project: hal_wurthelektronik":
status: maintained
maintainers:
@@ -4844,6 +5025,14 @@ West:
labels:
- "platform: Intel"
+"West project: zephyr-lang-rust":
+ status: maintained
+ maintainers:
+ - d3zd3z
+ files: []
+ labels:
+ - "area: Rust"
+
"West project: libmetal":
status: odd fixes
collaborators:
@@ -4890,6 +5079,7 @@ West:
collaborators:
- brgl
- pdgendt
+ - uLipe
files:
- modules/lvgl/
- tests/lib/gui/lvgl/
@@ -4914,6 +5104,7 @@ West:
- ceolin
collaborators:
- ithinuel
+ - wearyzen
- valeriosetti
- tomi-font
files:
@@ -4925,6 +5116,7 @@ West:
tests:
- benchmark.crypto.mbedtls
- crypto.mbedtls
+ - psa.secure_storage
"West project: mcuboot":
status: maintained
@@ -4985,6 +5177,10 @@ West:
maintainers:
- krish2718
- sachinthegreen
+ collaborators:
+ - udaynordic
+ - rajb9
+ - srkanordic
files:
- modules/nrf_wifi/
labels:
@@ -5097,6 +5293,7 @@ West:
collaborators:
- Vge0rge
- ithinuel
+ - wearyzen
- valeriosetti
- tomi-font
files:
@@ -5107,6 +5304,7 @@ West:
- "area: TF-M"
tests:
- trusted-firmware-m
+ - psa.secure_storage
"West project: tf-m-tests":
status: maintained
@@ -5115,6 +5313,7 @@ West:
collaborators:
- Vge0rge
- ithinuel
+ - wearyzen
files: []
labels:
- "area: TF-M"
@@ -5127,6 +5326,7 @@ West:
collaborators:
- carlocaione
- ithinuel
+ - wearyzen
files:
- modules/trusted-firmware-a/
labels:
@@ -5139,6 +5339,7 @@ West:
collaborators:
- Vge0rge
- ithinuel
+ - wearyzen
files: []
labels:
- "area: TF-M"
@@ -5175,10 +5376,14 @@ West:
maintainers:
- krish2718
- jukkar
+ collaborators:
+ - MaochenWang1
files:
- modules/hostap/
labels:
- "area: Wi-Fi"
+ tests:
+ - net.wifi
Xtensa arch:
status: maintained
@@ -5195,7 +5400,6 @@ Xtensa arch:
- boards/qemu/xtensa/
- boards/cdns/xt-sim/
- soc/cdns/dc233c/
- - soc/cdns/dc233c/
- soc/cdns/xtensa_sample_controller/
- tests/arch/xtensa/
labels:
@@ -5306,6 +5510,8 @@ Testing with Renode:
- fkokosinski
files:
- cmake/emu/renode.cmake
+ - soc/renode/
+ - boards/renode/
- boards/**/*/support/*.repl
- boards/**/*/support/*.resc
labels:
@@ -5334,6 +5540,7 @@ zbus:
- lyakh
- pillo79
files:
+ - cmake/llext-edk.cmake
- samples/subsys/llext/
- include/zephyr/llext/
- tests/subsys/llext/
diff --git a/README.rst b/README.rst
index 2b44d5ed4a5..9472db6d5ee 100644
--- a/README.rst
+++ b/README.rst
@@ -10,15 +10,9 @@
-
-
-
-
-
-
-
-
-
+
+
+
The Zephyr Project is a scalable real-time operating system (RTOS) supporting
diff --git a/SDK_VERSION b/SDK_VERSION
index 74aaa3f38cf..c5523bd09b1 100644
--- a/SDK_VERSION
+++ b/SDK_VERSION
@@ -1 +1 @@
-0.16.8
+0.17.0
diff --git a/VERSION b/VERSION
index 83bbbb1d942..b170abf44be 100644
--- a/VERSION
+++ b/VERSION
@@ -1,5 +1,5 @@
-VERSION_MAJOR = 3
-VERSION_MINOR = 7
+VERSION_MAJOR = 4
+VERSION_MINOR = 0
PATCHLEVEL = 99
VERSION_TWEAK = 0
EXTRAVERSION =
diff --git a/arch/Kconfig b/arch/Kconfig
index da35a1b2751..94e9a540a08 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -50,11 +50,12 @@ config ARM64
select ARCH_HAS_THREAD_LOCAL_STORAGE
select USE_SWITCH
select USE_SWITCH_SUPPORTED
- select IRQ_OFFLOAD_NESTED if IRQ_OFFLOAD
select BARRIER_OPERATIONS_ARCH
select ARCH_HAS_DIRECTED_IPIS
select ARCH_HAS_DEMAND_PAGING
select ARCH_HAS_DEMAND_MAPPING
+ select ARCH_SUPPORTS_EVICTION_TRACKING
+ select EVICTION_TRACKING if DEMAND_PAGING
help
ARM64 (AArch64) architecture
@@ -83,6 +84,7 @@ config X86
select ARCH_IS_SET
select ATOMIC_OPERATIONS_BUILTIN
select ARCH_SUPPORTS_COREDUMP
+ select ARCH_SUPPORTS_COREDUMP_PRIV_STACKS
select ARCH_SUPPORTS_ROM_START if !X86_64
select CPU_HAS_MMU
select ARCH_MEM_DOMAIN_DATA if USERSPACE && !X86_COMMON_PAGE_TABLE
@@ -91,7 +93,7 @@ config X86
select ARCH_HAS_TIMING_FUNCTIONS
select ARCH_HAS_THREAD_LOCAL_STORAGE
select ARCH_HAS_DEMAND_PAGING if !X86_64
- select IRQ_OFFLOAD_NESTED if IRQ_OFFLOAD
+ select ARCH_HAS_DEMAND_MAPPING if ARCH_HAS_DEMAND_PAGING
select NEED_LIBC_MEM_PARTITION if USERSPACE && TIMING_FUNCTIONS \
&& !BOARD_HAS_TIMING_FUNCTIONS \
&& !SOC_HAS_TIMING_FUNCTIONS
@@ -114,11 +116,11 @@ config RISCV
bool
select ARCH_IS_SET
select ARCH_SUPPORTS_COREDUMP
+ select ARCH_SUPPORTS_COREDUMP_PRIV_STACKS
select ARCH_SUPPORTS_ROM_START if !SOC_FAMILY_ESPRESSIF_ESP32
select ARCH_SUPPORTS_EMPTY_IRQ_SPURIOUS
select ARCH_HAS_CODE_DATA_RELOCATION
select ARCH_HAS_THREAD_LOCAL_STORAGE
- select IRQ_OFFLOAD_NESTED if IRQ_OFFLOAD
select USE_SWITCH_SUPPORTED
select USE_SWITCH
select SCHED_IPI_SUPPORTED if SMP
@@ -133,7 +135,6 @@ config XTENSA
select ARCH_IS_SET
select USE_SWITCH
select USE_SWITCH_SUPPORTED
- select IRQ_OFFLOAD_NESTED if IRQ_OFFLOAD
select ARCH_HAS_CODE_DATA_RELOCATION
select ARCH_HAS_TIMING_FUNCTIONS
select ARCH_MEM_DOMAIN_DATA if USERSPACE
@@ -448,9 +449,8 @@ config ISR_TABLES_LOCAL_DECLARATION_SUPPORTED
depends on "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "zephyr" || "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "gnuarmemb"
config ISR_TABLES_LOCAL_DECLARATION
- bool "ISR tables created locally and placed by linker [EXPERIMENTAL]"
+ bool "ISR tables created locally and placed by linker"
depends on ISR_TABLES_LOCAL_DECLARATION_SUPPORTED
- select EXPERIMENTAL
help
Enable new scheme of interrupt tables generation.
This is totally different generator that would create tables entries locally
@@ -576,11 +576,12 @@ config IRQ_OFFLOAD
config IRQ_OFFLOAD_NESTED
bool "irq_offload() supports nested IRQs"
depends on IRQ_OFFLOAD
+ default y if ARM64 || X86 || RISCV || XTENSA
help
- When set by the arch layer, indicates that irq_offload() may
- legally be called in interrupt context to cause a
- synchronous nested interrupt on the current CPU. Not all
- hardware is capable.
+ When set by the platform layers, indicates that
+ irq_offload() may legally be called in interrupt context to
+ cause a synchronous nested interrupt on the current CPU.
+ Not all hardware is capable.
config EXCEPTION_DEBUG
bool "Unhandled exception debugging"
@@ -679,6 +680,9 @@ config ARCH_SUPPORTS_COREDUMP
config ARCH_SUPPORTS_COREDUMP_THREADS
bool
+config ARCH_SUPPORTS_COREDUMP_PRIV_STACKS
+ bool
+
config ARCH_SUPPORTS_ARCH_HW_INIT
bool
@@ -688,6 +692,12 @@ config ARCH_SUPPORTS_ROM_START
config ARCH_SUPPORTS_EMPTY_IRQ_SPURIOUS
bool
+config ARCH_SUPPORTS_EVICTION_TRACKING
+ bool
+ help
+ Architecture code supports page tracking for eviction algorithms
+ when demand paging is enabled.
+
config ARCH_HAS_EXTRA_EXCEPTION_INFO
bool
@@ -819,7 +829,7 @@ config CPU_CACHE_INCOHERENT
help
This hidden configuration should be selected when the CPU has
incoherent cache. This applies to intra-CPU multiprocessing
- incoherence and makes only sense when MP_NUM_CPUS > 1.
+ incoherence and makes only sense when MP_MAX_NUM_CPUS > 1.
config CPU_HAS_ICACHE
bool
@@ -1025,7 +1035,7 @@ config CACHE_DOUBLEMAP
point to the same cached/uncached memory at different locations.
This applies to intra-CPU multiprocessing incoherence and makes only
- sense when MP_NUM_CPUS > 1.
+ sense when MP_MAX_NUM_CPUS > 1.
config CACHE_MANAGEMENT
bool "Cache management features"
@@ -1134,3 +1144,9 @@ config ARCH_HAS_CUSTOM_BUSY_WAIT
It's possible that an architecture port cannot or does not want to use
the provided k_busy_wait(), but instead must do something custom. It must
enable this option in that case.
+
+config ARCH_HAS_CUSTOM_CURRENT_IMPL
+ bool
+ help
+ Select when architecture implements arch_current_thread() &
+ arch_current_thread_set().
diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig
index a27b09659ac..d44ca272b11 100644
--- a/arch/arc/Kconfig
+++ b/arch/arc/Kconfig
@@ -262,7 +262,7 @@ config ARC_CURRENT_THREAD_USE_NO_TLS
RGF_NUM_BANKS the parameter is disabled by-default because banks syncronization
requires significant time, and it slows down performance.
ARCMWDT works with tls pointer in different way then GCC. Optimized access to
- TLS pointer via _current variable does not provide significant advantages
+ TLS pointer via the _current symbol does not provide significant advantages
in case of MetaWare.
config GEN_ISR_TABLES
@@ -343,6 +343,15 @@ config ARC_NORMAL_FIRMWARE
resources of the ARC processors, and, therefore, it shall avoid
accessing them.
+config ARC_VPX_COOPERATIVE_SHARING
+ bool "Cooperative sharing of ARC VPX vector registers"
+ select SCHED_CPU_MASK if MP_MAX_NUM_CPUS > 1
+ help
+ This option enables the cooperative sharing of the ARC VPX vector
+ registers. Threads that want to use those registers must successfully
+ call arc_vpx_lock() before using them, and call arc_vpx_unlock()
+ when done using them.
+
source "arch/arc/core/dsp/Kconfig"
menu "ARC MPU Options"
@@ -374,9 +383,7 @@ config ARC_EXCEPTION_STACK_SIZE
endmenu
config ARC_EARLY_SOC_INIT
- bool "Make early stage SoC-specific initialization [DEPRECATED]"
- select SOC_RESET_HOOK
- select DEPRECATED
+ bool "Make early stage SoC-specific initialization"
help
Call SoC per-core setup code on early stage initialization
(before C runtime initialization). Setup code is called in form of
diff --git a/arch/arc/core/CMakeLists.txt b/arch/arc/core/CMakeLists.txt
index 00c9f775038..5b81f527480 100644
--- a/arch/arc/core/CMakeLists.txt
+++ b/arch/arc/core/CMakeLists.txt
@@ -34,3 +34,5 @@ add_subdirectory_ifdef(CONFIG_ARC_CORE_MPU mpu)
add_subdirectory_ifdef(CONFIG_ARC_SECURE_FIRMWARE secureshield)
zephyr_linker_sources(ROM_START SORT_KEY 0x0vectors vector_table.ld)
+
+zephyr_library_sources_ifdef(CONFIG_LLEXT elf.c)
diff --git a/arch/arc/core/elf.c b/arch/arc/core/elf.c
new file mode 100644
index 00000000000..9f9f1073431
--- /dev/null
+++ b/arch/arc/core/elf.c
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2024 Intel Corporation
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include
+#include
+#include
+#include
+#include
+
+LOG_MODULE_REGISTER(elf, CONFIG_LLEXT_LOG_LEVEL);
+
+#define R_ARC_32 4
+#define R_ARC_B26 5 /* AKA R_ARC_64 */
+#define R_ARC_S25W_PCREL 17
+#define R_ARC_32_ME 27
+
+/* ARCompact insns packed in memory have Middle Endian encoding */
+#define ME(x) (((x & 0xffff0000) >> 16) | ((x & 0xffff) << 16))
+
+/**
+ * @brief Architecture specific function for relocating shared elf
+ *
+ * Elf files contain a series of relocations described in multiple sections.
+ * These relocation instructions are architecture specific and each architecture
+ * supporting modules must implement this.
+ *
+ * The relocation codes are well documented:
+ * https://github.com/foss-for-synopsys-dwc-arc-processors/arc-ABI-manual/blob/master/ARCv2_ABI.pdf
+ * https://github.com/zephyrproject-rtos/binutils-gdb
+ */
+int arch_elf_relocate(elf_rela_t *rel, uintptr_t loc, uintptr_t sym_base_addr, const char *sym_name,
+ uintptr_t load_bias)
+{
+ int ret = 0;
+ uint32_t insn = UNALIGNED_GET((uint32_t *)loc);
+ uint32_t value;
+
+ sym_base_addr += rel->r_addend;
+
+ int reloc_type = ELF32_R_TYPE(rel->r_info);
+
+ switch (reloc_type) {
+ case R_ARC_32:
+ case R_ARC_B26:
+ UNALIGNED_PUT(sym_base_addr, (uint32_t *)loc);
+ break;
+ case R_ARC_S25W_PCREL:
+ /* ((S + A) - P) >> 2
+ * S = symbol address
+ * A = addend
+ * P = relative offset to PCL
+ */
+ value = (sym_base_addr + rel->r_addend - (loc & ~0x3)) >> 2;
+
+ insn = ME(insn);
+
+ /* disp25w */
+ insn = insn & ~0x7fcffcf;
+ insn |= ((value >> 0) & 0x01ff) << 18;
+ insn |= ((value >> 9) & 0x03ff) << 6;
+ insn |= ((value >> 19) & 0x000f) << 0;
+
+ insn = ME(insn);
+
+ UNALIGNED_PUT(insn, (uint32_t *)loc);
+ break;
+ case R_ARC_32_ME:
+ UNALIGNED_PUT(ME(sym_base_addr), (uint32_t *)loc);
+ break;
+ default:
+ LOG_ERR("unknown relocation: %u\n", reloc_type);
+ ret = -ENOEXEC;
+ break;
+ }
+
+ return ret;
+}
diff --git a/arch/arc/core/reset.S b/arch/arc/core/reset.S
index 63fa6438ce4..a2b038d387e 100644
--- a/arch/arc/core/reset.S
+++ b/arch/arc/core/reset.S
@@ -16,9 +16,8 @@
#include
#include
#include
-
-#if defined(CONFIG_SOC_RESET_HOOK)
-GTEXT(soc_reset_hook)
+#ifdef CONFIG_ARC_EARLY_SOC_INIT
+ #include
#endif
GDATA(z_interrupt_stacks)
@@ -113,8 +112,8 @@ done_icache_invalidate:
done_dcache_invalidate:
-#ifdef CONFIG_SOC_RESET_HOOK
- bl soc_reset_hook
+#ifdef CONFIG_ARC_EARLY_SOC_INIT
+ soc_early_asm_init_percpu
#endif
_dsp_extension_probe
diff --git a/arch/arc/core/smp.c b/arch/arc/core/smp.c
index e8463b7b53b..1b06c2ac7d1 100644
--- a/arch/arc/core/smp.c
+++ b/arch/arc/core/smp.c
@@ -16,6 +16,7 @@
#include
#include
#include
+#include
#include
volatile struct {
@@ -115,6 +116,11 @@ void arch_secondary_cpu_init(int cpu_num)
DT_IRQ(DT_NODELABEL(ici), priority), 0);
irq_enable(DT_IRQN(DT_NODELABEL(ici)));
#endif
+
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+ soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
+
/* call the function set by arch_cpu_start */
fn = arc_cpu_init[cpu_num].fn;
diff --git a/arch/arc/core/thread.c b/arch/arc/core/thread.c
index 1c85a416ca6..4b1d836103e 100644
--- a/arch/arc/core/thread.c
+++ b/arch/arc/core/thread.c
@@ -19,10 +19,15 @@
#include
#endif
-#if defined(CONFIG_ARC_DSP) && defined(CONFIG_DSP_SHARING)
+#if defined(CONFIG_ARC_VPX_COOPERATIVE_SHARING) || defined(CONFIG_DSP_SHARING)
#include
static struct k_spinlock lock;
#endif
+
+#if defined(CONFIG_ARC_VPX_COOPERATIVE_SHARING)
+static struct k_sem vpx_sem[CONFIG_MP_MAX_NUM_CPUS];
+#endif
+
/* initial stack frame */
struct init_stack_frame {
uintptr_t pc;
@@ -320,3 +325,65 @@ void arc_dsp_enable(struct k_thread *thread, unsigned int options)
k_spin_unlock(&lock, key);
}
#endif /* CONFIG_ARC_DSP && CONFIG_DSP_SHARING */
+
+#if defined(CONFIG_ARC_VPX_COOPERATIVE_SHARING)
+int arc_vpx_lock(k_timeout_t timeout)
+{
+ k_spinlock_key_t key;
+ unsigned int id;
+
+ key = k_spin_lock(&lock);
+
+ id = _current_cpu->id;
+#if (CONFIG_MP_MAX_NUM_CPUS > 1) && defined(CONFIG_SCHED_CPU_MASK)
+ __ASSERT(!arch_is_in_isr() && (_current->base.cpu_mask == BIT(id)), "");
+#endif
+ k_spin_unlock(&lock, key);
+
+ /*
+ * It is assumed that the thread is (still) pinned to
+ * the same CPU identified by .
+ */
+
+ return k_sem_take(&vpx_sem[id], timeout);
+}
+
+void arc_vpx_unlock(void)
+{
+ k_spinlock_key_t key;
+ unsigned int id;
+
+ key = k_spin_lock(&lock);
+#if (CONFIG_MP_MAX_NUM_CPUS > 1) && defined(CONFIG_SCHED_CPU_MASK)
+ __ASSERT(!arch_is_in_isr() && (_current->base.cpu_mask == BIT(id)), "");
+#endif
+ id = _current_cpu->id;
+ k_spin_unlock(&lock, key);
+
+ /*
+ * It is assumed that this thread is (still) pinned to
+ * the CPU identified by , and that it is the same CPU
+ * used by arc_vpx_lock().
+ */
+
+ k_sem_give(&vpx_sem[id]);
+}
+
+void arc_vpx_unlock_force(unsigned int id)
+{
+ __ASSERT(id < CONFIG_MP_MAX_NUM_CPUS, "");
+
+ k_sem_give(&vpx_sem[id]);
+}
+
+static int arc_vpx_sem_init(void)
+{
+ for (unsigned int i = 0; i < CONFIG_MP_MAX_NUM_CPUS; i++) {
+ k_sem_init(vpx_sem, 1, 1);
+ }
+
+ return 0;
+}
+
+SYS_INIT(arc_vpx_sem_init, PRE_KERNEL_2, CONFIG_KERNEL_INIT_PRIORITY_OBJECTS);
+#endif
diff --git a/arch/arc/include/kernel_arch_func.h b/arch/arc/include/kernel_arch_func.h
index ca382a274f4..73bd352a249 100644
--- a/arch/arc/include/kernel_arch_func.h
+++ b/arch/arc/include/kernel_arch_func.h
@@ -26,6 +26,8 @@
#include
+#include
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -33,6 +35,10 @@ extern "C" {
static ALWAYS_INLINE void arch_kernel_init(void)
{
z_irq_setup();
+
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+ soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
}
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index c28cf8d29f9..3ce78334cb6 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -155,12 +155,12 @@ config CPU_HAS_ARM_MPU
This option is enabled when the CPU has a Memory Protection Unit (MPU)
in ARM flavor.
-config CPU_HAS_NXP_MPU
+config CPU_HAS_NXP_SYSMPU
bool
select CPU_HAS_MPU
help
- This option is enabled when the CPU has a Memory Protection Unit (MPU)
- in NXP flavor.
+ This option is enabled when the CPU has an NXP System Memory Protection
+ Unit (SYSMPU).
config CPU_HAS_CUSTOM_FIXED_SOC_MPU_REGIONS
bool "Custom fixed SoC MPU region definition"
diff --git a/arch/arm/core/cortex_a_r/CMakeLists.txt b/arch/arm/core/cortex_a_r/CMakeLists.txt
index d4e18a614f0..7d18e0e610d 100644
--- a/arch/arm/core/cortex_a_r/CMakeLists.txt
+++ b/arch/arm/core/cortex_a_r/CMakeLists.txt
@@ -24,4 +24,4 @@ zephyr_library_sources_ifdef(CONFIG_SEMIHOST semihost.c)
zephyr_library_sources_ifdef(CONFIG_THREAD_LOCAL_STORAGE __aeabi_read_tp.S)
zephyr_library_sources_ifdef(CONFIG_ARCH_CACHE cache.c)
zephyr_library_sources_ifdef(CONFIG_USE_SWITCH switch.S)
-zephyr_library_sources_ifndef(CONFIG_USE_SWITCH swap.c swap_helper.S exc_exit.S)
+zephyr_library_sources_ifndef(CONFIG_USE_SWITCH swap_helper.S exc_exit.S)
diff --git a/arch/arm/core/cortex_a_r/Kconfig b/arch/arm/core/cortex_a_r/Kconfig
index 2ee3c945644..409968ca6c7 100644
--- a/arch/arm/core/cortex_a_r/Kconfig
+++ b/arch/arm/core/cortex_a_r/Kconfig
@@ -111,6 +111,32 @@ config CPU_CORTEX_R52
help
This option signifies the use of a Cortex-R52 CPU
+config CPU_CORTEX_R52_CACHE_SEGREGATION
+ bool "Control segregation of L1 I/D-Cache ways between Flash and AXIM"
+ depends on CPU_CORTEX_R52
+ help
+ Control segregation of L1 I/D-Cache ways between Flash and AXIM.
+ Updates to the cache segregation controls are only permitted before the caches
+ have ever been enabled, following a system reset, otherwise the update is ignored.
+
+config CPU_CORTEX_R52_ICACHE_FLASH_WAY
+ int "L1 I-Cache Flash way"
+ depends on CPU_CORTEX_R52_CACHE_SEGREGATION
+ range 0 4
+ default 0
+ help
+ Configure L1 I-Cache ways for Flash interface. Default is reset value, all
+ I-Cache ways are allocated for AXIM interface.
+
+config CPU_CORTEX_R52_DCACHE_FLASH_WAY
+ int "L1 D-Cache Flash way"
+ depends on CPU_CORTEX_R52_CACHE_SEGREGATION
+ range 0 4
+ default 0
+ help
+ Configure L1 D-Cache ways for Flash interface. Default is reset value,
+ all D-Cache ways are allocated for AXIM interface.
+
if CPU_AARCH32_CORTEX_R
config ARMV7_R
diff --git a/arch/arm/core/cortex_a_r/__aeabi_read_tp.S b/arch/arm/core/cortex_a_r/__aeabi_read_tp.S
index 40874c4a1fa..bafd7e8e3ec 100644
--- a/arch/arm/core/cortex_a_r/__aeabi_read_tp.S
+++ b/arch/arm/core/cortex_a_r/__aeabi_read_tp.S
@@ -14,5 +14,5 @@ SECTION_FUNC(text, __aeabi_read_tp)
/*
* TPIDRURW will be used as a base pointer point to TLS aera.
*/
- mrc 15, 0, r0, c13, c0, 2
+ mrc p15, 0, r0, c13, c0, 2
bx lr
diff --git a/arch/arm/core/cortex_a_r/prep_c.c b/arch/arm/core/cortex_a_r/prep_c.c
index 74d0855a620..a10588a4927 100644
--- a/arch/arm/core/cortex_a_r/prep_c.c
+++ b/arch/arm/core/cortex_a_r/prep_c.c
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2013-2014 Wind River Systems, Inc.
+ * Copyright 2024 Arm Limited and/or its affiliates
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -28,24 +29,6 @@
#include
#endif
-#if defined(__GNUC__)
-/*
- * GCC can detect if memcpy is passed a NULL argument, however one of
- * the cases of relocate_vector_table() it is valid to pass NULL, so we
- * suppress the warning for this case. We need to do this before
- * string.h is included to get the declaration of memcpy.
- */
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wnonnull"
-#endif
-
-#include
-
-#if defined(CONFIG_SW_VECTOR_RELAY) || defined(CONFIG_SW_VECTOR_RELAY_CLIENT)
-Z_GENERIC_SECTION(.vt_pointer_section) __attribute__((used))
-void *_vector_table_pointer;
-#endif
-
#ifdef CONFIG_ARM_MPU
extern void z_arm_mpu_init(void);
extern void z_arm_configure_static_mpu_regions(void);
@@ -53,38 +36,6 @@ extern void z_arm_configure_static_mpu_regions(void);
extern int z_arm_mmu_init(void);
#endif
-#if defined(CONFIG_AARCH32_ARMV8_R)
-
-#define VECTOR_ADDRESS ((uintptr_t)_vector_start)
-
-static inline void relocate_vector_table(void)
-{
- write_sctlr(read_sctlr() & ~HIVECS);
- write_vbar(VECTOR_ADDRESS & VBAR_MASK);
- barrier_isync_fence_full();
-}
-
-#else
-#define VECTOR_ADDRESS 0
-
-void __weak relocate_vector_table(void)
-{
-#if defined(CONFIG_XIP) && (CONFIG_FLASH_BASE_ADDRESS != 0) || \
- !defined(CONFIG_XIP) && (CONFIG_SRAM_BASE_ADDRESS != 0)
- write_sctlr(read_sctlr() & ~HIVECS);
- size_t vector_size = (size_t)_vector_end - (size_t)_vector_start;
- (void)memcpy(VECTOR_ADDRESS, _vector_start, vector_size);
-#elif defined(CONFIG_SW_VECTOR_RELAY) || defined(CONFIG_SW_VECTOR_RELAY_CLIENT)
- _vector_table_pointer = _vector_start;
-#endif
-}
-
-#if defined(__GNUC__)
-#pragma GCC diagnostic pop
-#endif
-
-#endif /* CONFIG_AARCH32_ARMV8_R */
-
#if defined(CONFIG_CPU_HAS_FPU)
static inline void z_arm_floating_point_init(void)
@@ -111,7 +62,6 @@ static inline void z_arm_floating_point_init(void)
__set_CPACR(reg_val);
barrier_isync_fence_full();
-#if !defined(CONFIG_FPU_SHARING)
/*
* FPEXC: Floating-Point Exception Control register
* comp. ARM Architecture Reference Manual, ARMv7-A and ARMv7-R edition,
@@ -133,7 +83,6 @@ static inline void z_arm_floating_point_init(void)
*/
__set_FPEXC(FPEXC_EN);
#endif
-#endif
}
#endif /* CONFIG_CPU_HAS_FPU */
@@ -155,7 +104,6 @@ void z_prep_c(void)
/* Initialize tpidruro with our struct _cpu instance address */
write_tpidruro((uintptr_t)&_kernel.cpus[0]);
- relocate_vector_table();
#if defined(CONFIG_CPU_HAS_FPU)
z_arm_floating_point_init();
#endif
diff --git a/arch/arm/core/cortex_a_r/reboot.c b/arch/arm/core/cortex_a_r/reboot.c
index dac892cf518..b5cea619f09 100644
--- a/arch/arm/core/cortex_a_r/reboot.c
+++ b/arch/arm/core/cortex_a_r/reboot.c
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2013-2014 Wind River Systems, Inc.
+ * Copyright 2024 Arm Limited and/or its affiliates
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -12,6 +13,56 @@
#include
#include
#include
+#include
+
+#if defined(CONFIG_AARCH32_ARMV8_R)
+
+#define VECTOR_ADDRESS ((uintptr_t)_vector_start)
+
+static inline void relocate_vector_table(void)
+{
+ write_sctlr(read_sctlr() & ~HIVECS);
+ write_vbar(VECTOR_ADDRESS & VBAR_MASK);
+ barrier_isync_fence_full();
+}
+
+#else
+
+#if defined(__GNUC__)
+/*
+ * GCC can detect if memcpy is passed a NULL argument, however one of
+ * the cases of relocate_vector_table() it is valid to pass NULL, so we
+ * suppress the warning for this case. We need to do this before
+ * string.h is included to get the declaration of memcpy.
+ */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wnonnull"
+#endif /* __GNUC__ */
+
+#include
+
+#define VECTOR_ADDRESS 0
+
+void __weak relocate_vector_table(void)
+{
+#if defined(CONFIG_XIP) && (CONFIG_FLASH_BASE_ADDRESS != 0) || \
+ !defined(CONFIG_XIP) && (CONFIG_SRAM_BASE_ADDRESS != 0)
+ write_sctlr(read_sctlr() & ~HIVECS);
+ size_t vector_size = (size_t)_vector_end - (size_t)_vector_start;
+ (void)memcpy(VECTOR_ADDRESS, _vector_start, vector_size);
+#endif
+}
+
+#if defined(__GNUC__)
+#pragma GCC diagnostic pop
+#endif
+
+#endif /* !CONFIG_AARCH32_ARMV8_R */
+
+void z_arm_relocate_vector_table(void)
+{
+ relocate_vector_table();
+}
/**
*
diff --git a/arch/arm/core/cortex_a_r/reset.S b/arch/arm/core/cortex_a_r/reset.S
index efb04d249ec..b5b899194e0 100644
--- a/arch/arm/core/cortex_a_r/reset.S
+++ b/arch/arm/core/cortex_a_r/reset.S
@@ -1,6 +1,7 @@
/*
* Copyright (c) 2013-2014 Wind River Systems, Inc.
* Copyright (c) 2019 Stephanos Ioannidis
+ * Copyright 2024 Arm Limited and/or its affiliates
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -55,9 +56,12 @@ SECTION_SUBSEC_FUNC(TEXT, _reset_section, __start)
cmp r0, #MODE_HYP
bne EL1_Reset_Handler
- /* Init HSCTLR see Armv8-R AArch32 architecture profile */
- ldr r0, =(HSCTLR_RES1 | SCTLR_I_BIT | SCTLR_C_BIT)
- mcr p15, 4, r0, c1, c0, 0
+ /*
+ * The HSCTLR register provides top-level control of system operation in Hyp mode.
+ * Since the OS is not running in Hyp mode, and considering the Armv8-R AArch32
+ * architecture profile, there's no need to modify HSCTLR configuration unless
+ * Fast Interrupts need to be enabled.
+ */
/* Init HACTLR: Enable EL1 access to all IMP DEF registers */
ldr r0, =HACTLR_INIT
@@ -199,6 +203,12 @@ EL1_Reset_Handler:
#endif /* CONFIG_DCLS */
+#if defined(CONFIG_CPU_CORTEX_R52_CACHE_SEGREGATION)
+ ldr r0, =IMP_CSCTLR(CONFIG_CPU_CORTEX_R52_ICACHE_FLASH_WAY,
+ CONFIG_CPU_CORTEX_R52_DCACHE_FLASH_WAY)
+ mcr p15, 1, r0, c9, c1, 0
+#endif
+
ldr r0, =arm_cpu_boot_params
#if CONFIG_MP_MAX_NUM_CPUS > 1
@@ -319,4 +329,6 @@ _primary_core:
bl z_arm_tcm_disable_ecc
#endif
+ bl z_arm_relocate_vector_table
+
bx r4
diff --git a/arch/arm/core/cortex_a_r/smp.c b/arch/arm/core/cortex_a_r/smp.c
index 6579cb4adde..d0e31acb1ed 100644
--- a/arch/arm/core/cortex_a_r/smp.c
+++ b/arch/arm/core/cortex_a_r/smp.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Arm Limited (or its affiliates). All rights reserved.
+ * Copyright (c) 2023, 2024 Arm Limited (or its affiliates).
* SPDX-License-Identifier: Apache-2.0
*/
@@ -12,6 +12,7 @@
#include "zephyr/cache.h"
#include "zephyr/kernel/thread_stack.h"
#include "zephyr/toolchain/gcc.h"
+#include
#define INV_MPID UINT32_MAX
@@ -139,10 +140,14 @@ void arch_cpu_start(int cpu_num, k_thread_stack_t *stack, int sz, arch_cpustart_
arm_cpu_boot_params.arg = arg;
arm_cpu_boot_params.cpu_num = cpu_num;
+ /* we need the barrier here to make sure the above changes to
+ * arm_cpu_boot_params are completed before we set the mpid
+ */
+ barrier_dsync_fence_full();
+
/* store mpid last as this is our synchronization point */
arm_cpu_boot_params.mpid = cpu_mpid;
- barrier_dsync_fence_full();
sys_cache_data_invd_range(
(void *)&arm_cpu_boot_params,
sizeof(arm_cpu_boot_params));
@@ -194,6 +199,10 @@ void arch_secondary_cpu_init(void)
*/
#endif
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+ soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
+
fn = arm_cpu_boot_params.fn;
arg = arm_cpu_boot_params.arg;
barrier_dsync_fence_full();
diff --git a/arch/arm/core/cortex_a_r/swap.c b/arch/arm/core/cortex_a_r/swap.c
deleted file mode 100644
index 2f7faba741a..00000000000
--- a/arch/arm/core/cortex_a_r/swap.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2018 Linaro, Limited
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-
-#include
-#include
-
-#include
-
-/* The 'key' actually represents the BASEPRI register
- * prior to disabling interrupts via the BASEPRI mechanism.
- *
- * arch_swap() itself does not do much.
- */
-int arch_swap(unsigned int key)
-{
- /* store off key and return value */
- _current->arch.basepri = key;
- _current->arch.swap_return_value = -EAGAIN;
-
- z_arm_cortex_r_svc();
- irq_unlock(key);
-
- /* Context switch is performed here. Returning implies the
- * thread has been context-switched-in again.
- */
- return _current->arch.swap_return_value;
-}
diff --git a/arch/arm/core/cortex_a_r/swap_helper.S b/arch/arm/core/cortex_a_r/swap_helper.S
index 548bb446aa3..a41e1ab5942 100644
--- a/arch/arm/core/cortex_a_r/swap_helper.S
+++ b/arch/arm/core/cortex_a_r/swap_helper.S
@@ -126,7 +126,7 @@ out_fp_inactive:
* TPIDRURW is used as a base pointer to all
* thread variables with offsets added by toolchain.
*/
- mcr 15, 0, r0, c13, c0, 2
+ mcr p15, 0, r0, c13, c0, 2
#endif
#if defined(CONFIG_ARM_STORE_EXC_RETURN)
@@ -336,12 +336,14 @@ _context_switch:
_oops:
/*
- * Pass the exception frame to z_do_kernel_oops. r0 contains the
- * exception reason.
+ * Pass the exception frame to z_do_kernel_oops.
*/
cps #MODE_SYS
mov r0, sp
cps #MODE_SVC
+ /* Zero callee_regs and exc_return (only used on Cortex-M) */
+ mov r1, #0
+ mov r2, #0
bl z_do_kernel_oops
b z_arm_int_exit
diff --git a/arch/arm/core/cortex_a_r/switch.S b/arch/arm/core/cortex_a_r/switch.S
index 800d46bbf94..4d5a6a627b1 100644
--- a/arch/arm/core/cortex_a_r/switch.S
+++ b/arch/arm/core/cortex_a_r/switch.S
@@ -150,10 +150,12 @@ offload:
_oops:
/*
- * Pass the exception frame to z_do_kernel_oops. r0 contains the
- * exception reason.
+ * Pass the exception frame to z_do_kernel_oops.
*/
mov r0, sp
+ /* Zero callee_regs and exc_return (only used on Cortex-M) */
+ mov r1, #0
+ mov r2, #0
bl z_do_kernel_oops
inv:
diff --git a/arch/arm/core/cortex_m/CMakeLists.txt b/arch/arm/core/cortex_m/CMakeLists.txt
index b220e6c81e8..05723811929 100644
--- a/arch/arm/core/cortex_m/CMakeLists.txt
+++ b/arch/arm/core/cortex_m/CMakeLists.txt
@@ -11,7 +11,6 @@ zephyr_library_sources(
scb.c
thread_abort.c
vector_table.S
- swap.c
swap_helper.S
irq_manage.c
prep_c.c
diff --git a/arch/arm/core/cortex_m/fault.c b/arch/arm/core/cortex_m/fault.c
index 4e604ba8033..56d5be60f4c 100644
--- a/arch/arm/core/cortex_m/fault.c
+++ b/arch/arm/core/cortex_m/fault.c
@@ -35,59 +35,11 @@ LOG_MODULE_DECLARE(os, CONFIG_KERNEL_LOG_LEVEL);
#define PR_FAULT_INFO(...)
#endif
-#if defined(CONFIG_ARM_MPU) && defined(CONFIG_CPU_HAS_NXP_MPU)
+#if defined(CONFIG_ARM_MPU) && defined(CONFIG_CPU_HAS_NXP_SYSMPU)
#define EMN(edr) (((edr) & SYSMPU_EDR_EMN_MASK) >> SYSMPU_EDR_EMN_SHIFT)
#define EACD(edr) (((edr) & SYSMPU_EDR_EACD_MASK) >> SYSMPU_EDR_EACD_SHIFT)
#endif
-/* Exception Return (EXC_RETURN) is provided in LR upon exception entry.
- * It is used to perform an exception return and to detect possible state
- * transition upon exception.
- */
-
-/* Prefix. Indicates that this is an EXC_RETURN value.
- * This field reads as 0b11111111.
- */
-#define EXC_RETURN_INDICATOR_PREFIX (0xFF << 24)
-/* bit[0]: Exception Secure. The security domain the exception was taken to. */
-#define EXC_RETURN_EXCEPTION_SECURE_Pos 0
-#define EXC_RETURN_EXCEPTION_SECURE_Msk \
- BIT(EXC_RETURN_EXCEPTION_SECURE_Pos)
-#define EXC_RETURN_EXCEPTION_SECURE_Non_Secure 0
-#define EXC_RETURN_EXCEPTION_SECURE_Secure EXC_RETURN_EXCEPTION_SECURE_Msk
-/* bit[2]: Stack Pointer selection. */
-#define EXC_RETURN_SPSEL_Pos 2
-#define EXC_RETURN_SPSEL_Msk BIT(EXC_RETURN_SPSEL_Pos)
-#define EXC_RETURN_SPSEL_MAIN 0
-#define EXC_RETURN_SPSEL_PROCESS EXC_RETURN_SPSEL_Msk
-/* bit[3]: Mode. Indicates the Mode that was stacked from. */
-#define EXC_RETURN_MODE_Pos 3
-#define EXC_RETURN_MODE_Msk BIT(EXC_RETURN_MODE_Pos)
-#define EXC_RETURN_MODE_HANDLER 0
-#define EXC_RETURN_MODE_THREAD EXC_RETURN_MODE_Msk
-/* bit[4]: Stack frame type. Indicates whether the stack frame is a standard
- * integer only stack frame or an extended floating-point stack frame.
- */
-#define EXC_RETURN_STACK_FRAME_TYPE_Pos 4
-#define EXC_RETURN_STACK_FRAME_TYPE_Msk BIT(EXC_RETURN_STACK_FRAME_TYPE_Pos)
-#define EXC_RETURN_STACK_FRAME_TYPE_EXTENDED 0
-#define EXC_RETURN_STACK_FRAME_TYPE_STANDARD EXC_RETURN_STACK_FRAME_TYPE_Msk
-/* bit[5]: Default callee register stacking. Indicates whether the default
- * stacking rules apply, or whether the callee registers are already on the
- * stack.
- */
-#define EXC_RETURN_CALLEE_STACK_Pos 5
-#define EXC_RETURN_CALLEE_STACK_Msk BIT(EXC_RETURN_CALLEE_STACK_Pos)
-#define EXC_RETURN_CALLEE_STACK_SKIPPED 0
-#define EXC_RETURN_CALLEE_STACK_DEFAULT EXC_RETURN_CALLEE_STACK_Msk
-/* bit[6]: Secure or Non-secure stack. Indicates whether a Secure or
- * Non-secure stack is used to restore stack frame on exception return.
- */
-#define EXC_RETURN_RETURN_STACK_Pos 6
-#define EXC_RETURN_RETURN_STACK_Msk BIT(EXC_RETURN_RETURN_STACK_Pos)
-#define EXC_RETURN_RETURN_STACK_Non_Secure 0
-#define EXC_RETURN_RETURN_STACK_Secure EXC_RETURN_RETURN_STACK_Msk
-
/* Integrity signature for an ARMv8-M implementation */
#if defined(CONFIG_ARMV7_M_ARMV8_M_FP)
#define INTEGRITY_SIGNATURE_STD 0xFEFA125BUL
@@ -440,7 +392,7 @@ static int bus_fault(struct arch_esf *esf, int from_hard_fault, bool *recoverabl
}
#endif /* !defined(CONFIG_ARMV7_M_ARMV8_M_FP) */
-#if defined(CONFIG_ARM_MPU) && defined(CONFIG_CPU_HAS_NXP_MPU)
+#if defined(CONFIG_ARM_MPU) && defined(CONFIG_CPU_HAS_NXP_SYSMPU)
uint32_t sperr = SYSMPU->CESR & SYSMPU_CESR_SPERR_MASK;
uint32_t mask = BIT(31);
int i;
@@ -475,7 +427,7 @@ static int bus_fault(struct arch_esf *esf, int from_hard_fault, bool *recoverabl
/* Note: we can assume the fault originated
* from the same security state for ARM
* platforms implementing the NXP MPU
- * (CONFIG_CPU_HAS_NXP_MPU=y).
+ * (CONFIG_CPU_HAS_NXP_SYSMPU=y).
*
* As we only assess thread stack corruption,
* we only process the error further, if the
@@ -531,7 +483,7 @@ static int bus_fault(struct arch_esf *esf, int from_hard_fault, bool *recoverabl
}
SYSMPU->CESR &= ~sperr;
}
-#endif /* defined(CONFIG_ARM_MPU) && defined(CONFIG_CPU_HAS_NXP_MPU) */
+#endif /* defined(CONFIG_ARM_MPU) && defined(CONFIG_CPU_HAS_NXP_SYSMPU) */
/* clear BFSR sticky bits */
SCB->CFSR |= SCB_CFSR_BUSFAULTSR_Msk;
@@ -1112,9 +1064,7 @@ void z_arm_fault(uint32_t msp, uint32_t psp, uint32_t exc_return,
__ASSERT(esf != NULL,
"ESF could not be retrieved successfully. Shall never occur.");
-#ifdef CONFIG_DEBUG_COREDUMP
- z_arm_coredump_fault_sp = POINTER_TO_UINT(esf);
-#endif
+ z_arm_set_fault_sp(esf, exc_return);
reason = fault_handle(esf, fault, &recoverable);
if (recoverable) {
diff --git a/arch/arm/core/cortex_m/pm_s2ram.S b/arch/arm/core/cortex_m/pm_s2ram.S
index aed8cf5b692..d15bfea0432 100644
--- a/arch/arm/core/cortex_m/pm_s2ram.S
+++ b/arch/arm/core/cortex_m/pm_s2ram.S
@@ -14,6 +14,145 @@
#include
#include
+/**
+ * Macro expanding to an integer literal equal to the offset of
+ * field `sr_name` in `struct __cpu_context`. This macro has to
+ * be implemented in C, because GEN_OFFSET_SYM provides offsets
+ * as C preprocessor definitions - there are not visible to the
+ * assembler.
+ *
+ * See also: `arch/arm/core/offsets/offsets_aarch32.c`
+ */
+#define CPU_CTX_SR_OFFSET(sr_name) \
+ ___cpu_context_t_ ## sr_name ## _OFFSET
+
+/**
+ * Macros used to save / load a special register in __cpu_context.
+ * These also have to be implemented in C due to CPU_CTX_SR_OFFSET.
+ */
+#define SAVE_SPECIAL_REG(sr_name, cpu_ctx_reg, tmp_reg) \
+ mrs tmp_reg, sr_name; \
+ str tmp_reg, [cpu_ctx_reg, # CPU_CTX_SR_OFFSET(sr_name)];
+
+#define RESTORE_SPECIAL_REG(sr_name, cpu_ctx_reg, tmp_reg) \
+ ldr tmp_reg, [cpu_ctx_reg, # CPU_CTX_SR_OFFSET(sr_name)]; \
+ msr sr_name, tmp_reg;
+
+/*
+ * The following macros could be written as assembler macros, but C is used
+ * for portability (assembler macro syntax may differ between toolchains).
+ */
+
+/*
+ * Pushes registers r4~r12 and lr on the stack.
+ * r0 is unmodified but other GPRs may be overwritten.
+ */
+#if !defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
+/* `push` on ARMv6-M / ARMv8-M Baseline:
+ * only r0~r7 and lr may be pushed
+ */
+#define PUSH_GPRS \
+ push {r4-r7}; \
+ mov r1, r8; \
+ mov r2, r9; \
+ mov r3, r10; \
+ mov r4, r11; \
+ mov r5, r12; \
+ push {r1-r5, lr}
+#else
+/* `push` on ARMv7-M and ARMv8-M Mainline: no limitation */
+#define PUSH_GPRS \
+ push {r4-r12, lr}
+#endif /* !CONFIG_ARMV7_M_ARMV8_M_MAINLINE */
+
+/*
+ * Pops registers r4~r12 and lr from the stack
+ * r0 is unmodified but other GPRs may be overwritten.
+ */
+#if !defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
+/* `pop` on ARMv6-M / ARMv8-M Baseline:
+ * can only pop to r0~r7 and pc (not lr!)
+ */
+#define POP_GPRS \
+ pop {r1-r6}; \
+ mov lr, r6; \
+ mov r12, r5; \
+ mov r11, r4; \
+ mov r10, r3; \
+ mov r9, r2; \
+ mov r8, r1; \
+ pop {r4-r7}
+#else
+/* `pop` on ARMv7-M and ARMv8-M Mainline: no limitation */
+#define POP_GPRS \
+ pop {r4-r12, lr}
+#endif /* !CONFIG_ARMV7_M_ARMV8_M_MAINLINE */
+
+
+#if defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
+/* Registers present only on ARMv7-M and ARMv8-M Mainline */
+#define SAVE_FM_BP_REGS(cpu_ctx, tmp_reg) \
+ SAVE_SPECIAL_REG(faultmask, cpu_ctx, tmp_reg) \
+ SAVE_SPECIAL_REG(basepri, cpu_ctx, tmp_reg)
+
+#define RESTORE_FM_BP_REGS(cpu_ctx, tmp_reg) \
+ RESTORE_SPECIAL_REG(faultmask, cpu_ctx, tmp_reg) \
+ RESTORE_SPECIAL_REG(basepri, cpu_ctx, tmp_reg)
+#else
+/* Registers not present: do nothing */
+#define SAVE_FM_BP_REGS(cpu_ctx, tmp_reg)
+#define RESTORE_FM_BP_REGS(cpu_ctx, tmp_reg)
+#endif /* CONFIG_ARMV7_M_ARMV8_M_MAINLINE */
+
+#if defined(CONFIG_CPU_CORTEX_M_HAS_SPLIM)
+/* Registers present only on certain ARMv8-M implementations */
+#define SAVE_SPLIM_REGS(cpu_ctx, tmp_reg) \
+ SAVE_SPECIAL_REG(msplim, cpu_ctx, tmp_reg) \
+ SAVE_SPECIAL_REG(psplim, cpu_ctx, tmp_reg)
+
+#define RESTORE_SPLIM_REGS(cpu_ctx, tmp_reg) \
+ RESTORE_SPECIAL_REG(msplim, cpu_ctx, tmp_reg) \
+ RESTORE_SPECIAL_REG(psplim, cpu_ctx, tmp_reg)
+#else
+/* Registers not present: do nothing */
+#define SAVE_SPLIM_REGS(cpu_ctx, tmp_reg)
+#define RESTORE_SPLIM_REGS(cpu_ctx, tmp_reg)
+#endif /* CONFIG_CPU_CORTEX_M_HAS_SPLIM */
+
+/*
+ * Saves the CPU's special registers in the `struct __cpu_context`
+ * pointed to by the `cpu_ctx` register.
+ * The `tmp_reg` register is overwritten as part of this process.
+ */
+#define SAVE_SPECIAL_REGISTERS(cpu_ctx, tmp_reg) \
+ SAVE_SPECIAL_REG(msp, cpu_ctx, tmp_reg) \
+ SAVE_SPECIAL_REG(psp, cpu_ctx, tmp_reg) \
+ SAVE_SPECIAL_REG(primask, cpu_ctx, tmp_reg) \
+ SAVE_SPLIM_REGS( cpu_ctx, tmp_reg) \
+ SAVE_FM_BP_REGS( cpu_ctx, tmp_reg) \
+ SAVE_SPECIAL_REG(control, cpu_ctx, tmp_reg)
+
+/*
+ * Restores the CPU's special registers from the `struct __cpu_context`
+ * pointed to by the `cpu_ctx` register.
+ * The `tmp_reg` register is overwritten as part of this process.
+ *
+ * N.B.: ISB at the end is required because "Software must use an ISB
+ * barrier instruction to ensure a write to the CONTROL register takes
+ * effect before the next instruction is executed."
+ *
+ * If this macro is modified, make sure CONTROL is always the last
+ * restored register, and that an ISB follows the MSR instruction.
+ */
+#define RESTORE_SPECIAL_REGISTERS(cpu_ctx, tmp_reg) \
+ RESTORE_SPECIAL_REG(msp, cpu_ctx, tmp_reg) \
+ RESTORE_SPECIAL_REG(psp, cpu_ctx, tmp_reg) \
+ RESTORE_SPECIAL_REG(primask, cpu_ctx, tmp_reg) \
+ RESTORE_SPLIM_REGS( cpu_ctx, tmp_reg) \
+ RESTORE_FM_BP_REGS( cpu_ctx, tmp_reg) \
+ RESTORE_SPECIAL_REG(control, cpu_ctx, tmp_reg) \
+ isb
+
_ASM_FILE_PROLOGUE
GTEXT(pm_s2ram_mark_set)
@@ -26,7 +165,7 @@ SECTION_FUNC(TEXT, arch_pm_s2ram_suspend)
*
* r0: address of the system_off function
*/
- push {r4-r12, lr}
+ PUSH_GPRS
/* Move system_off to protected register. */
mov r4, r0
@@ -34,38 +173,7 @@ SECTION_FUNC(TEXT, arch_pm_s2ram_suspend)
/* Store CPU context */
ldr r1, =_cpu_context
- mrs r2, msp
- str r2, [r1, #___cpu_context_t_msp_OFFSET]
-
- mrs r2, msplim
- str r2, [r1, #___cpu_context_t_msplim_OFFSET]
-
- mrs r2, psp
- str r2, [r1, #___cpu_context_t_psp_OFFSET]
-
- mrs r2, psplim
- str r2, [r1, #___cpu_context_t_psplim_OFFSET]
-
- mrs r2, apsr
- str r2, [r1, #___cpu_context_t_apsr_OFFSET]
-
- mrs r2, ipsr
- str r2, [r1, #___cpu_context_t_ipsr_OFFSET]
-
- mrs r2, epsr
- str r2, [r1, #___cpu_context_t_epsr_OFFSET]
-
- mrs r2, primask
- str r2, [r1, #___cpu_context_t_primask_OFFSET]
-
- mrs r2, faultmask
- str r2, [r1, #___cpu_context_t_faultmask_OFFSET]
-
- mrs r2, basepri
- str r2, [r1, #___cpu_context_t_basepri_OFFSET]
-
- mrs r2, control
- str r2, [r1, #___cpu_context_t_control_OFFSET]
+ SAVE_SPECIAL_REGISTERS(/* ctx: */ r1, /* tmp: */ r2)
/*
* Mark entering suspend to RAM.
@@ -100,7 +208,7 @@ SECTION_FUNC(TEXT, arch_pm_s2ram_suspend)
*/
mov r0, r4
- pop {r4-r12, lr}
+ POP_GPRS
bx lr
@@ -122,44 +230,12 @@ resume:
*/
ldr r0, =_cpu_context
- ldr r1, [r0, #___cpu_context_t_msp_OFFSET]
- msr msp, r1
-
- ldr r1, [r0, #___cpu_context_t_msplim_OFFSET]
- msr msplim, r1
-
- ldr r1, [r0, #___cpu_context_t_psp_OFFSET]
- msr psp, r1
-
- ldr r1, [r0, #___cpu_context_t_psplim_OFFSET]
- msr psplim, r1
-
- ldr r1, [r0, #___cpu_context_t_apsr_OFFSET]
- msr apsr_nzcvq, r1
-
- ldr r1, [r0, #___cpu_context_t_ipsr_OFFSET]
- msr ipsr, r1
-
- ldr r1, [r0, #___cpu_context_t_epsr_OFFSET]
- msr epsr, r1
+ RESTORE_SPECIAL_REGISTERS(/* ctx: */ r0, /* tmp: */ r1)
- ldr r1, [r0, #___cpu_context_t_primask_OFFSET]
- msr primask, r1
-
- ldr r1, [r0, #___cpu_context_t_faultmask_OFFSET]
- msr faultmask, r1
-
- ldr r1, [r0, #___cpu_context_t_basepri_OFFSET]
- msr basepri, r1
-
- ldr r1, [r0, #___cpu_context_t_control_OFFSET]
- msr control, r1
- isb
-
- pop {r4-r12, lr}
+ POP_GPRS
/*
* Set the return value and return
*/
- mov r0, #0
+ movs r0, #0
bx lr
diff --git a/arch/arm/core/cortex_m/prep_c.c b/arch/arm/core/cortex_m/prep_c.c
index 10f78c44a25..ae59960584c 100644
--- a/arch/arm/core/cortex_m/prep_c.c
+++ b/arch/arm/core/cortex_m/prep_c.c
@@ -45,9 +45,16 @@ void *_vector_table_pointer;
#define VECTOR_ADDRESS ((uintptr_t)_vector_start)
+/* In some Cortex-M3 implementations SCB_VTOR bit[29] is called the TBLBASE bit */
+#ifdef SCB_VTOR_TBLBASE_Msk
+#define VTOR_MASK (SCB_VTOR_TBLBASE_Msk | SCB_VTOR_TBLOFF_Msk)
+#else
+#define VTOR_MASK SCB_VTOR_TBLOFF_Msk
+#endif
+
static inline void relocate_vector_table(void)
{
- SCB->VTOR = VECTOR_ADDRESS & SCB_VTOR_TBLOFF_Msk;
+ SCB->VTOR = VECTOR_ADDRESS & VTOR_MASK;
barrier_dsync_fence_full();
barrier_isync_fence_full();
}
diff --git a/arch/arm/core/cortex_m/scb.c b/arch/arm/core/cortex_m/scb.c
index e3c35073ea3..a511a8de9b1 100644
--- a/arch/arm/core/cortex_m/scb.c
+++ b/arch/arm/core/cortex_m/scb.c
@@ -23,7 +23,7 @@
#include
#include
-#if defined(CONFIG_CPU_HAS_NXP_MPU)
+#if defined(CONFIG_CPU_HAS_NXP_SYSMPU)
#include
#endif
@@ -62,7 +62,7 @@ void z_arm_clear_arm_mpu_config(void)
ARM_MPU_ClrRegion(i);
}
}
-#elif CONFIG_CPU_HAS_NXP_MPU
+#elif CONFIG_CPU_HAS_NXP_SYSMPU
void z_arm_clear_arm_mpu_config(void)
{
int i;
@@ -76,7 +76,7 @@ void z_arm_clear_arm_mpu_config(void)
SYSMPU_RegionEnable(SYSMPU, i, false);
}
}
-#endif /* CONFIG_CPU_HAS_NXP_MPU */
+#endif /* CONFIG_CPU_HAS_NXP_SYSMPU */
#endif /* CONFIG_ARM_MPU */
#if defined(CONFIG_INIT_ARCH_HW_AT_BOOT)
diff --git a/arch/arm/core/cortex_m/swap.c b/arch/arm/core/cortex_m/swap.c
deleted file mode 100644
index 027fb47a01f..00000000000
--- a/arch/arm/core/cortex_m/swap.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (c) 2018 Linaro, Limited
- * Copyright (c) 2023 Arm Limited
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-
-#include
-#include
-
-#include
-
-/* The 'key' actually represents the BASEPRI register
- * prior to disabling interrupts via the BASEPRI mechanism.
- *
- * arch_swap() itself does not do much.
- *
- * It simply stores the intlock key (the BASEPRI value) parameter into
- * current->basepri, and then triggers a PendSV exception, which does
- * the heavy lifting of context switching.
-
- * This is the only place we have to save BASEPRI since the other paths to
- * z_arm_pendsv all come from handling an interrupt, which means we know the
- * interrupts were not locked: in that case the BASEPRI value is 0.
- *
- * Given that arch_swap() is called to effect a cooperative context switch,
- * only the caller-saved integer registers need to be saved in the thread of the
- * outgoing thread. This is all performed by the hardware, which stores it in
- * its exception stack frame, created when handling the z_arm_pendsv exception.
- *
- * On ARMv6-M, the intlock key is represented by the PRIMASK register,
- * as BASEPRI is not available.
- */
-int arch_swap(unsigned int key)
-{
- /* store off key and return value */
- _current->arch.basepri = key;
- _current->arch.swap_return_value = -EAGAIN;
-
- /* set pending bit to make sure we will take a PendSV exception */
- SCB->ICSR |= SCB_ICSR_PENDSVSET_Msk;
-
- /* clear mask or enable all irqs to take a pendsv */
- irq_unlock(0);
-
- /* Context switch is performed here. Returning implies the
- * thread has been context-switched-in again.
- */
- return _current->arch.swap_return_value;
-}
-
-uintptr_t z_arm_pendsv_c(uintptr_t exc_ret)
-{
- /* Store LSB of LR (EXC_RETURN) to the thread's 'mode' word. */
- IF_ENABLED(CONFIG_ARM_STORE_EXC_RETURN,
- (_kernel.cpus[0].current->arch.mode_exc_return = (uint8_t)exc_ret;));
-
- /* Protect the kernel state while we play with the thread lists */
- uint32_t basepri = arch_irq_lock();
-
- /* fetch the thread to run from the ready queue cache */
- struct k_thread *current = _kernel.cpus[0].current = _kernel.ready_q.cache;
-
- /*
- * Clear PendSV so that if another interrupt comes in and
- * decides, with the new kernel state based on the new thread
- * being context-switched in, that it needs to reschedule, it
- * will take, but that previously pended PendSVs do not take,
- * since they were based on the previous kernel state and this
- * has been handled.
- */
- SCB->ICSR = SCB_ICSR_PENDSVCLR_Msk;
-
- /* For Cortex-M, store TLS pointer in a global variable,
- * as it lacks the process ID or thread ID register
- * to be used by toolchain to access thread data.
- */
- IF_ENABLED(CONFIG_THREAD_LOCAL_STORAGE,
- (extern uintptr_t z_arm_tls_ptr; z_arm_tls_ptr = current->tls));
-
- IF_ENABLED(CONFIG_ARM_STORE_EXC_RETURN,
- (exc_ret = (exc_ret & 0xFFFFFF00) | current->arch.mode_exc_return));
-
- /* Restore previous interrupt disable state (irq_lock key)
- * (We clear the arch.basepri field after restoring state)
- */
- basepri = current->arch.basepri;
- current->arch.basepri = 0;
-
- arch_irq_unlock(basepri);
-
-#if defined(CONFIG_MPU_STACK_GUARD) || defined(CONFIG_USERSPACE)
- /* Re-program dynamic memory map */
- z_arm_configure_dynamic_mpu_regions(current);
-#endif
-
- /* restore mode */
- IF_ENABLED(CONFIG_USERSPACE, ({
- CONTROL_Type ctrl = {.w = __get_CONTROL()};
- /* exit privileged state when returning to thread mode. */
- ctrl.b.nPRIV = 0;
- /* __set_CONTROL inserts an ISB which is may not be necessary here
- * (stack pointer may not be touched), but it's recommended to avoid
- * executing pre-fetched instructions with the previous privilege.
- */
- __set_CONTROL(ctrl.w | current->arch.mode);
- }));
-
- return exc_ret;
-}
diff --git a/arch/arm/core/cortex_m/swap_helper.S b/arch/arm/core/cortex_m/swap_helper.S
index c2cb3ef7f2f..c6207084b5e 100644
--- a/arch/arm/core/cortex_m/swap_helper.S
+++ b/arch/arm/core/cortex_m/swap_helper.S
@@ -27,7 +27,6 @@ _ASM_FILE_PROLOGUE
GTEXT(z_arm_svc)
GTEXT(z_arm_pendsv)
GTEXT(z_do_kernel_oops)
-GTEXT(z_arm_pendsv_c)
#if defined(CONFIG_USERSPACE)
GTEXT(z_arm_do_syscall)
#endif
@@ -118,20 +117,125 @@ out_fp_endif:
#error Unknown ARM architecture
#endif /* CONFIG_ARMV6_M_ARMV8_M_BASELINE */
- mov r4, lr
- mov r0, lr
- bl z_arm_pendsv_c
- mov lr, r4
+ /* Protect the kernel state while we play with the thread lists */
+#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
+ cpsid i
+#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
+ movs.n r0, #_EXC_IRQ_DEFAULT_PRIO
+ msr BASEPRI_MAX, r0
+ isb /* Make the effect of disabling interrupts be realized immediately */
+#else
+#error Unknown ARM architecture
+#endif /* CONFIG_ARMV6_M_ARMV8_M_BASELINE */
- ldr r1, =_kernel
- ldr r2, [r1, #_kernel_offset_to_current]
+ /*
+ * Prepare to clear PendSV with interrupts unlocked, but
+ * don't clear it yet. PendSV must not be cleared until
+ * the new thread is context-switched in since all decisions
+ * to pend PendSV have been taken with the current kernel
+ * state and this is what we're handling currently.
+ */
+ ldr r7, =_SCS_ICSR
+ ldr r6, =_SCS_ICSR_UNPENDSV
+
+ /* _kernel is still in r1 */
+
+ /* fetch the thread to run from the ready queue cache */
+ ldr r2, [r1, #_kernel_offset_to_ready_q_cache]
+
+ str r2, [r1, #_kernel_offset_to_current]
+
+ /*
+ * Clear PendSV so that if another interrupt comes in and
+ * decides, with the new kernel state based on the new thread
+ * being context-switched in, that it needs to reschedule, it
+ * will take, but that previously pended PendSVs do not take,
+ * since they were based on the previous kernel state and this
+ * has been handled.
+ */
+
+ /* _SCS_ICSR is still in r7 and _SCS_ICSR_UNPENDSV in r6 */
+ str r6, [r7, #0]
+
+#if defined(CONFIG_THREAD_LOCAL_STORAGE)
+ /* Grab the TLS pointer */
+ ldr r4, =_thread_offset_to_tls
+ adds r4, r2, r4
+ ldr r0, [r4]
+
+ /* For Cortex-M, store TLS pointer in a global variable,
+ * as it lacks the process ID or thread ID register
+ * to be used by toolchain to access thread data.
+ */
+ ldr r4, =z_arm_tls_ptr
+ str r0, [r4]
+#endif
#if defined(CONFIG_ARM_STORE_EXC_RETURN)
/* Restore EXC_RETURN value. */
- mov lr, r0
+ ldrsb lr, [r2, #_thread_offset_to_mode_exc_return]
+#endif
+
+ /* Restore previous interrupt disable state (irq_lock key)
+ * (We clear the arch.basepri field after restoring state)
+ */
+#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE) && (_thread_offset_to_basepri > 124)
+ /* Doing it this way since the offset to thread->arch.basepri can in
+ * some configurations be larger than the maximum of 124 for ldr/str
+ * immediate offsets.
+ */
+ ldr r4, =_thread_offset_to_basepri
+ adds r4, r2, r4
+
+ ldr r0, [r4]
+ movs.n r3, #0
+ str r3, [r4]
+#else
+ ldr r0, [r2, #_thread_offset_to_basepri]
+ movs r3, #0
+ str r3, [r2, #_thread_offset_to_basepri]
#endif
#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
+ /* BASEPRI not available, previous interrupt disable state
+ * maps to PRIMASK.
+ *
+ * Only enable interrupts if value is 0, meaning interrupts
+ * were enabled before irq_lock was called.
+ */
+ cmp r0, #0
+ bne _thread_irq_disabled
+ cpsie i
+_thread_irq_disabled:
+
+#if defined(CONFIG_MPU_STACK_GUARD) || defined(CONFIG_USERSPACE)
+ /* Re-program dynamic memory map */
+ push {r2,lr}
+ mov r0, r2
+ bl z_arm_configure_dynamic_mpu_regions
+ pop {r2,r3}
+ mov lr, r3
+#endif
+
+#ifdef CONFIG_USERSPACE
+ /* restore mode */
+ ldr r3, =_thread_offset_to_mode
+ adds r3, r2, r3
+ ldr r0, [r3]
+ mrs r3, CONTROL
+ movs.n r1, #1
+ bics r3, r1
+ orrs r3, r0
+ msr CONTROL, r3
+
+ /* ISB is not strictly necessary here (stack pointer is not being
+ * touched), but it's recommended to avoid executing pre-fetched
+ * instructions with the previous privilege.
+ */
+ isb
+
+#endif
+
ldr r4, =_thread_offset_to_callee_saved
adds r0, r2, r4
@@ -149,6 +253,9 @@ out_fp_endif:
subs r0, #36
ldmia r0!, {r4-r7}
#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
+ /* restore BASEPRI for the incoming thread */
+ msr BASEPRI, r0
+
#ifdef CONFIG_FPU_SHARING
/* Assess whether switched-in thread had been using the FP registers. */
tst lr, #_EXC_RETURN_FTYPE_Msk
@@ -178,6 +285,30 @@ in_fp_endif:
isb
#endif
+#if defined(CONFIG_MPU_STACK_GUARD) || defined(CONFIG_USERSPACE)
+ /* Re-program dynamic memory map */
+ push {r2,lr}
+ mov r0, r2 /* _current thread */
+ bl z_arm_configure_dynamic_mpu_regions
+ pop {r2,lr}
+#endif
+
+#ifdef CONFIG_USERSPACE
+ /* restore mode */
+ ldr r0, [r2, #_thread_offset_to_mode]
+ mrs r3, CONTROL
+ bic r3, #1
+ orr r3, r0
+ msr CONTROL, r3
+
+ /* ISB is not strictly necessary here (stack pointer is not being
+ * touched), but it's recommended to avoid executing pre-fetched
+ * instructions with the previous privilege.
+ */
+ isb
+
+#endif
+
/* load callee-saved + psp from thread */
add r0, r2, #_thread_offset_to_callee_saved
ldmia r0, {r4-r11, ip}
@@ -300,6 +431,7 @@ _stack_frame_endif:
/* exception return is done in z_arm_int_exit() */
ldr r0, =z_arm_int_exit
bx r0
+
#endif
_oops:
@@ -315,6 +447,7 @@ _oops:
mov r1, sp /* pointer to _callee_saved_t */
#endif /* CONFIG_ARMV7_M_ARMV8_M_MAINLINE */
#endif /* CONFIG_EXTRA_EXCEPTION_INFO */
+ mov r2, lr /* EXC_RETURN */
bl z_do_kernel_oops
/* return from SVC exception is done here */
#if defined(CONFIG_EXTRA_EXCEPTION_INFO)
diff --git a/arch/arm/core/cortex_m/thread.c b/arch/arm/core/cortex_m/thread.c
index fa500032d3c..c88fd8e41a0 100644
--- a/arch/arm/core/cortex_m/thread.c
+++ b/arch/arm/core/cortex_m/thread.c
@@ -522,7 +522,7 @@ void arch_switch_to_main_thread(struct k_thread *main_thread, char *stack_ptr,
{
z_arm_prepare_switch_to_main();
- _current = main_thread;
+ z_current_thread_set(main_thread);
#if defined(CONFIG_THREAD_LOCAL_STORAGE)
/* On Cortex-M, TLS uses a global variable as pointer to
@@ -576,19 +576,19 @@ void arch_switch_to_main_thread(struct k_thread *main_thread, char *stack_ptr,
"mov r4, %0\n" /* force _main to be stored in a register */
"msr PSP, %1\n" /* __set_PSP(stack_ptr) */
- "mov r0, #0\n" /* arch_irq_unlock(0) */
+ "movs r0, #0\n" /* arch_irq_unlock(0) */
"ldr r3, =arch_irq_unlock_outlined\n"
"blx r3\n"
"mov r0, r4\n" /* z_thread_entry(_main, NULL, NULL, NULL) */
- "mov r1, #0\n"
- "mov r2, #0\n"
- "mov r3, #0\n"
+ "movs r1, #0\n"
+ "movs r2, #0\n"
+ "movs r3, #0\n"
"ldr r4, =z_thread_entry\n"
"bx r4\n" /* We don’t intend to return, so there is no need to link. */
- : "+r" (_main)
- : "r" (stack_ptr)
- : "r0", "r1", "r2", "r3", "r4", "ip", "lr");
+ :
+ : "r" (_main), "r" (stack_ptr)
+ : "r0", "r1", "r2", "r3", "r4", "ip", "lr", "memory");
CODE_UNREACHABLE;
}
diff --git a/arch/arm/core/cortex_m/timing.c b/arch/arm/core/cortex_m/timing.c
index 3b847af02ac..6cb157552ac 100644
--- a/arch/arm/core/cortex_m/timing.c
+++ b/arch/arm/core/cortex_m/timing.c
@@ -28,8 +28,7 @@
*/
static inline uint64_t z_arm_dwt_freq_get(void)
{
-#if defined(CONFIG_SOC_FAMILY_NORDIC_NRF) || \
- defined(CONFIG_SOC_SERIES_IMXRT6XX)
+#if defined(CONFIG_CMSIS_CORE_HAS_SYSTEM_CORE_CLOCK)
/*
* DWT frequency is taken directly from the
* System Core clock (CPU) frequency, if the
@@ -104,7 +103,7 @@ timing_t arch_timing_counter_get(void)
uint64_t arch_timing_cycles_get(volatile timing_t *const start,
volatile timing_t *const end)
{
- return (*end - *start);
+ return ((uint32_t)*end - (uint32_t)*start);
}
uint64_t arch_timing_freq_get(void)
diff --git a/arch/arm/core/fatal.c b/arch/arm/core/fatal.c
index 4532e238f05..d64855b6b8e 100644
--- a/arch/arm/core/fatal.c
+++ b/arch/arm/core/fatal.c
@@ -101,8 +101,9 @@ void z_arm_fatal_error(unsigned int reason, const struct arch_esf *esf)
*
* @param esf exception frame
* @param callee_regs Callee-saved registers (R4-R11)
+ * @param exc_return EXC_RETURN value present in LR after exception entry.
*/
-void z_do_kernel_oops(const struct arch_esf *esf, _callee_saved_t *callee_regs)
+void z_do_kernel_oops(const struct arch_esf *esf, _callee_saved_t *callee_regs, uint32_t exc_return)
{
#if !(defined(CONFIG_EXTRA_EXCEPTION_INFO) && defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE))
ARG_UNUSED(callee_regs);
@@ -110,6 +111,8 @@ void z_do_kernel_oops(const struct arch_esf *esf, _callee_saved_t *callee_regs)
/* Stacked R0 holds the exception reason. */
unsigned int reason = esf->basic.r0;
+ z_arm_set_fault_sp(esf, exc_return);
+
#if defined(CONFIG_USERSPACE)
if (z_arm_preempted_thread_in_user_mode(esf)) {
/*
diff --git a/arch/arm/core/mpu/CMakeLists.txt b/arch/arm/core/mpu/CMakeLists.txt
index 1df6561ee52..69f23e5be88 100644
--- a/arch/arm/core/mpu/CMakeLists.txt
+++ b/arch/arm/core/mpu/CMakeLists.txt
@@ -4,11 +4,11 @@ zephyr_library()
zephyr_library_sources( arm_core_mpu.c)
zephyr_library_sources_ifdef(CONFIG_CPU_HAS_ARM_MPU arm_mpu.c)
-zephyr_library_sources_ifdef(CONFIG_CPU_HAS_NXP_MPU nxp_mpu.c)
+zephyr_library_sources_ifdef(CONFIG_CPU_HAS_NXP_SYSMPU nxp_mpu.c)
if(CONFIG_CPU_CORTEX_M AND NOT CONFIG_CPU_HAS_CUSTOM_FIXED_SOC_MPU_REGIONS)
zephyr_library_sources_ifdef(CONFIG_CPU_HAS_ARM_MPU arm_mpu_regions.c)
- zephyr_library_sources_ifdef(CONFIG_CPU_HAS_NXP_MPU nxp_mpu_regions.c)
+ zephyr_library_sources_ifdef(CONFIG_CPU_HAS_NXP_SYSMPU nxp_mpu_regions.c)
endif()
if (CONFIG_CPU_AARCH32_CORTEX_R)
diff --git a/arch/arm/core/mpu/Kconfig b/arch/arm/core/mpu/Kconfig
index c6d1bdc7da0..0c1fbbf4c0f 100644
--- a/arch/arm/core/mpu/Kconfig
+++ b/arch/arm/core/mpu/Kconfig
@@ -11,7 +11,7 @@ config ARM_MPU
select SRAM_REGION_PERMISSIONS
select THREAD_STACK_INFO
select ARCH_HAS_EXECUTABLE_PAGE_BIT
- select MPU_REQUIRES_POWER_OF_TWO_ALIGNMENT if !(CPU_HAS_NXP_MPU || ARMV8_M_BASELINE || ARMV8_M_MAINLINE || AARCH32_ARMV8_R)
+ select MPU_REQUIRES_POWER_OF_TWO_ALIGNMENT if !(CPU_HAS_NXP_SYSMPU || ARMV8_M_BASELINE || ARMV8_M_MAINLINE || AARCH32_ARMV8_R)
select MPU_REQUIRES_NON_OVERLAPPING_REGIONS if CPU_HAS_ARM_MPU && (ARMV8_M_BASELINE || ARMV8_M_MAINLINE || AARCH32_ARMV8_R)
select MPU_GAP_FILLING if AARCH32_ARMV8_R
select ARCH_MEM_DOMAIN_SUPPORTS_ISOLATED_STACKS
diff --git a/arch/arm/core/mpu/arm_core_mpu_dev.h b/arch/arm/core/mpu/arm_core_mpu_dev.h
index 254d6d9dda3..4e8fa648ad3 100644
--- a/arch/arm/core/mpu/arm_core_mpu_dev.h
+++ b/arch/arm/core/mpu/arm_core_mpu_dev.h
@@ -76,7 +76,7 @@ struct k_thread;
*/
#if (defined(CONFIG_MPU_REQUIRES_NON_OVERLAPPING_REGIONS) && \
defined(CONFIG_MPU_GAP_FILLING)) \
- || defined(CONFIG_CPU_HAS_NXP_MPU)
+ || defined(CONFIG_CPU_HAS_NXP_SYSMPU)
/*
* When dynamic regions may not be defined on top of statically
* allocated memory regions, defining a region for a supervisor
@@ -96,7 +96,7 @@ struct k_thread;
* using a single MPU region.
*/
#define ARM_CORE_MPU_NUM_MPU_REGIONS_FOR_MPU_STACK_GUARD 1
-#endif /* CONFIG_MPU_REQUIRES_NON_OVERLAPPING_REGIONS || CPU_HAS_NXP_MPU */
+#endif /* CONFIG_MPU_REQUIRES_NON_OVERLAPPING_REGIONS || CPU_HAS_NXP_SYSMPU */
#endif /* CONFIG_USERSPACE */
diff --git a/arch/arm/core/mpu/arm_mpu.c b/arch/arm/core/mpu/arm_mpu.c
index 3f9cf095754..f121e57e392 100644
--- a/arch/arm/core/mpu/arm_mpu.c
+++ b/arch/arm/core/mpu/arm_mpu.c
@@ -37,6 +37,13 @@ BUILD_ASSERT((DT_FOREACH_STATUS_OKAY_NODE_VARGS(
NODE_HAS_PROP_AND_OR, zephyr_memory_region_mpu) false) == false,
"`zephyr,memory-region-mpu` was deprecated in favor of `zephyr,memory-attr`");
+#define NULL_PAGE_DETECT_NODE_FINDER(node_id, prop) \
+ (DT_NODE_HAS_PROP(node_id, prop) && (DT_REG_ADDR(node_id) == 0) && \
+ (DT_REG_SIZE(node_id) >= CONFIG_CORTEX_M_NULL_POINTER_EXCEPTION_PAGE_SIZE)) ||
+
+#define DT_NULL_PAGE_DETECT_NODE_EXIST \
+ (DT_FOREACH_STATUS_OKAY_NODE_VARGS(NULL_PAGE_DETECT_NODE_FINDER, zephyr_memory_attr) false)
+
/*
* Global status variable holding the number of HW MPU region indices, which
* have been reserved by the MPU driver to program the static (fixed) memory
@@ -470,7 +477,9 @@ int z_arm_mpu_init(void)
*/
#if defined(CONFIG_NULL_POINTER_EXCEPTION_DETECTION_MPU)
#if (defined(CONFIG_ARMV8_M_BASELINE) || defined(CONFIG_ARMV8_M_MAINLINE)) && \
- (CONFIG_FLASH_BASE_ADDRESS > CONFIG_CORTEX_M_NULL_POINTER_EXCEPTION_PAGE_SIZE)
+ (CONFIG_FLASH_BASE_ADDRESS > CONFIG_CORTEX_M_NULL_POINTER_EXCEPTION_PAGE_SIZE) && \
+ (!DT_NULL_PAGE_DETECT_NODE_EXIST)
+
#pragma message "Null-Pointer exception detection cannot be configured on un-mapped flash areas"
#else
const struct z_arm_mpu_partition unmap_region = {
diff --git a/arch/arm/core/mpu/arm_mpu_regions.c b/arch/arm/core/mpu/arm_mpu_regions.c
index cfe1230c907..383fd573513 100644
--- a/arch/arm/core/mpu/arm_mpu_regions.c
+++ b/arch/arm/core/mpu/arm_mpu_regions.c
@@ -13,6 +13,7 @@
#endif
static const struct arm_mpu_region mpu_regions[] = {
+#ifdef CONFIG_XIP
/* Region 0 */
MPU_REGION_ENTRY("FLASH_0",
CONFIG_FLASH_BASE_ADDRESS,
@@ -22,6 +23,8 @@ static const struct arm_mpu_region mpu_regions[] = {
#else
REGION_FLASH_ATTR(REGION_FLASH_SIZE)),
#endif
+#endif
+
/* Region 1 */
MPU_REGION_ENTRY("SRAM_0",
#if USE_PARTITION_MANAGER
diff --git a/arch/arm/core/offsets/offsets_aarch32.c b/arch/arm/core/offsets/offsets_aarch32.c
index 4399377134d..693546630b0 100644
--- a/arch/arm/core/offsets/offsets_aarch32.c
+++ b/arch/arm/core/offsets/offsets_aarch32.c
@@ -83,17 +83,21 @@ GEN_OFFSET_SYM(_thread_stack_info_t, start);
*/
#if defined(CONFIG_PM_S2RAM)
GEN_OFFSET_SYM(_cpu_context_t, msp);
-GEN_OFFSET_SYM(_cpu_context_t, msplim);
GEN_OFFSET_SYM(_cpu_context_t, psp);
-GEN_OFFSET_SYM(_cpu_context_t, psplim);
-GEN_OFFSET_SYM(_cpu_context_t, apsr);
-GEN_OFFSET_SYM(_cpu_context_t, ipsr);
-GEN_OFFSET_SYM(_cpu_context_t, epsr);
-
GEN_OFFSET_SYM(_cpu_context_t, primask);
+GEN_OFFSET_SYM(_cpu_context_t, control);
+
+#if defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
+/* Registers present only on ARMv7-M and ARMv8-M Mainline */
GEN_OFFSET_SYM(_cpu_context_t, faultmask);
GEN_OFFSET_SYM(_cpu_context_t, basepri);
-GEN_OFFSET_SYM(_cpu_context_t, control);
+#endif /* CONFIG_ARMV7_M_ARMV8_M_MAINLINE */
+
+#if defined(CONFIG_CPU_CORTEX_M_HAS_SPLIM)
+/* Registers present only on certain ARMv8-M implementations */
+GEN_OFFSET_SYM(_cpu_context_t, msplim);
+GEN_OFFSET_SYM(_cpu_context_t, psplim);
+#endif /* CONFIG_CPU_CORTEX_M_HAS_SPLIM */
#endif /* CONFIG_PM_S2RAM */
#endif /* _ARM_OFFSETS_INC_ */
diff --git a/arch/arm/include/cortex_a_r/exception.h b/arch/arm/include/cortex_a_r/exception.h
index 6daa9c106ee..4326444f112 100644
--- a/arch/arm/include/cortex_a_r/exception.h
+++ b/arch/arm/include/cortex_a_r/exception.h
@@ -43,6 +43,15 @@ static ALWAYS_INLINE bool arch_is_in_nested_exception(const struct arch_esf *esf
return (arch_curr_cpu()->arch.exc_depth > 1U) ? (true) : (false);
}
+/**
+ * @brief No current implementation where core dump is not supported
+ *
+ * @param esf exception frame
+ * @param exc_return EXC_RETURN value present in LR after exception entry.
+ */
+static ALWAYS_INLINE void z_arm_set_fault_sp(const struct arch_esf *esf, uint32_t exc_return)
+{}
+
#if defined(CONFIG_USERSPACE)
/*
* This function is used by privileged code to determine if the thread
diff --git a/arch/arm/include/cortex_a_r/kernel_arch_func.h b/arch/arm/include/cortex_a_r/kernel_arch_func.h
index 3486d7d4d4e..7a100db07dd 100644
--- a/arch/arm/include/cortex_a_r/kernel_arch_func.h
+++ b/arch/arm/include/cortex_a_r/kernel_arch_func.h
@@ -20,6 +20,8 @@
#ifndef ZEPHYR_ARCH_ARM_INCLUDE_CORTEX_A_R_KERNEL_ARCH_FUNC_H_
#define ZEPHYR_ARCH_ARM_INCLUDE_CORTEX_A_R_KERNEL_ARCH_FUNC_H_
+#include
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -28,10 +30,28 @@ extern "C" {
static ALWAYS_INLINE void arch_kernel_init(void)
{
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+ soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
}
#ifndef CONFIG_USE_SWITCH
+static ALWAYS_INLINE int arch_swap(unsigned int key)
+{
+ /* store off key and return value */
+ _current->arch.basepri = key;
+ _current->arch.swap_return_value = -EAGAIN;
+
+ z_arm_cortex_r_svc();
+ irq_unlock(key);
+
+ /* Context switch is performed here. Returning implies the
+ * thread has been context-switched-in again.
+ */
+ return _current->arch.swap_return_value;
+}
+
static ALWAYS_INLINE void
arch_thread_return_value_set(struct k_thread *thread, unsigned int value)
{
diff --git a/arch/arm/include/cortex_m/exception.h b/arch/arm/include/cortex_m/exception.h
index 89bdd4b83e9..c021d59d764 100644
--- a/arch/arm/include/cortex_m/exception.h
+++ b/arch/arm/include/cortex_m/exception.h
@@ -39,6 +39,54 @@ extern volatile irq_offload_routine_t offload_routine;
*/
#define AIRCR_VECT_KEY_PERMIT_WRITE 0x05FAUL
+/* Exception Return (EXC_RETURN) is provided in LR upon exception entry.
+ * It is used to perform an exception return and to detect possible state
+ * transition upon exception.
+ */
+
+/* Prefix. Indicates that this is an EXC_RETURN value.
+ * This field reads as 0b11111111.
+ */
+#define EXC_RETURN_INDICATOR_PREFIX (0xFF << 24)
+/* bit[0]: Exception Secure. The security domain the exception was taken to. */
+#define EXC_RETURN_EXCEPTION_SECURE_Pos 0
+#define EXC_RETURN_EXCEPTION_SECURE_Msk \
+ BIT(EXC_RETURN_EXCEPTION_SECURE_Pos)
+#define EXC_RETURN_EXCEPTION_SECURE_Non_Secure 0
+#define EXC_RETURN_EXCEPTION_SECURE_Secure EXC_RETURN_EXCEPTION_SECURE_Msk
+/* bit[2]: Stack Pointer selection. */
+#define EXC_RETURN_SPSEL_Pos 2
+#define EXC_RETURN_SPSEL_Msk BIT(EXC_RETURN_SPSEL_Pos)
+#define EXC_RETURN_SPSEL_MAIN 0
+#define EXC_RETURN_SPSEL_PROCESS EXC_RETURN_SPSEL_Msk
+/* bit[3]: Mode. Indicates the Mode that was stacked from. */
+#define EXC_RETURN_MODE_Pos 3
+#define EXC_RETURN_MODE_Msk BIT(EXC_RETURN_MODE_Pos)
+#define EXC_RETURN_MODE_HANDLER 0
+#define EXC_RETURN_MODE_THREAD EXC_RETURN_MODE_Msk
+/* bit[4]: Stack frame type. Indicates whether the stack frame is a standard
+ * integer only stack frame or an extended floating-point stack frame.
+ */
+#define EXC_RETURN_STACK_FRAME_TYPE_Pos 4
+#define EXC_RETURN_STACK_FRAME_TYPE_Msk BIT(EXC_RETURN_STACK_FRAME_TYPE_Pos)
+#define EXC_RETURN_STACK_FRAME_TYPE_EXTENDED 0
+#define EXC_RETURN_STACK_FRAME_TYPE_STANDARD EXC_RETURN_STACK_FRAME_TYPE_Msk
+/* bit[5]: Default callee register stacking. Indicates whether the default
+ * stacking rules apply, or whether the callee registers are already on the
+ * stack.
+ */
+#define EXC_RETURN_CALLEE_STACK_Pos 5
+#define EXC_RETURN_CALLEE_STACK_Msk BIT(EXC_RETURN_CALLEE_STACK_Pos)
+#define EXC_RETURN_CALLEE_STACK_SKIPPED 0
+#define EXC_RETURN_CALLEE_STACK_DEFAULT EXC_RETURN_CALLEE_STACK_Msk
+/* bit[6]: Secure or Non-secure stack. Indicates whether a Secure or
+ * Non-secure stack is used to restore stack frame on exception return.
+ */
+#define EXC_RETURN_RETURN_STACK_Pos 6
+#define EXC_RETURN_RETURN_STACK_Msk BIT(EXC_RETURN_RETURN_STACK_Pos)
+#define EXC_RETURN_RETURN_STACK_Non_Secure 0
+#define EXC_RETURN_RETURN_STACK_Secure EXC_RETURN_RETURN_STACK_Msk
+
/*
* The current executing vector is found in the IPSR register. All
* IRQs and system exceptions are considered as interrupt context.
@@ -184,6 +232,43 @@ static ALWAYS_INLINE void z_arm_clear_faults(void)
#endif /* CONFIG_ARMV6_M_ARMV8_M_BASELINE */
}
+/**
+ * @brief Set z_arm_coredump_fault_sp to stack pointer value expected by GDB
+ *
+ * @param esf exception frame
+ * @param exc_return EXC_RETURN value present in LR after exception entry.
+ */
+static ALWAYS_INLINE void z_arm_set_fault_sp(const struct arch_esf *esf, uint32_t exc_return)
+{
+#ifdef CONFIG_DEBUG_COREDUMP
+ z_arm_coredump_fault_sp = POINTER_TO_UINT(esf);
+#if defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE) || defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
+ /* Gdb expects a stack pointer that does not include the exception stack frame in order to
+ * unwind. So adjust the stack pointer accordingly.
+ */
+ z_arm_coredump_fault_sp += sizeof(esf->basic);
+
+#if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING)
+ /* Assess whether thread had been using the FP registers and add size of additional
+ * registers if necessary
+ */
+ if ((exc_return & EXC_RETURN_STACK_FRAME_TYPE_STANDARD) ==
+ EXC_RETURN_STACK_FRAME_TYPE_EXTENDED) {
+ z_arm_coredump_fault_sp += sizeof(esf->fpu);
+ }
+#endif /* CONFIG_FPU && CONFIG_FPU_SHARING */
+
+#if !(defined(CONFIG_ARMV8_M_MAINLINE) || defined(CONFIG_ARMV8_M_BASELINE))
+ if ((esf->basic.xpsr & SCB_CCR_STKALIGN_Msk) == SCB_CCR_STKALIGN_Msk) {
+ /* Adjust stack alignment after PSR bit[9] detected */
+ z_arm_coredump_fault_sp |= 0x4;
+ }
+#endif /* !CONFIG_ARMV8_M_MAINLINE */
+
+#endif /* CONFIG_ARMV7_M_ARMV8_M_MAINLINE || CONFIG_ARMV6_M_ARMV8_M_BASELINE */
+#endif /* CONFIG_DEBUG_COREDUMP */
+}
+
/**
* @brief Assess whether a debug monitor event should be treated as an error
*
diff --git a/arch/arm/include/cortex_m/kernel_arch_func.h b/arch/arm/include/cortex_m/kernel_arch_func.h
index 132c056c910..2a24103a32d 100644
--- a/arch/arm/include/cortex_m/kernel_arch_func.h
+++ b/arch/arm/include/cortex_m/kernel_arch_func.h
@@ -20,6 +20,8 @@
#ifndef ZEPHYR_ARCH_ARM_INCLUDE_CORTEX_M_KERNEL_ARCH_FUNC_H_
#define ZEPHYR_ARCH_ARM_INCLUDE_CORTEX_M_KERNEL_ARCH_FUNC_H_
+#include
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -53,6 +55,10 @@ static ALWAYS_INLINE void arch_kernel_init(void)
*/
z_arm_configure_static_mpu_regions();
#endif /* CONFIG_ARM_MPU */
+
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+ soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
}
static ALWAYS_INLINE void
@@ -78,6 +84,25 @@ extern FUNC_NORETURN void z_arm_userspace_enter(k_thread_entry_t user_entry,
extern void z_arm_fatal_error(unsigned int reason, const struct arch_esf *esf);
+static ALWAYS_INLINE int arch_swap(unsigned int key)
+{
+ /* store off key and return value */
+ _current->arch.basepri = key;
+ _current->arch.swap_return_value = -EAGAIN;
+
+ /* set pending bit to make sure we will take a PendSV exception */
+ SCB->ICSR |= SCB_ICSR_PENDSVSET_Msk;
+
+ /* clear mask or enable all irqs to take a pendsv */
+ irq_unlock(0);
+
+ /* Context switch is performed here. Returning implies the
+ * thread has been context-switched-in again.
+ */
+ return _current->arch.swap_return_value;
+}
+
+
#endif /* _ASMLANGUAGE */
#ifdef __cplusplus
diff --git a/arch/arm64/core/smp.c b/arch/arm64/core/smp.c
index bbb7f963431..fd9d457ea7d 100644
--- a/arch/arm64/core/smp.c
+++ b/arch/arm64/core/smp.c
@@ -23,6 +23,7 @@
#include
#include
#include
+#include
#include
#include
#include "boot.h"
@@ -163,6 +164,10 @@ void arch_secondary_cpu_init(int cpu_num)
#endif
#endif
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+ soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
+
fn = arm64_cpu_boot_params.fn;
arg = arm64_cpu_boot_params.arg;
barrier_dsync_fence_full();
diff --git a/arch/arm64/core/xen/enlighten.c b/arch/arm64/core/xen/enlighten.c
index 91bf014b762..164947a09ff 100644
--- a/arch/arm64/core/xen/enlighten.c
+++ b/arch/arm64/core/xen/enlighten.c
@@ -42,7 +42,7 @@ static int xen_map_shared_info(const shared_info_t *shared_page)
return HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp);
}
-int xen_enlighten_init(void)
+static int xen_enlighten_init(void)
{
int ret = 0;
shared_info_t *info = (shared_info_t *) shared_info_buf;
@@ -66,3 +66,5 @@ int xen_enlighten_init(void)
return 0;
}
+
+SYS_INIT(xen_enlighten_init, PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEVICE);
diff --git a/arch/arm64/include/kernel_arch_func.h b/arch/arm64/include/kernel_arch_func.h
index d2c346be1f0..f9a2ffb9821 100644
--- a/arch/arm64/include/kernel_arch_func.h
+++ b/arch/arm64/include/kernel_arch_func.h
@@ -22,19 +22,20 @@
#include
+#include
+
#ifdef __cplusplus
extern "C" {
#endif
#ifndef _ASMLANGUAGE
-extern void xen_enlighten_init(void);
-
static ALWAYS_INLINE void arch_kernel_init(void)
{
-#ifdef CONFIG_XEN
- xen_enlighten_init();
-#endif
+
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+ soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
}
static inline void arch_switch(void *switch_to, void **switched_from)
diff --git a/arch/common/nocache.ld b/arch/common/nocache.ld
index 24e81cdefcf..a4e500e8b17 100644
--- a/arch/common/nocache.ld
+++ b/arch/common/nocache.ld
@@ -7,12 +7,6 @@
/* Copied from linker.ld */
-#if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_nocache_ram), okay)
-#define NOCACHE_REGION LINKER_DT_NODE_REGION_NAME_TOKEN(DT_CHOSEN(zephyr_nocache_ram))
-#else
-#define NOCACHE_REGION RAMABLE_REGION
-#endif
-
/* Non-cached region of RAM */
SECTION_DATA_PROLOGUE(_NOCACHE_SECTION_NAME,(NOLOAD),)
{
@@ -33,5 +27,5 @@ SECTION_DATA_PROLOGUE(_NOCACHE_SECTION_NAME,(NOLOAD),)
MPU_ALIGN(_nocache_ram_size);
#endif
_nocache_ram_end = .;
-} GROUP_DATA_LINK_IN(NOCACHE_REGION, NOCACHE_REGION)
+} GROUP_DATA_LINK_IN(RAMABLE_REGION, RAMABLE_REGION)
_nocache_ram_size = _nocache_ram_end - _nocache_ram_start;
diff --git a/arch/common/ramfunc.ld b/arch/common/ramfunc.ld
index 3894dbfef43..45dea79d6b6 100644
--- a/arch/common/ramfunc.ld
+++ b/arch/common/ramfunc.ld
@@ -9,6 +9,7 @@
SECTION_DATA_PROLOGUE(.ramfunc,,)
{
+ __ramfunc_region_start = .;
MPU_ALIGN(__ramfunc_size);
__ramfunc_start = .;
*(.ramfunc)
diff --git a/arch/mips/core/isr.S b/arch/mips/core/isr.S
index 86d05d19833..f2f2f342053 100644
--- a/arch/mips/core/isr.S
+++ b/arch/mips/core/isr.S
@@ -70,6 +70,7 @@ GTEXT(_Fault)
GTEXT(_k_neg_eagain)
GTEXT(z_thread_mark_switched_in)
+GTEXT(z_thread_mark_switched_out)
/* exports */
GTEXT(__isr_vec)
@@ -209,6 +210,9 @@ on_thread_stack:
#endif /* CONFIG_PREEMPT_ENABLED */
reschedule:
+#ifdef CONFIG_INSTRUMENT_THREAD_SWITCHING
+ jal z_thread_mark_switched_out
+#endif
/*
* Check if the current thread is the same as the thread on the ready Q. If
* so, do not reschedule.
diff --git a/arch/mips/include/kernel_arch_func.h b/arch/mips/include/kernel_arch_func.h
index b01cc1a4c65..63ed7a65cf2 100644
--- a/arch/mips/include/kernel_arch_func.h
+++ b/arch/mips/include/kernel_arch_func.h
@@ -19,6 +19,8 @@
#include
+#include
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -26,6 +28,9 @@ extern "C" {
#ifndef _ASMLANGUAGE
static ALWAYS_INLINE void arch_kernel_init(void)
{
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+ soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
}
static ALWAYS_INLINE void
@@ -42,6 +47,8 @@ static inline bool arch_is_in_isr(void)
return _current_cpu->nested != 0U;
}
+int arch_swap(unsigned int key);
+
#ifdef CONFIG_IRQ_OFFLOAD
void z_irq_do_offload(void);
#endif
diff --git a/arch/nios2/core/timing.c b/arch/nios2/core/timing.c
index 9deb469a07f..80ee73c6f06 100644
--- a/arch/nios2/core/timing.c
+++ b/arch/nios2/core/timing.c
@@ -41,7 +41,13 @@ timing_t arch_timing_counter_get(void)
uint64_t arch_timing_cycles_get(volatile timing_t *const start,
volatile timing_t *const end)
{
- return (*end - *start);
+ timing_t start_ = *start;
+ timing_t end_ = *end;
+
+ if (end_ >= start_) {
+ return (end_ - start_);
+ }
+ return (end_ + NIOS2_SUBTRACT_CLOCK_CYCLES(start_));
}
uint64_t arch_timing_freq_get(void)
diff --git a/arch/nios2/include/kernel_arch_func.h b/arch/nios2/include/kernel_arch_func.h
index 2df268a1c62..c325ea49b49 100644
--- a/arch/nios2/include/kernel_arch_func.h
+++ b/arch/nios2/include/kernel_arch_func.h
@@ -22,6 +22,8 @@
#include
+#include
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -30,6 +32,9 @@ extern "C" {
static ALWAYS_INLINE void arch_kernel_init(void)
{
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+ soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
}
static ALWAYS_INLINE void
@@ -46,6 +51,8 @@ static inline bool arch_is_in_isr(void)
return _kernel.cpus[0].nested != 0U;
}
+int arch_swap(unsigned int key);
+
#ifdef CONFIG_IRQ_OFFLOAD
void z_irq_do_offload(void);
#endif
diff --git a/arch/posix/core/swap.c b/arch/posix/core/swap.c
index d4ec5e50b5e..cf13ab4d4d3 100644
--- a/arch/posix/core/swap.c
+++ b/arch/posix/core/swap.c
@@ -50,7 +50,7 @@ int arch_swap(unsigned int key)
_current->callee_saved.thread_status;
- _current = _kernel.ready_q.cache;
+ z_current_thread_set(_kernel.ready_q.cache);
#if CONFIG_INSTRUMENT_THREAD_SWITCHING
z_thread_mark_switched_in();
#endif
@@ -94,7 +94,7 @@ void arch_switch_to_main_thread(struct k_thread *main_thread, char *stack_ptr,
z_thread_mark_switched_out();
#endif
- _current = _kernel.ready_q.cache;
+ z_current_thread_set(_kernel.ready_q.cache);
#ifdef CONFIG_INSTRUMENT_THREAD_SWITCHING
z_thread_mark_switched_in();
diff --git a/arch/posix/core/thread.c b/arch/posix/core/thread.c
index 4e443e2283b..050d075fe57 100644
--- a/arch/posix/core/thread.c
+++ b/arch/posix/core/thread.c
@@ -96,6 +96,25 @@ void posix_arch_thread_entry(void *pa_thread_status)
z_thread_entry(ptr->entry_point, ptr->arg1, ptr->arg2, ptr->arg3);
}
+#if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING)
+int arch_float_disable(struct k_thread *thread)
+{
+ ARG_UNUSED(thread);
+
+ /* Posix always has FPU enabled so cannot be disabled */
+ return -ENOTSUP;
+}
+
+int arch_float_enable(struct k_thread *thread, unsigned int options)
+{
+ ARG_UNUSED(thread);
+ ARG_UNUSED(options);
+
+ /* Posix always has FPU enabled so nothing to do here */
+ return 0;
+}
+#endif /* CONFIG_FPU && CONFIG_FPU_SHARING */
+
#if defined(CONFIG_ARCH_HAS_THREAD_ABORT)
void z_impl_k_thread_abort(k_tid_t thread)
{
diff --git a/arch/posix/include/kernel_arch_func.h b/arch/posix/include/kernel_arch_func.h
index bb8d36a089c..ceba8a85093 100644
--- a/arch/posix/include/kernel_arch_func.h
+++ b/arch/posix/include/kernel_arch_func.h
@@ -12,6 +12,8 @@
#include
+#include
+
#ifndef _ASMLANGUAGE
#ifdef __cplusplus
@@ -20,7 +22,9 @@ extern "C" {
static inline void arch_kernel_init(void)
{
- /* Nothing to be done */
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+ soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
}
static ALWAYS_INLINE void
@@ -38,6 +42,8 @@ static inline bool arch_is_in_isr(void)
return _kernel.cpus[0].nested != 0U;
}
+int arch_swap(unsigned int key);
+
#endif /* _ASMLANGUAGE */
#endif /* ZEPHYR_ARCH_POSIX_INCLUDE_KERNEL_ARCH_FUNC_H_ */
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
index 8f524c23fc1..83e3ef86d07 100644
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -1,4 +1,5 @@
# Copyright (c) 2016 Jean-Paul Etienne
+# Copyright (c) 2024 Antmicro
# SPDX-License-Identifier: Apache-2.0
menu "RISCV Options"
@@ -15,9 +16,13 @@ config FLOAT_HARD
help
This option enables the hard-float calling convention.
+choice RISCV_GP_PURPOSE
+ prompt "Purpose of the global pointer (GP) register"
+ default RISCV_GP if RISCV_SOC_HAS_GP_RELATIVE_ADDRESSING
+
config RISCV_GP
bool "RISC-V global pointer relative addressing"
- default n
+ depends on RISCV_SOC_HAS_GP_RELATIVE_ADDRESSING
help
Use global pointer relative addressing for small globals declared
anywhere in the executable. It can benefit performance and reduce
@@ -27,6 +32,17 @@ config RISCV_GP
global pointer at program start or earlier than any instruction
using GP relative addressing.
+config RISCV_CURRENT_VIA_GP
+ bool "Store current thread into the global pointer (GP) register"
+ depends on MP_MAX_NUM_CPUS > 1
+ select ARCH_HAS_CUSTOM_CURRENT_IMPL
+ help
+ Store the current thread's pointer into the global pointer (GP) register.
+ When is enabled, calls to `_current` & `k_sched_current_thread_query()` will
+ be reduced to a single register read.
+
+endchoice # RISCV_GP_PURPOSE
+
config RISCV_ALWAYS_SWITCH_THROUGH_ECALL
bool "Do not use mret outside a trap handler context"
depends on MULTITHREADING
@@ -37,6 +53,31 @@ config RISCV_ALWAYS_SWITCH_THROUGH_ECALL
and most people should say n here to minimize context switching
overhead.
+choice RISCV_SMP_IPI_IMPL
+ prompt "RISC-V SMP IPI implementation"
+ depends on SMP
+ default RISCV_SMP_IPI_CLINT if DT_HAS_SIFIVE_CLINT0_ENABLED
+ default RISCV_SMP_IPI_CUSTOM
+
+config RISCV_SMP_IPI_CLINT
+ bool "CLINT-based IPI"
+ depends on DT_HAS_SIFIVE_CLINT0_ENABLED
+ help
+ Use CLINT-based IPI implementation.
+
+config RISCV_SMP_IPI_CUSTOM
+ bool "Custom IPI implementation"
+ help
+ Allow custom IPI implementation.
+
+ When this is selected, the following functions must be provided:
+ - arch_sched_directed_ipi()
+ - arch_flush_fpu_ipi() if CONFIG_FPU_SHARING
+ - arch_spin_relax() if CONFIG_FPU_SHARING
+ - arch_smp_init()
+
+endchoice # RISCV_SMP_IPI_IMPL
+
menu "RISCV Processor Options"
config INCLUDE_RESET_VECTOR
@@ -117,6 +158,12 @@ config RISCV_SOC_HAS_CUSTOM_SYS_IO
the RISC-V SoC needs to do something different and more than reading and
writing the registers.
+config RISCV_SOC_HAS_GP_RELATIVE_ADDRESSING
+ bool
+ help
+ Selected when SoC has implemented the initialization of global pointer (GP)
+ at program start, or earlier than any instruction using GP relative addressing.
+
config RISCV_SOC_CONTEXT_SAVE
bool "SOC-based context saving in IRQ handlers"
select RISCV_SOC_OFFSETS
@@ -316,7 +363,6 @@ endif #RISCV_PMP
config PMP_STACK_GUARD
def_bool y
- depends on MULTITHREADING
depends on HW_STACK_PROTECTION
config PMP_STACK_GUARD_MIN_SIZE
@@ -355,6 +401,15 @@ config NULL_POINTER_EXCEPTION_REGION_SIZE
endif # NULL_POINTER_EXCEPTION_DETECTION_PMP
+config RISCV_IMPRECISE_FPU_STATE_TRACKING
+ bool "Imprecise implementation of FPU state tracking"
+ depends on FPU
+ help
+ According to the RISC-V Instruction Set Manual: Volume II, Version 20240411
+ (Section 3.1.6.6), some implementations may choose to track the dirtiness of
+ the floating-point register state imprecisely by reporting the state to be
+ dirty even when it has not been modified. This option reflects that.
+
endmenu
config MAIN_STACK_SIZE
diff --git a/arch/riscv/core/CMakeLists.txt b/arch/riscv/core/CMakeLists.txt
index 3e97d36d7f8..52a748c3247 100644
--- a/arch/riscv/core/CMakeLists.txt
+++ b/arch/riscv/core/CMakeLists.txt
@@ -17,6 +17,12 @@ if ((CONFIG_MP_MAX_NUM_CPUS GREATER 1) OR (CONFIG_SMP))
zephyr_library_sources(smp.c)
endif ()
+if (CONFIG_SMP)
+ zephyr_library_sources(ipi.c)
+
+ zephyr_library_sources_ifdef(CONFIG_RISCV_SMP_IPI_CLINT ipi_clint.c)
+endif()
+
zephyr_library_sources_ifdef(CONFIG_FPU_SHARING fpu.c fpu.S)
zephyr_library_sources_ifdef(CONFIG_DEBUG_COREDUMP coredump.c)
zephyr_library_sources_ifdef(CONFIG_IRQ_OFFLOAD irq_offload.c)
@@ -27,3 +33,4 @@ zephyr_library_sources_ifdef(CONFIG_USERSPACE userspace.S)
zephyr_library_sources_ifdef(CONFIG_SEMIHOST semihost.c)
zephyr_library_sources_ifdef(CONFIG_ARCH_STACKWALK stacktrace.c)
zephyr_linker_sources(ROM_START SORT_KEY 0x0vectors vector_table.ld)
+zephyr_library_sources_ifdef(CONFIG_LLEXT elf.c)
diff --git a/arch/riscv/core/coredump.c b/arch/riscv/core/coredump.c
index 70d7a9976d4..003c7b9fce9 100644
--- a/arch/riscv/core/coredump.c
+++ b/arch/riscv/core/coredump.c
@@ -5,6 +5,7 @@
*/
#include
+#include
#include
#ifndef CONFIG_64BIT
@@ -116,3 +117,21 @@ uint16_t arch_coredump_tgt_code_get(void)
{
return COREDUMP_TGT_RISC_V;
}
+
+#if defined(CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK)
+void arch_coredump_priv_stack_dump(struct k_thread *thread)
+{
+ uintptr_t start_addr, end_addr;
+
+ /* See: zephyr/include/zephyr/arch/riscv/arch.h */
+ if (IS_ENABLED(CONFIG_PMP_POWER_OF_TWO_ALIGNMENT)) {
+ start_addr = thread->arch.priv_stack_start + Z_RISCV_STACK_GUARD_SIZE;
+ } else {
+ start_addr = thread->stack_info.start - CONFIG_PRIVILEGED_STACK_SIZE;
+ }
+ end_addr = Z_STACK_PTR_ALIGN(thread->arch.priv_stack_start + K_KERNEL_STACK_RESERVED +
+ CONFIG_PRIVILEGED_STACK_SIZE);
+
+ coredump_memory_dump(start_addr, end_addr);
+}
+#endif /* CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK */
diff --git a/arch/riscv/core/elf.c b/arch/riscv/core/elf.c
new file mode 100644
index 00000000000..4f981083b94
--- /dev/null
+++ b/arch/riscv/core/elf.c
@@ -0,0 +1,373 @@
+/** @file
+ * @brief Architecture-specific relocations for RISC-V instruction sets.
+ */
+/*
+ * Copyright (c) 2024 CISPA Helmholtz Center for Information Security gGmbH
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+#include
+#include
+#include
+#include
+
+#include
+
+#include
+
+LOG_MODULE_REGISTER(elf, CONFIG_LLEXT_LOG_LEVEL);
+
+/*
+ * RISC-V relocations commonly use pairs of U-type and I-type instructions.
+ * U-type instructions have 20-bit immediates, I-type instructions have 12-bit immediates.
+ * Immediates in RISC-V are always sign-extended.
+ * Thereby, this type of relocation can reach any address within a 2^31-1 byte range.
+ */
+#define RISCV_MAX_JUMP_DISTANCE_U_PLUS_I_TYPE INT32_MAX
+
+/* S-type has 12-bit signed immediate */
+#define RISCV_MAX_JUMP_DISTANCE_S_TYPE ((1 << 11) - 1)
+
+/* I-type has 12-bit signed immediate also */
+#define RISCV_MAX_JUMP_DISTANCE_I_TYPE ((1 << 11) - 1)
+
+/* B-type has 13-bit signed immediate */
+#define RISCV_MAX_JUMP_DISTANCE_B_TYPE ((1 << 12) - 1)
+
+/* CB-type has 9-bit signed immediate */
+#define RISCV_MAX_JUMP_DISTANCE_CB_TYPE ((1 << 8) - 1)
+
+/* CJ-type has 12-bit signed immediate (last bit implicit 0) */
+#define RISCV_MAX_JUMP_DISTANCE_CJ_TYPE ((1 << 11) - 1)
+
+static inline int riscv_relocation_fits(long long jump_target, long long max_distance,
+ elf_word reloc_type)
+{
+ if (llabs(jump_target) > max_distance) {
+ LOG_ERR("%lld byte relocation is not possible for type %" PRIu64 " (max %lld)!",
+ jump_target, (uint64_t)reloc_type, max_distance);
+ return -ENOEXEC; /* jump too far */
+ }
+
+ return 0;
+}
+
+static long long last_u_type_jump_target;
+
+/**
+ * @brief RISC-V specific function for relocating partially linked ELF binaries
+ *
+ * This implementation follows the official RISC-V specification:
+ * https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-elf.adoc
+ *
+ */
+int arch_elf_relocate(elf_rela_t *rel, uintptr_t loc_unsigned, uintptr_t sym_base_addr_unsigned,
+ const char *sym_name, uintptr_t load_bias)
+{
+ /* FIXME currently, RISC-V relocations all fit in ELF_32_R_TYPE */
+ elf_word reloc_type = ELF32_R_TYPE(rel->r_info);
+ /*
+ * The RISC-V specification uses the following symbolic names for the relocations:
+ *
+ * A - addend (rel->r_addend)
+ * B - base address (load_bias)
+ * G - global offset table (not supported yet)
+ * P - position of the relocation (loc)
+ * S - symbol value (sym_base_addr)
+ * V - value at the relocation position (*loc)
+ * GP - value of __global_pointer$ (not supported yet)
+ * TLSMODULE - TLS module for the object (not supported yet)
+ * TLSOFFSET - TLS static block for the object (not supported yet)
+ */
+ intptr_t loc = (intptr_t)loc_unsigned;
+ uint8_t *loc8 = (uint8_t *)loc, tmp8;
+ uint16_t *loc16 = (uint16_t *)loc, tmp16;
+ uint32_t *loc32 = (uint32_t *)loc, tmp32;
+ uint64_t *loc64 = (uint64_t *)loc, tmp64;
+ /* uint32_t or uint64_t */
+ r_riscv_wordclass_t *loc_word = (r_riscv_wordclass_t *)loc;
+ uint32_t modified_operand;
+ uint16_t modified_compressed_operand;
+ int32_t imm8;
+ long long original_imm8, jump_target;
+ int16_t compressed_imm8;
+ __typeof__(rel->r_addend) target_alignment = 1;
+ const intptr_t sym_base_addr = (intptr_t)sym_base_addr_unsigned;
+
+ LOG_DBG("Relocating symbol %s at %p with base address %p load address %p type %" PRIu64,
+ sym_name, (void *)loc, (void *)sym_base_addr, (void *)load_bias,
+ (uint64_t)reloc_type);
+
+ /* FIXME not all types of relocations currently supported, especially TLS */
+
+ switch (reloc_type) {
+ case R_RISCV_NONE:
+ break;
+ case R_RISCV_32:
+ jump_target = sym_base_addr + rel->r_addend; /* S + A */
+ UNALIGNED_PUT((uint32_t)jump_target, loc32);
+ return riscv_relocation_fits(jump_target, INT32_MAX, reloc_type);
+ case R_RISCV_64:
+ /* full 64-bit range, need no range check */
+ UNALIGNED_PUT(sym_base_addr + rel->r_addend, loc64); /* S + A */
+ break;
+ case R_RISCV_RELATIVE:
+ /* either full 32-bit or 64-bit range, need no range check */
+ UNALIGNED_PUT(load_bias + rel->r_addend, loc_word); /* B + A */
+ break;
+ case R_RISCV_JUMP_SLOT:
+ /* either full 32-bit or 64-bit range, need no range check */
+ UNALIGNED_PUT(sym_base_addr, loc_word); /* S */
+ break;
+ case R_RISCV_BRANCH:
+ jump_target = sym_base_addr + rel->r_addend - loc; /* S + A - P */
+ modified_operand = UNALIGNED_GET(loc32);
+ imm8 = jump_target;
+ modified_operand = R_RISCV_CLEAR_BTYPE_IMM8(modified_operand);
+ modified_operand = R_RISCV_SET_BTYPE_IMM8(modified_operand, imm8);
+ UNALIGNED_PUT(modified_operand, loc32);
+ return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_B_TYPE,
+ reloc_type);
+ case R_RISCV_JAL:
+ jump_target = sym_base_addr + rel->r_addend - loc; /* S + A - P */
+ modified_operand = UNALIGNED_GET(loc32);
+ imm8 = jump_target;
+ modified_operand = R_RISCV_CLEAR_JTYPE_IMM8(modified_operand);
+ modified_operand = R_RISCV_SET_JTYPE_IMM8(modified_operand, imm8);
+ UNALIGNED_PUT(modified_operand, loc32);
+ return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_U_PLUS_I_TYPE,
+ reloc_type);
+ case R_RISCV_CALL:
+ case R_RISCV_CALL_PLT:
+ case R_RISCV_PCREL_HI20:
+ modified_operand = UNALIGNED_GET(loc32);
+ jump_target = sym_base_addr + rel->r_addend - loc; /* S + A - P */
+ imm8 = jump_target;
+ /* bit 12 of the immediate goes to I-type instruction and might
+ * change the sign of the number
+ */
+ /* in order to avoid that, we add 1 to the upper immediate if bit 12 is one */
+ /* see RISC-V la pseudo instruction */
+ imm8 += imm8 & 0x800;
+
+ original_imm8 = imm8;
+
+ modified_operand = R_RISCV_CLEAR_UTYPE_IMM8(modified_operand);
+ modified_operand = R_RISCV_SET_UTYPE_IMM8(modified_operand, imm8);
+ UNALIGNED_PUT(modified_operand, loc32);
+
+ if (reloc_type != R_RISCV_PCREL_HI20) {
+ /* PCREL_HI20 is only U-type, not truly U+I-type */
+ /* for the others, need to also modify following I-type */
+ loc32++;
+
+ imm8 = jump_target;
+
+ modified_operand = UNALIGNED_GET(loc32);
+ modified_operand = R_RISCV_CLEAR_ITYPE_IMM8(modified_operand);
+ modified_operand = R_RISCV_SET_ITYPE_IMM8(modified_operand, imm8);
+ UNALIGNED_PUT(modified_operand, loc32);
+ }
+
+ last_u_type_jump_target = jump_target;
+
+ return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_U_PLUS_I_TYPE,
+ reloc_type);
+ case R_RISCV_PCREL_LO12_I:
+ /* need the same jump target as preceding U-type relocation */
+ if (last_u_type_jump_target == 0) {
+ LOG_ERR("R_RISCV_PCREL_LO12_I relocation without preceding U-type "
+ "relocation!");
+ return -ENOEXEC;
+ }
+ modified_operand = UNALIGNED_GET(loc32);
+ jump_target = last_u_type_jump_target; /* S - P */
+ last_u_type_jump_target = 0;
+ imm8 = jump_target;
+ modified_operand = R_RISCV_CLEAR_ITYPE_IMM8(modified_operand);
+ modified_operand = R_RISCV_SET_ITYPE_IMM8(modified_operand, imm8);
+ UNALIGNED_PUT(modified_operand, loc32);
+ return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_U_PLUS_I_TYPE,
+ reloc_type);
+ break;
+ case R_RISCV_PCREL_LO12_S:
+ /* need the same jump target as preceding U-type relocation */
+ if (last_u_type_jump_target == 0) {
+ LOG_ERR("R_RISCV_PCREL_LO12_I relocation without preceding U-type "
+ "relocation!");
+ return -ENOEXEC;
+ }
+ modified_operand = UNALIGNED_GET(loc32);
+ jump_target = last_u_type_jump_target; /* S - P */
+ last_u_type_jump_target = 0;
+ imm8 = jump_target;
+ modified_operand = R_RISCV_CLEAR_STYPE_IMM8(modified_operand);
+ modified_operand = R_RISCV_SET_STYPE_IMM8(modified_operand, imm8);
+ UNALIGNED_PUT(modified_operand, loc32);
+ return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_U_PLUS_I_TYPE,
+ reloc_type);
+ case R_RISCV_HI20:
+ jump_target = sym_base_addr + rel->r_addend; /* S + A */
+ modified_operand = UNALIGNED_GET(loc32);
+ imm8 = jump_target;
+ /* bit 12 of the immediate goes to I-type instruction and might
+ * change the sign of the number
+ */
+ /* in order to avoid that, we add 1 to the upper immediate if bit 12 is one*/
+ /* see RISC-V la pseudo instruction */
+ original_imm8 = imm8;
+ imm8 += imm8 & 0x800;
+ modified_operand = R_RISCV_CLEAR_UTYPE_IMM8(modified_operand);
+ modified_operand = R_RISCV_SET_UTYPE_IMM8(modified_operand, imm8);
+ UNALIGNED_PUT(modified_operand, loc32);
+ return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_U_PLUS_I_TYPE,
+ reloc_type);
+ case R_RISCV_LO12_I:
+ modified_operand = UNALIGNED_GET(loc32);
+ jump_target = sym_base_addr + rel->r_addend; /* S + A */
+ imm8 = jump_target;
+ /* this is always used with R_RISCV_HI20 */
+ modified_operand = R_RISCV_CLEAR_ITYPE_IMM8(modified_operand);
+ modified_operand = R_RISCV_SET_ITYPE_IMM8(modified_operand, imm8);
+ UNALIGNED_PUT(modified_operand, loc32);
+ return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_U_PLUS_I_TYPE,
+ reloc_type);
+ case R_RISCV_LO12_S:
+ modified_operand = UNALIGNED_GET(loc32);
+ imm8 = sym_base_addr + rel->r_addend; /* S + A */
+ /*
+ * S-type is used for stores/loads etc.
+ * size check is done at compile time, as it depends on the size of
+ * the structure we are trying to load/store
+ */
+ modified_operand = R_RISCV_CLEAR_STYPE_IMM8(modified_operand);
+ modified_operand = R_RISCV_SET_STYPE_IMM8(modified_operand, imm8);
+ UNALIGNED_PUT(modified_operand, loc32);
+ break;
+ /* for add/sub/set, compiler needs to ensure that the ELF sections are close enough */
+ case R_RISCV_ADD8:
+ tmp8 = UNALIGNED_GET(loc8);
+ tmp8 += sym_base_addr + rel->r_addend; /* V + S + A */
+ UNALIGNED_PUT(tmp8, loc8);
+ break;
+ case R_RISCV_ADD16:
+ tmp16 = UNALIGNED_GET(loc16);
+ tmp16 += sym_base_addr + rel->r_addend; /* V + S + A */
+ UNALIGNED_PUT(tmp16, loc16);
+ break;
+ case R_RISCV_ADD32:
+ tmp32 = UNALIGNED_GET(loc32);
+ tmp32 += sym_base_addr + rel->r_addend; /* V + S + A */
+ UNALIGNED_PUT(tmp32, loc32);
+ break;
+ case R_RISCV_ADD64:
+ tmp64 = UNALIGNED_GET(loc64);
+ tmp64 += sym_base_addr + rel->r_addend; /* V + S + A */
+ UNALIGNED_PUT(tmp64, loc64);
+ break;
+ case R_RISCV_SUB8:
+ tmp8 = UNALIGNED_GET(loc8);
+ tmp8 -= sym_base_addr + rel->r_addend; /* V - S - A */
+ UNALIGNED_PUT(tmp8, loc8);
+ break;
+ case R_RISCV_SUB16:
+ tmp16 = UNALIGNED_GET(loc16);
+ tmp16 -= sym_base_addr + rel->r_addend; /* V - S - A */
+ UNALIGNED_PUT(tmp16, loc16);
+ break;
+ case R_RISCV_SUB32:
+ tmp32 = UNALIGNED_GET(loc32);
+ tmp32 -= sym_base_addr + rel->r_addend; /* V - S - A */
+ UNALIGNED_PUT(tmp32, loc32);
+ break;
+ case R_RISCV_SUB64:
+ tmp64 = UNALIGNED_GET(loc64);
+ tmp64 -= sym_base_addr + rel->r_addend; /* V - S - A */
+ UNALIGNED_PUT(tmp64, loc64);
+ break;
+ case R_RISCV_SUB6:
+ tmp8 = UNALIGNED_GET(loc8) & (0x1F);
+ UNALIGNED_PUT(tmp8, loc8);
+ tmp8 = tmp8 - sym_base_addr - rel->r_addend; /* V - S - A */
+ tmp8 = tmp8 & (0x1F);
+ tmp8 = tmp8 | UNALIGNED_GET(loc8);
+ UNALIGNED_PUT(tmp8, loc8);
+ break;
+ case R_RISCV_SET6:
+ tmp8 = UNALIGNED_GET(loc8) & (0x1F);
+ UNALIGNED_PUT(tmp8, loc8);
+ tmp8 = sym_base_addr + rel->r_addend; /* S + A */
+ tmp8 = tmp8 | UNALIGNED_GET(loc8);
+ UNALIGNED_PUT(tmp8, loc8);
+ break;
+ case R_RISCV_SET8:
+ tmp8 = sym_base_addr + rel->r_addend; /* S + A */
+ UNALIGNED_PUT(tmp8, loc8);
+ break;
+ case R_RISCV_SET16:
+ tmp16 = sym_base_addr + rel->r_addend; /* S + A */
+ UNALIGNED_PUT(tmp16, loc16);
+ break;
+ case R_RISCV_SET32:
+ tmp32 = sym_base_addr + rel->r_addend; /* S + A */
+ UNALIGNED_PUT(tmp32, loc32);
+ break;
+ case R_RISCV_32_PCREL:
+ jump_target = sym_base_addr + rel->r_addend - loc; /* S + A - P */
+ tmp32 = jump_target;
+ UNALIGNED_PUT(tmp32, loc32);
+ return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_U_PLUS_I_TYPE,
+ reloc_type);
+ case R_RISCV_PLT32:
+ jump_target = sym_base_addr + rel->r_addend - loc; /* S + A - P */
+ tmp32 = jump_target;
+ UNALIGNED_PUT(tmp32, loc32);
+ return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_U_PLUS_I_TYPE,
+ reloc_type);
+ case R_RISCV_RVC_BRANCH:
+ jump_target = sym_base_addr + rel->r_addend - loc; /* S + A - P */
+ modified_compressed_operand = UNALIGNED_GET(loc16);
+ compressed_imm8 = jump_target;
+ modified_compressed_operand =
+ R_RISCV_CLEAR_CBTYPE_IMM8(modified_compressed_operand);
+ modified_compressed_operand =
+ R_RISCV_SET_CBTYPE_IMM8(modified_compressed_operand, compressed_imm8);
+ UNALIGNED_PUT(modified_compressed_operand, loc16);
+ return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_CB_TYPE,
+ reloc_type);
+ case R_RISCV_RVC_JUMP:
+ jump_target = sym_base_addr + rel->r_addend - loc; /* S + A - P */
+ modified_compressed_operand = UNALIGNED_GET(loc16);
+ compressed_imm8 = jump_target;
+ modified_compressed_operand =
+ R_RISCV_CLEAR_CJTYPE_IMM8(modified_compressed_operand);
+ modified_compressed_operand =
+ R_RISCV_SET_CJTYPE_IMM8(modified_compressed_operand, compressed_imm8);
+ UNALIGNED_PUT(modified_compressed_operand, loc16);
+ return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_CJ_TYPE,
+ reloc_type);
+ case R_RISCV_ALIGN:
+ /* we are supposed to move the symbol such that it is aligned to the next power of
+ * two >= addend
+ */
+ /* this involves moving the symbol */
+ while (target_alignment < rel->r_addend) {
+ target_alignment *= 2;
+ }
+ LOG_ERR("Symbol %s with location %p requires alignment to %" PRIu64 " bytes!",
+ sym_name, (void *)loc, (uint64_t)target_alignment);
+ LOG_ERR("Alignment relocation is currently not supported!");
+ return -ENOEXEC;
+ /* ignored, this is primarily intended for removing instructions during link-time
+ * optimization
+ */
+ case R_RISCV_RELAX:
+ break;
+ default:
+ LOG_ERR("Unsupported relocation type: %" PRIu64 " for symbol: %s",
+ (uint64_t)reloc_type, sym_name);
+ return -ENOEXEC;
+ }
+
+ return 0;
+}
diff --git a/arch/riscv/core/fatal.c b/arch/riscv/core/fatal.c
index d5cbd2f4dc1..879ffab9a80 100644
--- a/arch/riscv/core/fatal.c
+++ b/arch/riscv/core/fatal.c
@@ -172,11 +172,21 @@ static bool bad_stack_pointer(struct arch_esf *esf)
}
#endif /* CONFIG_USERSPACE */
+#if CONFIG_MULTITHREADING
if (sp >= _current->stack_info.start - K_KERNEL_STACK_RESERVED &&
sp < _current->stack_info.start - K_KERNEL_STACK_RESERVED
+ Z_RISCV_STACK_GUARD_SIZE) {
return true;
}
+#else
+ uintptr_t isr_stack = (uintptr_t)z_interrupt_stacks;
+ uintptr_t main_stack = (uintptr_t)z_main_stack;
+
+ if ((sp >= isr_stack && sp < isr_stack + Z_RISCV_STACK_GUARD_SIZE) ||
+ (sp >= main_stack && sp < main_stack + Z_RISCV_STACK_GUARD_SIZE)) {
+ return true;
+ }
+#endif /* CONFIG_MULTITHREADING */
#endif /* CONFIG_PMP_STACK_GUARD */
#ifdef CONFIG_USERSPACE
diff --git a/arch/riscv/core/ipi.c b/arch/riscv/core/ipi.c
new file mode 100644
index 00000000000..c2683b61701
--- /dev/null
+++ b/arch/riscv/core/ipi.c
@@ -0,0 +1,14 @@
+/*
+ * Copyright (c) 2021 Intel Corporation
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include
+
+#include
+
+void arch_sched_broadcast_ipi(void)
+{
+ arch_sched_directed_ipi(IPI_ALL_CPUS_MASK);
+}
diff --git a/arch/riscv/core/ipi_clint.c b/arch/riscv/core/ipi_clint.c
new file mode 100644
index 00000000000..e5f12566653
--- /dev/null
+++ b/arch/riscv/core/ipi_clint.c
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2021 Intel Corporation
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include
+#include
+
+#include
+
+#define CLINT_NODE DT_NODELABEL(clint)
+#if !DT_NODE_EXISTS(CLINT_NODE)
+#error "Label 'clint' is not defined in the devicetree."
+#endif
+#define MSIP_BASE DT_REG_ADDR_RAW(CLINT_NODE)
+#define MSIP(hartid) ((volatile uint32_t *)MSIP_BASE)[hartid]
+
+static atomic_val_t cpu_pending_ipi[CONFIG_MP_MAX_NUM_CPUS];
+#define IPI_SCHED 0
+#define IPI_FPU_FLUSH 1
+
+void arch_sched_directed_ipi(uint32_t cpu_bitmap)
+{
+ unsigned int key = arch_irq_lock();
+ unsigned int id = _current_cpu->id;
+ unsigned int num_cpus = arch_num_cpus();
+
+ for (unsigned int i = 0; i < num_cpus; i++) {
+ if ((i != id) && _kernel.cpus[i].arch.online && ((cpu_bitmap & BIT(i)) != 0)) {
+ atomic_set_bit(&cpu_pending_ipi[i], IPI_SCHED);
+ MSIP(_kernel.cpus[i].arch.hartid) = 1;
+ }
+ }
+
+ arch_irq_unlock(key);
+}
+
+#ifdef CONFIG_FPU_SHARING
+void arch_flush_fpu_ipi(unsigned int cpu)
+{
+ atomic_set_bit(&cpu_pending_ipi[cpu], IPI_FPU_FLUSH);
+ MSIP(_kernel.cpus[cpu].arch.hartid) = 1;
+}
+#endif /* CONFIG_FPU_SHARING */
+
+static void sched_ipi_handler(const void *unused)
+{
+ ARG_UNUSED(unused);
+
+ MSIP(csr_read(mhartid)) = 0;
+
+ atomic_val_t pending_ipi = atomic_clear(&cpu_pending_ipi[_current_cpu->id]);
+
+ if (pending_ipi & ATOMIC_MASK(IPI_SCHED)) {
+ z_sched_ipi();
+ }
+#ifdef CONFIG_FPU_SHARING
+ if (pending_ipi & ATOMIC_MASK(IPI_FPU_FLUSH)) {
+ /* disable IRQs */
+ csr_clear(mstatus, MSTATUS_IEN);
+ /* perform the flush */
+ arch_flush_local_fpu();
+ /*
+ * No need to re-enable IRQs here as long as
+ * this remains the last case.
+ */
+ }
+#endif /* CONFIG_FPU_SHARING */
+}
+
+#ifdef CONFIG_FPU_SHARING
+/*
+ * Make sure there is no pending FPU flush request for this CPU while
+ * waiting for a contended spinlock to become available. This prevents
+ * a deadlock when the lock we need is already taken by another CPU
+ * that also wants its FPU content to be reinstated while such content
+ * is still live in this CPU's FPU.
+ */
+void arch_spin_relax(void)
+{
+ atomic_val_t *pending_ipi = &cpu_pending_ipi[_current_cpu->id];
+
+ if (atomic_test_and_clear_bit(pending_ipi, IPI_FPU_FLUSH)) {
+ /*
+ * We may not be in IRQ context here hence cannot use
+ * arch_flush_local_fpu() directly.
+ */
+ arch_float_disable(_current_cpu->arch.fpu_owner);
+ }
+}
+#endif /* CONFIG_FPU_SHARING */
+
+int arch_smp_init(void)
+{
+
+ IRQ_CONNECT(RISCV_IRQ_MSOFT, 0, sched_ipi_handler, NULL, 0);
+ irq_enable(RISCV_IRQ_MSOFT);
+
+ return 0;
+}
diff --git a/arch/riscv/core/isr.S b/arch/riscv/core/isr.S
index 7e885da93a4..11787d3b324 100644
--- a/arch/riscv/core/isr.S
+++ b/arch/riscv/core/isr.S
@@ -163,6 +163,16 @@ SECTION_FUNC(exception.entry, _isr_wrapper)
lr t0, ___cpu_t_current_OFFSET(s0)
lr tp, _thread_offset_to_tls(t0)
+ /* Make sure global pointer is sane */
+#ifdef CONFIG_RISCV_GP
+ .option push
+ .option norelax
+ la gp, __global_pointer$
+ .option pop
+#elif defined(CONFIG_RISCV_CURRENT_VIA_GP)
+ lr gp, ___cpu_t_current_OFFSET(s0)
+#endif /* CONFIG_RISCV_GP / CONFIG_RISCV_CURRENT_VIA_GP */
+
/* Clear our per-thread usermode flag */
lui t0, %tprel_hi(is_user_mode)
add t0, t0, tp, %tprel_add(is_user_mode)
@@ -348,7 +358,7 @@ no_fp: /* increment _current->arch.exception_depth */
li t1, RISCV_EXC_ECALLU
beq t0, t1, is_user_syscall
-#ifdef CONFIG_PMP_STACK_GUARD
+#if defined(CONFIG_PMP_STACK_GUARD) && defined(CONFIG_MULTITHREADING)
/*
* Determine if we come from user space. If so, reconfigure the PMP for
* kernel mode stack guard.
@@ -389,7 +399,7 @@ is_kernel_syscall:
addi t0, t0, 4
sr t0, __struct_arch_esf_mepc_OFFSET(sp)
-#ifdef CONFIG_PMP_STACK_GUARD
+#if defined(CONFIG_PMP_STACK_GUARD) && defined(CONFIG_MULTITHREADING)
/* Re-activate PMP for m-mode */
li t1, MSTATUS_MPP
csrc mstatus, t1
@@ -443,6 +453,12 @@ do_fault:
1: mv a1, sp
#ifdef CONFIG_EXCEPTION_DEBUG
+ /*
+ * Restore the s0 we saved early in ISR entry
+ * so it shows up properly in the CSF.
+ */
+ lr s0, __struct_arch_esf_s0_OFFSET(sp)
+
/* Allocate space for caller-saved registers on current thread stack */
addi sp, sp, -__callee_saved_t_SIZEOF
@@ -494,7 +510,7 @@ do_irq_offload:
#ifdef CONFIG_USERSPACE
is_user_syscall:
-#ifdef CONFIG_PMP_STACK_GUARD
+#if defined(CONFIG_PMP_STACK_GUARD) && defined(CONFIG_MULTITHREADING)
/*
* We came from userspace and need to reconfigure the
* PMP for kernel mode stack guard.
@@ -564,7 +580,7 @@ valid_syscall_id:
is_interrupt:
-#ifdef CONFIG_PMP_STACK_GUARD
+#if defined(CONFIG_PMP_STACK_GUARD) && defined(CONFIG_MULTITHREADING)
#ifdef CONFIG_USERSPACE
/*
* If we came from userspace then we need to reconfigure the
@@ -734,7 +750,7 @@ fp_trap_exit:
and t0, t2, t1
bnez t0, 1f
-#ifdef CONFIG_PMP_STACK_GUARD
+#if defined(CONFIG_PMP_STACK_GUARD) && defined(CONFIG_MULTITHREADING)
/* Remove kernel stack guard and Reconfigure PMP for user mode */
lr a0, ___cpu_t_current_OFFSET(s0)
call z_riscv_pmp_usermode_enable
diff --git a/arch/riscv/core/pmp.c b/arch/riscv/core/pmp.c
index e41eb8d4bb0..e29c8abd76d 100644
--- a/arch/riscv/core/pmp.c
+++ b/arch/riscv/core/pmp.c
@@ -348,8 +348,8 @@ static unsigned int global_pmp_end_index;
*/
void z_riscv_pmp_init(void)
{
- unsigned long pmp_addr[5];
- unsigned long pmp_cfg[2];
+ unsigned long pmp_addr[CONFIG_PMP_SLOTS];
+ unsigned long pmp_cfg[CONFIG_PMP_SLOTS / PMPCFG_STRIDE];
unsigned int index = 0;
/* The read-only area is always there for every mode */
@@ -370,6 +370,7 @@ void z_riscv_pmp_init(void)
#endif
#ifdef CONFIG_PMP_STACK_GUARD
+#ifdef CONFIG_MULTITHREADING
/*
* Set the stack guard for this CPU's IRQ stack by making the bottom
* addresses inaccessible. This will never change so we do it here
@@ -396,6 +397,21 @@ void z_riscv_pmp_init(void)
/* And forget about that last entry as we won't need it later */
index--;
+#else
+ /* Without multithreading setup stack guards for IRQ and main stacks */
+ set_pmp_entry(&index, PMP_NONE | PMP_L,
+ (uintptr_t)z_interrupt_stacks,
+ Z_RISCV_STACK_GUARD_SIZE,
+ pmp_addr, pmp_cfg, ARRAY_SIZE(pmp_addr));
+
+ set_pmp_entry(&index, PMP_NONE | PMP_L,
+ (uintptr_t)z_main_stack,
+ Z_RISCV_STACK_GUARD_SIZE,
+ pmp_addr, pmp_cfg, ARRAY_SIZE(pmp_addr));
+
+ /* Write those entries to PMP regs. */
+ write_pmp_entries(0, index, true, pmp_addr, pmp_cfg, ARRAY_SIZE(pmp_addr));
+#endif /* CONFIG_MULTITHREADING */
#else
/* Write those entries to PMP regs. */
write_pmp_entries(0, index, true, pmp_addr, pmp_cfg, ARRAY_SIZE(pmp_addr));
@@ -419,7 +435,6 @@ void z_riscv_pmp_init(void)
}
#endif
- __ASSERT(index <= PMPCFG_STRIDE, "provision for one global word only");
global_pmp_cfg[0] = pmp_cfg[0];
global_pmp_last_addr = pmp_addr[index - 1];
global_pmp_end_index = index;
@@ -454,6 +469,7 @@ static inline unsigned int z_riscv_pmp_thread_init(unsigned long *pmp_addr,
#ifdef CONFIG_PMP_STACK_GUARD
+#ifdef CONFIG_MULTITHREADING
/**
* @brief Prepare the PMP stackguard content for given thread.
*
@@ -511,6 +527,8 @@ void z_riscv_pmp_stackguard_enable(struct k_thread *thread)
csr_set(mstatus, MSTATUS_MPRV);
}
+#endif /* CONFIG_MULTITHREADING */
+
/**
* @brief Remove PMP stackguard content to actual PMP registers
*/
diff --git a/arch/riscv/core/smp.c b/arch/riscv/core/smp.c
index 4ef287c4a7a..8607215cab3 100644
--- a/arch/riscv/core/smp.c
+++ b/arch/riscv/core/smp.c
@@ -7,11 +7,11 @@
#include
#include
#include
-#include
#include
#include
#include
#include
+#include
volatile struct {
arch_cpustart_t fn;
@@ -74,102 +74,13 @@ void arch_secondary_cpu_init(int hartid)
#endif
#ifdef CONFIG_SMP
irq_enable(RISCV_IRQ_MSOFT);
-#endif
+#endif /* CONFIG_SMP */
+#ifdef CONFIG_PLIC_IRQ_AFFINITY
+ /* Enable on secondary cores so that they can respond to PLIC */
+ irq_enable(RISCV_IRQ_MEXT);
+#endif /* CONFIG_PLIC_IRQ_AFFINITY */
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+ soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
riscv_cpu_init[cpu_num].fn(riscv_cpu_init[cpu_num].arg);
}
-
-#ifdef CONFIG_SMP
-
-#define MSIP_BASE 0x2000000UL
-#define MSIP(hartid) ((volatile uint32_t *)MSIP_BASE)[hartid]
-
-static atomic_val_t cpu_pending_ipi[CONFIG_MP_MAX_NUM_CPUS];
-#define IPI_SCHED 0
-#define IPI_FPU_FLUSH 1
-
-void arch_sched_directed_ipi(uint32_t cpu_bitmap)
-{
- unsigned int key = arch_irq_lock();
- unsigned int id = _current_cpu->id;
- unsigned int num_cpus = arch_num_cpus();
-
- for (unsigned int i = 0; i < num_cpus; i++) {
- if ((i != id) && _kernel.cpus[i].arch.online &&
- ((cpu_bitmap & BIT(i)) != 0)) {
- atomic_set_bit(&cpu_pending_ipi[i], IPI_SCHED);
- MSIP(_kernel.cpus[i].arch.hartid) = 1;
- }
- }
-
- arch_irq_unlock(key);
-}
-
-void arch_sched_broadcast_ipi(void)
-{
- arch_sched_directed_ipi(IPI_ALL_CPUS_MASK);
-}
-
-#ifdef CONFIG_FPU_SHARING
-void arch_flush_fpu_ipi(unsigned int cpu)
-{
- atomic_set_bit(&cpu_pending_ipi[cpu], IPI_FPU_FLUSH);
- MSIP(_kernel.cpus[cpu].arch.hartid) = 1;
-}
-#endif
-
-static void sched_ipi_handler(const void *unused)
-{
- ARG_UNUSED(unused);
-
- MSIP(csr_read(mhartid)) = 0;
-
- atomic_val_t pending_ipi = atomic_clear(&cpu_pending_ipi[_current_cpu->id]);
-
- if (pending_ipi & ATOMIC_MASK(IPI_SCHED)) {
- z_sched_ipi();
- }
-#ifdef CONFIG_FPU_SHARING
- if (pending_ipi & ATOMIC_MASK(IPI_FPU_FLUSH)) {
- /* disable IRQs */
- csr_clear(mstatus, MSTATUS_IEN);
- /* perform the flush */
- arch_flush_local_fpu();
- /*
- * No need to re-enable IRQs here as long as
- * this remains the last case.
- */
- }
-#endif
-}
-
-#ifdef CONFIG_FPU_SHARING
-/*
- * Make sure there is no pending FPU flush request for this CPU while
- * waiting for a contended spinlock to become available. This prevents
- * a deadlock when the lock we need is already taken by another CPU
- * that also wants its FPU content to be reinstated while such content
- * is still live in this CPU's FPU.
- */
-void arch_spin_relax(void)
-{
- atomic_val_t *pending_ipi = &cpu_pending_ipi[_current_cpu->id];
-
- if (atomic_test_and_clear_bit(pending_ipi, IPI_FPU_FLUSH)) {
- /*
- * We may not be in IRQ context here hence cannot use
- * arch_flush_local_fpu() directly.
- */
- arch_float_disable(_current_cpu->arch.fpu_owner);
- }
-}
-#endif
-
-int arch_smp_init(void)
-{
-
- IRQ_CONNECT(RISCV_IRQ_MSOFT, 0, sched_ipi_handler, NULL, 0);
- irq_enable(RISCV_IRQ_MSOFT);
-
- return 0;
-}
-#endif /* CONFIG_SMP */
diff --git a/arch/riscv/core/thread.c b/arch/riscv/core/thread.c
index 2fecc68a077..896f8e5199d 100644
--- a/arch/riscv/core/thread.c
+++ b/arch/riscv/core/thread.c
@@ -15,7 +15,7 @@
/*
* Per-thread (TLS) variable indicating whether execution is in user mode.
*/
-__thread uint8_t is_user_mode;
+Z_THREAD_LOCAL uint8_t is_user_mode;
#endif
void arch_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
diff --git a/arch/riscv/include/kernel_arch_func.h b/arch/riscv/include/kernel_arch_func.h
index c5ed6ff3f7f..a8fc863c75d 100644
--- a/arch/riscv/include/kernel_arch_func.h
+++ b/arch/riscv/include/kernel_arch_func.h
@@ -18,6 +18,8 @@
#include
#include
+#include
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -53,6 +55,9 @@ static ALWAYS_INLINE void arch_kernel_init(void)
#ifdef CONFIG_RISCV_PMP
z_riscv_pmp_init();
#endif
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+ soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
}
static ALWAYS_INLINE void
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig
index a3746f147f9..1a17bf1eddd 100644
--- a/arch/sparc/Kconfig
+++ b/arch/sparc/Kconfig
@@ -26,6 +26,12 @@ config NUM_IRQS
int
default 32
+config SPARC_SVT
+ bool "Single-vector trapping"
+ help
+ Use Single-vector trapping (SVT). Defined by SPARC-V8 Embedded (V8E)
+ Architecture Specification and available in some LEON processors.
+
config SPARC_CASA
bool "CASA instructions"
help
diff --git a/arch/sparc/core/CMakeLists.txt b/arch/sparc/core/CMakeLists.txt
index 82ff7906638..cc458404ed8 100644
--- a/arch/sparc/core/CMakeLists.txt
+++ b/arch/sparc/core/CMakeLists.txt
@@ -13,8 +13,9 @@ zephyr_library_sources(
thread.c
window_trap.S
sw_trap_set_pil.S
- trap_table_mvt.S
)
+zephyr_library_sources_ifdef(CONFIG_SPARC_SVT trap_table_svt.S)
+zephyr_library_sources_ifndef(CONFIG_SPARC_SVT trap_table_mvt.S)
zephyr_library_sources_ifdef(CONFIG_IRQ_OFFLOAD irq_offload.c)
zephyr_library_sources_ifdef(CONFIG_THREAD_LOCAL_STORAGE tls.c)
diff --git a/arch/sparc/core/reset_trap.S b/arch/sparc/core/reset_trap.S
index dd4046c47bc..6f1f6c037e3 100644
--- a/arch/sparc/core/reset_trap.S
+++ b/arch/sparc/core/reset_trap.S
@@ -12,6 +12,18 @@
GTEXT(__sparc_trap_reset)
SECTION_FUNC(TEXT, __sparc_trap_reset)
+#ifdef CONFIG_SPARC_SVT
+#ifdef CONFIG_SOC_SPARC_LEON
+ /* On LEON, enable single vector trapping by setting ASR17.SV. */
+ rd %asr17, %g1
+ set (1<<13), %g2
+ or %g1, %g2, %g1
+ wr %g1, %asr17
+#else
+#error "Don't know how to enable SVT on this SOC"
+#endif
+#endif
+
set __sparc_trap_table, %g1
wr %g1, %tbr
wr 2, %wim
diff --git a/arch/sparc/core/trap_table_svt.S b/arch/sparc/core/trap_table_svt.S
new file mode 100644
index 00000000000..461cc5a51df
--- /dev/null
+++ b/arch/sparc/core/trap_table_svt.S
@@ -0,0 +1,138 @@
+/*
+ * Copyright (c) 2023 Frontgrade Gaisler AB
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * This file contains the trap entry for SPARC operating with
+ * single-vector trap model, defined in SPARC V8E. The processor
+ * redirects execution to a single entry on any trap event. From
+ * there, two levels of look-up tables are used to find the trap
+ * handler.
+ *
+ * - Execution time is constant.
+ * - Condition flags are not modified.
+ * - Provides handler with PSR in l0, TBR in l6
+ * - This SVT implementation is less than 400 bytes long. (An MVT
+ * table is always 4096 bytes long.)
+ *
+ * See trap_table_mvt.S for information about SPARC trap types.
+ */
+
+#include
+#include
+#include
+
+#ifdef CONFIG_IRQ_OFFLOAD
+ #define IRQ_OFFLOAD_HANDLER __sparc_trap_irq_offload
+#else
+ #define IRQ_OFFLOAD_HANDLER __sparc_trap_fault
+#endif
+
+GTEXT(__sparc_trap_table)
+GTEXT(__start)
+
+SECTION_SUBSEC_FUNC(TEXT, traptable, __sparc_trap_table)
+__start:
+ rd %psr, %l0
+ mov %tbr, %l6
+
+ and %l6, 0xf00, %l7
+ srl %l7, 6, %l7
+ set __sparc_trap_table_svt_level0, %l4
+ ld [%l4 + %l7], %l4
+
+ and %l6, 0x0f0, %l7
+ srl %l7, 2, %l7
+ ld [%l4 + %l7], %l4
+
+ srl %l6, 4, %l3
+ jmp %l4
+ and %l3, 0xf, %l3 /* Interrupt level */
+
+__sparc_trap_svt_in_trap:
+ ta 0x00
+ nop
+
+SECTION_VAR(RODATA, __sparc_trap_table_svt_tables)
+ .align 4
+__sparc_trap_table_svt_level0:
+ .word __sparc_trap_table_svt_00
+ .word __sparc_trap_table_svt_10
+ .word __sparc_trap_table_svt_allbad
+ .word __sparc_trap_table_svt_allbad
+ .word __sparc_trap_table_svt_allbad
+ .word __sparc_trap_table_svt_allbad
+ .word __sparc_trap_table_svt_allbad
+ .word __sparc_trap_table_svt_allbad
+ .word __sparc_trap_table_svt_80
+ .word __sparc_trap_table_svt_allbad
+ .word __sparc_trap_table_svt_allbad
+ .word __sparc_trap_table_svt_allbad
+ .word __sparc_trap_table_svt_allbad
+ .word __sparc_trap_table_svt_allbad
+ .word __sparc_trap_table_svt_allbad
+ .word __sparc_trap_table_svt_allbad
+
+__sparc_trap_table_svt_00:
+ .word __sparc_trap_reset
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_window_overflow
+ .word __sparc_trap_window_underflow
+__sparc_trap_table_svt_allbad:
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+
+__sparc_trap_table_svt_10:
+ .word __sparc_trap_fault
+ .word __sparc_trap_interrupt
+ .word __sparc_trap_interrupt
+ .word __sparc_trap_interrupt
+ .word __sparc_trap_interrupt
+ .word __sparc_trap_interrupt
+ .word __sparc_trap_interrupt
+ .word __sparc_trap_interrupt
+ .word __sparc_trap_interrupt
+ .word __sparc_trap_interrupt
+ .word __sparc_trap_interrupt
+ .word __sparc_trap_interrupt
+ .word __sparc_trap_interrupt
+ .word __sparc_trap_interrupt
+ .word __sparc_trap_interrupt
+ .word __sparc_trap_interrupt
+
+__sparc_trap_table_svt_80:
+ .word __sparc_trap_svt_in_trap
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_flush_windows
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_sw_set_pil
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word __sparc_trap_fault
+ .word IRQ_OFFLOAD_HANDLER
+ .word __sparc_trap_fault
+ .word __sparc_trap_except_reason
diff --git a/arch/sparc/include/kernel_arch_func.h b/arch/sparc/include/kernel_arch_func.h
index 8b79b130ad6..fc59fdf7aa6 100644
--- a/arch/sparc/include/kernel_arch_func.h
+++ b/arch/sparc/include/kernel_arch_func.h
@@ -17,6 +17,8 @@
#include
+#include
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -24,6 +26,9 @@ extern "C" {
#ifndef _ASMLANGUAGE
static ALWAYS_INLINE void arch_kernel_init(void)
{
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+ soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
}
void z_sparc_context_switch(struct k_thread *newt, struct k_thread *oldt);
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 52ef70a0d13..46f32f92728 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -417,15 +417,6 @@ config X86_DISABLE_SSBD
Even if enabled, will have no effect on CPUs that do not
require this feature.
-config DISABLE_SSBD
- bool "Disable Speculative Store Bypass [DEPRECATED]"
- depends on USERSPACE
- default y if !X86_NO_SPECTRE_V4
- select X86_DISABLE_SSBD
- select DEPRECATED
- help
- Deprecated. Use CONFIG_X86_DISABLE_SSBD instead.
-
config X86_ENABLE_EXTENDED_IBRS
bool "Extended IBRS"
depends on USERSPACE
@@ -435,15 +426,6 @@ config X86_ENABLE_EXTENDED_IBRS
Speculation 'always on' feature. This mitigates Indirect Branch
Control vulnerabilities (aka Spectre V2).
-config ENABLE_EXTENDED_IBRS
- bool "Extended IBRS [DEPRECATED]"
- depends on USERSPACE
- default y if !X86_NO_SPECTRE_V2
- select X86_ENABLE_EXTENDED_IBRS
- select DEPRECATED
- help
- Deprecated. Use CONFIG_X86_ENABLE_EXTENDED_IBRS instead.
-
config X86_BOUNDS_CHECK_BYPASS_MITIGATION
bool
depends on USERSPACE
diff --git a/arch/x86/core/ia32/coredump.c b/arch/x86/core/ia32/coredump.c
index fb7d0fcfd8c..c443dc4091b 100644
--- a/arch/x86/core/ia32/coredump.c
+++ b/arch/x86/core/ia32/coredump.c
@@ -5,6 +5,7 @@
*/
#include
+#include
#include
#define ARCH_HDR_VER 1
@@ -80,3 +81,22 @@ uint16_t arch_coredump_tgt_code_get(void)
{
return COREDUMP_TGT_X86;
}
+
+#if defined(CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK)
+void arch_coredump_priv_stack_dump(struct k_thread *thread)
+{
+ struct z_x86_thread_stack_header *hdr_stack_obj;
+ uintptr_t start_addr, end_addr;
+
+#if defined(CONFIG_THREAD_STACK_MEM_MAPPED)
+ hdr_stack_obj = (struct z_x86_thread_stack_header *)thread->stack_info.mapped.addr;
+#else
+ hdr_stack_obj = (struct z_x86_thread_stack_header *)thread->stack_obj;
+#endif /* CONFIG_THREAD_STACK_MEM_MAPPED) */
+
+ start_addr = (uintptr_t)&hdr_stack_obj->privilege_stack[0];
+ end_addr = start_addr + sizeof(hdr_stack_obj->privilege_stack);
+
+ coredump_memory_dump(start_addr, end_addr);
+}
+#endif /* CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK */
diff --git a/arch/x86/core/intel64/coredump.c b/arch/x86/core/intel64/coredump.c
index 65a9306ca07..68aa04888ee 100644
--- a/arch/x86/core/intel64/coredump.c
+++ b/arch/x86/core/intel64/coredump.c
@@ -5,6 +5,7 @@
*/
#include
+#include
#include
#define ARCH_HDR_VER 1
@@ -106,3 +107,22 @@ uint16_t arch_coredump_tgt_code_get(void)
{
return COREDUMP_TGT_X86_64;
}
+
+#if defined(CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK)
+void arch_coredump_priv_stack_dump(struct k_thread *thread)
+{
+ struct z_x86_thread_stack_header *hdr_stack_obj;
+ uintptr_t start_addr, end_addr;
+
+#if defined(CONFIG_THREAD_STACK_MEM_MAPPED)
+ hdr_stack_obj = (struct z_x86_thread_stack_header *)thread->stack_info.mapped.addr;
+#else
+ hdr_stack_obj = (struct z_x86_thread_stack_header *)thread->stack_obj;
+#endif /* CONFIG_THREAD_STACK_MEM_MAPPED) */
+
+ start_addr = (uintptr_t)&hdr_stack_obj->privilege_stack[0];
+ end_addr = start_addr + sizeof(hdr_stack_obj->privilege_stack);
+
+ coredump_memory_dump(start_addr, end_addr);
+}
+#endif /* CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK */
diff --git a/arch/x86/core/intel64/irq_offload.c b/arch/x86/core/intel64/irq_offload.c
index 03ae8a9439b..b38dab33ceb 100644
--- a/arch/x86/core/intel64/irq_offload.c
+++ b/arch/x86/core/intel64/irq_offload.c
@@ -18,8 +18,8 @@
extern void (*x86_irq_funcs[NR_IRQ_VECTORS])(const void *arg);
extern const void *x86_irq_args[NR_IRQ_VECTORS];
-static void (*irq_offload_funcs[CONFIG_MP_NUM_CPUS])(const void *arg);
-static const void *irq_offload_args[CONFIG_MP_NUM_CPUS];
+static void (*irq_offload_funcs[CONFIG_MP_MAX_NUM_CPUS])(const void *arg);
+static const void *irq_offload_args[CONFIG_MP_MAX_NUM_CPUS];
static void dispatcher(const void *arg)
{
diff --git a/arch/x86/core/x86_mmu.c b/arch/x86/core/x86_mmu.c
index 566dd2cdfd4..e4188b8670f 100644
--- a/arch/x86/core/x86_mmu.c
+++ b/arch/x86/core/x86_mmu.c
@@ -1281,6 +1281,12 @@ static pentry_t flags_to_entry(uint32_t flags)
entry_flags |= ENTRY_XD;
}
+ if (IS_ENABLED(CONFIG_DEMAND_MAPPING) && (flags & K_MEM_MAP_UNPAGED) != 0U) {
+ /* same state as in arch_mem_page_out() */
+ entry_flags &= ~MMU_P;
+ entry_flags |= MMU_A;
+ }
+
return entry_flags;
}
diff --git a/arch/x86/include/ia32/kernel_arch_func.h b/arch/x86/include/ia32/kernel_arch_func.h
index a0521fca3da..686bc18989b 100644
--- a/arch/x86/include/ia32/kernel_arch_func.h
+++ b/arch/x86/include/ia32/kernel_arch_func.h
@@ -14,13 +14,17 @@
#include /* For size_t */
+#include
+
#ifdef __cplusplus
extern "C" {
#endif
static inline void arch_kernel_init(void)
{
- /* No-op on this arch */
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+ soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
}
static ALWAYS_INLINE void
@@ -33,6 +37,8 @@ arch_thread_return_value_set(struct k_thread *thread, unsigned int value)
extern void arch_cpu_atomic_idle(unsigned int key);
+int arch_swap(unsigned int key);
+
/* ASM code to fiddle with registers to enable the MMU with PAE paging */
void z_x86_enable_paging(void);
diff --git a/arch/x86/include/intel64/kernel_arch_func.h b/arch/x86/include/intel64/kernel_arch_func.h
index abf022fe5fd..da553fd08ac 100644
--- a/arch/x86/include/intel64/kernel_arch_func.h
+++ b/arch/x86/include/intel64/kernel_arch_func.h
@@ -8,6 +8,8 @@
#include
+#include
+
#ifndef _ASMLANGUAGE
extern void z_x86_switch(void *switch_to, void **switched_from);
@@ -27,7 +29,9 @@ extern void z_x86_ipi_setup(void);
static inline void arch_kernel_init(void)
{
- /* nothing */;
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+ soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
}
FUNC_NORETURN void z_x86_cpu_init(struct x86_cpuboot *cpuboot);
diff --git a/arch/x86/intel64.cmake b/arch/x86/intel64.cmake
index fcc075addc2..04e9a256f36 100644
--- a/arch/x86/intel64.cmake
+++ b/arch/x86/intel64.cmake
@@ -2,6 +2,7 @@
# SPDX-License-Identifier: Apache-2.0
zephyr_cc_option(-m64)
+zephyr_cc_option(-mno-red-zone)
set_property(GLOBAL PROPERTY PROPERTY_OUTPUT_ARCH "i386:x86-64")
set_property(GLOBAL PROPERTY PROPERTY_OUTPUT_FORMAT "elf64-x86-64")
diff --git a/arch/xtensa/CMakeLists.txt b/arch/xtensa/CMakeLists.txt
index 21de223d4ec..75885573405 100644
--- a/arch/xtensa/CMakeLists.txt
+++ b/arch/xtensa/CMakeLists.txt
@@ -7,5 +7,5 @@ add_subdirectory(core)
if (CONFIG_XTENSA_INSECURE_USERSPACE)
message(WARNING "
This userspace implementation uses the window ABI this means that the kernel
- will spill registers in behave of the userpsace. Use it carefully.")
+ will spill registers on behalf of the userspace. Use it carefully.")
endif()
diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig
index 8722c879e8b..b69d8bcf02b 100644
--- a/arch/xtensa/Kconfig
+++ b/arch/xtensa/Kconfig
@@ -283,7 +283,7 @@ config XTENSA_SYSCALL_USE_HELPER
default y if "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "xt-clang"
depends on (XTENSA_MMU || XTENSA_MPU) && USERSPACE
help
- Use syscall helpers for passing more then 3 arguments.
+ Use syscall helpers for passing more than 3 arguments.
This is a workaround for toolchains where they have
issue modeling register usage.
diff --git a/arch/xtensa/core/CMakeLists.txt b/arch/xtensa/core/CMakeLists.txt
index d03e3641b42..7d7e260ca0b 100644
--- a/arch/xtensa/core/CMakeLists.txt
+++ b/arch/xtensa/core/CMakeLists.txt
@@ -53,7 +53,7 @@ set(CORE_ISA_DM ${CMAKE_BINARY_DIR}/zephyr/include/generated/zephyr/core-isa-dM.
set(CORE_ISA_IN ${CMAKE_BINARY_DIR}/zephyr/include/generated/core-isa-dM.c)
file(WRITE ${CORE_ISA_IN} "#include \n")
add_custom_command(OUTPUT ${CORE_ISA_DM}
- COMMAND ${CMAKE_C_COMPILER} -E -dM -U__XCC__
+ COMMAND ${CMAKE_C_COMPILER} -E -dM -U__XCC__ ${XTENSA_CORE_LOCAL_C_FLAG}
-I${ZEPHYR_XTENSA_MODULE_DIR}/zephyr/soc/${CONFIG_SOC}
-I${SOC_FULL_DIR}
${CORE_ISA_IN} -o ${CORE_ISA_DM})
diff --git a/arch/xtensa/core/coredump.c b/arch/xtensa/core/coredump.c
index 0ee1f8992a6..8e4b08ee2fa 100644
--- a/arch/xtensa/core/coredump.c
+++ b/arch/xtensa/core/coredump.c
@@ -5,6 +5,7 @@
*/
#include
+#include
#include
#include
#include
@@ -189,3 +190,18 @@ uint16_t arch_coredump_tgt_code_get(void)
{
return COREDUMP_TGT_XTENSA;
}
+
+#if defined(CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK)
+void arch_coredump_priv_stack_dump(struct k_thread *thread)
+{
+ struct xtensa_thread_stack_header *hdr_stack_obj;
+ uintptr_t start_addr, end_addr;
+
+ hdr_stack_obj = (struct xtensa_thread_stack_header *)thread->stack_obj;
+
+ start_addr = (uintptr_t)&hdr_stack_obj->privilege_stack[0];
+ end_addr = start_addr + sizeof(hdr_stack_obj->privilege_stack);
+
+ coredump_memory_dump(start_addr, end_addr);
+}
+#endif /* CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK */
diff --git a/arch/xtensa/core/elf.c b/arch/xtensa/core/elf.c
index e85fab84c69..17337f4a7bc 100644
--- a/arch/xtensa/core/elf.c
+++ b/arch/xtensa/core/elf.c
@@ -6,11 +6,22 @@
#include
#include
+#include
#include
#include
-LOG_MODULE_DECLARE(llext);
+LOG_MODULE_DECLARE(llext, CONFIG_LLEXT_LOG_LEVEL);
+/*
+ * ELF relocation tables on Xtensa contain relocations of different types. They
+ * specify how the relocation should be performed. Which relocations are used
+ * depends on the type of the ELF object (e.g. shared or partially linked
+ * object), structure of the object (single or multiple source files), compiler
+ * flags used (e.g. -fPIC), etc. Also not all relocation table entries should be
+ * acted upon. Some of them describe relocations that have already been
+ * resolved by the linker. We have to distinguish them from actionable
+ * relocations and only need to handle the latter ones.
+ */
#define R_XTENSA_NONE 0
#define R_XTENSA_32 1
#define R_XTENSA_RTLD 2
@@ -18,43 +29,139 @@ LOG_MODULE_DECLARE(llext);
#define R_XTENSA_JMP_SLOT 4
#define R_XTENSA_RELATIVE 5
#define R_XTENSA_PLT 6
+#define R_XTENSA_ASM_EXPAND 11
+#define R_XTENSA_SLOT0_OP 20
+
+static void xtensa_elf_relocate(struct llext_loader *ldr, struct llext *ext,
+ const elf_rela_t *rel, uintptr_t addr,
+ uint8_t *loc, int type, uint32_t stb)
+{
+ elf_word *got_entry = (elf_word *)loc;
+
+ switch (type) {
+ case R_XTENSA_RELATIVE:
+ ;
+ /* Relocate a local symbol: Xtensa specific. Seems to only be used with PIC */
+ unsigned int sh_ndx;
+
+ for (sh_ndx = 0; sh_ndx < ext->sect_cnt; sh_ndx++) {
+ if (ext->sect_hdrs[sh_ndx].sh_addr <= *got_entry &&
+ *got_entry <
+ ext->sect_hdrs[sh_ndx].sh_addr + ext->sect_hdrs[sh_ndx].sh_size)
+ break;
+ }
+
+ if (sh_ndx == ext->sect_cnt) {
+ LOG_ERR("%#x not found in any of the sections", *got_entry);
+ return;
+ }
+
+ *got_entry += (uintptr_t)llext_loaded_sect_ptr(ldr, ext, sh_ndx) -
+ ext->sect_hdrs[sh_ndx].sh_addr;
+ break;
+ case R_XTENSA_GLOB_DAT:
+ case R_XTENSA_JMP_SLOT:
+ if (stb == STB_GLOBAL) {
+ *got_entry = addr;
+ }
+ break;
+ case R_XTENSA_32:
+ /* Used for both LOCAL and GLOBAL bindings */
+ *got_entry += addr;
+ break;
+ case R_XTENSA_SLOT0_OP:
+ /* Apparently only actionable with LOCAL bindings */
+ ;
+ elf_sym_t rsym;
+ int ret = llext_seek(ldr, ldr->sects[LLEXT_MEM_SYMTAB].sh_offset +
+ ELF_R_SYM(rel->r_info) * sizeof(elf_sym_t));
+
+ if (!ret) {
+ ret = llext_read(ldr, &rsym, sizeof(elf_sym_t));
+ }
+ if (ret) {
+ LOG_ERR("Failed to read a symbol table entry, LLEXT linking might fail.");
+ return;
+ }
+
+ /*
+ * So far in all observed use-cases
+ * llext_loaded_sect_ptr(ldr, ext, rsym.st_shndx) was already
+ * available as the "addr" argument of this function, supplied
+ * by arch_elf_relocate_local() from its non-STT_SECTION branch.
+ */
+ uintptr_t link_addr = (uintptr_t)llext_loaded_sect_ptr(ldr, ext, rsym.st_shndx) +
+ rsym.st_value + rel->r_addend;
+ ssize_t value = (link_addr - (((uintptr_t)got_entry + 3) & ~3)) >> 2;
+
+ /* Check the opcode */
+ if ((loc[0] & 0xf) == 1 && !loc[1] && !loc[2]) {
+ /* L32R: low nibble is 1 */
+ loc[1] = value & 0xff;
+ loc[2] = (value >> 8) & 0xff;
+ } else if ((loc[0] & 0xf) == 5 && !(loc[0] & 0xc0) && !loc[1] && !loc[2]) {
+ /* CALLn: low nibble is 5 */
+ loc[0] = (loc[0] & 0x3f) | ((value << 6) & 0xc0);
+ loc[1] = (value >> 2) & 0xff;
+ loc[2] = (value >> 10) & 0xff;
+ } else {
+ LOG_DBG("%p: unhandled OPC or no relocation %02x%02x%02x inf %#x offs %#x",
+ (void *)loc, loc[2], loc[1], loc[0],
+ rel->r_info, rel->r_offset);
+ break;
+ }
+
+ break;
+ case R_XTENSA_ASM_EXPAND:
+ /* Nothing to do */
+ break;
+ default:
+ LOG_DBG("Unsupported relocation type %u", type);
+
+ return;
+ }
+
+ LOG_DBG("Applied relocation to %#x type %u at %p",
+ *(uint32_t *)((uintptr_t)got_entry & ~3), type, (void *)got_entry);
+}
/**
- * @brief Architecture specific function for relocating shared elf
- *
- * Elf files contain a series of relocations described in multiple sections.
- * These relocation instructions are architecture specific and each architecture
- * supporting modules must implement this.
+ * @brief Architecture specific function for STB_LOCAL ELF relocations
*/
-void arch_elf_relocate_local(struct llext_loader *ldr, struct llext *ext,
- const elf_rela_t *rel, const elf_sym_t *sym, size_t got_offset)
+void arch_elf_relocate_local(struct llext_loader *ldr, struct llext *ext, const elf_rela_t *rel,
+ const elf_sym_t *sym, uint8_t *rel_addr,
+ const struct llext_load_param *ldr_parm)
{
- uint8_t *text = ext->mem[LLEXT_MEM_TEXT];
int type = ELF32_R_TYPE(rel->r_info);
- elf_word *got_entry = (elf_word *)(text + got_offset);
uintptr_t sh_addr;
if (ELF_ST_TYPE(sym->st_info) == STT_SECTION) {
- elf_shdr_t *shdr = llext_peek(ldr, ldr->hdr.e_shoff +
- sym->st_shndx * ldr->hdr.e_shentsize);
- sh_addr = shdr->sh_addr ? : (uintptr_t)llext_peek(ldr, shdr->sh_offset);
+ elf_shdr_t *shdr = ext->sect_hdrs + sym->st_shndx;
+
+ /* shdr->sh_addr is NULL when not built for a specific address */
+ sh_addr = shdr->sh_addr &&
+ (!ldr_parm->section_detached || !ldr_parm->section_detached(shdr)) ?
+ shdr->sh_addr : (uintptr_t)llext_loaded_sect_ptr(ldr, ext, sym->st_shndx);
} else {
sh_addr = ldr->sects[LLEXT_MEM_TEXT].sh_addr;
}
- switch (type) {
- case R_XTENSA_RELATIVE:
- /* Relocate a local symbol: Xtensa specific */
- *got_entry += (uintptr_t)text - sh_addr;
- break;
- case R_XTENSA_32:
- *got_entry += sh_addr;
- break;
- default:
- LOG_DBG("unsupported relocation type %u", type);
+ xtensa_elf_relocate(ldr, ext, rel, sh_addr, rel_addr, type, ELF_ST_BIND(sym->st_info));
+}
- return;
+/**
+ * @brief Architecture specific function for STB_GLOBAL ELF relocations
+ */
+void arch_elf_relocate_global(struct llext_loader *ldr, struct llext *ext, const elf_rela_t *rel,
+ const elf_sym_t *sym, uint8_t *rel_addr, const void *link_addr)
+{
+ int type = ELF32_R_TYPE(rel->r_info);
+
+ /* For global relocations we expect the initial value for R_XTENSA_RELATIVE to be zero */
+ if (type == R_XTENSA_RELATIVE && *(elf_word *)rel_addr) {
+ LOG_WRN("global: non-zero relative value %#x", *(elf_word *)rel_addr);
}
- LOG_DBG("relocation to %#x type %u at %p", *got_entry, type, (void *)got_entry);
+ xtensa_elf_relocate(ldr, ext, rel, (uintptr_t)link_addr, rel_addr, type,
+ ELF_ST_BIND(sym->st_info));
}
diff --git a/arch/xtensa/core/prep_c.c b/arch/xtensa/core/prep_c.c
index 990915c5a46..6dbab69f50f 100644
--- a/arch/xtensa/core/prep_c.c
+++ b/arch/xtensa/core/prep_c.c
@@ -13,6 +13,13 @@ extern FUNC_NORETURN void z_cstart(void);
/* defined by the SoC in case of CONFIG_SOC_HAS_RUNTIME_NUM_CPUS=y */
extern void soc_num_cpus_init(void);
+/* Make sure the platform configuration matches what the toolchain
+ * thinks the hardware is doing.
+ */
+#ifdef CONFIG_DCACHE_LINE_SIZE
+BUILD_ASSERT(CONFIG_DCACHE_LINE_SIZE == XCHAL_DCACHE_LINESIZE);
+#endif
+
/**
*
* @brief Prepare to and run C code
diff --git a/arch/xtensa/core/startup/reset_vector.S b/arch/xtensa/core/startup/reset_vector.S
index 31877614ccd..21f4b25e77e 100644
--- a/arch/xtensa/core/startup/reset_vector.S
+++ b/arch/xtensa/core/startup/reset_vector.S
@@ -104,7 +104,7 @@ _ResetHandler:
/* Read PWRSTAT */
movi a2, XDM_MISC_PWRSTAT
/* Save area address - retained for later */
- movi a3, _xtos_pso_savearea
+ movi a3, xthal_pso_savearea
/* Signature for compare - retained for later */
movi a5, CORE_STATE_SIGNATURE
/* PWRSTAT value - retained for later */
@@ -229,7 +229,7 @@ _ResetHandler:
* MEMCTL register was already restored earlier, and as a side
* effect, registers a3, a5, a7 are now preloaded with values
* that we will use here.
- * a3 - pointer to save area base address (_xtos_pso_savearea)
+ * a3 - pointer to save area base address (xthal_pso_savearea)
* a5 - saved state signature (CORE_STATE_SIGNATURE)
* a7 - contents of PWRSTAT register
*/
@@ -343,11 +343,11 @@ _ResetHandler:
/* make shutoff routine return zero */
movi a2, 0
- movi a3, _xtos_pso_savearea
+ movi a3, xthal_pso_savearea
/* Here, as below for _start, call0 is used as an unlimited-range
* jump.
*/
- call0 _xtos_core_restore_nw
+ call0 xthal_core_restore_nw
/* (does not return) */
.Lcoldstart:
#endif
diff --git a/arch/xtensa/core/syscall_helper.c b/arch/xtensa/core/syscall_helper.c
index 24feda91c80..f9673e67814 100644
--- a/arch/xtensa/core/syscall_helper.c
+++ b/arch/xtensa/core/syscall_helper.c
@@ -12,10 +12,10 @@
#include
#ifdef CONFIG_XTENSA_SYSCALL_USE_HELPER
-uintptr_t xtensa_syscall_helper(uintptr_t arg1, uintptr_t arg2,
- uintptr_t arg3, uintptr_t arg4,
- uintptr_t arg5, uintptr_t arg6,
- uintptr_t call_id)
+uintptr_t xtensa_syscall_helper_args_6(uintptr_t arg1, uintptr_t arg2,
+ uintptr_t arg3, uintptr_t arg4,
+ uintptr_t arg5, uintptr_t arg6,
+ uintptr_t call_id)
{
register uintptr_t a2 __asm__("%a2") = call_id;
register uintptr_t a6 __asm__("%a6") = arg1;
@@ -33,6 +33,101 @@ uintptr_t xtensa_syscall_helper(uintptr_t arg1, uintptr_t arg2,
return a2;
}
+
+uintptr_t xtensa_syscall_helper_args_5(uintptr_t arg1, uintptr_t arg2,
+ uintptr_t arg3, uintptr_t arg4,
+ uintptr_t arg5, uintptr_t call_id)
+{
+ register uintptr_t a2 __asm__("%a2") = call_id;
+ register uintptr_t a6 __asm__("%a6") = arg1;
+ register uintptr_t a3 __asm__("%a3") = arg2;
+ register uintptr_t a4 __asm__("%a4") = arg3;
+ register uintptr_t a5 __asm__("%a5") = arg4;
+ register uintptr_t a8 __asm__("%a8") = arg5;
+
+ __asm__ volatile("syscall\n\t"
+ : "=r" (a2)
+ : "r" (a2), "r" (a6), "r" (a3), "r" (a4),
+ "r" (a5), "r" (a8)
+ : "memory");
+
+ return a2;
+}
+
+uintptr_t xtensa_syscall_helper_args_4(uintptr_t arg1, uintptr_t arg2,
+ uintptr_t arg3, uintptr_t arg4,
+ uintptr_t call_id)
+{
+ register uintptr_t a2 __asm__("%a2") = call_id;
+ register uintptr_t a6 __asm__("%a6") = arg1;
+ register uintptr_t a3 __asm__("%a3") = arg2;
+ register uintptr_t a4 __asm__("%a4") = arg3;
+ register uintptr_t a5 __asm__("%a5") = arg4;
+
+ __asm__ volatile("syscall\n\t"
+ : "=r" (a2)
+ : "r" (a2), "r" (a6), "r" (a3), "r" (a4),
+ "r" (a5)
+ : "memory");
+
+ return a2;
+}
+
+uintptr_t xtensa_syscall_helper_args_3(uintptr_t arg1, uintptr_t arg2,
+ uintptr_t arg3, uintptr_t call_id)
+{
+ register uintptr_t a2 __asm__("%a2") = call_id;
+ register uintptr_t a6 __asm__("%a6") = arg1;
+ register uintptr_t a3 __asm__("%a3") = arg2;
+ register uintptr_t a4 __asm__("%a4") = arg3;
+
+ __asm__ volatile("syscall\n\t"
+ : "=r" (a2)
+ : "r" (a2), "r" (a6), "r" (a3), "r" (a4)
+ : "memory");
+
+ return a2;
+}
+
+uintptr_t xtensa_syscall_helper_args_2(uintptr_t arg1, uintptr_t arg2,
+ uintptr_t call_id)
+{
+ register uintptr_t a2 __asm__("%a2") = call_id;
+ register uintptr_t a6 __asm__("%a6") = arg1;
+ register uintptr_t a3 __asm__("%a3") = arg2;
+
+ __asm__ volatile("syscall\n\t"
+ : "=r" (a2)
+ : "r" (a2), "r" (a6), "r" (a3)
+ : "memory");
+
+ return a2;
+}
+
+uintptr_t xtensa_syscall_helper_args_1(uintptr_t arg1, uintptr_t call_id)
+{
+ register uintptr_t a2 __asm__("%a2") = call_id;
+ register uintptr_t a6 __asm__("%a6") = arg1;
+
+ __asm__ volatile("syscall\n\t"
+ : "=r" (a2)
+ : "r" (a2), "r" (a6)
+ : "memory");
+
+ return a2;
+}
+
+uintptr_t xtensa_syscall_helper_args_0(uintptr_t call_id)
+{
+ register uintptr_t a2 __asm__("%a2") = call_id;
+
+ __asm__ volatile("syscall\n\t"
+ : "=r" (a2)
+ : "r" (a2)
+ : "memory");
+
+ return a2;
+}
#endif /* CONFIG_XTENSA_SYSCALL_USE_HELPER */
#if XCHAL_HAVE_THREADPTR == 0
diff --git a/arch/xtensa/core/thread.c b/arch/xtensa/core/thread.c
index f59c8274994..f9b8179173d 100644
--- a/arch/xtensa/core/thread.c
+++ b/arch/xtensa/core/thread.c
@@ -22,7 +22,7 @@ LOG_MODULE_DECLARE(os, CONFIG_KERNEL_LOG_LEVEL);
/*
* Per-thread (TLS) variable indicating whether execution is in user mode.
*/
-__thread uint32_t is_user_mode;
+Z_THREAD_LOCAL uint32_t is_user_mode;
#endif
#endif /* CONFIG_USERSPACE */
diff --git a/arch/xtensa/include/kernel_arch_func.h b/arch/xtensa/include/kernel_arch_func.h
index 4b5bac74ead..5e735dedfff 100644
--- a/arch/xtensa/include/kernel_arch_func.h
+++ b/arch/xtensa/include/kernel_arch_func.h
@@ -14,6 +14,7 @@
#include
#include
#include
+#include
#include
#ifdef __cplusplus
@@ -25,14 +26,16 @@ K_KERNEL_STACK_ARRAY_DECLARE(z_interrupt_stacks, CONFIG_MP_MAX_NUM_CPUS,
static ALWAYS_INLINE void arch_kernel_init(void)
{
-
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+ soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
}
void xtensa_switch(void *switch_to, void **switched_from);
static ALWAYS_INLINE void arch_switch(void *switch_to, void **switched_from)
{
- return xtensa_switch(switch_to, switched_from);
+ xtensa_switch(switch_to, switched_from);
}
#ifdef CONFIG_KERNEL_COHERENCE
diff --git a/boards/01space/esp32c3_042_oled/Kconfig b/boards/01space/esp32c3_042_oled/Kconfig
new file mode 100644
index 00000000000..c6a99b1032d
--- /dev/null
+++ b/boards/01space/esp32c3_042_oled/Kconfig
@@ -0,0 +1,6 @@
+# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd.
+# SPDX-License-Identifier: Apache-2.0
+
+config HEAP_MEM_POOL_ADD_SIZE_BOARD
+ int
+ default 4096
diff --git a/boards/01space/esp32c3_042_oled/Kconfig.defconfig b/boards/01space/esp32c3_042_oled/Kconfig.defconfig
deleted file mode 100644
index 4171bb04bc2..00000000000
--- a/boards/01space/esp32c3_042_oled/Kconfig.defconfig
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright 2022 Google LLC
-# SPDX-License-Identifier: Apache-2.0
-
-config HEAP_MEM_POOL_ADD_SIZE_BOARD
- int
- default 65535 if WIFI && BT
- default 51200 if WIFI
- default 40960 if BT
- default 4096
diff --git a/boards/01space/esp32c3_042_oled/Kconfig.esp32c3_042_oled b/boards/01space/esp32c3_042_oled/Kconfig.esp32c3_042_oled
index 8b0fbf42eab..ca56668cfee 100644
--- a/boards/01space/esp32c3_042_oled/Kconfig.esp32c3_042_oled
+++ b/boards/01space/esp32c3_042_oled/Kconfig.esp32c3_042_oled
@@ -2,4 +2,4 @@
# SPDX-License-Identifier: Apache-2.0
config BOARD_ESP32C3_042_OLED
- select SOC_ESP32C3_FX4
+ select SOC_ESP32C3_FH4
diff --git a/boards/01space/esp32c3_042_oled/doc/index.rst b/boards/01space/esp32c3_042_oled/doc/index.rst
index b8f3cbe7bc9..29fcfc78615 100644
--- a/boards/01space/esp32c3_042_oled/doc/index.rst
+++ b/boards/01space/esp32c3_042_oled/doc/index.rst
@@ -1,7 +1,4 @@
-.. _01space_esp32c3_042_oled:
-
-ESP32C3 0.42 OLED
-#################
+.. zephyr:board:: esp32c3_042_oled
Overview
********
@@ -11,12 +8,6 @@ RISC-V WiFi/Bluetooth dual-mode chip.
For more details see the `01space ESP32C3 0.42 OLED`_ Github repo.
-.. figure:: img/esp32c3_042_oled.webp
- :align: center
- :alt: 01space ESP32C3 0.42 OLED
-
- 01space ESP32C3 0.42 OLED
-
Hardware
********
diff --git a/boards/01space/esp32c3_042_oled/esp32c3_042_oled.dts b/boards/01space/esp32c3_042_oled/esp32c3_042_oled.dts
index c7680c0b152..70f83f398e7 100644
--- a/boards/01space/esp32c3_042_oled/esp32c3_042_oled.dts
+++ b/boards/01space/esp32c3_042_oled/esp32c3_042_oled.dts
@@ -9,12 +9,13 @@
#include
#include "esp32c3_042_oled-pinctrl.dtsi"
+#include
/ {
model = "01space ESP32C3 0.42 OLED";
chosen {
- zephyr,sram = &sram0;
+ zephyr,sram = &sram1;
zephyr,console = &usb_serial;
zephyr,shell-uart = &usb_serial;
zephyr,flash = &flash0;
@@ -104,37 +105,3 @@
&esp32_bt_hci {
status = "okay";
};
-
-&flash0 {
- partitions {
- compatible = "fixed-partitions";
- #address-cells = <1>;
- #size-cells = <1>;
-
- boot_partition: partition@0 {
- label = "mcuboot";
- reg = <0x00000000 0x0000F000>;
- read-only;
- };
-
- slot0_partition: partition@10000 {
- label = "image-0";
- reg = <0x00010000 0x00100000>;
- };
-
- slot1_partition: partition@110000 {
- label = "image-1";
- reg = <0x00110000 0x00100000>;
- };
-
- scratch_partition: partition@210000 {
- label = "image-scratch";
- reg = <0x00210000 0x00040000>;
- };
-
- storage_partition: partition@250000 {
- label = "storage";
- reg = <0x00250000 0x00006000>;
- };
- };
-};
diff --git a/boards/01space/esp32c3_042_oled/esp32c3_042_oled.yaml b/boards/01space/esp32c3_042_oled/esp32c3_042_oled.yaml
index 4f9e9c93778..579094df443 100644
--- a/boards/01space/esp32c3_042_oled/esp32c3_042_oled.yaml
+++ b/boards/01space/esp32c3_042_oled/esp32c3_042_oled.yaml
@@ -11,8 +11,4 @@ supported:
- spi
- uart
- watchdog
-testing:
- ignore_tags:
- - net
- - bluetooth
vendor: 01space
diff --git a/boards/96boards/aerocore2/96b_aerocore2.dts b/boards/96boards/aerocore2/96b_aerocore2.dts
index dd5f8d8a895..028887cef16 100644
--- a/boards/96boards/aerocore2/96b_aerocore2.dts
+++ b/boards/96boards/aerocore2/96b_aerocore2.dts
@@ -179,7 +179,7 @@ zephyr_udc0: &usbotg_fs {
pinctrl-0 = <&adc1_in10_pc0 &adc1_in11_pc1
&adc1_in12_pc2 &adc1_in13_pc3>;
pinctrl-names = "default";
- st,adc-clock-source = ;
+ st,adc-clock-source = "SYNC";
st,adc-prescaler = <2>;
status = "okay";
};
diff --git a/boards/96boards/argonkey/96b_argonkey.dts b/boards/96boards/argonkey/96b_argonkey.dts
index a7c02dcb881..e19b022c26a 100644
--- a/boards/96boards/argonkey/96b_argonkey.dts
+++ b/boards/96boards/argonkey/96b_argonkey.dts
@@ -71,7 +71,9 @@
div-m = <8>;
mul-n = <192>;
div-r = <3>;
- status = "okay";
+ div-q = <4>;
+ clocks = <&clk_hse>;
+ status = "okay"; /* 48MHz on PLLI2SQ */
};
&rcc {
diff --git a/boards/96boards/avenger96/96b_avenger96.yaml b/boards/96boards/avenger96/96b_avenger96.yaml
index 5d50bcd6943..ef14d1b879d 100644
--- a/boards/96boards/avenger96/96b_avenger96.yaml
+++ b/boards/96boards/avenger96/96b_avenger96.yaml
@@ -14,7 +14,6 @@ testing:
- cmsis_rtos_v2
- net
- mpu
- - tinycrypt
- crypto
- aes
- cmm
diff --git a/boards/96boards/carbon/Kconfig.defconfig b/boards/96boards/carbon/Kconfig.defconfig
index 2cf1bbdc6fc..a680c5e19f8 100644
--- a/boards/96boards/carbon/Kconfig.defconfig
+++ b/boards/96boards/carbon/Kconfig.defconfig
@@ -9,21 +9,8 @@ config SPI_STM32_INTERRUPT
default y
depends on SPI
-if BT
-
-config SPI
- default y
-
-config BT_SPI
- default y
-
-endif # BT
-
endif # BOARD_96B_CARBON_STM32F401XE
if BOARD_96B_CARBON_NRF51822
-config BT_CTLR
- default BT
-
endif # BOARD_96B_CARBON_NRF51822
diff --git a/boards/96boards/meerkat96/96b_meerkat96_mcimx7d_m4_defconfig b/boards/96boards/meerkat96/96b_meerkat96_mcimx7d_m4_defconfig
index 90dfb85138a..d421425ca19 100644
--- a/boards/96boards/meerkat96/96b_meerkat96_mcimx7d_m4_defconfig
+++ b/boards/96boards/meerkat96/96b_meerkat96_mcimx7d_m4_defconfig
@@ -12,7 +12,4 @@ CONFIG_UART_INTERRUPT_DRIVEN=y
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
-# pinctrl
-CONFIG_PINCTRL=y
-
CONFIG_XIP=y
diff --git a/boards/96boards/neonkey/doc/index.rst b/boards/96boards/neonkey/doc/index.rst
index df9fb1619c1..b69b94a4712 100644
--- a/boards/96boards/neonkey/doc/index.rst
+++ b/boards/96boards/neonkey/doc/index.rst
@@ -216,6 +216,8 @@ GDB instance. To reattach, just follow the same steps above, till
References
**********
+.. target-notes::
+
.. _96Boards website:
https://www.96boards.org/product/neonkey/
diff --git a/boards/96boards/nitrogen/Kconfig.defconfig b/boards/96boards/nitrogen/Kconfig.defconfig
index c1686a82539..19571eb4ef4 100644
--- a/boards/96boards/nitrogen/Kconfig.defconfig
+++ b/boards/96boards/nitrogen/Kconfig.defconfig
@@ -5,7 +5,4 @@
if BOARD_96B_NITROGEN
-config BT_CTLR
- default BT
-
endif # BOARD_96B_NITROGEN
diff --git a/boards/96boards/stm32_sensor_mez/96b_stm32_sensor_mez.dts b/boards/96boards/stm32_sensor_mez/96b_stm32_sensor_mez.dts
index 80281ae098d..f20a91c6aca 100644
--- a/boards/96boards/stm32_sensor_mez/96b_stm32_sensor_mez.dts
+++ b/boards/96boards/stm32_sensor_mez/96b_stm32_sensor_mez.dts
@@ -75,7 +75,9 @@
div-m = <8>;
mul-n = <192>;
div-r = <3>;
- status = "okay";
+ div-q = <4>;
+ clocks = <&clk_hse>;
+ status = "okay"; /* 48MHz on PLLI2SQ */
};
&rcc {
diff --git a/boards/96boards/wistrio/doc/96b_wistrio.rst b/boards/96boards/wistrio/doc/96b_wistrio.rst
index 8db31fcf6cb..9fe756efe6b 100644
--- a/boards/96boards/wistrio/doc/96b_wistrio.rst
+++ b/boards/96boards/wistrio/doc/96b_wistrio.rst
@@ -189,6 +189,8 @@ GDB instance. To reattach, just follow the same steps above, till
References
**********
+.. target-notes::
+
.. _AN2606:
https://www.st.com/resource/en/application_note/cd00167594.pdf
diff --git a/boards/Kconfig b/boards/Kconfig
index 8f186b32caf..40e8e5006e1 100644
--- a/boards/Kconfig
+++ b/boards/Kconfig
@@ -128,6 +128,20 @@ config QEMU_EXTRA_FLAGS
to setup devices, for example to allocate interface for Zephyr
GDBstub over serial with `-serial tcp:127.0.0.1:5678,server`
+config BOARD_REQUIRES_SERIAL_BACKEND_CDC_ACM
+ bool
+ help
+ Indicates that a board has no other capabilities than to use the CDC
+ ACM UART as a backend for logging or shell.
+
+config BOARD_SERIAL_BACKEND_CDC_ACM
+ bool "Board uses USB CDC ACM UART as serial backend"
+ depends on BOARD_REQUIRES_SERIAL_BACKEND_CDC_ACM
+ default y
+ help
+ USB stack and CDC ACM UART are configured and initialized at boot
+ time to be used as a backend for logging or shell.
+
# There might not be any board options, hence the optional source
osource "$(KCONFIG_BOARD_DIR)/Kconfig"
endmenu
diff --git a/boards/aconno/acn52832/Kconfig.defconfig b/boards/aconno/acn52832/Kconfig.defconfig
index 10c5ce95ed8..57fd066809c 100644
--- a/boards/aconno/acn52832/Kconfig.defconfig
+++ b/boards/aconno/acn52832/Kconfig.defconfig
@@ -5,7 +5,4 @@
if BOARD_ACN52832
-config BT_CTLR
- default BT
-
endif # BOARD_ACN52832
diff --git a/boards/aconno/acn52832/doc/index.rst b/boards/aconno/acn52832/doc/index.rst
index ff0c98cd91a..3e773c91a2a 100644
--- a/boards/aconno/acn52832/doc/index.rst
+++ b/boards/aconno/acn52832/doc/index.rst
@@ -1,7 +1,4 @@
-.. _acn52832:
-
-acn52832
-########
+.. zephyr:board:: acn52832
Overview
********
diff --git a/boards/acrn/acrn/acrn.dts b/boards/acrn/acrn/acrn.dts
index dbd30373e34..8d7376daf70 100644
--- a/boards/acrn/acrn/acrn.dts
+++ b/boards/acrn/acrn/acrn.dts
@@ -46,3 +46,7 @@
status = "okay";
current-speed = <115200>;
};
+
+&cpu {
+ compatible = "intel,x86_64";
+};
diff --git a/boards/acrn/acrn/acrn_defconfig b/boards/acrn/acrn/acrn_defconfig
index 0ec5c2b2564..9a3ce5de7c7 100644
--- a/boards/acrn/acrn/acrn_defconfig
+++ b/boards/acrn/acrn/acrn_defconfig
@@ -13,4 +13,3 @@ CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=25000000
CONFIG_BUILD_OUTPUT_BIN=y
CONFIG_SHELL_BACKEND_SERIAL_INTERRUPT_DRIVEN=n
CONFIG_KERNEL_VM_SIZE=0x1000000
-CONFIG_BUILD_NO_GAP_FILL=y
diff --git a/boards/acrn/acrn/acrn_ehl_crb_defconfig b/boards/acrn/acrn/acrn_ehl_crb_defconfig
index f7b256d2c84..9f81e9975a4 100644
--- a/boards/acrn/acrn/acrn_ehl_crb_defconfig
+++ b/boards/acrn/acrn/acrn_ehl_crb_defconfig
@@ -13,7 +13,6 @@ CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=1900000000
CONFIG_BUILD_OUTPUT_BIN=y
CONFIG_SHELL_BACKEND_SERIAL_INTERRUPT_DRIVEN=n
CONFIG_KERNEL_VM_SIZE=0x1000000
-CONFIG_BUILD_NO_GAP_FILL=y
CONFIG_APIC_TSC_DEADLINE_TIMER=y
CONFIG_APIC_TIMER_IRQ_PRIORITY=1
CONFIG_SMP=y
diff --git a/boards/actinius/icarus/doc/index.rst b/boards/actinius/icarus/doc/index.rst
index 8092c53c8c9..4ac623efe2f 100644
--- a/boards/actinius/icarus/doc/index.rst
+++ b/boards/actinius/icarus/doc/index.rst
@@ -1,17 +1,8 @@
-.. _actinius_icarus:
-
-Actinius Icarus
-###############
+.. zephyr:board:: actinius_icarus
Overview
********
-.. figure:: img/Icarus_front.jpg
- :align: center
- :alt: Icarus IoT Dev Board
-
- Icarus IoT Dev Board (nRF9160 Feather)
-
The Icarus is a cost-effective cellular IoT board in Adafruit's Feather/FeatherWing
form factor. It is built around Nordic Semi's nRF9160 modem and combines
LTE-M, NB-IoT, GPS, accelerometer, USB, LiPo charger as well as
diff --git a/boards/actinius/icarus_bee/doc/index.rst b/boards/actinius/icarus_bee/doc/index.rst
index 630d0aa07c7..32378c92d45 100644
--- a/boards/actinius/icarus_bee/doc/index.rst
+++ b/boards/actinius/icarus_bee/doc/index.rst
@@ -1,17 +1,8 @@
-.. _actinius_icarus_bee:
-
-Actinius Icarus Bee
-###################
+.. zephyr:board:: actinius_icarus_bee
Overview
********
-.. figure:: img/icarus-bee.jpg
- :align: center
- :alt: Icarus Bee
-
- Icarus Bee (nRF9160 Bee)
-
The Icarus Bee is a cellular IoT board in Bee/xBee form factor.
It is built around Nordic Semi's nRF9160 modem and combines
LTE-M, NB-IoT, GPS, accelerometer, SPI Flash, RGB LED, Button,
diff --git a/boards/actinius/icarus_som/doc/index.rst b/boards/actinius/icarus_som/doc/index.rst
index f3206e63fe3..ea4f47a4cf3 100644
--- a/boards/actinius/icarus_som/doc/index.rst
+++ b/boards/actinius/icarus_som/doc/index.rst
@@ -1,17 +1,8 @@
-.. _actinius_icarus_som:
-
-Actinius Icarus SoM
-###################
+.. zephyr:board:: actinius_icarus_som
Overview
********
-.. figure:: img/icarus-som.jpg
- :align: center
- :alt: Icarus SoM
-
- Icarus SoM (nRF9160)
-
The Icarus SoM is a coin-sized, easy-to-solder cellular IoT Module
built around Nordic Semi's nRF9160 modem and combines
LTE-M, NB-IoT, GPS, accelerometer as well as an eSIM and option for
diff --git a/boards/actinius/icarus_som_dk/doc/img/icarus-som-dk.jpg b/boards/actinius/icarus_som_dk/doc/img/icarus_som_dk.jpg
similarity index 100%
rename from boards/actinius/icarus_som_dk/doc/img/icarus-som-dk.jpg
rename to boards/actinius/icarus_som_dk/doc/img/icarus_som_dk.jpg
diff --git a/boards/actinius/icarus_som_dk/doc/img/icarus-som-dk-block-diagram.jpg b/boards/actinius/icarus_som_dk/doc/img/icarus_som_dk_block_diagram.jpg
similarity index 100%
rename from boards/actinius/icarus_som_dk/doc/img/icarus-som-dk-block-diagram.jpg
rename to boards/actinius/icarus_som_dk/doc/img/icarus_som_dk_block_diagram.jpg
diff --git a/boards/actinius/icarus_som_dk/doc/index.rst b/boards/actinius/icarus_som_dk/doc/index.rst
index c0d0a940339..bca73ddbde7 100644
--- a/boards/actinius/icarus_som_dk/doc/index.rst
+++ b/boards/actinius/icarus_som_dk/doc/index.rst
@@ -1,18 +1,8 @@
-.. _actinius_icarus_som_dk:
-
-Actinius Icarus SoM DK
-######################
+.. zephyr:board:: actinius_icarus_som_dk
Overview
********
-.. figure:: img/icarus-som-dk.jpg
- :width: 450px
- :align: center
- :alt: Icarus SoM DK
-
- Icarus SoM Development Kit (nRF9160)
-
The Icarus SoM DK is a single board development kit for
evaluation and development on the Icarus SoM (`Icarus SoM Docs`_).
The Icarus SoM features the nRF9160 SiP from Nordic Semiconductor,
@@ -42,7 +32,7 @@ following devices (provided directly by Nordic):
* :abbr:`WDT (Watchdog Timer)`
* :abbr:`IDAU (Implementation Defined Attribution Unit)`
-.. figure:: img/icarus-som-dk-block-diagram.jpg
+.. figure:: img/icarus_som_dk_block_diagram.jpg
:width: 450px
:align: center
:alt: Icarus SoM DK Block Diagram
diff --git a/boards/adafruit/feather_m0_basic_proto/doc/index.rst b/boards/adafruit/feather_m0_basic_proto/doc/index.rst
index a01fe241d59..20d1cd4750a 100644
--- a/boards/adafruit/feather_m0_basic_proto/doc/index.rst
+++ b/boards/adafruit/feather_m0_basic_proto/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adafruit_feather_m0_basic_proto:
-
-Adafruit Feather M0 Basic Proto
-###############################
+.. zephyr:board:: adafruit_feather_m0_basic_proto
Overview
********
@@ -11,10 +8,6 @@ board with an onboard battery connector and charger for 3.7 V lithium
polymer batteries, charging status indicator and user LEDs, native USB
connector, 20 I/O pins, and a small prototyping area.
-.. image:: img/adafruit_feather_m0_basic_proto.jpg
- :align: center
- :alt: Adafruit Feather M0 Basic Proto
-
Hardware
********
diff --git a/boards/adafruit/feather_m0_lora/doc/index.rst b/boards/adafruit/feather_m0_lora/doc/index.rst
index 92d63b36ce3..7a3e9fc78bf 100644
--- a/boards/adafruit/feather_m0_lora/doc/index.rst
+++ b/boards/adafruit/feather_m0_lora/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adafruit_feather_m0_lora:
-
-Adafruit Feather M0 LoRa
-########################
+.. zephyr:board:: adafruit_feather_m0_lora
Overview
********
@@ -11,10 +8,6 @@ boards with an onboard battery connector and charger for 3.7 V lithium
polymer batteries, charging status indicator and user LEDs, native USB
connector, 20 I/O pins, and a LoRa radio module from Semtech.
-.. image:: img/adafruit_feather_m0_lora.jpg
- :align: center
- :alt: Adafruit Feather M0 LoRa
-
Hardware
********
diff --git a/boards/adafruit/feather_m4_express/Kconfig.adafruit_feather_m4_express b/boards/adafruit/feather_m4_express/Kconfig.adafruit_feather_m4_express
new file mode 100644
index 00000000000..747fade8f4a
--- /dev/null
+++ b/boards/adafruit/feather_m4_express/Kconfig.adafruit_feather_m4_express
@@ -0,0 +1,5 @@
+# Copyright (c) 2024 Daikin Comfort Technologies North America, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+config BOARD_ADAFRUIT_FEATHER_M4_EXPRESS
+ select SOC_SAMD51J19A
diff --git a/boards/adafruit/feather_m4_express/adafruit_feather_m4_express-pinctrl.dtsi b/boards/adafruit/feather_m4_express/adafruit_feather_m4_express-pinctrl.dtsi
new file mode 100644
index 00000000000..a96cf644f40
--- /dev/null
+++ b/boards/adafruit/feather_m4_express/adafruit_feather_m4_express-pinctrl.dtsi
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2022, Gerson Fernando Budke
+ * Copyright (c) 2024 Daikin Comfort Technologies North America, Inc.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include
+
+&pinctrl {
+ sercom1_spi_default: sercom1_spi_default {
+ group1 {
+ pinmux = ,
+ ,
+ ;
+ };
+ };
+
+ sercom2_i2c_default: sercom3_i2c_default {
+ group1 {
+ pinmux = ,
+ ;
+ };
+ };
+
+ sercom5_uart_default: sercom5_uart_default {
+ group1 {
+ pinmux = ,
+ ;
+ };
+ };
+
+ pwm0_default: pwm0_default {
+ group1 {
+ pinmux = ;
+ };
+ };
+
+ tc0_default: tc0_default {
+ group1 {
+ pinmux = ;
+ };
+ };
+
+ usb_dc_default: usb_dc_default {
+ group1 {
+ pinmux = ,
+ ;
+ };
+ };
+};
diff --git a/boards/adafruit/feather_m4_express/adafruit_feather_m4_express.dts b/boards/adafruit/feather_m4_express/adafruit_feather_m4_express.dts
new file mode 100644
index 00000000000..a77a3d2b7ae
--- /dev/null
+++ b/boards/adafruit/feather_m4_express/adafruit_feather_m4_express.dts
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2020 Google LLC.
+ * Copyright (c) 2024 Daikin Comfort Technologies North America, Inc.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/dts-v1/;
+#include
+#include "adafruit_feather_m4_express-pinctrl.dtsi"
+
+/ {
+ model = "Adafruit Feather M4 Express";
+ compatible = "adafruit,feather-m4-express";
+
+ chosen {
+ zephyr,console = &sercom5;
+ zephyr,shell-uart = &sercom5;
+ zephyr,sram = &sram0;
+ zephyr,flash = &flash0;
+ zephyr,code-partition = &code_partition;
+ };
+
+ /* These aliases are provided for compatibility with samples */
+ aliases {
+ led0 = &led0;
+ pwm-0 = &tcc0;
+ pwm-1 = &tc0;
+ };
+
+ leds {
+ compatible = "gpio-leds";
+ led0: led_0 {
+ gpios = <&porta 23 0>;
+ label = "LED";
+ };
+ };
+};
+
+&cpu0 {
+ clock-frequency = <120000000>;
+};
+
+&sercom5 {
+ status = "okay";
+ compatible = "atmel,sam0-uart";
+ current-speed = <115200>;
+ rxpo = <1>;
+ txpo = <0>;
+ pinctrl-0 = <&sercom5_uart_default>;
+ pinctrl-names = "default";
+};
+
+&sercom1 {
+ status = "okay";
+ compatible = "atmel,sam0-spi";
+ dipo = <3>;
+ dopo = <0>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ pinctrl-0 = <&sercom1_spi_default>;
+ pinctrl-names = "default";
+};
+
+&tcc0 {
+ status = "okay";
+ compatible = "atmel,sam0-tcc-pwm";
+ prescaler = <8>;
+ #pwm-cells = <2>;
+ pinctrl-0 = <&pwm0_default>;
+ pinctrl-names = "default";
+};
+
+&tc0 {
+ status = "okay";
+ compatible = "atmel,sam0-tc-pwm";
+ prescaler = <1024>;
+ #pwm-cells = <2>;
+ channels = <2>;
+ counter-size = <16>;
+ pinctrl-0 = <&tc0_default>;
+ pinctrl-names = "default";
+};
+
+zephyr_udc0: &usb0 {
+ status = "okay";
+ pinctrl-0 = <&usb_dc_default>;
+ pinctrl-names = "default";
+};
+
+&dmac {
+ status = "okay";
+};
+
+&flash0 {
+ partitions {
+ compatible = "fixed-partitions";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ boot_partition: partition@0 {
+ label = "uf2";
+ reg = <0x00000000 DT_SIZE_K(16)>;
+ read-only;
+ };
+
+ code_partition: partition@4000 {
+ label = "code";
+ reg = <0x4000 DT_SIZE_K(512-16-16)>;
+ read-only;
+ };
+
+ /*
+ * The final 16 KiB is reserved for the application.
+ * Storage partition will be used by FCB/LittleFS/NVS
+ * if enabled.
+ */
+ storage_partition: partition@7c000 {
+ label = "storage";
+ reg = <0x7c000 DT_SIZE_K(16)>;
+ };
+ };
+};
diff --git a/boards/adafruit/feather_m4_express/adafruit_feather_m4_express.yaml b/boards/adafruit/feather_m4_express/adafruit_feather_m4_express.yaml
new file mode 100644
index 00000000000..a8d50925d9f
--- /dev/null
+++ b/boards/adafruit/feather_m4_express/adafruit_feather_m4_express.yaml
@@ -0,0 +1,20 @@
+identifier: adafruit_feather_m4_express
+name: Adafruit Feather M4 Express
+type: mcu
+arch: arm
+ram: 192
+flash: 512
+toolchain:
+ - zephyr
+ - gnuarmemb
+ - xtools
+supported:
+ - dma
+ - gpio
+ - hwinfo
+ - pwm
+ - spi
+ - uart
+ - usb_device
+ - watchdog
+vendor: adafruit
diff --git a/boards/adafruit/feather_m4_express/adafruit_feather_m4_express_defconfig b/boards/adafruit/feather_m4_express/adafruit_feather_m4_express_defconfig
new file mode 100644
index 00000000000..5cb651c5bb6
--- /dev/null
+++ b/boards/adafruit/feather_m4_express/adafruit_feather_m4_express_defconfig
@@ -0,0 +1,17 @@
+# Copyright (c) 2024 Daikin Comfort Technologies North America, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+CONFIG_SOC_ATMEL_SAMD5X_OSCULP32K_AS_MAIN=y
+
+CONFIG_BOOTLOADER_BOSSA=y
+CONFIG_BOOTLOADER_BOSSA_ADAFRUIT_UF2=y
+CONFIG_BUILD_OUTPUT_HEX=y
+CONFIG_BUILD_OUTPUT_UF2=y
+
+CONFIG_ARM_MPU=y
+CONFIG_HW_STACK_PROTECTION=y
+
+CONFIG_CONSOLE=y
+CONFIG_SERIAL=y
+CONFIG_UART_CONSOLE=y
+CONFIG_UART_INTERRUPT_DRIVEN=y
diff --git a/boards/adafruit/feather_m4_express/board.cmake b/boards/adafruit/feather_m4_express/board.cmake
new file mode 100644
index 00000000000..e240a42f36a
--- /dev/null
+++ b/boards/adafruit/feather_m4_express/board.cmake
@@ -0,0 +1,5 @@
+# Copyright (c) 2020 Google LLC.
+# SPDX-License-Identifier: Apache-2.0
+
+include(${ZEPHYR_BASE}/boards/common/bossac.board.cmake)
+include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)
diff --git a/boards/adafruit/feather_m4_express/board.yml b/boards/adafruit/feather_m4_express/board.yml
new file mode 100644
index 00000000000..5b9961e1f9e
--- /dev/null
+++ b/boards/adafruit/feather_m4_express/board.yml
@@ -0,0 +1,6 @@
+board:
+ name: adafruit_feather_m4_express
+ full_name: Feather M4 Express
+ vendor: adafruit
+ socs:
+ - name: samd51j19a
diff --git a/boards/adafruit/feather_m4_express/doc/img/adafruit_feather_m4_express.webp b/boards/adafruit/feather_m4_express/doc/img/adafruit_feather_m4_express.webp
new file mode 100644
index 00000000000..62ad405f9de
Binary files /dev/null and b/boards/adafruit/feather_m4_express/doc/img/adafruit_feather_m4_express.webp differ
diff --git a/boards/adafruit/feather_m4_express/doc/index.rst b/boards/adafruit/feather_m4_express/doc/index.rst
new file mode 100644
index 00000000000..a4178626eee
--- /dev/null
+++ b/boards/adafruit/feather_m4_express/doc/index.rst
@@ -0,0 +1,201 @@
+.. zephyr:board:: adafruit_feather_m4_express
+
+Overview
+********
+
+The Adafruit Feather M4 Express is a compact, lightweight
+ARM development board with an onboard mini NeoPixel, 2 MiB
+of SPI flash, charging status indicator and user LEDs, USB
+connector, 21 GPIO pins and a small prototyping area.
+
+Hardware
+********
+
+- ATSAMD51J19A ARM Cortex-M4 processor at 120 MHz
+- 512 KiB of flash memory and 192 KiB of RAM
+- 2 MiB of SPI flash
+- Internal trimmed 8 MHz oscillator
+- A user LED
+- An RGB NeoPixel LED
+- Native USB port
+- One reset button
+
+Supported Features
+==================
+
+The ``adafruit_feather_m4_express`` board target supports the following
+hardware features:
+
++-----------+------------+------------------------------------------+
+| Interface | Controller | Driver/Component |
++===========+============+==========================================+
+| SYSTICK | on-chip | systick |
++-----------+------------+------------------------------------------+
+| WDT | on-chip | Watchdog |
++-----------+------------+------------------------------------------+
+| GPIO | on-chip | I/O ports |
++-----------+------------+------------------------------------------+
+| USART | on-chip | Serial ports |
++-----------+------------+------------------------------------------+
+| SPI | on-chip | Serial Peripheral Interface ports |
++-----------+------------+------------------------------------------+
+| TRNG | on-chip | True Random Number Generator |
++-----------+------------+------------------------------------------+
+| HWINFO | on-chip | Unique 128 bit serial number |
++-----------+------------+------------------------------------------+
+| RTC | on-chip | Real-Time Counter |
++-----------+------------+------------------------------------------+
+| USB | on-chip | USB device |
++-----------+------------+------------------------------------------+
+| WDT | on-chip | Watchdog Timer |
++-----------+------------+------------------------------------------+
+| PWM | on-chip | PWM |
++-----------+------------+------------------------------------------+
+
+Other hardware features are not currently supported by Zephyr.
+
+The default configuration can be found in the Kconfig file
+:zephyr_file:`boards/adafruit/feather_m4_express/adafruit_feather_m4_express_defconfig`.
+
+Zephyr can use the default Cortex-M SYSTICK timer or the SAM0 specific RTC.
+To use the RTC, set :code:`CONFIG_CORTEX_M_SYSTICK=n` and set
+:code:`CONFIG_SYS_CLOCK_TICKS_PER_SEC` to no more than 32 kHZ divided by 7,
+i.e. no more than 4500.
+
+Connections and IOs
+===================
+
+The `Adafruit Learning System`_ has detailed information about
+the board including `pinouts`_ and the `schematic`_.
+
+System Clock
+============
+
+The SAMD51 MCU is configured to use the 32 kHz internal oscillator
+with the on-chip PLL generating the 120 MHz system clock.
+
+Serial Port
+===========
+
+The SAMD51 MCU has 6 SERCOM based USARTs. On the Feather, SERCOM5 is
+the Zephyr console and is available on pins 0 (RX) and 1 (TX).
+
+SPI Port
+========
+
+The SAMD51 MCU has 6 SERCOM based SPIs. On the Feather, SERCOM1 can be put
+into SPI mode and used to connect to devices over the SCK (SCLK), MO (MOSI), and
+MI (MISO) pins.
+
+PWM
+===
+
+The SAMD51 has three PWM generators with up to six channels each. :code:`TCC_0`
+has a resolution of 24 bits and all other generators are 16 bit. :code:`TCC_1`
+pin 2 is mapped to PA18 (D7) and pin 3 is mapped to PA19 (D9).
+
+USB Device Port
+===============
+
+The SAMD51 MCU has a USB device port that can be used to communicate
+with a host PC. See the :ref:`usb` sample applications for
+more, such as the :zephyr:code-sample:`usb-cdc-acm` sample which sets up a virtual
+serial port that echos characters back to the host PC.
+
+Programming and Debugging
+*************************
+
+The Feather ships with a the BOSSA compatible UF2 bootloader. The
+bootloader can be entered by quickly tapping the reset button twice.
+
+Additionally, if :kconfig:option:`CONFIG_USB_CDC_ACM` is enabled then the
+bootloader will be entered automatically when you run :code:`west flash`.
+
+Flashing
+========
+
+#. Build the Zephyr kernel and the :zephyr:code-sample:`hello_world` sample application:
+
+ .. zephyr-app-commands::
+ :zephyr-app: samples/hello_world
+ :board: adafruit_feather_m4_express
+ :goals: build
+ :compact:
+
+#. Connect the feather to your host computer using USB
+
+#. Connect a 3.3 V USB to serial adapter to the board and to the
+ host. See the `Serial Port`_ section above for the board's pin
+ connections.
+
+#. Run your favorite terminal program to listen for output. Under Linux the
+ terminal should be :code:`/dev/ttyUSB0`. For example:
+
+ .. code-block:: console
+
+ $ minicom -D /dev/ttyUSB0 -o
+
+ The -o option tells minicom not to send the modem initialization
+ string. Connection should be configured as follows:
+
+ - Speed: 115200
+ - Data: 8 bits
+ - Parity: None
+ - Stop bits: 1
+
+#. Tap the reset button twice quickly to enter bootloader mode
+
+#. Flash the image:
+
+ .. zephyr-app-commands::
+ :zephyr-app: samples/hello_world
+ :board: adafruit_feather_m4_express
+ :goals: flash
+ :compact:
+
+ You should see "Hello World! adafruit_feather_m4_express" in your terminal.
+
+Debugging
+=========
+
+In addition to the built-in bootloader, the Feather can be flashed and
+debugged using a SWD probe such as the Segger J-Link.
+
+#. Connect the board to the probe by connecting the :code:`SWCLK`,
+ :code:`SWDIO`, :code:`RESET`, :code:`GND`, and :code:`3V3` pins on the
+ Feather to the :code:`SWCLK`, :code:`SWDIO`, :code:`RESET`, :code:`GND`,
+ and :code:`VTref` pins on the `J-Link`_.
+
+#. Flash the image:
+
+ .. zephyr-app-commands::
+ :zephyr-app: samples/hello_world
+ :board: adafruit_feather_m4_express
+ :goals: flash
+ :flash-args: -r openocd
+ :compact:
+
+#. Start debugging:
+
+ .. zephyr-app-commands::
+ :zephyr-app: samples/hello_world
+ :board: adafruit_feather_m4_express
+ :goals: debug
+ :compact:
+
+References
+**********
+
+.. target-notes::
+
+.. _Adafruit Learning System:
+ https://learn.adafruit.com/adafruit-feather-m4-express-atsamd51
+
+.. _pinouts:
+ https://learn.adafruit.com/adafruit-feather-m4-express-atsamd51/pinouts
+
+.. _schematic:
+ https://learn.adafruit.com/adafruit-feather-m4-express-atsamd51/downloads
+
+.. _J-Link:
+ https://www.segger.com/products/debug-probes/j-link/technology/interface-description/
diff --git a/boards/adafruit/feather_m4_express/pre_dt_board.cmake b/boards/adafruit/feather_m4_express/pre_dt_board.cmake
new file mode 100644
index 00000000000..9be9a0b9771
--- /dev/null
+++ b/boards/adafruit/feather_m4_express/pre_dt_board.cmake
@@ -0,0 +1,7 @@
+# Copyright (c) 2021 Linaro Limited
+# SPDX-License-Identifier: Apache-2.0
+
+# Suppress "unique_unit_address_if_enabled" to handle the following overlaps:
+# - /soc/pinmux@41004400 & /soc/gpio@41004400
+# - /soc/pinmux@41004480 & /soc/gpio@41004480
+list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled")
diff --git a/boards/adafruit/feather_m4_express/support/openocd.cfg b/boards/adafruit/feather_m4_express/support/openocd.cfg
new file mode 100644
index 00000000000..9990cf9036a
--- /dev/null
+++ b/boards/adafruit/feather_m4_express/support/openocd.cfg
@@ -0,0 +1,21 @@
+source [find interface/jlink.cfg]
+
+transport select swd
+
+set CHIPNAME atsamd51j19a
+source [find target/atsame5x.cfg]
+
+# TODO(http://openocd.zylin.com/#/c/5706/): lower the clock speed to workaround
+# an erase timeout.
+adapter speed 500
+reset_config srst_only
+
+$_TARGETNAME configure -event gdb-attach {
+ echo "Debugger attaching: halting execution"
+ reset halt
+}
+
+$_TARGETNAME configure -event gdb-detach {
+ echo "Debugger detaching: resuming execution"
+ resume
+}
diff --git a/boards/adafruit/feather_nrf52840/Kconfig.defconfig b/boards/adafruit/feather_nrf52840/Kconfig.defconfig
index 5e42fcfb8aa..f6351510d2f 100644
--- a/boards/adafruit/feather_nrf52840/Kconfig.defconfig
+++ b/boards/adafruit/feather_nrf52840/Kconfig.defconfig
@@ -6,7 +6,10 @@
if BOARD_ADAFRUIT_FEATHER_NRF52840
-config BT_CTLR
- default BT
+if BOARD_ADAFRUIT_FEATHER_NRF52840_NRF52840_UF2 || BOARD_ADAFRUIT_FEATHER_NRF52840_NRF52840_SENSE_UF2
+
+source "boards/common/usb/Kconfig.cdc_acm_serial.defconfig"
+
+endif
endif # BOARD_ADAFRUIT_FEATHER_NRF52840
diff --git a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_flash_uf2.dtsi b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_flash_uf2.dtsi
deleted file mode 100644
index 805b853ce31..00000000000
--- a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_flash_uf2.dtsi
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2024 Jacob Winther
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Default flash layout for nrf52840 using UF2
- */
-
-/ {
- chosen {
- zephyr,sram = &sram0;
- zephyr,flash = &flash0;
- zephyr,code-partition = &code_partition;
- };
-};
-
-&flash0 {
- partitions {
- compatible = "fixed-partitions";
- #address-cells = <1>;
- #size-cells = <1>;
-
- /* To enable flashing with UF2 bootloader, we
- * must reserve a partition for SoftDevice.
- * See https://learn.adafruit.com/
- * introducing-the-adafruit-nrf52840-feather?view=all#hathach-memory-map
- */
- reserved_partition_0: partition@0 {
- label = "SoftDevice";
- read-only;
- reg = <0x000000000 DT_SIZE_K(152)>;
- };
- code_partition: partition@26000 {
- label = "Application";
- reg = <0x00026000 DT_SIZE_K(796)>;
- };
-
- /*
- * The flash starting at 0x000ed000 and ending at
- * 0x000f4000 is reserved for use by the application.
- */
- storage_partition: partition@ed000 {
- label = "storage";
- reg = <0x0000ed000 DT_SIZE_K(28)>;
- };
-
- boot_partition: partition@f4000 {
- label = "UF2";
- read-only;
- reg = <0x000f4000 DT_SIZE_K(48)>;
- };
- };
-};
diff --git a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense.yaml b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense.yaml
index 276870f44d3..e4a94b6bb36 100644
--- a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense.yaml
+++ b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense.yaml
@@ -9,7 +9,6 @@ toolchain:
supported:
- adc
- usb_device
- - usb_cdc
- ble
- watchdog
- counter
diff --git a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2.dts b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2.dts
index 0ad7ee1e960..faafb8381fe 100644
--- a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2.dts
+++ b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2.dts
@@ -7,20 +7,13 @@
/dts-v1/;
#include "adafruit_feather_nrf52840_common.dtsi"
-#include "adafruit_feather_nrf52840_flash_uf2.dtsi"
+#include
+#include <../boards/common/usb/cdc_acm_serial.dtsi>
/ {
model = "Adafruit Feather nRF52840 Sense";
compatible = "adafruit,feather-nrf52840-sense-uf2";
- chosen {
- zephyr,console = &cdc_acm_uart0;
- zephyr,shell-uart = &cdc_acm_uart0;
- zephyr,uart-mcumgr = &cdc_acm_uart0;
- zephyr,bt-mon-uart = &cdc_acm_uart0;
- zephyr,bt-c2h-uart = &cdc_acm_uart0;
- };
-
leds {
led0: led_0 {
gpios = <&gpio1 9 0>;
@@ -34,9 +27,3 @@
reg = <0x44>;
};
};
-
-zephyr_udc0: &usbd {
- cdc_acm_uart0: cdc_acm_uart0 {
- compatible = "zephyr,cdc-acm-uart";
- };
-};
diff --git a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2.yaml b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2.yaml
index 08eb1eaa7f1..a5f095b336b 100644
--- a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2.yaml
+++ b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2.yaml
@@ -9,7 +9,6 @@ toolchain:
supported:
- adc
- usb_device
- - usb_cdc
- ble
- watchdog
- counter
diff --git a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2_defconfig b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2_defconfig
index 18c22c337d0..42f7298af55 100644
--- a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2_defconfig
+++ b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2_defconfig
@@ -17,11 +17,5 @@ CONFIG_UART_CONSOLE=y
CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y
CONFIG_CLOCK_CONTROL_NRF_K32SRC_500PPM=y
-# Logger cannot use itself to log
-CONFIG_USB_CDC_ACM_LOG_LEVEL_OFF=y
-
-# Enable USB
-CONFIG_USB_DEVICE_STACK=y
-
# Build UF2 by default, supported by the Adafruit nRF52 Bootloader
CONFIG_BUILD_OUTPUT_UF2=y
diff --git a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_uf2.dts b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_uf2.dts
index 33f2d3e598c..f4c30d6aec0 100644
--- a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_uf2.dts
+++ b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_uf2.dts
@@ -6,29 +6,16 @@
/dts-v1/;
#include "adafruit_feather_nrf52840_common.dtsi"
-#include "adafruit_feather_nrf52840_flash_uf2.dtsi"
+#include
+#include <../boards/common/usb/cdc_acm_serial.dtsi>
/ {
model = "Adafruit Feather nRF52840 Express";
compatible = "adafruit,feather-nrf52840-uf2";
- chosen {
- zephyr,console = &cdc_acm_uart0;
- zephyr,shell-uart = &cdc_acm_uart0;
- zephyr,uart-mcumgr = &cdc_acm_uart0;
- zephyr,bt-mon-uart = &cdc_acm_uart0;
- zephyr,bt-c2h-uart = &cdc_acm_uart0;
- };
-
leds {
led0: led_0 {
gpios = <&gpio1 15 0>;
};
};
};
-
-zephyr_udc0: &usbd {
- cdc_acm_uart0: cdc_acm_uart0 {
- compatible = "zephyr,cdc-acm-uart";
- };
-};
diff --git a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_uf2_defconfig b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_uf2_defconfig
index f6ec2097646..a40094157e3 100644
--- a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_uf2_defconfig
+++ b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_uf2_defconfig
@@ -13,11 +13,5 @@ CONFIG_SERIAL=y
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
-# Logger cannot use itself to log
-CONFIG_USB_CDC_ACM_LOG_LEVEL_OFF=y
-
-# Enable USB
-CONFIG_USB_DEVICE_STACK=y
-
# Build UF2 by default, supported by the Adafruit nRF52 Bootloader
CONFIG_BUILD_OUTPUT_UF2=y
diff --git a/boards/adafruit/feather_nrf52840/doc/index.rst b/boards/adafruit/feather_nrf52840/doc/index.rst
index 7ab630978d4..6f2477e673f 100644
--- a/boards/adafruit/feather_nrf52840/doc/index.rst
+++ b/boards/adafruit/feather_nrf52840/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adafruit_feather_nrf52840:
-
-Adafruit Feather nRF52840 (Express, Sense)
-##########################################
+.. zephyr:board:: adafruit_feather_nrf52840
Overview
********
diff --git a/boards/adafruit/feather_stm32f405/adafruit_feather_stm32f405.yaml b/boards/adafruit/feather_stm32f405/adafruit_feather_stm32f405.yaml
index f71d8d7cab3..858b4fcf6db 100644
--- a/boards/adafruit/feather_stm32f405/adafruit_feather_stm32f405.yaml
+++ b/boards/adafruit/feather_stm32f405/adafruit_feather_stm32f405.yaml
@@ -11,7 +11,6 @@ flash: 1024
supported:
- i2c
- spi
- - usb
- feather_serial
- feather_i2c
- feather_spi
diff --git a/boards/adafruit/feather_stm32f405/doc/index.rst b/boards/adafruit/feather_stm32f405/doc/index.rst
index 47d70537e69..0cc6c327760 100644
--- a/boards/adafruit/feather_stm32f405/doc/index.rst
+++ b/boards/adafruit/feather_stm32f405/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adafruit_feather_stm32f405:
-
-Adafruit Feather STM32F405 Express
-##################################
+.. zephyr:board:: adafruit_feather_stm32f405
Overview
********
@@ -12,10 +9,6 @@ devices labeled as Feathers or FeatherWings. The board is equipped
with a lithium ion battery charger, native USB C connector, 2MB of
external flash memory, and SD card socket.
-.. image:: img/adafruit_feather_stm32f405.jpg
- :align: center
- :alt: Adafruit Feather STM32F405 Express
-
Hardware
********
diff --git a/boards/adafruit/grand_central_m4_express/adafruit_grand_central_m4_express.dts b/boards/adafruit/grand_central_m4_express/adafruit_grand_central_m4_express.dts
index 5cc038332b1..24ffdf89acf 100644
--- a/boards/adafruit/grand_central_m4_express/adafruit_grand_central_m4_express.dts
+++ b/boards/adafruit/grand_central_m4_express/adafruit_grand_central_m4_express.dts
@@ -72,6 +72,7 @@
mmc {
status = "okay";
compatible = "zephyr,sdmmc-disk";
+ disk-name = "SD";
};
};
};
diff --git a/boards/adafruit/grand_central_m4_express/doc/index.rst b/boards/adafruit/grand_central_m4_express/doc/index.rst
index 0244fa73f87..4bab8889967 100644
--- a/boards/adafruit/grand_central_m4_express/doc/index.rst
+++ b/boards/adafruit/grand_central_m4_express/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adafruit_grand_central_m4_express:
-
-Adafruit Grand Central M4 Express
-#################################
+.. zephyr:board:: adafruit_grand_central_m4_express
Overview
********
@@ -10,13 +7,6 @@ The Adafruit Grand Central M4 Express is an ARM development board with the
form factor of an Arduino Mega.
It features 70 GPIO pins, a microSDHC slot and 8MiB of QSPI Flash.
-.. figure:: img/adafruit_grand_central_m4_express.webp
- :width: 800px
- :align: center
- :alt: Adafruit Grand Central M4 Express
-
- Adafruit Grand Central M4 Express (Credit: Kattni Rembor / Adafruit)
-
Hardware
********
diff --git a/boards/adafruit/itsybitsy/Kconfig b/boards/adafruit/itsybitsy/Kconfig
deleted file mode 100644
index 8aa3368ffd6..00000000000
--- a/boards/adafruit/itsybitsy/Kconfig
+++ /dev/null
@@ -1,9 +0,0 @@
-# Adafruit ItsyBitsy nRF52840 Express board configuration
-
-# Copyright (c) 2022 Embla Flatlandsmo
-# SPDX-License-Identifier: Apache-2.0
-
-config BOARD_SERIAL_BACKEND_CDC_ACM
- bool "USB CDC"
- default y
- depends on BOARD_ADAFRUIT_ITSYBITSY
diff --git a/boards/adafruit/itsybitsy/Kconfig.defconfig b/boards/adafruit/itsybitsy/Kconfig.defconfig
index b637497e148..02cbfc35fe2 100644
--- a/boards/adafruit/itsybitsy/Kconfig.defconfig
+++ b/boards/adafruit/itsybitsy/Kconfig.defconfig
@@ -5,49 +5,6 @@
if BOARD_ADAFRUIT_ITSYBITSY
-config BT_CTLR
- default BT
-
-if BOARD_SERIAL_BACKEND_CDC_ACM
-
-config USB_DEVICE_STACK
- default y
-
-config USB_CDC_ACM
- default SERIAL
-
-config UART_CONSOLE
- default CONSOLE
-
-config USB_DEVICE_INITIALIZE_AT_BOOT
- default y if CONSOLE
-
-config SHELL_BACKEND_SERIAL_CHECK_DTR
- default SHELL
- depends on UART_LINE_CTRL
-
-config UART_LINE_CTRL
- default SHELL
-
-config USB_DEVICE_REMOTE_WAKEUP
- default n
-
-if LOG
-
-# Logger cannot use itself to log
-config USB_CDC_ACM_LOG_LEVEL
- default 0
-
-# Set USB log level to error only
-config USB_DEVICE_LOG_LEVEL
- default 1
-
-# Wait 1500ms at startup for logging
-config LOG_PROCESS_THREAD_STARTUP_DELAY_MS
- default 1500
-
-endif # LOG
-
-endif # BOARD_SERIAL_BACKEND_CDC_ACM
+source "boards/common/usb/Kconfig.cdc_acm_serial.defconfig"
endif # BOARD_ADAFRUIT_ITSYBITSY
diff --git a/boards/adafruit/itsybitsy/adafruit_itsybitsy_nrf52840.dts b/boards/adafruit/itsybitsy/adafruit_itsybitsy_nrf52840.dts
index 087ddc17307..a4ff029e93b 100644
--- a/boards/adafruit/itsybitsy/adafruit_itsybitsy_nrf52840.dts
+++ b/boards/adafruit/itsybitsy/adafruit_itsybitsy_nrf52840.dts
@@ -6,6 +6,7 @@
/dts-v1/;
#include
+#include
#include "adafruit_itsybitsy_nrf52840-pinctrl.dtsi"
#include
#include
@@ -15,14 +16,6 @@
compatible = "adafruit,itsybitsy-nrf52840";
chosen {
- zephyr,console = &cdc_acm_uart0;
- zephyr,shell-uart = &cdc_acm_uart0;
- zephyr,uart-mcumgr = &cdc_acm_uart0;
- zephyr,bt-mon-uart = &cdc_acm_uart0;
- zephyr,bt-c2h-uart = &cdc_acm_uart0;
- zephyr,sram = &sram0;
- zephyr,flash = &flash0;
- zephyr,code-partition = &code_partition;
zephyr,ieee802154 = &ieee802154;
};
@@ -142,41 +135,6 @@
status = "okay";
};
-&flash0 {
- partitions {
- compatible = "fixed-partitions";
- #address-cells = <1>;
- #size-cells = <1>;
-
- /* To enable flashing with UF2 bootloader, we
- * must reserve a partition for SoftDevice.
- * See https://learn.adafruit.com/introducing-the-adafruit-nrf52840-feather?view=all#hathach-memory-map
- */
- reserved_partition_0: partition@0 {
- label = "SoftDevice";
- reg = <0x000000000 DT_SIZE_K(152)>;
- };
- code_partition: partition@26000 {
- label = "Application";
- reg = <0x00026000 DT_SIZE_K(796)>;
- };
-
- /*
- * The flash starting at 0x000ed000 and ending at
- * 0x000f4000 is reserved for use by the application.
- */
- storage_partition: partition@ed000 {
- label = "storage";
- reg = <0x0000ed000 DT_SIZE_K(28)>;
- };
-
- boot_partition: partition@f4000 {
- label = "UF2";
- reg = <0x000f4000 DT_SIZE_K(48)>;
- };
- };
-};
-
&gd25q16 {
partitions {
compatible = "fixed-partitions";
@@ -192,8 +150,6 @@
zephyr_udc0: &usbd {
compatible = "nordic,nrf-usbd";
status = "okay";
-
- cdc_acm_uart0: cdc_acm_uart0 {
- compatible = "zephyr,cdc-acm-uart";
- };
};
+
+#include <../boards/common/usb/cdc_acm_serial.dtsi>
diff --git a/boards/adafruit/itsybitsy/doc/index.rst b/boards/adafruit/itsybitsy/doc/index.rst
index c2e4330c04d..3fbcb918adb 100644
--- a/boards/adafruit/itsybitsy/doc/index.rst
+++ b/boards/adafruit/itsybitsy/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adafruit_itsybitsy_nrf52840:
-
-Adafruit ItsyBitsy nRF52840
-###########################
+.. zephyr:board:: adafruit_itsybitsy
Overview
********
@@ -29,10 +26,6 @@ This development kit has the following features:
* :abbr:`USB (Universal Serial Bus)`
* :abbr:`WDT (Watchdog Timer)`
-.. image:: img/adafruit_itsybitsy_nrf52840.jpeg
- :align: center
- :alt: Adafruit ItsyBitsy nRF52840 Express
-
Hardware
********
- nRF52840 ARM Cortex-M4F CPU at 64MHz
diff --git a/boards/adafruit/itsybitsy_m4_express/doc/index.rst b/boards/adafruit/itsybitsy_m4_express/doc/index.rst
index 2ab1f7a5853..31e19cb8a99 100644
--- a/boards/adafruit/itsybitsy_m4_express/doc/index.rst
+++ b/boards/adafruit/itsybitsy_m4_express/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adafruit_itsybitsy_m4_express:
-
-Adafruit ItsyBitsy M4 Express
-#############################
+.. zephyr:board:: adafruit_itsybitsy_m4_express
Overview
********
@@ -10,10 +7,6 @@ The Adafruit ItsyBitsy M4 express is a small (36 mm x 18 mm) ARM development
board with an onboard RGB LED, USB port, 2 MiB of SPI flash, and range of I/O
broken out onto 23 GPIO pins.
-.. image:: img/adafruit_itsybitsy_m4_express.jpg
- :align: center
- :alt: Adafruit ItsyBitsy M4 Express
-
Hardware
********
diff --git a/boards/adafruit/kb2040/Kconfig b/boards/adafruit/kb2040/Kconfig
new file mode 100644
index 00000000000..b17df8fa389
--- /dev/null
+++ b/boards/adafruit/kb2040/Kconfig
@@ -0,0 +1,5 @@
+# Copyright (c) 2022 Peter Johanson
+# SPDX-License-Identifier: Apache-2.0
+
+config BOARD_ADAFRUIT_KB2040
+ select RP2_FLASH_W25Q080
diff --git a/boards/adafruit/kb2040/Kconfig.defconfig b/boards/adafruit/kb2040/Kconfig.defconfig
index e17682abac0..7cf4aec08f0 100644
--- a/boards/adafruit/kb2040/Kconfig.defconfig
+++ b/boards/adafruit/kb2040/Kconfig.defconfig
@@ -3,9 +3,6 @@
if BOARD_ADAFRUIT_KB2040
-config RP2_FLASH_W25Q080
- default y
-
if I2C_DW
config I2C_DW_CLOCK_SPEED
diff --git a/boards/adafruit/kb2040/adafruit_kb2040-pinctrl.dtsi b/boards/adafruit/kb2040/adafruit_kb2040-pinctrl.dtsi
index cf1289acedc..79681bb8ad3 100644
--- a/boards/adafruit/kb2040/adafruit_kb2040-pinctrl.dtsi
+++ b/boards/adafruit/kb2040/adafruit_kb2040-pinctrl.dtsi
@@ -48,9 +48,6 @@
};
};
- clocks_default: clocks_default {
- };
-
ws2812_pio0_default: ws2812_pio0_default {
ws2812 {
pinmux = ;
diff --git a/boards/adafruit/kb2040/adafruit_kb2040.dts b/boards/adafruit/kb2040/adafruit_kb2040.dts
index 45ff45595d2..d7de09cddac 100644
--- a/boards/adafruit/kb2040/adafruit_kb2040.dts
+++ b/boards/adafruit/kb2040/adafruit_kb2040.dts
@@ -7,7 +7,7 @@
/dts-v1/;
-#include
+#include
#include "adafruit_kb2040-pinctrl.dtsi"
#include "sparkfun_pro_micro_connector.dtsi"
#include
@@ -56,11 +56,6 @@
};
};
-&clocks {
- pinctrl-0 = <&clocks_default>;
- pinctrl-names = "default";
-};
-
&uart0 {
current-speed = <115200>;
status = "okay";
@@ -127,3 +122,7 @@ zephyr_udc0: &usbd {
regulator-always-on;
regulator-allowed-modes = ;
};
+
+&xosc {
+ startup-delay-multiplier = <64>;
+};
diff --git a/boards/adafruit/kb2040/doc/index.rst b/boards/adafruit/kb2040/doc/index.rst
index 58b53aec815..f1b5d998dc8 100644
--- a/boards/adafruit/kb2040/doc/index.rst
+++ b/boards/adafruit/kb2040/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adafruit_kb2040:
-
-Adafruit KB2040
-###############
+.. zephyr:board:: adafruit_kb2040
Overview
********
@@ -27,13 +24,6 @@ Hardware
- On-board RGB LED
- 1 Watchdog timer peripheral
-
-.. figure:: img/kb2040.jpg
- :align: center
- :alt: Adafruit KB2040
-
- Adafruit KB2040 (Image courtesy of Adafruit)
-
Supported Features
==================
diff --git a/boards/adafruit/nrf52_adafruit_feather/Kconfig.defconfig b/boards/adafruit/nrf52_adafruit_feather/Kconfig.defconfig
index 48cb9d7332d..b1259e40915 100644
--- a/boards/adafruit/nrf52_adafruit_feather/Kconfig.defconfig
+++ b/boards/adafruit/nrf52_adafruit_feather/Kconfig.defconfig
@@ -5,7 +5,4 @@
if BOARD_NRF52_ADAFRUIT_FEATHER
-config BT_CTLR
- default BT
-
endif # BOARD_NRF52_ADAFRUIT_FEATHER
diff --git a/boards/adafruit/nrf52_adafruit_feather/doc/index.rst b/boards/adafruit/nrf52_adafruit_feather/doc/index.rst
index 1fff89aaeab..c84bc73f62b 100644
--- a/boards/adafruit/nrf52_adafruit_feather/doc/index.rst
+++ b/boards/adafruit/nrf52_adafruit_feather/doc/index.rst
@@ -1,7 +1,4 @@
-.. _nrf52_adafruit_feather:
-
-nRF52 Adafruit Feather
-######################
+.. zephyr:board:: nrf52_adafruit_feather
Overview
********
@@ -18,12 +15,6 @@ the following devices:
* RADIO (Bluetooth Low Energy)
* Segger RTT (RTT Console)
-.. figure:: img/nrf52_adafruit_feather.jpg
- :align: center
- :alt: nRF52 Adafruit Feather Board
-
- nRF52 Adafruit Feather Board (Credit: Adafruit)
-
More information about the board and its features can be found at the
`Adafruit Feather nRF52 Bluefruit Learning Guide`_. The `Nordic Semiconductor Infocenter`_
contains the processor's information and the datasheet.
diff --git a/boards/adafruit/qt_py_esp32s3/Kconfig b/boards/adafruit/qt_py_esp32s3/Kconfig
new file mode 100644
index 00000000000..eff63767823
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/Kconfig
@@ -0,0 +1,6 @@
+# Copyright (c) 2024 Ian Wakely
+
+config HEAP_MEM_POOL_ADD_SIZE_BOARD
+ int
+ default 4096 if BOARD_ADAFRUIT_QT_PY_ESP32S3_ESP32S3_PROCPU
+ default 256 if BOARD_ADAFRUIT_QT_PY_ESP32S3_ESP32S3_APPCPU
diff --git a/boards/adafruit/qt_py_esp32s3/Kconfig.adafruit_qt_py_esp32s3 b/boards/adafruit/qt_py_esp32s3/Kconfig.adafruit_qt_py_esp32s3
new file mode 100644
index 00000000000..9d5e991b572
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/Kconfig.adafruit_qt_py_esp32s3
@@ -0,0 +1,9 @@
+# Adafruit ESP32S3 board configuration
+
+# Copyright (c) 2024 Ian Wakely
+
+config BOARD_ADAFRUIT_QT_PY_ESP32S3
+ select SOC_ESP32S3_WROOM_N8 if "$(BOARD_REVISION)" = ""
+ select SOC_ESP32S3_WROOM_N4R2 if "$(BOARD_REVISION)" = "psram"
+ select SOC_ESP32S3_PROCPU if BOARD_ADAFRUIT_QT_PY_ESP32S3_ESP32S3_PROCPU
+ select SOC_ESP32S3_APPCPU if BOARD_ADAFRUIT_QT_PY_ESP32S3_ESP32S3_APPCPU
diff --git a/boards/adafruit/qt_py_esp32s3/Kconfig.sysbuild b/boards/adafruit/qt_py_esp32s3/Kconfig.sysbuild
new file mode 100644
index 00000000000..3a2d17ac5cf
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/Kconfig.sysbuild
@@ -0,0 +1,10 @@
+# Copyright (c) 2023 Espressif Systems (Shanghai) Co., Ltd.
+# SPDX-License-Identifier: Apache-2.0
+
+choice BOOTLOADER
+ default BOOTLOADER_MCUBOOT
+endchoice
+
+choice BOOT_SIGNATURE_TYPE
+ default BOOT_SIGNATURE_TYPE_NONE
+endchoice
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3-pinctrl.dtsi b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3-pinctrl.dtsi
new file mode 100644
index 00000000000..8c59416d21b
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3-pinctrl.dtsi
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2022 Google LLC
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include
+#include
+#include
+
+&pinctrl {
+ uart0_default: uart0_default {
+ group1 {
+ pinmux = ;
+ output-high;
+ };
+ group2 {
+ pinmux = ;
+ bias-pull-up;
+ };
+ };
+
+ spim2_default: spim2_default {
+ group1 {
+ pinmux = ,
+ ;
+ };
+ group2 {
+ pinmux = ;
+ output-low;
+ };
+ };
+
+ spim3_ws2812_led: spim3_ws2812_led {
+ group1 {
+ pinmux = ;
+ output-low;
+ };
+ };
+
+ i2c0_default: i2c0_default {
+ group1 {
+ pinmux = ,
+ ;
+ bias-pull-up;
+ drive-open-drain;
+ output-high;
+ };
+ };
+
+ i2c1_default: i2c1_default {
+ group1 {
+ pinmux = ,
+ ;
+ bias-pull-up;
+ drive-open-drain;
+ output-high;
+ };
+ };
+
+ twai_default: twai_default {
+ group1 {
+ pinmux = ,
+ ;
+ };
+ };
+};
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu.dts b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu.dts
new file mode 100644
index 00000000000..876a6d78fc6
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu.dts
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2024 Ian Wakely
+ */
+
+/dts-v1/;
+
+#include
+#include "adafruit_qt_py_esp32s3-pinctrl.dtsi"
+#include
+
+/ {
+ model = "Adafruit QT Py ESP32S3 APPCPU";
+ compatible = "espressif,esp32s3";
+
+ chosen {
+ zephyr,sram = &sram1;
+ zephyr,ipc_shm = &shm0;
+ zephyr,ipc = &ipm0;
+ zephyr,flash = &flash0;
+ zephyr,code-partition = &slot0_appcpu_partition;
+ };
+};
+
+&trng0 {
+ status = "okay";
+};
+
+&ipm0 {
+ status = "okay";
+};
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu.yaml b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu.yaml
new file mode 100644
index 00000000000..70b5253574c
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu.yaml
@@ -0,0 +1,27 @@
+identifier: adafruit_qt_py_esp32s3/esp32s3/appcpu
+name: Adafruit QT Py ESP32S3 APPCPU
+type: mcu
+arch: xtensa
+toolchain:
+ - zephyr
+supported:
+ - uart
+testing:
+ ignore_tags:
+ - net
+ - bluetooth
+ - flash
+ - cpp
+ - posix
+ - watchdog
+ - logging
+ - kernel
+ - pm
+ - gpio
+ - crypto
+ - eeprom
+ - heap
+ - cmsis_rtos
+ - jwt
+ - zdsp
+vendor: adafruit
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu_defconfig b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu_defconfig
new file mode 100644
index 00000000000..9abf2ff0430
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu_defconfig
@@ -0,0 +1,4 @@
+# SPDX-License-Identifier: Apache-2.0
+
+CONFIG_MAIN_STACK_SIZE=2048
+CONFIG_CLOCK_CONTROL=y
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu_psram.overlay b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu_psram.overlay
new file mode 100644
index 00000000000..ac1ec4af1b1
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu_psram.overlay
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2024 Ian Wakely
+ */
+
+/delete-node/ &flash0;
+
+/ {
+ model = "Adafruit QT Py ESP32S3 PSRAM APPCPU";
+
+ soc {
+ flash: flash-controller@60002000 {
+ compatible = "espressif,esp32-flash-controller";
+ reg = <0x60002000 0x1000>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ /* 4MB flash */
+ flash0: flash@0 {
+ compatible = "soc-nv-flash";
+ erase-block-size = <4096>;
+ write-block-size = <4>;
+ reg = <0x0 DT_SIZE_M(4)>;
+ };
+ };
+ };
+};
+
+/* 2MB psram */
+&psram0 {
+ reg = <0x3c000000 DT_SIZE_M(2)>;
+ status = "okay";
+};
+
+#include
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu_psram.yaml b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu_psram.yaml
new file mode 100644
index 00000000000..4d3dba70d68
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu_psram.yaml
@@ -0,0 +1,27 @@
+identifier: adafruit_qt_py_esp32s3@psram/esp32s3/appcpu
+name: Adafruit QT Py ESP32S3 PSRAM APPCPU
+type: mcu
+arch: xtensa
+toolchain:
+ - zephyr
+supported:
+ - uart
+testing:
+ ignore_tags:
+ - net
+ - bluetooth
+ - flash
+ - cpp
+ - posix
+ - watchdog
+ - logging
+ - kernel
+ - pm
+ - gpio
+ - crypto
+ - eeprom
+ - heap
+ - cmsis_rtos
+ - jwt
+ - zdsp
+vendor: adafruit
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu.dts b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu.dts
new file mode 100644
index 00000000000..ac757645e5b
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu.dts
@@ -0,0 +1,149 @@
+/*
+ * Copyright (c) 2023 Seeed Studio inc.
+ * Copyright (c) 2024 Ian Wakely
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/dts-v1/;
+
+#include
+#include
+#include
+#include "adafruit_qt_py_esp32s3-pinctrl.dtsi"
+#include "seeed_xiao_connector.dtsi"
+#include
+
+/ {
+ model = "Adafruit QT Py ESP32S3 PROCPU";
+ compatible = "seeed,xiao-esp32s3";
+
+ chosen {
+ zephyr,sram = &sram1;
+ zephyr,console = &usb_serial;
+ zephyr,shell-uart = &usb_serial;
+ zephyr,flash = &flash0;
+ zephyr,code-partition = &slot0_partition;
+ zephyr,bt-hci = &esp32_bt_hci;
+ };
+
+ aliases {
+ i2c-0 = &i2c0;
+ watchdog0 = &wdt0;
+ led-strip = &led_strip;
+ sw0 = &button0;
+ };
+
+ buttons {
+ compatible = "gpio-keys";
+ button0: button_0 {
+ gpios = <&gpio0 0 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
+ label = "User button";
+ zephyr,code = ;
+ };
+ };
+};
+
+&usb_serial {
+ status = "okay";
+};
+
+&uart0 {
+ status = "okay";
+ current-speed = <115200>;
+ pinctrl-0 = <&uart0_default>;
+ pinctrl-names = "default";
+};
+
+&i2c0 {
+ status = "okay";
+ clock-frequency = ;
+ pinctrl-0 = <&i2c0_default>;
+ pinctrl-names = "default";
+};
+
+&i2c1 {
+ status = "okay";
+ clock-frequency = ;
+ pinctrl-0 = <&i2c1_default>;
+ pinctrl-names = "default";
+};
+
+&trng0 {
+ status = "okay";
+};
+
+&spi2 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "okay";
+ pinctrl-0 = <&spim2_default>;
+ pinctrl-names = "default";
+};
+
+&spi3 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "okay";
+ pinctrl-0 = <&spim3_ws2812_led>;
+ pinctrl-names = "default";
+
+ line-idle-low;
+
+ led_strip: ws2812@0 {
+ compatible = "worldsemi,ws2812-spi";
+
+ /* SPI */
+ reg = <0>; /* ignored, but necessary for SPI bindings */
+ spi-max-frequency = <6400000>;
+
+ /* WS2812 */
+ chain-length = <1>;
+ spi-cpha;
+ spi-one-frame = <0xf0>; /* 11110000: 625 ns high and 625 ns low */
+ spi-zero-frame = <0xc0>; /* 11000000: 312.5 ns high and 937.5 ns low */
+ color-mapping = ;
+ };
+};
+
+&gpio0 {
+ status = "okay";
+};
+
+&gpio1 {
+ status = "okay";
+
+ /*
+ * Unlike some of the other Adafruit boards, the neopixel on this board has
+ * its positive side hooked up to a GPIO pin rather than a positive voltage
+ * rail to save on power. This will enable the LED on board initialization.
+ */
+ neopixel-power-enable {
+ gpio-hog;
+ gpios = <6 GPIO_ACTIVE_HIGH>;
+ output-high;
+ };
+};
+
+&wdt0 {
+ status = "okay";
+};
+
+&twai {
+ pinctrl-0 = <&twai_default>;
+ pinctrl-names = "default";
+};
+
+&timer0 {
+ status = "okay";
+};
+
+&timer1 {
+ status = "okay";
+};
+
+&esp32_bt_hci {
+ status = "okay";
+};
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu.yaml b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu.yaml
new file mode 100644
index 00000000000..b3d1cd326eb
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu.yaml
@@ -0,0 +1,19 @@
+identifier: adafruit_qt_py_esp32s3/esp32s3/procpu
+name: Adafruit QT Py ESP32S3 PROCPU
+type: mcu
+arch: xtensa
+toolchain:
+ - zephyr
+supported:
+ - gpio
+ - uart
+ - i2c
+ - i2s
+ - spi
+ - can
+ - counter
+ - watchdog
+ - entropy
+ - pwm
+ - dma
+vendor: adafruit
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu_defconfig b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu_defconfig
new file mode 100644
index 00000000000..6539bd42e59
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu_defconfig
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+
+CONFIG_MAIN_STACK_SIZE=2048
+CONFIG_CONSOLE=y
+CONFIG_SERIAL=y
+CONFIG_UART_CONSOLE=y
+CONFIG_GPIO=y
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu_psram.overlay b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu_psram.overlay
new file mode 100644
index 00000000000..5ab0be63c3f
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu_psram.overlay
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2024 Ian Wakely
+ */
+
+/delete-node/ &flash0;
+
+/ {
+ model = "Adafruit QT Py ESP32S3 PSRAM PROCPU";
+
+ soc {
+ flash: flash-controller@60002000 {
+ compatible = "espressif,esp32-flash-controller";
+ reg = <0x60002000 0x1000>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ /* 4MB flash */
+ flash0: flash@0 {
+ compatible = "soc-nv-flash";
+ erase-block-size = <4096>;
+ write-block-size = <4>;
+ reg = <0x0 DT_SIZE_M(4)>;
+ };
+ };
+ };
+};
+
+/* 2MB psram */
+&psram0 {
+ reg = <0x3c000000 DT_SIZE_M(2)>;
+ status = "okay";
+};
+
+#include
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu_psram.yaml b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu_psram.yaml
new file mode 100644
index 00000000000..37e6a7f15d6
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu_psram.yaml
@@ -0,0 +1,19 @@
+identifier: adafruit_qt_py_esp32s3@psram/esp32s3/procpu
+name: Adafruit QT Py ESP32S3 PSRAM PROCPU
+type: mcu
+arch: xtensa
+toolchain:
+ - zephyr
+supported:
+ - gpio
+ - uart
+ - i2c
+ - i2s
+ - spi
+ - can
+ - counter
+ - watchdog
+ - entropy
+ - pwm
+ - dma
+vendor: adafruit
diff --git a/boards/adafruit/qt_py_esp32s3/board.cmake b/boards/adafruit/qt_py_esp32s3/board.cmake
new file mode 100644
index 00000000000..2f04d1fe886
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/board.cmake
@@ -0,0 +1,9 @@
+# SPDX-License-Identifier: Apache-2.0
+
+if(NOT "${OPENOCD}" MATCHES "^${ESPRESSIF_TOOLCHAIN_PATH}/.*")
+ set(OPENOCD OPENOCD-NOTFOUND)
+endif()
+find_program(OPENOCD openocd PATHS ${ESPRESSIF_TOOLCHAIN_PATH}/openocd-esp32/bin NO_DEFAULT_PATH)
+
+include(${ZEPHYR_BASE}/boards/common/esp32.board.cmake)
+include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)
diff --git a/boards/adafruit/qt_py_esp32s3/board.yml b/boards/adafruit/qt_py_esp32s3/board.yml
new file mode 100644
index 00000000000..c9b26924f8c
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/board.yml
@@ -0,0 +1,12 @@
+board:
+ name: adafruit_qt_py_esp32s3
+ full_name: QT Py ESP32-S3
+ vendor: adafruit
+ socs:
+ - name: esp32s3
+ revision:
+ format: "custom"
+ default: ""
+ revisions:
+ - name: ""
+ - name: "psram"
diff --git a/boards/adafruit/qt_py_esp32s3/doc/img/adafruit_qt_py_esp32s3.webp b/boards/adafruit/qt_py_esp32s3/doc/img/adafruit_qt_py_esp32s3.webp
new file mode 100644
index 00000000000..43637d31a6f
Binary files /dev/null and b/boards/adafruit/qt_py_esp32s3/doc/img/adafruit_qt_py_esp32s3.webp differ
diff --git a/boards/adafruit/qt_py_esp32s3/doc/index.rst b/boards/adafruit/qt_py_esp32s3/doc/index.rst
new file mode 100644
index 00000000000..1c1f6e04eee
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/doc/index.rst
@@ -0,0 +1,291 @@
+.. zephyr:board:: adafruit_qt_py_esp32s3
+
+Overview
+********
+
+An Adafruit based Xiao compatible board based on the ESP32-S3, which is great
+for IoT projects and prototyping with new sensors.
+
+For more details see the `Adafruit QT Py ESP32S3`_ product page.
+
+Hardware
+********
+
+This board comes in 2 variants, both based on the ESP32-S3 with WiFi and BLE
+support. The default variant supporting 8MB of flash with no PSRAM, while the
+``psram`` variant supporting 4MB of flash with 2MB of PSRAM. Both boards have a
+USB-C port for programming and debugging and is based on a standard XIAO 14
+pin pinout.
+
+In addition to the Xiao compatible pinout, it also has a RGB NeoPixel for
+status and debugging, a reset button, and a button for entering the ROM
+bootloader or user input. Like many other Adafruit boards, it has a
+`SparkFun Qwiic`_-compatible `STEMMA QT`_ connector for the I2C bus so you
+don't even need to solder.
+
+ESP32-S3 is a low-power MCU-based system on a chip (SoC) with integrated
+2.4 GHz Wi-Fi and Bluetooth® Low Energy (Bluetooth LE). It consists of
+high-performance dual-core microprocessor (Xtensa® 32-bit LX7), a low power
+coprocessor, a Wi-Fi baseband, a Bluetooth LE baseband, RF module, and
+numerous peripherals.
+
+Supported Features
+==================
+
+Current Zephyr's Adafruit QT Py ESP32-S3 board supports the following features:
+
++------------+------------+-------------------------------------+
+| Interface | Controller | Driver/Component |
++============+============+=====================================+
+| UART | on-chip | serial port |
++------------+------------+-------------------------------------+
+| GPIO | on-chip | gpio |
++------------+------------+-------------------------------------+
+| PINMUX | on-chip | pinmux |
++------------+------------+-------------------------------------+
+| USB-JTAG | on-chip | hardware interface |
++------------+------------+-------------------------------------+
+| SPI Master | on-chip | spi |
++------------+------------+-------------------------------------+
+| I2C | on-chip | i2c |
++------------+------------+-------------------------------------+
+| I2S | on-chip | i2s |
++------------+------------+-------------------------------------+
+| TWAI/CAN | on-chip | can |
++------------+------------+-------------------------------------+
+| ADC | on-chip | adc |
++------------+------------+-------------------------------------+
+| Timers | on-chip | counter |
++------------+------------+-------------------------------------+
+| Watchdog | on-chip | watchdog |
++------------+------------+-------------------------------------+
+| TRNG | on-chip | entropy |
++------------+------------+-------------------------------------+
+| LEDC | on-chip | pwm |
++------------+------------+-------------------------------------+
+| MCPWM | on-chip | pwm |
++------------+------------+-------------------------------------+
+| PCNT | on-chip | qdec |
++------------+------------+-------------------------------------+
+| GDMA | on-chip | dma |
++------------+------------+-------------------------------------+
+| Wi-Fi | on-chip | |
++------------+------------+-------------------------------------+
+| Bluetooth | on-chip | |
++------------+------------+-------------------------------------+
+
+Prerequisites
+-------------
+
+Espressif HAL requires WiFi and Bluetooth binary blobs in order work. Run the
+command below to retrieve those files.
+
+.. code-block:: console
+
+ west blobs fetch hal_espressif
+
+.. note::
+
+ It is recommended running the command above after :file:`west update`.
+
+Building & Flashing
+*******************
+
+Simple boot
+===========
+
+The board could be loaded using the single binary image, without 2nd stage
+bootloader. It is the default option when building the application without
+additional configuration.
+
+.. note::
+
+ Simple boot does not provide any security features nor OTA updates.
+
+MCUboot bootloader
+==================
+
+User may choose to use MCUboot bootloader instead. In that case the bootloader
+must be built (and flashed) at least once.
+
+There are two options to be used when building an application:
+
+1. Sysbuild
+2. Manual build
+
+.. note::
+
+ User can select the MCUboot bootloader by adding the following line
+ to the board default configuration file.
+
+ .. code:: cfg
+
+ CONFIG_BOOTLOADER_MCUBOOT=y
+
+Sysbuild
+========
+
+The sysbuild makes possible to build and flash all necessary images needed to
+bootstrap the board with the ESP32 SoC.
+
+To build the sample application using sysbuild use the command:
+
+.. zephyr-app-commands::
+ :tool: west
+ :zephyr-app: samples/hello_world
+ :board: adafruit_qt_py_esp32s3
+ :goals: build
+ :west-args: --sysbuild
+ :compact:
+
+By default, the ESP32 sysbuild creates bootloader (MCUboot) and application
+images. But it can be configured to create other kind of images.
+
+Build directory structure created by sysbuild is different from traditional
+Zephyr build. Output is structured by the domain subdirectories:
+
+.. code-block::
+
+ build/
+ ├── hello_world
+ │ └── zephyr
+ │ ├── zephyr.elf
+ │ └── zephyr.bin
+ ├── mcuboot
+ │ └── zephyr
+ │ ├── zephyr.elf
+ │ └── zephyr.bin
+ └── domains.yaml
+
+.. note::
+
+ With ``--sysbuild`` option the bootloader will be re-build and re-flash
+ every time the pristine build is used.
+
+For more information about the system build please read the :ref:`sysbuild` documentation.
+
+Manual build
+============
+
+During the development cycle, it is intended to build & flash as quickly possible.
+For that reason, images can be built one at a time using traditional build.
+
+The instructions following are relevant for both manual build and sysbuild.
+The only difference is the structure of the build directory.
+
+.. note::
+
+ Remember that bootloader (MCUboot) needs to be flash at least once.
+
+Build and flash applications as usual (see :ref:`build_an_application` and
+:ref:`application_run` for more details).
+
+.. tabs::
+
+ .. group-tab:: QT Py ESP32S3
+
+ .. zephyr-app-commands::
+ :zephyr-app: samples/hello_world
+ :board: adafruit_qt_py_esp32s3/esp32s3/procpu
+ :goals: build
+
+ .. group-tab:: QT Py ESP32S3 with PSRAM
+
+ .. zephyr-app-commands::
+ :zephyr-app: samples/hello_world
+ :board: adafruit_qt_py_esp32s3@psram/esp32s3/procpu
+ :goals: build
+
+The usual ``flash`` target will work with the ``adafruit_qt_py_esp32s3`` board
+configuration. Here is an example for the :zephyr:code-sample:`hello_world`
+application.
+
+.. tabs::
+
+ .. group-tab:: QT Py ESP32S3
+
+ .. zephyr-app-commands::
+ :zephyr-app: samples/hello_world
+ :board: adafruit_qt_py_esp32s3/esp32s3/procpu
+ :goals: flash
+
+ .. group-tab:: QT Py ESP32S3 with PSRAM
+
+ .. zephyr-app-commands::
+ :zephyr-app: samples/hello_world
+ :board: adafruit_qt_py_esp32s3@psram/esp32s3/procpu
+ :goals: flash
+
+Open the serial monitor using the following command:
+
+.. code-block:: shell
+
+ west espressif monitor
+
+After the board has automatically reset and booted, you should see the following
+message in the monitor:
+
+.. code-block:: console
+
+ ***** Booting Zephyr OS vx.x.x-xxx-gxxxxxxxxxxxx *****
+ Hello World! adafruit_qt_py_esp32s3/esp32s3/procpu
+
+Debugging
+*********
+
+ESP32-S3 support on OpenOCD is available at `OpenOCD ESP32`_.
+
+ESP32-S3 has a built-in JTAG circuitry and can be debugged without any
+additional chip. Only an USB cable connected to the D+/D- pins is necessary.
+
+Further documentation can be obtained from the SoC vendor
+in `JTAG debugging for ESP32-S3`_.
+
+Here is an example for building the :zephyr:code-sample:`hello_world` application.
+
+.. tabs::
+
+ .. group-tab:: QT Py ESP32S3
+
+ .. zephyr-app-commands::
+ :zephyr-app: samples/hello_world
+ :board: adafruit_qt_py_esp32s3/esp32s3/procpu
+ :goals: debug
+
+ .. group-tab:: QT Py ESP32S3 with PSRAM
+
+ .. zephyr-app-commands::
+ :zephyr-app: samples/hello_world
+ :board: adafruit_qt_py_esp32s3@psram/esp32s3/procpu
+ :goals: debug
+
+You can debug an application in the usual way. Here is an example for
+the :zephyr:code-sample:`hello_world` application.
+
+.. tabs::
+
+ .. group-tab:: QT Py ESP32S3
+
+ .. zephyr-app-commands::
+ :zephyr-app: samples/hello_world
+ :board: adafruit_qt_py_esp32s3/esp32s3/procpu
+ :goals: debug
+
+ .. group-tab:: QT Py ESP32S3 with PSRAM
+
+ .. zephyr-app-commands::
+ :zephyr-app: samples/hello_world
+ :board: adafruit_qt_py_esp32s3@psram/esp32s3/procpu
+ :goals: debug
+
+References
+**********
+
+.. target-notes::
+
+.. _`Adafruit QT Py ESP32S3`: https://www.adafruit.com/product/5426
+.. _`Adafruit QT Py ESP32S3 - PSRAM`: https://www.adafruit.com/product/5700
+.. _`JTAG debugging for ESP32-S3`: https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-guides/jtag-debugging/
+.. _`OpenOCD ESP32`: https://github.com/espressif/openocd-esp32/releases
+.. _`SparkFun Qwiic`: https://www.sparkfun.com/qwiic
+.. _`STEMMA QT`: https://learn.adafruit.com/introducing-adafruit-stemma-qt
diff --git a/boards/adafruit/qt_py_esp32s3/revision.cmake b/boards/adafruit/qt_py_esp32s3/revision.cmake
new file mode 100644
index 00000000000..26aeb65f775
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/revision.cmake
@@ -0,0 +1,3 @@
+if(DEFINED BOARD_REVISION AND NOT BOARD_REVISION STREQUAL "psram")
+ message(FATAL_ERROR "Invalid board revision, ${BOARD_REVISION}, valid revisions are: (for non-PSRAM version), psram")
+endif()
diff --git a/boards/adafruit/qt_py_esp32s3/seeed_xiao_connector.dtsi b/boards/adafruit/qt_py_esp32s3/seeed_xiao_connector.dtsi
new file mode 100644
index 00000000000..39880f7c942
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/seeed_xiao_connector.dtsi
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2024 Ian Wakely
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/ {
+ xiao_d: connector {
+ compatible = "seeed,xiao-gpio";
+ #gpio-cells = <2>;
+ gpio-map-mask = <0xffffffff 0xffffffc0>;
+ gpio-map-pass-thru = <0 0x3f>;
+ gpio-map = <0 0 &gpio0 18 0>, /* D0 */
+ <1 0 &gpio0 17 0>, /* D1 */
+ <2 0 &gpio0 9 0>, /* D2 */
+ <3 0 &gpio0 8 0>, /* D3 */
+ <4 0 &gpio0 7 0>, /* D4 */
+ <5 0 &gpio0 6 0>, /* D5 */
+ <6 0 &gpio0 5 0>, /* D6 */
+ <7 0 &gpio0 16 0>, /* D7 */
+ <8 0 &gpio1 4 0>, /* D8 */
+ <9 0 &gpio1 5 0>, /* D9 */
+ <10 0 &gpio1 3 0>; /* D10 */
+ };
+};
+
+xiao_spi: &spi2 {};
+xiao_i2c: &i2c0 {};
+xiao_serial: &uart0 {};
+xiao_adc: &adc0 {};
diff --git a/boards/adafruit/qt_py_esp32s3/support/openocd.cfg b/boards/adafruit/qt_py_esp32s3/support/openocd.cfg
new file mode 100644
index 00000000000..2f740b4a36a
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/support/openocd.cfg
@@ -0,0 +1,7 @@
+set ESP_RTOS none
+set ESP32_ONLYCPU 1
+
+# Source the JTAG interface configuration file
+source [find interface/esp_usb_jtag.cfg]
+# Source the ESP32-S3 configuration file
+source [find target/esp32s3.cfg]
diff --git a/boards/adafruit/qt_py_rp2040/Kconfig b/boards/adafruit/qt_py_rp2040/Kconfig
new file mode 100644
index 00000000000..88483e605c8
--- /dev/null
+++ b/boards/adafruit/qt_py_rp2040/Kconfig
@@ -0,0 +1,5 @@
+# Copyright (c) 2022 Peter Johanson
+# SPDX-License-Identifier: Apache-2.0
+
+config BOARD_ADAFRUIT_QT_PY_RP2040
+ select RP2_FLASH_W25Q080
diff --git a/boards/adafruit/qt_py_rp2040/Kconfig.defconfig b/boards/adafruit/qt_py_rp2040/Kconfig.defconfig
index 22d40318634..09706fc65fd 100644
--- a/boards/adafruit/qt_py_rp2040/Kconfig.defconfig
+++ b/boards/adafruit/qt_py_rp2040/Kconfig.defconfig
@@ -3,9 +3,6 @@
if BOARD_ADAFRUIT_QT_PY_RP2040
-config RP2_FLASH_W25Q080
- default y
-
if I2C_DW
config I2C_DW_CLOCK_SPEED
diff --git a/boards/adafruit/qt_py_rp2040/adafruit_qt_py_rp2040-pinctrl.dtsi b/boards/adafruit/qt_py_rp2040/adafruit_qt_py_rp2040-pinctrl.dtsi
index d2e84ae41f8..561db005e65 100644
--- a/boards/adafruit/qt_py_rp2040/adafruit_qt_py_rp2040-pinctrl.dtsi
+++ b/boards/adafruit/qt_py_rp2040/adafruit_qt_py_rp2040-pinctrl.dtsi
@@ -59,9 +59,6 @@
};
};
- clocks_default: clocks_default {
- };
-
ws2812_pio1_default: ws2812_pio1_default {
ws2812 {
pinmux = ;
diff --git a/boards/adafruit/qt_py_rp2040/adafruit_qt_py_rp2040.dts b/boards/adafruit/qt_py_rp2040/adafruit_qt_py_rp2040.dts
index 0209c1b86cd..3f87e4188b2 100644
--- a/boards/adafruit/qt_py_rp2040/adafruit_qt_py_rp2040.dts
+++ b/boards/adafruit/qt_py_rp2040/adafruit_qt_py_rp2040.dts
@@ -7,7 +7,7 @@
/dts-v1/;
-#include
+#include
#include "adafruit_qt_py_rp2040-pinctrl.dtsi"
#include "seeed_xiao_connector.dtsi"
#include
@@ -56,11 +56,6 @@
};
};
-&clocks {
- pinctrl-0 = <&clocks_default>;
- pinctrl-names = "default";
-};
-
&uart1 {
current-speed = <115200>;
status = "okay";
@@ -157,3 +152,7 @@ zephyr_udc0: &usbd {
regulator-always-on;
regulator-allowed-modes = ;
};
+
+&xosc {
+ startup-delay-multiplier = <64>;
+};
diff --git a/boards/adafruit/qt_py_rp2040/doc/index.rst b/boards/adafruit/qt_py_rp2040/doc/index.rst
index bf081c029b7..0db8b4e4034 100644
--- a/boards/adafruit/qt_py_rp2040/doc/index.rst
+++ b/boards/adafruit/qt_py_rp2040/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adafruit_qt_py_rp2040:
-
-Adafruit QT Py RP2040
-#####################
+.. zephyr:board:: adafruit_qt_py_rp2040
Overview
********
@@ -27,13 +24,6 @@ Hardware
- On-board RGB LED
- 1 Watchdog timer peripheral
-
-.. figure:: img/qtpy_rp2040.jpg
- :align: center
- :alt: Adafruit QT Py RP2040
-
- Adafruit QT Py RP2040 (Image courtesy of Adafruit)
-
Supported Features
==================
diff --git a/boards/adafruit/trinket_m0/doc/index.rst b/boards/adafruit/trinket_m0/doc/index.rst
index 4714f9d1aff..224f9aa4c6d 100644
--- a/boards/adafruit/trinket_m0/doc/index.rst
+++ b/boards/adafruit/trinket_m0/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adafruit_trinket_m0:
-
-Adafruit Trinket M0
-###################
+.. zephyr:board:: adafruit_trinket_m0
Overview
********
@@ -10,10 +7,6 @@ The Adafruit Trinket M0 is a tiny (27 mm x 15 mm) ARM development
board with an onboard RGB LED, USB port, and range of I/O broken out
onto 5 pins.
-.. image:: img/adafruit_trinket_m0.jpg
- :align: center
- :alt: Adafruit Trinket M0
-
Hardware
********
diff --git a/boards/adi/apard32690/apard32690_max32690_m4.dts b/boards/adi/apard32690/apard32690_max32690_m4.dts
index 793a717442b..4de11b92848 100644
--- a/boards/adi/apard32690/apard32690_max32690_m4.dts
+++ b/boards/adi/apard32690/apard32690_max32690_m4.dts
@@ -53,6 +53,35 @@
led2 = &green_led;
sw0 = &usr_btn;
};
+
+ arduino_header: connector {
+ compatible = "arduino-header-r3";
+ #gpio-cells = <2>;
+ gpio-map-mask = <0xffffffff 0xffffffc0>;
+ gpio-map-pass-thru = <0 0x3f>;
+ gpio-map = <0 0 &gpio3 0 0>, /* A0 */
+ <1 0 &gpio3 1 0>, /* A1 */
+ <2 0 &gpio3 2 0>, /* A2 */
+ <3 0 &gpio3 3 0>, /* A3 */
+ <4 0 &gpio3 4 0>, /* A4 */
+ <5 0 &gpio3 5 0>, /* A5 */
+ <6 0 &gpio2 14 0>, /* D0 */
+ <7 0 &gpio2 16 0>, /* D1 */
+ <8 0 &gpio2 13 0>, /* D2 */
+ <9 0 &gpio2 15 0>, /* D3 */
+ <10 0 &gpio0 8 0>, /* D4 */
+ <11 0 &gpio0 7 0>, /* D5 */
+ <12 0 &gpio1 24 0>, /* D6 */
+ <13 0 &gpio1 25 0>, /* D7 */
+ <14 0 &gpio1 31 0>, /* D8 */
+ <15 0 &gpio1 30 0>, /* D9 */
+ <16 0 &gpio1 23 0>, /* D10 */
+ <17 0 &gpio1 29 0>, /* D11 */
+ <18 0 &gpio1 28 0>, /* D12 */
+ <19 0 &gpio1 26 0>, /* D13 */
+ <20 0 &gpio2 17 0>, /* D14 */
+ <21 0 &gpio2 18 0>; /* D15 */
+ };
};
&clk_ipo {
@@ -104,6 +133,22 @@ arduino_serial: &uart1 {
current-speed = <115200>;
};
+&spi1a_miso_p1_28 {
+ power-source = ;
+};
+
+&spi1a_mosi_p1_29 {
+ power-source = ;
+};
+
+&spi1a_sck_p1_26 {
+ power-source = ;
+};
+
+&spi1a_ss0_p1_23 {
+ power-source = ;
+};
+
arduino_spi: &spi1 {
pinctrl-0 = <&spi1a_miso_p1_28 &spi1a_mosi_p1_29 &spi1a_sck_p1_26
&spi1a_ss0_p1_23>;
@@ -177,3 +222,8 @@ pmod_spi: &spi4 {
};
};
};
+
+&w1 {
+ pinctrl-0 = <&owm_io_p0_8 &owm_pe_p0_7>;
+ pinctrl-names = "default";
+};
diff --git a/boards/adi/apard32690/apard32690_max32690_m4.yaml b/boards/adi/apard32690/apard32690_max32690_m4.yaml
index f3f842b66b2..bc040f86855 100644
--- a/boards/adi/apard32690/apard32690_max32690_m4.yaml
+++ b/boards/adi/apard32690/apard32690_max32690_m4.yaml
@@ -8,6 +8,7 @@ toolchain:
- gnuarmemb
- xtools
supported:
+ - arduino_gpio
- arduino_serial
- arduino_spi
- pmod_spi
@@ -16,5 +17,6 @@ supported:
- spi
- trng
- counter
+ - w1
ram: 1024
flash: 3072
diff --git a/boards/adi/apard32690/doc/index.rst b/boards/adi/apard32690/doc/index.rst
index 192f0bba814..8223f2b88e9 100644
--- a/boards/adi/apard32690/doc/index.rst
+++ b/boards/adi/apard32690/doc/index.rst
@@ -1,7 +1,4 @@
-.. _ad_apard32690_sl:
-
-AD-APARD32690-SL
-################
+.. zephyr:board:: apard32690
Overview
********
@@ -19,10 +16,6 @@ the required power circuitry.
The Zephyr port is running on the MAX32690 MCU.
-.. image:: img/apard32690_img.webp
- :align: center
- :alt: AD-APARD32690-SL Front
-
Hardware
********
@@ -117,6 +110,8 @@ Below interfaces are supported by Zephyr on APARD32690.
+-----------+------------+------------------------------------+
| Timer | on-chip | counter |
+-----------+------------+------------------------------------+
+| W1 | on-chip | one wire master |
++-----------+------------+------------------------------------+
Connections and IOs
diff --git a/boards/adi/eval_adin1110ebz/doc/index.rst b/boards/adi/eval_adin1110ebz/doc/index.rst
index f39a04b7362..4f38e78faf0 100644
--- a/boards/adi/eval_adin1110ebz/doc/index.rst
+++ b/boards/adi/eval_adin1110ebz/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adi_eval_adin1110ebz:
-
-ADI EVAL-ADIN1110EVB Evaluation board
-#####################################
+.. zephyr:board:: adi_eval_adin1110ebz
Overview
********
@@ -23,12 +20,6 @@ The SPI interface provides configuration and data access to the ADIN1110.
A small prototyping area and test points are provided for experimentation with alternative cable
connection topologies including isolation transformers and/or power coupling inductors.
-.. figure:: img/adi_eval_adin1110ebz.webp
- :align: center
- :alt: ADI EVAL-ADIN1110EBZ
-
- ADI EVAL-ADIN1110EBZ (Credit: Analog Devices, Inc.)
-
.. important::
S201 DIP switches are shipped in Open Alliance SPI mode. The current Zephyr
diff --git a/boards/adi/eval_adin2111ebz/doc/index.rst b/boards/adi/eval_adin2111ebz/doc/index.rst
index ea0ce92be2a..7579c85b0cd 100644
--- a/boards/adi/eval_adin2111ebz/doc/index.rst
+++ b/boards/adi/eval_adin2111ebz/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adi_eval_adin2111ebz:
-
-ADI EVAL-ADIN2111EVB Evaluation board
-#####################################
+.. zephyr:board:: adi_eval_adin2111ebz
Overview
********
@@ -38,12 +35,6 @@ the 2 PHYs configuration and data exchange between SPI host and ports.
so the S1 DIP switches must be set as ``SPI_CFG0 OFF and SPI_CFG1 OFF``.
An inconsistent S1 DIP switches configuration will halt the boot.
-.. figure:: img/adi_eval_adin2111ebz.webp
- :align: center
- :alt: ADI EVAL-ADIN2111EBZ
-
- ADI EVAL-ADIN2111EBZ (Credit: Analog Devices, Inc.)
-
Hardware
********
diff --git a/boards/adi/max32655evkit/doc/index.rst b/boards/adi/max32655evkit/doc/index.rst
index d052dba938a..649df3bde37 100644
--- a/boards/adi/max32655evkit/doc/index.rst
+++ b/boards/adi/max32655evkit/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32655_evkit:
-
-MAX32655EVKIT
-#############
+.. zephyr:board:: max32655evkit
Overview
********
@@ -101,6 +98,12 @@ Below are the interfaces supported by Zephyr on MAX32655EVKIT.
+-----------+------------+-------------------------------------+
| Timer | on-chip | counter |
+-----------+------------+-------------------------------------+
+| PWM | on-chip | pwm |
++-----------+------------+-------------------------------------+
+| W1 | on-chip | one wire master |
++-----------+------------+-------------------------------------+
+| Flash | on-chip | flash |
++-----------+------------+-------------------------------------+
Connections and IOs
===================
diff --git a/boards/adi/max32655evkit/max32655evkit_max32655_m4.dts b/boards/adi/max32655evkit/max32655evkit_max32655_m4.dts
index eea6c9e6ab4..a14953606ea 100644
--- a/boards/adi/max32655evkit/max32655evkit_max32655_m4.dts
+++ b/boards/adi/max32655evkit/max32655evkit_max32655_m4.dts
@@ -78,6 +78,13 @@
status = "okay";
};
+/*
+ * ERTCO is required for counter RTC
+ */
+&clk_ertco {
+ status = "okay";
+};
+
&gpio0 {
status = "okay";
};
@@ -117,3 +124,12 @@
pinctrl-0 = <&spi0_mosi_p0_5 &spi0_miso_p0_6 &spi0_sck_p0_7 &spi0_ss0_p0_4>;
pinctrl-names = "default";
};
+
+&w1 {
+ pinctrl-0 = <&owm_io_p0_6 &owm_pe_p0_7>;
+ pinctrl-names = "default";
+};
+
+&rtc_counter {
+ status = "okay";
+};
diff --git a/boards/adi/max32655evkit/max32655evkit_max32655_m4.yaml b/boards/adi/max32655evkit/max32655evkit_max32655_m4.yaml
index 0a870489a22..f3a7fac43ba 100644
--- a/boards/adi/max32655evkit/max32655evkit_max32655_m4.yaml
+++ b/boards/adi/max32655evkit/max32655evkit_max32655_m4.yaml
@@ -17,5 +17,9 @@ supported:
- spi
- adc
- counter
+ - rtc_counter
+ - pwm
+ - w1
+ - flash
ram: 128
flash: 512
diff --git a/boards/adi/max32655fthr/doc/index.rst b/boards/adi/max32655fthr/doc/index.rst
index 3c9efcfb675..839365066cc 100644
--- a/boards/adi/max32655fthr/doc/index.rst
+++ b/boards/adi/max32655fthr/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32655_fthr:
-
-MAX32655FTHR
-############
+.. zephyr:board:: max32655fthr
Overview
********
@@ -114,6 +111,10 @@ Below are the interfaces supported by Zephyr on MAX32655FTHR.
+-----------+------------+-------------------------------------+
| Timer | on-chip | counter |
+-----------+------------+-------------------------------------+
+| PWM | on-chip | pwm |
++-----------+------------+-------------------------------------+
+| Flash | on-chip | flash |
++-----------+------------+-------------------------------------+
Push Buttons
************
diff --git a/boards/adi/max32655fthr/max32655fthr_max32655_m4.dts b/boards/adi/max32655fthr/max32655fthr_max32655_m4.dts
index f5df5e5260a..2f82dc09022 100644
--- a/boards/adi/max32655fthr/max32655fthr_max32655_m4.dts
+++ b/boards/adi/max32655fthr/max32655fthr_max32655_m4.dts
@@ -112,6 +112,13 @@
status = "okay";
};
+/*
+ * ERTCO is required for counter RTC
+ */
+&clk_ertco {
+ status = "okay";
+};
+
&gpio0 {
status = "okay";
};
@@ -151,3 +158,7 @@
pinctrl-0 = <&spi1_mosi_p0_21 &spi1_miso_p0_22 &spi1_sck_p0_23 &spi1_ss0_p0_20>;
pinctrl-names = "default";
};
+
+&rtc_counter {
+ status = "okay";
+};
diff --git a/boards/adi/max32655fthr/max32655fthr_max32655_m4.yaml b/boards/adi/max32655fthr/max32655fthr_max32655_m4.yaml
index e361e18e24f..37c8b01e02e 100644
--- a/boards/adi/max32655fthr/max32655fthr_max32655_m4.yaml
+++ b/boards/adi/max32655fthr/max32655fthr_max32655_m4.yaml
@@ -17,5 +17,8 @@ supported:
- spi
- adc
- counter
+ - rtc_counter
+ - pwm
+ - flash
ram: 128
flash: 512
diff --git a/boards/adi/max32662evkit/Kconfig.defconfig b/boards/adi/max32662evkit/Kconfig.defconfig
new file mode 100644
index 00000000000..415360cc1eb
--- /dev/null
+++ b/boards/adi/max32662evkit/Kconfig.defconfig
@@ -0,0 +1,29 @@
+# MAX32662EVKIT boards configuration
+
+# Copyright (c) 2024 Analog Devices, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+if BOARD_MAX32662EVKIT
+
+if DISPLAY
+
+config MIPI_DBI_SPI_3WIRE
+ default y
+
+if LVGL
+
+config LV_Z_BITS_PER_PIXEL
+ default 16
+
+choice LV_COLOR_DEPTH
+ default LV_COLOR_DEPTH_16 # 16 bit per pixel
+endchoice
+
+configdefault LV_COLOR_16_SWAP
+ default y
+
+endif # LVGL
+
+endif # DISPLAY
+
+endif # BOARD_MAX32662EVKIT
diff --git a/boards/adi/max32662evkit/doc/index.rst b/boards/adi/max32662evkit/doc/index.rst
index 64718015706..b343fb6ed99 100644
--- a/boards/adi/max32662evkit/doc/index.rst
+++ b/boards/adi/max32662evkit/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32662_evkit:
-
-MAX32662EVKIT
-#############
+.. zephyr:board:: max32662evkit
Overview
********
@@ -12,10 +9,6 @@ for battery-powered edge devices.
The Zephyr port is running on the MAX32662 MCU.
-.. image:: img/max32662evkit.webp
- :align: center
- :alt: MAX32662EVKIT
-
Hardware
********
@@ -111,6 +104,10 @@ Below interfaces are supported by Zephyr on MAX32662EVKIT.
+-----------+------------+-------------------------------------+
| Timer | on-chip | counter |
+-----------+------------+-------------------------------------+
+| PWM | on-chip | pwm |
++-----------+------------+-------------------------------------+
+| Flash | on-chip | flash |
++-----------+------------+-------------------------------------+
Connections and IOs
===================
diff --git a/boards/adi/max32662evkit/max32662evkit.dts b/boards/adi/max32662evkit/max32662evkit.dts
index e458a8d6904..5f204b91bef 100644
--- a/boards/adi/max32662evkit/max32662evkit.dts
+++ b/boards/adi/max32662evkit/max32662evkit.dts
@@ -11,6 +11,7 @@
#include
#include
#include
+#include
/ {
model = "Analog Devices MAX32662EVKIT";
@@ -21,6 +22,7 @@
zephyr,shell-uart = &uart0;
zephyr,sram = &sram2;
zephyr,flash = &flash0;
+ zephyr,display = &st7735;
};
leds {
@@ -47,6 +49,40 @@
sw0 = &pb1;
watchdog0 = &wdt0;
};
+
+ mipi_dbi {
+ compatible = "zephyr,mipi-dbi-spi";
+ spi-dev = <&spi1>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ status = "okay";
+
+ st7735: st7735@0 {
+ compatible = "sitronix,st7735r";
+ mipi-max-frequency = ;
+ mipi-mode = "MIPI_DBI_MODE_SPI_3WIRE";
+
+ reg = <0>;
+ width = <130>;
+ height = <132>;
+ x-offset = <0>;
+ y-offset = <0>;
+ madctl = <0xc0>;
+ colmod = <0x05>;
+ vmctr1 = <0x51>;
+ pwctr1 = [02 02];
+ pwctr2 = [c5];
+ pwctr3 = [0d 00];
+ pwctr4 = [8d 1a];
+ pwctr5 = [8d ee];
+ frmctr1 = [02 35 36];
+ frmctr2 = [02 35 36];
+ frmctr3 = [02 35 36 02 35 36];
+ gamctrp1 = [0a 1c 0c 14 33 2b 24 28 27 25 2c 39 00 05 03 0d];
+ gamctrn1 = [0a 1c 0c 14 33 2b 24 28 27 25 2d 3a 00 05 03 0d];
+ };
+ };
};
&uart0 {
@@ -66,6 +102,13 @@
status = "okay";
};
+/*
+ * ERTCO is required for counter RTC
+ */
+&clk_ertco {
+ status = "okay";
+};
+
&gpio0 {
status = "okay";
};
@@ -84,8 +127,27 @@
status = "okay";
};
+&rtc_counter {
+ status = "okay";
+};
+
&spi0 {
status = "okay";
pinctrl-0 = <&spi0a_copi_p0_3 &spi0a_cito_p0_2 &spi0a_sck_p0_4 &spi0a_ts0_p0_5>;
pinctrl-names = "default";
};
+
+&spi1a_mosi_p0_8 {
+ power-source=;
+};
+
+&spi1a_sck_p0_17 {
+ power-source=;
+};
+
+&spi1 {
+ status = "okay";
+ pinctrl-0 = <&spi1a_mosi_p0_8 &spi1a_sck_p0_17>;
+ pinctrl-names = "default";
+ cs-gpios = <&gpio0 18 (GPIO_ACTIVE_LOW | MAX32_VSEL_VDDIOH)>;
+};
diff --git a/boards/adi/max32662evkit/max32662evkit.yaml b/boards/adi/max32662evkit/max32662evkit.yaml
index f4577c7bcab..eebab96b676 100644
--- a/boards/adi/max32662evkit/max32662evkit.yaml
+++ b/boards/adi/max32662evkit/max32662evkit.yaml
@@ -17,5 +17,8 @@ supported:
- spi
- adc
- counter
+ - rtc_counter
+ - pwm
+ - flash
ram: 80
flash: 256
diff --git a/boards/adi/max32666evkit/doc/index.rst b/boards/adi/max32666evkit/doc/index.rst
index 528a8026ca1..f71b1a69bb6 100644
--- a/boards/adi/max32666evkit/doc/index.rst
+++ b/boards/adi/max32666evkit/doc/index.rst
@@ -1,21 +1,12 @@
-.. _max32666evkit:
-
-MAX32666EVKIT
-#############
+.. zephyr:board:: max32666evkit
Overview
********
The MAX32666EVKIT provides a platform for evaluating the capabilities of the MAX32665 and MAX32666
high-efficiency Arm® microcontrollers and audio DSP for wearable and hearable device applications.
-
The Zephyr port is running on the MAX32666 MCU.
-.. image:: img/max32666evkit.webp
- :align: center
- :alt: MAX32666EVKIT Front
-
-
Hardware
********
@@ -122,6 +113,12 @@ Below interfaces are supported by Zephyr on MAX32666EVKIT.
+-----------+------------+-------------------------------------+
| Timer | on-chip | counter |
+-----------+------------+-------------------------------------+
+| PWM | on-chip | pwm |
++-----------+------------+-------------------------------------+
+| W1 | on-chip | one wire master |
++-----------+------------+-------------------------------------+
+| Flash | on-chip | flash |
++-----------+------------+-------------------------------------+
Connections and IOs
diff --git a/boards/adi/max32666evkit/max32666evkit_max32666_cpu0.dts b/boards/adi/max32666evkit/max32666evkit_max32666_cpu0.dts
index a87658da4e8..a04fcd6a4e8 100644
--- a/boards/adi/max32666evkit/max32666evkit_max32666_cpu0.dts
+++ b/boards/adi/max32666evkit/max32666evkit_max32666_cpu0.dts
@@ -105,3 +105,12 @@
&wdt0 {
status = "okay";
};
+
+&w1 {
+ pinctrl-0 = <&owm_io_p0_4 &owm_pe_p0_5>;
+ pinctrl-names = "default";
+};
+
+&rtc_counter {
+ status = "okay";
+};
diff --git a/boards/adi/max32666evkit/max32666evkit_max32666_cpu0.yaml b/boards/adi/max32666evkit/max32666evkit_max32666_cpu0.yaml
index 45320dd7307..7d5f8699970 100644
--- a/boards/adi/max32666evkit/max32666evkit_max32666_cpu0.yaml
+++ b/boards/adi/max32666evkit/max32666evkit_max32666_cpu0.yaml
@@ -16,5 +16,9 @@ supported:
- watchdog
- adc
- counter
+ - rtc_counter
+ - pwm
+ - w1
+ - flash
ram: 560
flash: 1024
diff --git a/boards/adi/max32666fthr/doc/index.rst b/boards/adi/max32666fthr/doc/index.rst
index df762d373f5..1cd8a999de1 100644
--- a/boards/adi/max32666fthr/doc/index.rst
+++ b/boards/adi/max32666fthr/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32666_fthr:
-
-MAX32666FTHR
-############
+.. zephyr:board:: max32666fthr
Overview
********
@@ -21,7 +18,7 @@ The Zephyr port is running on the MAX32666 MCU.
:align: center
:alt: MAX32666FTHR Front
-.. image:: img/max32666fthr_img1.jpg
+.. image:: img/max32666fthr_img2.jpg
:align: center
:alt: MAX32666FTHR Back
@@ -123,6 +120,12 @@ Below interfaces are supported by Zephyr on MAX32666FTHR.
+-----------+------------+-------------------------------------+
| Timer | on-chip | counter |
+-----------+------------+-------------------------------------+
+| PWM | on-chip | pwm |
++-----------+------------+-------------------------------------+
+| W1 | on-chip | one wire master |
++-----------+------------+-------------------------------------+
+| Flash | on-chip | flash |
++-----------+------------+-------------------------------------+
Connections and IOs
===================
diff --git a/boards/adi/max32666fthr/max32666fthr_max32666_cpu0.dts b/boards/adi/max32666fthr/max32666fthr_max32666_cpu0.dts
index 95597c47266..02b45bda3db 100644
--- a/boards/adi/max32666fthr/max32666fthr_max32666_cpu0.dts
+++ b/boards/adi/max32666fthr/max32666fthr_max32666_cpu0.dts
@@ -120,8 +120,17 @@
status = "okay";
};
+&rtc_counter {
+ status = "okay";
+};
+
&spi1 {
status = "okay";
pinctrl-0 = <&spi1_mosi_p0_17 &spi1_miso_p0_18 &spi1_sck_p0_19 &spi1_ss0_p0_16>;
pinctrl-names = "default";
};
+
+&w1 {
+ pinctrl-0 = <&owm_io_p0_12>;
+ pinctrl-names = "default";
+};
diff --git a/boards/adi/max32666fthr/max32666fthr_max32666_cpu0.yaml b/boards/adi/max32666fthr/max32666fthr_max32666_cpu0.yaml
index f70a32e68cf..c40294e0ae3 100644
--- a/boards/adi/max32666fthr/max32666fthr_max32666_cpu0.yaml
+++ b/boards/adi/max32666fthr/max32666fthr_max32666_cpu0.yaml
@@ -17,5 +17,9 @@ supported:
- spi
- adc
- counter
+ - rtc_counter
+ - pwm
+ - w1
+ - flash
ram: 560
flash: 1024
diff --git a/boards/adi/max32670evkit/doc/index.rst b/boards/adi/max32670evkit/doc/index.rst
index 3a03283975e..a5b10ef8d9e 100644
--- a/boards/adi/max32670evkit/doc/index.rst
+++ b/boards/adi/max32670evkit/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32670_evkit:
-
-MAX32670EVKIT
-#############
+.. zephyr:board:: max32670evkit
Overview
********
@@ -15,10 +12,6 @@ from 8-bit or 16-bit microcontrollers.
The Zephyr port is running on the MAX32670 MCU.
-.. image:: img/max32670evkit.webp
- :align: center
- :alt: MAX32670 EVKIT
-
Hardware
********
@@ -118,6 +111,10 @@ Below interfaces are supported by Zephyr on MAX32670EVKIT.
+-----------+------------+-------------------------------------+
| Timer | on-chip | counter |
+-----------+------------+-------------------------------------+
+| PWM | on-chip | pwm |
++-----------+------------+-------------------------------------+
+| Flash | on-chip | flash |
++-----------+------------+-------------------------------------+
Connections and IOs
===================
diff --git a/boards/adi/max32670evkit/max32670evkit.dts b/boards/adi/max32670evkit/max32670evkit.dts
index 98c6076374b..ed8a3f47601 100644
--- a/boards/adi/max32670evkit/max32670evkit.dts
+++ b/boards/adi/max32670evkit/max32670evkit.dts
@@ -65,6 +65,13 @@
status = "okay";
};
+/*
+ * ERTCO is required for counter RTC
+ */
+&clk_ertco {
+ status = "okay";
+};
+
&gpio0 {
status = "okay";
};
@@ -96,3 +103,7 @@
pinctrl-0 = <&spi0_mosi_p0_3 &spi0_miso_p0_2 &spi0_sck_p0_4 &spi0_ss0_p0_5>;
pinctrl-names = "default";
};
+
+&rtc_counter {
+ status = "okay";
+};
diff --git a/boards/adi/max32670evkit/max32670evkit.yaml b/boards/adi/max32670evkit/max32670evkit.yaml
index f4550186628..d040a09de49 100644
--- a/boards/adi/max32670evkit/max32670evkit.yaml
+++ b/boards/adi/max32670evkit/max32670evkit.yaml
@@ -16,5 +16,8 @@ supported:
- watchdog
- spi
- counter
+ - rtc_counter
+ - pwm
+ - flash
ram: 160
flash: 384
diff --git a/boards/adi/max32672evkit/Kconfig.defconfig b/boards/adi/max32672evkit/Kconfig.defconfig
index cb74c0282e7..28ba2e3b964 100644
--- a/boards/adi/max32672evkit/Kconfig.defconfig
+++ b/boards/adi/max32672evkit/Kconfig.defconfig
@@ -19,7 +19,7 @@ choice LV_COLOR_DEPTH
default LV_COLOR_DEPTH_16 # 16 bit per pixel
endchoice
-config LV_COLOR_16_SWAP
+configdefault LV_COLOR_16_SWAP
default y
endif # LVGL
diff --git a/boards/adi/max32672evkit/doc/index.rst b/boards/adi/max32672evkit/doc/index.rst
index 2ad07382fc4..c706898a353 100644
--- a/boards/adi/max32672evkit/doc/index.rst
+++ b/boards/adi/max32672evkit/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32672_evkit:
-
-MAX32672EVKIT
-#############
+.. zephyr:board:: max32672evkit
Overview
********
@@ -13,10 +10,6 @@ designs an easy, cost-optimal upgrade path from 8-bit or 16-bit microcontrollers
The Zephyr port is running on the MAX32672 MCU.
-.. image:: img/max32672evkit.webp
- :align: center
- :alt: MAX32672EVKIT
-
Hardware
********
@@ -113,6 +106,10 @@ Below interfaces are supported by Zephyr on MAX32672EVKIT.
+-----------+------------+-------------------------------------+
| Timer | on-chip | counter |
+-----------+------------+-------------------------------------+
+| PWM | on-chip | pwm |
++-----------+------------+-------------------------------------+
+| Flash | on-chip | flash |
++-----------+------------+-------------------------------------+
Connections and IOs
diff --git a/boards/adi/max32672evkit/max32672evkit.dts b/boards/adi/max32672evkit/max32672evkit.dts
index d1d97f78af2..581a9723c1d 100644
--- a/boards/adi/max32672evkit/max32672evkit.dts
+++ b/boards/adi/max32672evkit/max32672evkit.dts
@@ -66,7 +66,7 @@
st7735: st7735@0 {
compatible = "sitronix,st7735r";
mipi-max-frequency = ;
- mipi-mode = ;
+ mipi-mode = "MIPI_DBI_MODE_SPI_3WIRE";
reg = <0>;
width = <130>;
@@ -103,6 +103,13 @@
status = "okay";
};
+/*
+ * ERTCO is required for counter RTC
+ */
+&clk_ertco {
+ status = "okay";
+};
+
&gpio0 {
status = "okay";
};
@@ -149,3 +156,7 @@
pinctrl-names = "default";
cs-gpios = <&gpio0 5 (GPIO_ACTIVE_LOW | MAX32_VSEL_VDDIOH)>;
};
+
+&rtc_counter {
+ status = "okay";
+};
diff --git a/boards/adi/max32672evkit/max32672evkit.yaml b/boards/adi/max32672evkit/max32672evkit.yaml
index 276acbe28f8..e6dae70435c 100644
--- a/boards/adi/max32672evkit/max32672evkit.yaml
+++ b/boards/adi/max32672evkit/max32672evkit.yaml
@@ -17,5 +17,8 @@ supported:
- spi
- adc
- counter
+ - rtc_counter
+ - pwm
+ - flash
ram: 200
flash: 1024
diff --git a/boards/adi/max32672fthr/doc/index.rst b/boards/adi/max32672fthr/doc/index.rst
index d773c4ceb95..76033bf97ec 100644
--- a/boards/adi/max32672fthr/doc/index.rst
+++ b/boards/adi/max32672fthr/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32672_fthr:
-
-MAX32672FTHR
-############
+.. zephyr:board:: max32672fthr
Overview
********
@@ -115,6 +112,10 @@ Below interfaces are supported by Zephyr on MAX32672FTHR.
+-----------+------------+-------------------------------------+
| Timer | on-chip | counter |
+-----------+------------+-------------------------------------+
+| PWM | on-chip | pwm |
++-----------+------------+-------------------------------------+
+| Flash | on-chip | flash |
++-----------+------------+-------------------------------------+
Connections and IOs
diff --git a/boards/adi/max32672fthr/max32672fthr.dts b/boards/adi/max32672fthr/max32672fthr.dts
index b2287cf7708..7690d03424a 100644
--- a/boards/adi/max32672fthr/max32672fthr.dts
+++ b/boards/adi/max32672fthr/max32672fthr.dts
@@ -100,6 +100,13 @@
status = "okay";
};
+/*
+ * ERTCO is required for counter RTC
+ */
+&clk_ertco {
+ status = "okay";
+};
+
&gpio0 {
status = "okay";
};
@@ -148,3 +155,7 @@
pinctrl-0 = <&spi1a_mosi_p0_15 &spi1a_miso_p0_14 &spi1a_sck_p0_16 &spi1a_ss0_p0_17>;
pinctrl-names = "default";
};
+
+&rtc_counter {
+ status = "okay";
+};
diff --git a/boards/adi/max32672fthr/max32672fthr.yaml b/boards/adi/max32672fthr/max32672fthr.yaml
index 68ba3c8b8a6..f98839246c8 100644
--- a/boards/adi/max32672fthr/max32672fthr.yaml
+++ b/boards/adi/max32672fthr/max32672fthr.yaml
@@ -17,5 +17,8 @@ supported:
- spi
- adc
- counter
+ - rtc_counter
+ - pwm
+ - flash
ram: 200
flash: 1024
diff --git a/boards/adi/max32675evkit/doc/index.rst b/boards/adi/max32675evkit/doc/index.rst
index c4cb514d591..a9de574eb21 100644
--- a/boards/adi/max32675evkit/doc/index.rst
+++ b/boards/adi/max32675evkit/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32675_evkit:
-
-MAX32675EVKIT
-#############
+.. zephyr:board:: max32675evkit
Overview
********
@@ -13,10 +10,6 @@ industrial sensors for configuration and diagnostics.
The Zephyr port is running on the MAX32675 MCU.
-.. image:: img/max32675evkit.webp
- :align: center
- :alt: MAX32675EVKIT
-
Hardware
********
@@ -98,6 +91,10 @@ Below interfaces are supported by Zephyr on MAX32675EVKIT.
+-----------+------------+-------------------------------------+
| I2C | on-chip | i2c |
+-----------+------------+-------------------------------------+
+| PWM | on-chip | pwm |
++-----------+------------+-------------------------------------+
+| Flash | on-chip | flash |
++-----------+------------+-------------------------------------+
Connections and IOs
===================
diff --git a/boards/adi/max32675evkit/max32675evkit.yaml b/boards/adi/max32675evkit/max32675evkit.yaml
index b16eefcba45..023a35465f3 100644
--- a/boards/adi/max32675evkit/max32675evkit.yaml
+++ b/boards/adi/max32675evkit/max32675evkit.yaml
@@ -14,5 +14,7 @@ supported:
- serial
- trng
- spi
+ - pwm
+ - flash
ram: 160
flash: 384
diff --git a/boards/adi/max32680evkit/Kconfig.defconfig b/boards/adi/max32680evkit/Kconfig.defconfig
index 99702938eae..33ba842e291 100644
--- a/boards/adi/max32680evkit/Kconfig.defconfig
+++ b/boards/adi/max32680evkit/Kconfig.defconfig
@@ -19,7 +19,7 @@ choice LV_COLOR_DEPTH
default LV_COLOR_DEPTH_16 # 16 bit per pixel
endchoice
-config LV_COLOR_16_SWAP
+configdefault LV_COLOR_16_SWAP
default y
endif # LVGL
diff --git a/boards/adi/max32680evkit/doc/index.rst b/boards/adi/max32680evkit/doc/index.rst
index 4663894d58a..13c6d7d06b6 100644
--- a/boards/adi/max32680evkit/doc/index.rst
+++ b/boards/adi/max32680evkit/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32680_evkit:
-
-MAX32680EVKIT
-#############
+.. zephyr:board:: max32680evkit
Overview
********
@@ -17,11 +14,6 @@ the latest generation Bluetooth® 5.2 Low Energy
The Zephyr port is running on the MAX32680 MCU.
-.. image:: img/max32680evkit_img1.jpg
- :align: center
- :alt: MAX32680 EVKIT
-
-
Hardware
********
@@ -124,6 +116,10 @@ Below interfaces are supported by Zephyr on MAX32680EVKIT.
+-----------+------------+-------------------------------------+
| Timer | on-chip | counter |
+-----------+------------+-------------------------------------+
+| W1 | on-chip | one wire master |
++-----------+------------+-------------------------------------+
+| Flash | on-chip | flash |
++-----------+------------+-------------------------------------+
Connections and IOs
===================
diff --git a/boards/adi/max32680evkit/max32680evkit_max32680_m4.dts b/boards/adi/max32680evkit/max32680evkit_max32680_m4.dts
index 3e426960b0c..4547da3459d 100644
--- a/boards/adi/max32680evkit/max32680evkit_max32680_m4.dts
+++ b/boards/adi/max32680evkit/max32680evkit_max32680_m4.dts
@@ -72,7 +72,7 @@
st7735: st7735@0 {
compatible = "sitronix,st7735r";
mipi-max-frequency = ;
- mipi-mode = ;
+ mipi-mode = "MIPI_DBI_MODE_SPI_3WIRE";
reg = <0>;
width = <130>;
@@ -165,3 +165,8 @@
pinctrl-names = "default";
cs-gpios = <&gpio0 4 (GPIO_ACTIVE_LOW | MAX32_VSEL_VDDIOH)>;
};
+
+&w1 {
+ pinctrl-0 = <&owm_io_p0_6 &owm_pe_p0_7>;
+ pinctrl-names = "default";
+};
diff --git a/boards/adi/max32680evkit/max32680evkit_max32680_m4.yaml b/boards/adi/max32680evkit/max32680evkit_max32680_m4.yaml
index 604d3935222..1fc90758f49 100644
--- a/boards/adi/max32680evkit/max32680evkit_max32680_m4.yaml
+++ b/boards/adi/max32680evkit/max32680evkit_max32680_m4.yaml
@@ -17,5 +17,7 @@ supported:
- spi
- adc
- counter
+ - w1
+ - flash
ram: 128
flash: 512
diff --git a/boards/adi/max32690evkit/Kconfig.defconfig b/boards/adi/max32690evkit/Kconfig.defconfig
index 342cc0ca513..2e5d60419c8 100644
--- a/boards/adi/max32690evkit/Kconfig.defconfig
+++ b/boards/adi/max32690evkit/Kconfig.defconfig
@@ -19,7 +19,7 @@ choice LV_COLOR_DEPTH
default LV_COLOR_DEPTH_16 # 16 bit per pixel
endchoice
-config LV_COLOR_16_SWAP
+configdefault LV_COLOR_16_SWAP
default y
endif # LVGL
diff --git a/boards/adi/max32690evkit/doc/img/max32690evkit_img1.jpg b/boards/adi/max32690evkit/doc/img/max32690evkit.jpg
similarity index 100%
rename from boards/adi/max32690evkit/doc/img/max32690evkit_img1.jpg
rename to boards/adi/max32690evkit/doc/img/max32690evkit.jpg
diff --git a/boards/adi/max32690evkit/doc/index.rst b/boards/adi/max32690evkit/doc/index.rst
index 5f4fe41e158..d976048dcb6 100644
--- a/boards/adi/max32690evkit/doc/index.rst
+++ b/boards/adi/max32690evkit/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32690_evkit:
-
-MAX32690EVKIT
-#############
+.. zephyr:board:: max32690evkit
Overview
********
@@ -14,7 +11,7 @@ industrial sensors/networks, internet of things (IoT), and asset tracking.
The Zephyr port is running on the MAX32690 MCU.
-.. image:: img/max32690evkit_img1.jpg
+.. image:: img/max32690evkit.jpg
:align: center
:alt: MAX32690 EVKIT Front
@@ -110,7 +107,7 @@ Below interfaces are supported by Zephyr on MAX32690EVKIT.
| UART | on-chip | serial |
+-----------+------------+-------------------------------------+
| SPI | on-chip | spi |
-+--------------------------------------------------------------+
++-----------+------------+-------------------------------------+
| I2C | on-chip | i2c |
+-----------+------------+-------------------------------------+
| TRNG | on-chip | entropy |
@@ -123,6 +120,12 @@ Below interfaces are supported by Zephyr on MAX32690EVKIT.
+-----------+------------+-------------------------------------+
| Timer | on-chip | counter |
+-----------+------------+-------------------------------------+
+| PWM | on-chip | pwm |
++-----------+------------+-------------------------------------+
+| W1 | on-chip | one wire master |
++-----------+------------+-------------------------------------+
+| Flash | on-chip | flash |
++-----------+------------+-------------------------------------+
Connections and IOs
diff --git a/boards/adi/max32690evkit/max32690evkit_max32690_m4.dts b/boards/adi/max32690evkit/max32690evkit_max32690_m4.dts
index 85b9d251e07..d04a91852cd 100644
--- a/boards/adi/max32690evkit/max32690evkit_max32690_m4.dts
+++ b/boards/adi/max32690evkit/max32690evkit_max32690_m4.dts
@@ -63,7 +63,7 @@
st7735: st7735@0 {
compatible = "sitronix,st7735r";
mipi-max-frequency = ;
- mipi-mode = ;
+ mipi-mode = "MIPI_DBI_MODE_SPI_3WIRE";
reg = <0>;
width = <130>;
@@ -158,3 +158,12 @@
pinctrl-0 = <&spi0b_mosi_p2_28 &spi0b_miso_p2_27 &spi0b_sck_p2_29 &spi0b_ss1_p2_26>;
pinctrl-names = "default";
};
+
+&w1 {
+ pinctrl-0 = <&owm_io_p0_8 &owm_pe_p0_7>;
+ pinctrl-names = "default";
+};
+
+&rtc_counter {
+ status = "okay";
+};
diff --git a/boards/adi/max32690evkit/max32690evkit_max32690_m4.yaml b/boards/adi/max32690evkit/max32690evkit_max32690_m4.yaml
index bd7e017dd30..b6a5a9a5d7a 100644
--- a/boards/adi/max32690evkit/max32690evkit_max32690_m4.yaml
+++ b/boards/adi/max32690evkit/max32690evkit_max32690_m4.yaml
@@ -17,5 +17,9 @@ supported:
- watchdog
- adc
- counter
+ - rtc_counter
+ - pwm
+ - w1
+ - flash
ram: 1024
flash: 3072
diff --git a/boards/adi/max32690fthr/doc/index.rst b/boards/adi/max32690fthr/doc/index.rst
index edb480f3898..fdce08e32e8 100644
--- a/boards/adi/max32690fthr/doc/index.rst
+++ b/boards/adi/max32690fthr/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32690_fthr:
-
-MAX32690FTHR
-############
+.. zephyr:board:: max32690fthr
Overview
********
@@ -84,7 +81,9 @@ Below interfaces are supported by Zephyr on MAX32690FTHR.
| I2C | on-chip | i2c |
+-----------+------------+-------------------------------------+
| SPI | on-chip | spi |
-+--------------------------------------------------------------+
++-----------+------------+-------------------------------------+
+| Flash | on-chip | flash |
++-----------+------------+-------------------------------------+
Programming and Debugging
*************************
diff --git a/boards/adi/max32690fthr/max32690fthr_max32690_m4.yaml b/boards/adi/max32690fthr/max32690fthr_max32690_m4.yaml
index bbf1af6853f..d81738ee742 100644
--- a/boards/adi/max32690fthr/max32690fthr_max32690_m4.yaml
+++ b/boards/adi/max32690fthr/max32690fthr_max32690_m4.yaml
@@ -15,5 +15,6 @@ supported:
- feather_serial
- feather_i2c
- feather_spi
+ - flash
ram: 1024
flash: 3072
diff --git a/boards/adi/max78002evkit/Kconfig.max78002evkit b/boards/adi/max78002evkit/Kconfig.max78002evkit
new file mode 100644
index 00000000000..a18aa6b97d9
--- /dev/null
+++ b/boards/adi/max78002evkit/Kconfig.max78002evkit
@@ -0,0 +1,7 @@
+# MAX78002EVKIT board configuration
+
+# Copyright (c) 2024 Analog Devices, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+config BOARD_MAX78002EVKIT
+ select SOC_MAX78002_M4 if BOARD_MAX78002EVKIT_MAX78002_M4
diff --git a/boards/adi/max78002evkit/board.cmake b/boards/adi/max78002evkit/board.cmake
new file mode 100644
index 00000000000..b7d321b2f84
--- /dev/null
+++ b/boards/adi/max78002evkit/board.cmake
@@ -0,0 +1,7 @@
+# Copyright (c) 2024 Analog Devices, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+board_runner_args(openocd --cmd-pre-init "source [find interface/cmsis-dap.cfg]")
+board_runner_args(openocd --cmd-pre-init "source [find target/max78002.cfg]")
+
+include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)
diff --git a/boards/adi/max78002evkit/board.yml b/boards/adi/max78002evkit/board.yml
new file mode 100644
index 00000000000..f995c7199f0
--- /dev/null
+++ b/boards/adi/max78002evkit/board.yml
@@ -0,0 +1,9 @@
+# Copyright (c) 2024 Analog Devices, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+board:
+ name: max78002evkit
+ full_name: MAX78002EVKIT
+ vendor: adi
+ socs:
+ - name: max78002
diff --git a/boards/adi/max78002evkit/doc/img/max78002evkit.webp b/boards/adi/max78002evkit/doc/img/max78002evkit.webp
new file mode 100644
index 00000000000..f3452168a63
Binary files /dev/null and b/boards/adi/max78002evkit/doc/img/max78002evkit.webp differ
diff --git a/boards/adi/max78002evkit/doc/img/max78002evkit_back.webp b/boards/adi/max78002evkit/doc/img/max78002evkit_back.webp
new file mode 100644
index 00000000000..ae0c1b99ed6
Binary files /dev/null and b/boards/adi/max78002evkit/doc/img/max78002evkit_back.webp differ
diff --git a/boards/adi/max78002evkit/doc/index.rst b/boards/adi/max78002evkit/doc/index.rst
new file mode 100644
index 00000000000..a5bd4acf09b
--- /dev/null
+++ b/boards/adi/max78002evkit/doc/index.rst
@@ -0,0 +1,295 @@
+.. zephyr:board:: max78002evkit
+
+Overview
+********
+The MAX78002 evaluation kit (EV kit) provides a platform and tools for leveraging device capabilities to build new
+generations of artificial intelligence (AI) products.
+
+The kit provides optimal versatility with a modular peripheral architecture, allowing a variety of input and output
+devices to be remotely located. DVP and CSI cameras, I2S audio peripherals, digital microphones, and analog sensors
+are supported, while a pair of industry-standard QWIIC connectors supports a large and growing array of aftermarket
+development boards. An onboard stereo audio codec offers line-level audio input and output, and tactile input is
+provided by a touch-enabled 2.4in TFT display. The MAX78002 energy consumption is tracked by a power accumulator,
+with four channels of formatted results presented on a secondary TFT display. All device GPIOs are accessible on
+0.1in pin headers. A standard coaxial power jack serves as power input, using the included 5V, 3A wall-mount
+adapter. Two USB connectors provide serial access to the MAX78002, one directly and the other through a USB to UART
+bridge. A third USB connector allows access to the MAX78002 energy consumption data. Rounding out the features, a
+microSD connector provides the capability for inexpensive highdensity portable data storage.
+
+The Zephyr port is running on the MAX78002 MCU.
+
+.. image:: img/max78002evkit.webp
+ :align: center
+ :alt: MAX78002 EVKIT Front
+
+.. image:: img/max78002evkit_back.webp
+ :align: center
+ :alt: MAX78002 EVKIT Back
+
+Hardware
+********
+
+- MAX78002 MCU:
+
+ - Dual-Core, Low-Power Microcontroller
+
+ - Arm Cortex-M4 Processor with FPU up to 120MHz
+ - 2.5MB Flash, 64KB ROM, and 384KB SRAM
+ - Optimized Performance with 16KB Instruction Cache
+ - Optional Error Correction Code (ECC SEC-DED) for SRAM
+ - 32-Bit RISC-V Coprocessor up to 60MHz
+ - Up to 60 General-Purpose I/O Pins
+ - MIPI Camera Serial Interface 2 (MIPI CSI-2) Controller V2.1
+ - Support for Two Data Lanes
+ - 12-Bit Parallel Camera Interface
+ - I 2S Controller/Target for Digital Audio Interface
+ - Secure Digital Interface Supports SD 3.0/SDIO 3.0/eMMC 4.51
+
+ - Convolutional Neural Network (CNN) Accelerator
+
+ - Highly Optimized for Deep CNNs
+ - 2 Million 8-Bit Weight Capacity with 1-, 2-, 4-, and 8-bit Weights
+ - 1.3MB CNN Data Memory
+ - Programmable Input Image Size up to 2048 x 2048 Pixels
+ - Programmable Network Depth up to 128 Layers
+ - Programmable per Layer Network Channel Widths up to 1024 Channels
+ - 1- and 2-Dimensional Convolution Processing
+ - Capable of Processing VGA Images at 30fps
+
+ - Power Management for Extending Battery Life
+
+ - Integrated Single-Inductor Multiple-Output (SIMO) Switch-Mode Power Supply (SMPS)
+ - 2.85V to 3.6V Supply Voltage Range
+ - Support of Optional External Auxiliary CNN Power Supply
+ - Dynamic Voltage Scaling Minimizes Active Core Power Consumption
+ - 23.9μA/MHz While Loop Execution at 3.3V from Cache (CM4 only)
+ - Selectable SRAM Retention in Low-Power Modes with Real-Time Clock (RTC) Enabled
+
+ - Security and Integrity
+
+ - Available Secure Boot
+ - AES 128/192/256 Hardware Acceleration Engine
+ - True Random Number Generator (TRNG) Seed Generator
+
+ - Ultra-Low-Power Wireless Microcontroller
+
+ - Internal 100MHz Oscillator
+ - Flexible Low-Power Modes with 7.3728MHz System Clock Option
+ - 512KB Flash and 128KB SRAM (Optional ECC on One 32KB SRAM Bank)
+ - 16KB Instruction Cache
+
+ - Bluetooth 5.2 LE Radio
+
+ - Dedicated, Ultra-Low-Power, 32-Bit RISC-V Coprocessor to Offload Timing-Critical Bluetooth Processing
+ - Fully Open-Source Bluetooth 5.2 Stack Available
+ - Supports AoA, AoD, LE Audio, and Mesh
+ - High-Throughput (2Mbps) Mode
+ - Long-Range (125kbps and 500kbps) Modes
+ - Rx Sensitivity: -97.5dBm; Tx Power: +4.5dBm
+ - Single-Ended Antenna Connection (50Ω)
+
+ - Power Management Maximizes Battery Life
+
+ - 2.0V to 3.6V Supply Voltage Range
+ - Integrated SIMO Power Regulator
+ - Dynamic Voltage Scaling (DVS)
+ - 23.8μA/MHz Active Current at 3.0V
+ - 4.4μA at 3.0V Retention Current for 32KB
+ - Selectable SRAM Retention + RTC in Low-Power Modes
+
+ - Multiple Peripherals for System Control
+
+ - Up to Two High-Speed SPI Master/Slave
+ - Up to Three High-Speed I2C Master/Slave (3.4Mbps)
+ - Up to Four UART, One I2S Master/Slave
+ - Up to 8-Input, 10-Bit Sigma-Delta ADC 7.8ksps
+ - Up to Four Micro-Power Comparators
+ - Timers: Up to Two Four 32-Bit, Two LP, TwoWatchdog Timers
+ - 1-Wire® Master
+ - Up to Four Pulse Train (PWM) Engines
+ - RTC with Wake-Up Timer
+ - Up to 52 GPIOs
+
+ - Security and Integrity
+
+ - Available Secure Boot
+ - TRNG Seed Generator
+ - AES 128/192/256 Hardware Acceleration Engine
+
+- External devices connected to the MAX78002 EVKIT:
+
+ - Color TFT Display
+ - Audio Stereo Codec Interface
+ - Digital Microphone
+ - A 8Mb QSPI ram
+
+Supported Features
+==================
+
+The ``max78002evkit/max78002/m4`` board target supports the following interfaces:
+
++-----------+------------+-------------------------------------+
+| Interface | Controller | Driver/Component |
++===========+============+=====================================+
+| NVIC | on-chip | nested vector interrupt controller |
++-----------+------------+-------------------------------------+
+| SYSTICK | on-chip | systick |
++-----------+------------+-------------------------------------+
+| CLOCK | on-chip | clock and reset control |
++-----------+------------+-------------------------------------+
+| GPIO | on-chip | gpio |
++-----------+------------+-------------------------------------+
+| UART | on-chip | serial |
++-----------+------------+-------------------------------------+
+| TRNG | on-chip | entropy |
++-----------+------------+-------------------------------------+
+| I2C | on-chip | i2c |
++-----------+------------+-------------------------------------+
+| DMA | on-chip | dma controller |
++-----------+------------+-------------------------------------+
+| Watchdog | on-chip | watchdog |
++-----------+------------+-------------------------------------+
+| SPI | on-chip | spi |
++-----------+------------+-------------------------------------+
+| ADC | on-chip | adc |
++-----------+------------+-------------------------------------+
+| Timer | on-chip | counter |
++-----------+------------+-------------------------------------+
+| PWM | on-chip | pwm |
++-----------+------------+-------------------------------------+
+| W1 | on-chip | one wire master |
++-----------+------------+-------------------------------------+
+| Flash | on-chip | flash |
++-----------+------------+-------------------------------------+
+
+Connections and IOs
+===================
+
++-----------+-------------------+----------------------------------------------------------------------------------+
+| Name | Signal | Usage |
++===========+===================+==================================================================================+
+| JP1 | 3V3 MON | Normal operation in conjunction with JP3 jumpered 1-2 |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP2 | 3V3 SW PM BYPASS | Power monitor shunts for main 3.3 V system power are bypassed |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP3 | CNN MON | Normal operation in conjunction with JP6 jumpered 1-2 |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP4 | VCOREA PM BYPASS | Power monitor shunts for U4's share of VCOREA + CNN loads are bypassed |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP5 | VCOREB PM BYPASS | Power monitor shunts for VCOREB are bypassed |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP6 | VREGO_A PM BYPASS | Power monitor shunts for VREGO_A are bypassed |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP7 | VBAT | Enable/Disable 3V3 VBAT power |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP8 | VREGI | Enable/Disable 3V3 VREGI power |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP9 | VREGI/VBAT | Onboard 3V3_PM / external source at TP10 supplies VREGI/VBAT |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP10 | VDDIOH | Onboard 3V3_PM/3V3_SW supplies VDDIOH |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP11 | VDDA | VREGO_A_PM powers VDDA |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP12 | VDDIO | VREGO_A_PM powers VDDIO |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP13 | VCOREB | VREGO_B powers VCOREB |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP14 | VCOREA | VREGO_C ties to net VCOREA |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP15 | VREF | DUT ADC VREF is supplied by precision external reference |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP16 | I2C1 SDA | I2C1 DATA pull-up |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP17 | I2C1 SCL | I2C1 CLOCK pull-up |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP18 | TRIG1 | PWR accumulator trigger signal 1 ties to port 1.6 |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP19 | TRIG2 | PWR accumulator trigger signal 2 ties to port 1.7 |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP20 | UART0 EN | Connect/Disconnect USB-UART bridge to UART0 |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP21 | I2C0_SDA | I2C0 DATA pull-up |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP22 | I2C0_SCL | I2C0 CLOCK pull-up |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP23 | UART1 EN | Connect/Disconnect USB-UART bridge to UART1 |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP24 | EXT I2C0 EN | Enable/Disable QWIIC interface for I2C0 |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP25 | PB1 PU | Enable/Disable 100kΩ pull-up for pushbutton mode, port 2.6 |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP26 | PB2 PU | Enable/Disable 100kΩ pull-up for pushbutton mode, port 2.7 |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP27 | I2C2 SDA | I2C2 DATA pull-up |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP28 | I2C2 SCL | I2C2 CLOCK pull-up |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP29 | VDDB | USB XCVR VDDB powered from VBUS / powered full time by system 3V3_PM |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP30 | EXT I2C2 EN | Enable/Disable QWIIC interface for I2C2 |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP31 | L/R SEL | Select MIC ON R/L CH, I2S microphone data stream |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP32 | MIC-I2S I/O | External I2S/MIC data from I2S I/O / MIC header connected to I2S SDI |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP33 | MIC-I2S/CODEC | Onboard CODEC data / external I2S data from header connects to I2S SDI |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP34 | I2S VDD | Select 1.8V/3.3V for external MIC and DATA I2S interface |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP35 | I2C1 SDA | I2C1 DATA pull-up |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP36 | I2C1 SCL | I2C1 CLOCK pull-up |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP37 | I2S CK SEL | Select SMA connector J6 / onboard crystal oscillator for I2S master clock source |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP38 | DVP CAM PWR | Enable/Disable OVM7692 for DVP camera PWDN input |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP39 | SW CAM PWUP | Camera reset and power up under port pin control |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP40 | HW PWUP / SW PWUP | Camera will reset and power up as soon as 3.3V reaches a valid level |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP41 | CSI CAM I2C EN | Connect/Disconnect I2C1 to CSI camera Digilent P5C I2C |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP42 | TFT DC | TFT data/command select connects to port 2.2 |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP43 | TFT CS | Select port 0.3 / port 1.7 to drive TFT CS |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP44 | LED1 EN | Enable/Disable LED1 |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP45 | LED2 EN | Enable/Disable LED2 |
++-----------+-------------------+----------------------------------------------------------------------------------+
+
+Programming and Debugging
+*************************
+
+Flashing
+========
+
+The MAX78002 MCU can be flashed by connecting an external debug probe to the
+SWD port. SWD debug can be accessed through the Cortex 10-pin connector, JH8.
+Logic levels are fixed to VDDIO (1.8V).
+
+Once the debug probe is connected to your host computer, then you can simply run the
+``west flash`` command to write a firmware image into flash.
+
+.. note::
+
+ This board uses OpenOCD as the default debug interface. You can also use
+ a Segger J-Link with Segger's native tooling by overriding the runner,
+ appending ``--runner jlink`` to your ``west`` command(s). The J-Link should
+ be connected to the standard 2*5 pin debug connector (JH8) using an
+ appropriate adapter board and cable.
+
+Debugging
+=========
+
+Please refer to the `Flashing`_ section and run the ``west debug`` command
+instead of ``west flash``.
+
+References
+**********
+
+- `MAX78002EVKIT web page`_
+
+.. _MAX78002EVKIT web page:
+ https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max78002evkit.html
diff --git a/boards/adi/max78002evkit/max78002evkit_max78002_m4.dts b/boards/adi/max78002evkit/max78002evkit_max78002_m4.dts
new file mode 100644
index 00000000000..8b6df6c28c1
--- /dev/null
+++ b/boards/adi/max78002evkit/max78002evkit_max78002_m4.dts
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2024 Analog Devices, Inc.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/dts-v1/;
+
+#include
+#include
+#include
+#include
+
+/ {
+ model = "Analog Devices MAX78002EVKIT";
+ compatible = "adi,max78002evkit";
+
+ chosen {
+ zephyr,console = &uart0;
+ zephyr,shell-uart = &uart0;
+ zephyr,sram = &sram2;
+ zephyr,flash = &flash0;
+ };
+
+ leds {
+ compatible = "gpio-leds";
+ led1: led_1 {
+ gpios = <&gpio2 4 GPIO_ACTIVE_HIGH>;
+ label = "Green LED";
+ };
+ led2: led_2 {
+ gpios = <&gpio2 5 GPIO_ACTIVE_HIGH>;
+ label = "Red LED";
+ };
+ };
+
+ buttons {
+ compatible = "gpio-keys";
+ pb1: pb1 {
+ gpios = <&gpio2 6 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
+ label = "SW2";
+ zephyr,code = ;
+ };
+ pb2: pb2 {
+ gpios = <&gpio2 7 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
+ label = "SW3";
+ zephyr,code = ;
+ };
+ pb_wakeup: pb_wakeup {
+ gpios = <&gpio3 1 (GPIO_PULL_UP | GPIO_ACTIVE_LOW
+ | MAX32_GPIO_VSEL_VDDIOH)>;
+ label = "Wakeup";
+ zephyr,code = ;
+ };
+ };
+
+ /* These aliases are provided for compatibility with samples */
+ aliases {
+ led0 = &led1;
+ led1 = &led2;
+ sw0 = &pb1;
+ sw1 = &pb2;
+ watchdog0 = &wdt0;
+ };
+};
+
+&uart0 {
+ pinctrl-0 = <&uart0a_tx_p0_1 &uart0a_rx_p0_0>;
+ pinctrl-names = "default";
+ current-speed = <115200>;
+ data-bits = <8>;
+ parity = "none";
+ status = "okay";
+};
+
+&clk_ipo {
+ status = "okay";
+};
+
+&clk_ibro {
+ status = "okay";
+};
+
+&gpio0 {
+ status = "okay";
+};
+
+&gpio1 {
+ status = "okay";
+};
+
+&gpio2 {
+ status = "okay";
+};
+
+&gpio3 {
+ status = "okay";
+};
+
+&trng {
+ status = "okay";
+};
+
+&i2c0 {
+ status = "okay";
+ pinctrl-0 = <&i2c0_scl_p0_10 &i2c0_sda_p0_11>;
+ pinctrl-names = "default";
+};
+
+&dma0 {
+ status = "okay";
+};
+
+&wdt0 {
+ status = "okay";
+};
+
+&spi0 {
+ status = "okay";
+ pinctrl-0 = <&spi0_mosi_p0_5 &spi0_miso_p0_6 &spi0_sck_p0_7 &spi0_ss0_p0_4>;
+ pinctrl-names = "default";
+};
+
+&w1 {
+ pinctrl-0 = <&owm_io_p0_6 &owm_pe_p0_7>;
+ pinctrl-names = "default";
+};
diff --git a/boards/adi/max78002evkit/max78002evkit_max78002_m4.yaml b/boards/adi/max78002evkit/max78002evkit_max78002_m4.yaml
new file mode 100644
index 00000000000..4631e4e276b
--- /dev/null
+++ b/boards/adi/max78002evkit/max78002evkit_max78002_m4.yaml
@@ -0,0 +1,24 @@
+identifier: max78002evkit/max78002/m4
+name: max78002evkit m4
+vendor: adi
+type: mcu
+arch: arm
+toolchain:
+ - zephyr
+ - gnuarmemb
+ - xtools
+supported:
+ - gpio
+ - serial
+ - trng
+ - i2c
+ - dma
+ - watchdog
+ - spi
+ - adc
+ - counter
+ - pwm
+ - w1
+ - flash
+ram: 384
+flash: 2560
diff --git a/boards/adi/max78002evkit/max78002evkit_max78002_m4_defconfig b/boards/adi/max78002evkit/max78002evkit_max78002_m4_defconfig
new file mode 100644
index 00000000000..a048ab2608f
--- /dev/null
+++ b/boards/adi/max78002evkit/max78002evkit_max78002_m4_defconfig
@@ -0,0 +1,13 @@
+# Copyright (c) 2024 Analog Devices, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+# Enable GPIO
+CONFIG_GPIO=y
+
+# Console
+CONFIG_CONSOLE=y
+CONFIG_UART_CONSOLE=y
+
+# Enable UART
+CONFIG_SERIAL=y
+CONFIG_UART_INTERRUPT_DRIVEN=y
diff --git a/boards/adi/sdp_k1/doc/index.rst b/boards/adi/sdp_k1/doc/index.rst
index 0b23797da6b..680852f53dd 100644
--- a/boards/adi/sdp_k1/doc/index.rst
+++ b/boards/adi/sdp_k1/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adi_sdp_k1:
-
-ADI SDP-K1
-##########
+.. zephyr:board:: adi_sdp_k1
Overview
********
@@ -24,12 +21,6 @@ ADI components.
- 16MB SDRAM
- Arduino UNO and 120-pin SDP connectors
-.. figure:: img/adi_sdp_k1.webp
- :align: center
- :alt: ADI SDP-K1
-
- ADI SDP-K1 (Credit: Analog Devices, Inc.)
-
More information about the board can be found on the `ADI SDP-K1 website`_.
Hardware
diff --git a/boards/alientek/pandora_stm32l475/doc/index.rst b/boards/alientek/pandora_stm32l475/doc/index.rst
index 082c814914a..d976ee7740f 100644
--- a/boards/alientek/pandora_stm32l475/doc/index.rst
+++ b/boards/alientek/pandora_stm32l475/doc/index.rst
@@ -1,7 +1,4 @@
-.. _pandora_stm32l475_board:
-
-Alientek STM32L475 Pandora
-##########################
+.. zephyr:board:: pandora_stm32l475
Overview
********
@@ -28,15 +25,12 @@ some highlights of the STM32L475 Pandora board:
- MCU current ammeter with 4 ranges and auto-calibration
- Connector for external board or RF-EEPROM
- Four power supply options:
+
- ST-LINK/V2-1
- USB FS connector
- External 5 V
- CR2032 battery (not provided)
-.. image:: img/pandora_stm32l475.jpg
- :align: center
- :alt: STM32L475 Pandora
-
More information about the board can be found at the `STM32L475 Pandora website`_.
Hardware
diff --git a/boards/alientek/pandora_stm32l475/pandora_stm32l475.dts b/boards/alientek/pandora_stm32l475/pandora_stm32l475.dts
index 567e88a0152..7661de67198 100644
--- a/boards/alientek/pandora_stm32l475/pandora_stm32l475.dts
+++ b/boards/alientek/pandora_stm32l475/pandora_stm32l475.dts
@@ -83,6 +83,7 @@
qspi-max-frequency = <80000000>;
jedec-id = [ef 40 18];
spi-bus-width = <4>;
+ writeoc = "PP_1_1_4";
status = "okay";
};
};
diff --git a/boards/altr/max10/doc/index.rst b/boards/altr/max10/doc/index.rst
index 0ff861b4f83..0c16aa329e8 100644
--- a/boards/altr/max10/doc/index.rst
+++ b/boards/altr/max10/doc/index.rst
@@ -1,21 +1,11 @@
-.. _altera_max10:
-
-Altera MAX10
-############
+.. zephyr:board:: altera_max10
Overview
********
-
The Zephyr kernel is supported on the Altera MAX10 Rev C development kit, using
the Nios II Gen 2 soft CPU.
-.. figure:: img/altera_max10.jpg
- :align: center
- :alt: Altera's MAX* 10
-
- Altera's MAX* 10 (Credit: Altera)
-
Hardware
********
diff --git a/boards/ambiq/apollo3_evb/Kconfig.defconfig b/boards/ambiq/apollo3_evb/Kconfig.defconfig
new file mode 100644
index 00000000000..bd2a5f91add
--- /dev/null
+++ b/boards/ambiq/apollo3_evb/Kconfig.defconfig
@@ -0,0 +1,14 @@
+# SPDX-License-Identifier: Apache-2.0
+#
+# Copyright (c) 2024 Ambiq Micro Inc.
+
+if BOARD_APOLLO3_EVB
+
+config SYS_CLOCK_HW_CYCLES_PER_SEC
+ default 32768 if AMBIQ_STIMER_TIMER
+
+config LOG_BACKEND_SWO_FREQ_HZ
+ default 1000000
+ depends on LOG_BACKEND_SWO
+
+endif # BOARD_APOLLO3_EVB
diff --git a/boards/ambiq/apollo3_evb/apollo3_evb-pinctrl.dtsi b/boards/ambiq/apollo3_evb/apollo3_evb-pinctrl.dtsi
index 7fbd368813b..26cf5e58063 100644
--- a/boards/ambiq/apollo3_evb/apollo3_evb-pinctrl.dtsi
+++ b/boards/ambiq/apollo3_evb/apollo3_evb-pinctrl.dtsi
@@ -17,6 +17,11 @@
input-enable;
};
};
+ itm_default: itm_default {
+ group1 {
+ pinmux = ;
+ };
+ };
i2c0_default: i2c0_default {
group1 {
pinmux = , ;
@@ -65,7 +70,11 @@
bias-pull-up;
};
};
-
+ spid0_default: spid0_default {
+ group1 {
+ pinmux = , , , ;
+ };
+ };
spi0_default: spi0_default {
group1 {
pinmux = , , ;
diff --git a/boards/ambiq/apollo3_evb/apollo3_evb.dts b/boards/ambiq/apollo3_evb/apollo3_evb.dts
index a47b97f1696..30828d729c5 100644
--- a/boards/ambiq/apollo3_evb/apollo3_evb.dts
+++ b/boards/ambiq/apollo3_evb/apollo3_evb.dts
@@ -2,6 +2,7 @@
#include
#include "apollo3_evb-pinctrl.dtsi"
+#include
/ {
model = "Ambiq Apollo3 Blue evaluation board";
@@ -13,9 +14,11 @@
zephyr,flash = &flash0;
zephyr,console = &uart0;
zephyr,shell-uart = &uart0;
+ zephyr,uart-mcumgr = &uart0;
zephyr,uart-pipe = &uart0;
zephyr,flash-controller = &flash;
zephyr,bt_hci = &bt_hci_apollo;
+ zephyr,code-partition = &slot0_partition;
};
aliases {
@@ -25,6 +28,9 @@
led2 = &led2;
sw0 = &button0;
sw1 = &button1;
+ bootloader-led0 = &led0;
+ mcuboot-led0 = &led0;
+ rtc = &rtc0;
};
leds {
@@ -56,14 +62,17 @@
button0: button_0 {
gpios = <&gpio0_31 16 GPIO_ACTIVE_LOW>;
label = "BTN0";
+ zephyr,code = ;
};
button1: button_1 {
gpios = <&gpio0_31 18 GPIO_ACTIVE_LOW>;
label = "BTN1";
+ zephyr,code = ;
};
button2: button_2 {
gpios = <&gpio0_31 19 GPIO_ACTIVE_LOW>;
label = "BTN2";
+ zephyr,code = ;
};
};
};
@@ -77,14 +86,36 @@
#address-cells = <1>;
#size-cells = <1>;
- /* Set 16KB of storage at the end of the 976KB of flash */
- storage_partition: partition@f0000 {
+ internal_boot_partition: partition@0 {
+ label = "internal_bootloader";
+ reg = <0x00000000 0xc000>;
+ };
+
+ boot_partition: partition@c000 {
+ label = "mcuboot";
+ reg = <0x0000c000 0xc000>;
+ };
+ slot0_partition: partition@18000 {
+ label = "image-0";
+ reg = <0x00018000 0x72000>;
+ };
+ slot1_partition: partition@8a000 {
+ label = "image-1";
+ reg = <0x0008a000 0x72000>;
+ };
+
+ /* Set 16KB of storage at the end of the 1024KB of flash */
+ storage_partition: partition@fc000 {
label = "storage";
- reg = <0x000f0000 0x4000>;
+ reg = <0x000fc000 0x4000>;
};
};
};
+&stimer0 {
+ clk-source = <3>;
+};
+
&bleif {
pinctrl-0 = <&bleif_default>;
pinctrl-names = "default";
@@ -98,6 +129,12 @@
status = "okay";
};
+&itm {
+ pinctrl-0 = <&itm_default>;
+ pinctrl-names = "default";
+ status = "okay";
+};
+
&wdt0 {
status = "okay";
};
@@ -116,6 +153,8 @@
pinctrl-0 = <&i2c3_default>;
pinctrl-names = "default";
clock-frequency = ;
+ scl-gpios = <&gpio32_63 10 (GPIO_OPEN_DRAIN | GPIO_PULL_UP)>;
+ sda-gpios = <&gpio32_63 11 (GPIO_OPEN_DRAIN | GPIO_PULL_UP)>;
status = "okay";
};
@@ -151,6 +190,11 @@
status = "okay";
};
+&rtc0 {
+ status = "okay";
+ clock = "XTAL";
+};
+
&adc0 {
compatible = "ambiq,adc";
pinctrl-0 = <&adc0_default>;
diff --git a/boards/ambiq/apollo3_evb/doc/index.rst b/boards/ambiq/apollo3_evb/doc/index.rst
index 570e1d54d45..429d973d378 100644
--- a/boards/ambiq/apollo3_evb/doc/index.rst
+++ b/boards/ambiq/apollo3_evb/doc/index.rst
@@ -1,14 +1,7 @@
-.. _apollo3_evb:
-
-Ambiq Apollo3 Blue EVB
-######################
+.. zephyr:board:: apollo3_evb
Apollo3 Blue EVB is a board by Ambiq featuring their ultra-low power Apollo3 Blue SoC.
-.. image:: ./apollo3-blue-soc-eval-board.jpg
- :align: center
- :alt: Apollo3 Blue EVB
-
Hardware
********
diff --git a/boards/ambiq/apollo3p_evb/Kconfig.defconfig b/boards/ambiq/apollo3p_evb/Kconfig.defconfig
new file mode 100644
index 00000000000..5e677acf238
--- /dev/null
+++ b/boards/ambiq/apollo3p_evb/Kconfig.defconfig
@@ -0,0 +1,14 @@
+# SPDX-License-Identifier: Apache-2.0
+#
+# Copyright (c) 2024 Ambiq Micro Inc.
+
+if BOARD_APOLLO3P_EVB
+
+config SYS_CLOCK_HW_CYCLES_PER_SEC
+ default 32768 if AMBIQ_STIMER_TIMER
+
+config LOG_BACKEND_SWO_FREQ_HZ
+ default 1000000
+ depends on LOG_BACKEND_SWO
+
+endif # BOARD_APOLLO3P_EVB
diff --git a/boards/ambiq/apollo3p_evb/apollo3p_evb-pinctrl.dtsi b/boards/ambiq/apollo3p_evb/apollo3p_evb-pinctrl.dtsi
index b026ba7722f..3eea582a372 100644
--- a/boards/ambiq/apollo3p_evb/apollo3p_evb-pinctrl.dtsi
+++ b/boards/ambiq/apollo3p_evb/apollo3p_evb-pinctrl.dtsi
@@ -17,6 +17,11 @@
input-enable;
};
};
+ itm_default: itm_default {
+ group1 {
+ pinmux = ;
+ };
+ };
i2c0_default: i2c0_default {
group1 {
pinmux = , ;
@@ -65,7 +70,11 @@
bias-pull-up;
};
};
-
+ spid0_default: spid0_default {
+ group1 {
+ pinmux = , , , ;
+ };
+ };
spi0_default: spi0_default {
group1 {
pinmux = , , ;
diff --git a/boards/ambiq/apollo3p_evb/apollo3p_evb.dts b/boards/ambiq/apollo3p_evb/apollo3p_evb.dts
index 75d61cbf2a3..88b3cefbb2f 100644
--- a/boards/ambiq/apollo3p_evb/apollo3p_evb.dts
+++ b/boards/ambiq/apollo3p_evb/apollo3p_evb.dts
@@ -2,6 +2,7 @@
#include
#include "apollo3p_evb-pinctrl.dtsi"
+#include
/ {
model = "Ambiq Apollo3 Blue Plus evaluation board";
@@ -25,6 +26,7 @@
led2 = &led2;
sw0 = &button0;
sw1 = &button1;
+ rtc = &rtc0;
};
leds {
@@ -56,14 +58,17 @@
button0: button_0 {
gpios = <&gpio0_31 16 GPIO_ACTIVE_LOW>;
label = "BTN0";
+ zephyr,code = ;
};
button1: button_1 {
gpios = <&gpio0_31 18 GPIO_ACTIVE_LOW>;
label = "BTN1";
+ zephyr,code = ;
};
button2: button_2 {
gpios = <&gpio0_31 19 GPIO_ACTIVE_LOW>;
label = "BTN2";
+ zephyr,code = ;
};
};
};
@@ -85,6 +90,10 @@
};
};
+&stimer0 {
+ clk-source = <3>;
+};
+
&bleif {
pinctrl-0 = <&bleif_default>;
pinctrl-names = "default";
@@ -98,6 +107,12 @@
status = "okay";
};
+&itm {
+ pinctrl-0 = <&itm_default>;
+ pinctrl-names = "default";
+ status = "okay";
+};
+
&wdt0 {
status = "okay";
};
@@ -116,6 +131,8 @@
pinctrl-0 = <&i2c3_default>;
pinctrl-names = "default";
clock-frequency = ;
+ scl-gpios = <&gpio32_63 10 (GPIO_OPEN_DRAIN | GPIO_PULL_UP)>;
+ sda-gpios = <&gpio32_63 11 (GPIO_OPEN_DRAIN | GPIO_PULL_UP)>;
status = "okay";
};
@@ -151,6 +168,11 @@
status = "okay";
};
+&rtc0 {
+ status = "okay";
+ clock = "XTAL";
+};
+
&adc0 {
compatible = "ambiq,adc";
pinctrl-0 = <&adc0_default>;
diff --git a/boards/ambiq/apollo3p_evb/doc/index.rst b/boards/ambiq/apollo3p_evb/doc/index.rst
index c06f3b1e168..a5f848c4f2c 100644
--- a/boards/ambiq/apollo3p_evb/doc/index.rst
+++ b/boards/ambiq/apollo3p_evb/doc/index.rst
@@ -1,14 +1,7 @@
-.. _apollo3p_evb:
-
-Ambiq Apollo3 Blue Plus EVB
-###########################
+.. zephyr:board:: apollo3p_evb
Apollo3 Blue Plus EVB is a board by Ambiq featuring their ultra-low power Apollo3 Blue Plus SoC.
-.. image:: ./apollo3-blue-plus-soc-eval-board.jpg
- :align: center
- :alt: Apollo3 Blue Plus EVB
-
Hardware
********
diff --git a/boards/ambiq/apollo4p_blue_kxr_evb/Kconfig.defconfig b/boards/ambiq/apollo4p_blue_kxr_evb/Kconfig.defconfig
index 5d16de3a1ca..63595ffddbd 100644
--- a/boards/ambiq/apollo4p_blue_kxr_evb/Kconfig.defconfig
+++ b/boards/ambiq/apollo4p_blue_kxr_evb/Kconfig.defconfig
@@ -4,6 +4,13 @@
if BOARD_APOLLO4P_BLUE_KXR_EVB
+config SYS_CLOCK_HW_CYCLES_PER_SEC
+ default 32768 if AMBIQ_STIMER_TIMER
+
+config LOG_BACKEND_SWO_FREQ_HZ
+ default 1000000
+ depends on LOG_BACKEND_SWO
+
if BT
config MAIN_STACK_SIZE
diff --git a/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb-pinctrl.dtsi b/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb-pinctrl.dtsi
index 1d64b010f60..f8c20b0fad9 100644
--- a/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb-pinctrl.dtsi
+++ b/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb-pinctrl.dtsi
@@ -16,6 +16,11 @@
input-enable;
};
};
+ itm_default: itm_default {
+ group1 {
+ pinmux = ;
+ };
+ };
i2c0_default: i2c0_default {
group1 {
pinmux = , ;
diff --git a/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb.dts b/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb.dts
index 6a246a1f12e..cdcbcee689b 100644
--- a/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb.dts
+++ b/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb.dts
@@ -1,5 +1,6 @@
/dts-v1/;
#include
+#include
#include "apollo4p_blue_kxr_evb-pinctrl.dtsi"
@@ -25,6 +26,7 @@
led2 = &led2;
sw0 = &button0;
sw1 = &button1;
+ rtc = &rtc0;
};
leds {
@@ -45,13 +47,18 @@
buttons {
compatible = "gpio-keys";
+ polling-mode;
button0: button_0 {
gpios = <&gpio0_31 17 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
label = "BTN0";
+ zephyr,code = ;
+ status = "okay";
};
button1: button_1 {
gpios = <&gpio0_31 19 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
label = "BTN1";
+ zephyr,code = ;
+ status = "okay";
};
};
};
@@ -63,10 +70,21 @@
status = "okay";
};
+&itm {
+ pinctrl-0 = <&itm_default>;
+ pinctrl-names = "default";
+ status = "okay";
+};
+
&counter0 {
status = "okay";
};
+&rtc0 {
+ status = "okay";
+ clock = "XTAL";
+};
+
&wdt0 {
status = "okay";
};
@@ -76,6 +94,8 @@
pinctrl-0 = <&i2c0_default>;
pinctrl-names = "default";
clock-frequency = ;
+ scl-gpios = <&gpio0_31 5 (GPIO_OPEN_DRAIN | GPIO_PULL_UP)>;
+ sda-gpios = <&gpio0_31 6 (GPIO_OPEN_DRAIN | GPIO_PULL_UP)>;
status = "okay";
};
@@ -117,6 +137,10 @@
};
};
+&stimer0 {
+ clk-source = <3>;
+};
+
&xo32m {
pinctrl-0 = <&xo32m_default>;
pinctrl-names = "default";
@@ -129,6 +153,12 @@
status = "okay";
};
+zephyr_udc0: &usb {
+ vddusb33-gpios = <&gpio0_31 13 (GPIO_PULL_UP)>;
+ vddusb0p9-gpios = <&gpio0_31 15 (GPIO_PULL_UP)>;
+ status = "okay";
+};
+
&gpio0_31 {
status = "okay";
};
diff --git a/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb.yaml b/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb.yaml
index d9e9f244d86..a1e0378d592 100644
--- a/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb.yaml
+++ b/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb.yaml
@@ -16,6 +16,7 @@ supported:
- i2c
- clock_control
- ble
+ - usbd
testing:
ignore_tags:
- net
diff --git a/boards/ambiq/apollo4p_blue_kxr_evb/doc/index.rst b/boards/ambiq/apollo4p_blue_kxr_evb/doc/index.rst
index 3a1876297d2..81158fba6db 100644
--- a/boards/ambiq/apollo4p_blue_kxr_evb/doc/index.rst
+++ b/boards/ambiq/apollo4p_blue_kxr_evb/doc/index.rst
@@ -1,14 +1,7 @@
-.. _apollo4p_blue_kxr_evb:
-
-Ambiq Apollo4 Blue Plus KXR EVB
-###############################
+.. zephyr:board:: apollo4p_blue_kxr_evb
Apollo4 Blue Plus KXR EVB is a board by Ambiq featuring their ultra-low power Apollo4 Blue Plus SoC.
-.. image:: ./apollo4-blue-plus-kxr-soc-eval-board.jpg
- :align: center
- :alt: Apollo4 Blue Plus KXR EVB
-
Hardware
********
diff --git a/boards/ambiq/apollo4p_evb/Kconfig.defconfig b/boards/ambiq/apollo4p_evb/Kconfig.defconfig
new file mode 100644
index 00000000000..782fec1cfb6
--- /dev/null
+++ b/boards/ambiq/apollo4p_evb/Kconfig.defconfig
@@ -0,0 +1,14 @@
+# SPDX-License-Identifier: Apache-2.0
+#
+# Copyright (c) 2024 Ambiq Micro Inc.
+
+if BOARD_APOLLO4P_EVB
+
+config SYS_CLOCK_HW_CYCLES_PER_SEC
+ default 32768 if AMBIQ_STIMER_TIMER
+
+config LOG_BACKEND_SWO_FREQ_HZ
+ default 1000000
+ depends on LOG_BACKEND_SWO
+
+endif # BOARD_APOLLO4P_EVB
diff --git a/boards/ambiq/apollo4p_evb/apollo4p_evb-pinctrl.dtsi b/boards/ambiq/apollo4p_evb/apollo4p_evb-pinctrl.dtsi
index 125e1a7d238..dbbb233485e 100644
--- a/boards/ambiq/apollo4p_evb/apollo4p_evb-pinctrl.dtsi
+++ b/boards/ambiq/apollo4p_evb/apollo4p_evb-pinctrl.dtsi
@@ -17,6 +17,11 @@
input-enable;
};
};
+ itm_default: itm_default {
+ group1 {
+ pinmux = ;
+ };
+ };
adc0_default: adc0_default{
group1 {
pinmux = , ;
diff --git a/boards/ambiq/apollo4p_evb/apollo4p_evb.dts b/boards/ambiq/apollo4p_evb/apollo4p_evb.dts
index c678604f358..71ccc5399fd 100644
--- a/boards/ambiq/apollo4p_evb/apollo4p_evb.dts
+++ b/boards/ambiq/apollo4p_evb/apollo4p_evb.dts
@@ -1,5 +1,6 @@
/dts-v1/;
#include
+#include
#include "apollo4p_evb-pinctrl.dtsi"
@@ -45,13 +46,18 @@
buttons {
compatible = "gpio-keys";
+ polling-mode;
button0: button_0 {
gpios = <&gpio0_31 18 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
label = "BTN0";
+ zephyr,code =