Compare commits
24 Commits
v3.7-branc
...
collab-mes
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e5e7142b3d | ||
|
|
955b1f677b | ||
|
|
dab117c85e | ||
|
|
aeeb2053c6 | ||
|
|
1b44e607a8 | ||
|
|
c1f5ae30c6 | ||
|
|
bbd0498803 | ||
|
|
85a856d79a | ||
|
|
ef43b94495 | ||
|
|
62f08da47b | ||
|
|
81dbc697f4 | ||
|
|
dfdce2c122 | ||
|
|
6724345372 | ||
|
|
0bb34284d9 | ||
|
|
55175d63e4 | ||
|
|
d7b4497054 | ||
|
|
9d61afa758 | ||
|
|
cddbafe374 | ||
|
|
71b29f4796 | ||
|
|
563aa9be92 | ||
|
|
6874a4a719 | ||
|
|
380bd5483e | ||
|
|
988ad5b0c2 | ||
|
|
470c0d13a0 |
18
.github/ISSUE_TEMPLATE/001_bug_report.md
vendored
18
.github/ISSUE_TEMPLATE/001_bug_report.md
vendored
@@ -6,8 +6,8 @@ labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
<!--
|
||||
**Notes**
|
||||
|
||||
**Notes (delete this)**
|
||||
Github Discussions (https://github.com/zephyrproject-rtos/zephyr/discussions)
|
||||
are available to first verify that the issue is a genuine Zephyr bug and not a
|
||||
consequence of Zephyr services misuse.
|
||||
@@ -16,10 +16,8 @@ This issue list is only for bugs in the main Zephyr code base
|
||||
(https://github.com/zephyrproject-rtos/zephyr/). If the bug is for a project
|
||||
fork (such as NCS) specific feature, please open an issue in the fork project
|
||||
instead.
|
||||
-->
|
||||
|
||||
**Describe the bug**
|
||||
<!--
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
Please also mention any information which could help others to understand
|
||||
@@ -29,43 +27,31 @@ the problem you're facing:
|
||||
- Is this a regression? If yes, have you been able to "git bisect" it to a
|
||||
specific commit?
|
||||
- ...
|
||||
-->
|
||||
|
||||
**To Reproduce**
|
||||
<!--
|
||||
Steps to reproduce the behavior:
|
||||
1. mkdir build; cd build
|
||||
2. cmake -DBOARD=board\_xyz
|
||||
3. make
|
||||
4. See error
|
||||
-->
|
||||
|
||||
**Expected behavior**
|
||||
<!--
|
||||
A clear and concise description of what you expected to happen.
|
||||
-->
|
||||
|
||||
**Impact**
|
||||
<!--
|
||||
What impact does this issue have on your progress (e.g., annoyance, showstopper)
|
||||
-->
|
||||
|
||||
**Logs and console output**
|
||||
<!--
|
||||
If applicable, add console logs or other types of debug information
|
||||
e.g Wireshark capture or Logic analyzer capture (upload in zip archive).
|
||||
copy-and-paste text and put a code fence (\`\`\`) before and after, to help
|
||||
explain the issue. (if unable to obtain text log, add a screenshot)
|
||||
-->
|
||||
|
||||
**Environment (please complete the following information):**
|
||||
|
||||
- OS: (e.g. Linux, MacOS, Windows)
|
||||
- Toolchain (e.g Zephyr SDK, ...)
|
||||
- Commit SHA or Version used
|
||||
|
||||
**Additional context**
|
||||
<!--
|
||||
Add any other context that could be relevant to your issue, such as pin setting,
|
||||
target configuration, ...
|
||||
-->
|
||||
|
||||
8
.github/ISSUE_TEMPLATE/002_enhancement.md
vendored
8
.github/ISSUE_TEMPLATE/002_enhancement.md
vendored
@@ -8,21 +8,13 @@ assignees: ''
|
||||
---
|
||||
|
||||
**Is your enhancement proposal related to a problem? Please describe.**
|
||||
<!--
|
||||
A clear and concise description of what the problem is.
|
||||
-->
|
||||
|
||||
**Describe the solution you'd like**
|
||||
<!--
|
||||
A clear and concise description of what you want to happen.
|
||||
-->
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
<!--
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
-->
|
||||
|
||||
**Additional context**
|
||||
<!--
|
||||
Add any other context or graphics (drag-and-drop an image) about the feature request here.
|
||||
-->
|
||||
|
||||
23
.github/ISSUE_TEMPLATE/003_rfc-proposal.md
vendored
23
.github/ISSUE_TEMPLATE/003_rfc-proposal.md
vendored
@@ -9,52 +9,43 @@ assignees: ''
|
||||
|
||||
## Introduction
|
||||
|
||||
<!--
|
||||
This section targets end users, TSC members, maintainers and anyone else that might
|
||||
need a quick explanation of your proposed change.
|
||||
-->
|
||||
|
||||
### Problem description
|
||||
<!--
|
||||
|
||||
Why do we want this change and what problem are we trying to address?
|
||||
-->
|
||||
|
||||
### Proposed change
|
||||
<!--
|
||||
|
||||
A brief summary of the proposed change - the 10,000 ft view on what it will
|
||||
change once this change is implemented.
|
||||
-->
|
||||
|
||||
## Detailed RFC
|
||||
<!--
|
||||
|
||||
In this section of the document the target audience is the dev team. Upon
|
||||
reading this section each engineer should have a rather clear picture of what
|
||||
needs to be done in order to implement the described feature.
|
||||
-->
|
||||
|
||||
### Proposed change (Detailed)
|
||||
<!--
|
||||
|
||||
This section is freeform - you should describe your change in as much detail
|
||||
as possible. Please also ensure to include any context or background info here.
|
||||
For example, do we have existing components which can be reused or altered.
|
||||
|
||||
By reading this section, each team member should be able to know what exactly
|
||||
you're planning to change and how.
|
||||
-->
|
||||
|
||||
### Dependencies
|
||||
<!--
|
||||
|
||||
Highlight how the change may affect the rest of the project (new components,
|
||||
modifications in other areas), or other teams/projects.
|
||||
-->
|
||||
|
||||
### Concerns and Unresolved Questions
|
||||
<!--
|
||||
|
||||
List any concerns, unknowns, and generally unresolved questions etc.
|
||||
-->
|
||||
|
||||
## Alternatives
|
||||
<!--
|
||||
|
||||
List any alternatives considered, and the reasons for choosing this option
|
||||
over them.
|
||||
-->
|
||||
|
||||
@@ -8,21 +8,13 @@ assignees: ''
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
<!--
|
||||
A clear and concise description of what the problem is.
|
||||
-->
|
||||
|
||||
**Describe the solution you'd like**
|
||||
<!--
|
||||
A clear and concise description of what you want to happen.
|
||||
-->
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
<!--
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
-->
|
||||
|
||||
**Additional context**
|
||||
<!--
|
||||
Add any other context or graphics (drag-and-drop an image) about the feature request here.
|
||||
-->
|
||||
|
||||
26
.github/workflows/assigner.yml
vendored
26
.github/workflows/assigner.yml
vendored
@@ -15,36 +15,24 @@ on:
|
||||
types:
|
||||
- labeled
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
assignment:
|
||||
name: Pull Request Assignment
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-22.04
|
||||
permissions:
|
||||
pull-requests: write # to add assignees to pull requests
|
||||
issues: write # to add assignees to issues
|
||||
|
||||
steps:
|
||||
- name: Check out source code
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0
|
||||
with:
|
||||
python-version: 3.12
|
||||
cache: pip
|
||||
cache-dependency-path: scripts/requirements-actions.txt
|
||||
|
||||
- name: Install Python packages
|
||||
- name: Install Python dependencies
|
||||
run: |
|
||||
pip install -r scripts/requirements-actions.txt --require-hashes
|
||||
sudo pip3 install -U setuptools wheel pip
|
||||
pip3 install -U PyGithub>=1.55 west
|
||||
|
||||
- name: Check out source code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Run assignment script
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ secrets.ZB_GITHUB_TOKEN }}
|
||||
run: |
|
||||
FLAGS="-v"
|
||||
FLAGS+=" -o ${{ github.event.repository.owner.login }}"
|
||||
|
||||
4
.github/workflows/backport.yml
vendored
4
.github/workflows/backport.yml
vendored
@@ -24,8 +24,8 @@ jobs:
|
||||
)
|
||||
steps:
|
||||
- name: Backport
|
||||
uses: zephyrproject-rtos/action-backport@7e74f601d11eaca577742445e87775b5651a965f # v2.0.3-3
|
||||
uses: zephyrproject-rtos/action-backport@v2.0.3-3
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
github_token: ${{ secrets.ZB_GITHUB_TOKEN }}
|
||||
issue_labels: Backport
|
||||
labels_template: '["Backport"]'
|
||||
|
||||
12
.github/workflows/backport_issue_check.yml
vendored
12
.github/workflows/backport_issue_check.yml
vendored
@@ -2,26 +2,18 @@ name: Backport Issue Check
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
types:
|
||||
- edited
|
||||
- opened
|
||||
- reopened
|
||||
- synchronize
|
||||
branches:
|
||||
- v*-branch
|
||||
|
||||
jobs:
|
||||
backport:
|
||||
name: Backport Issue Check
|
||||
concurrency:
|
||||
group: backport-issue-check-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
runs-on: ubuntu-22.04
|
||||
if: github.repository == 'zephyrproject-rtos/zephyr'
|
||||
|
||||
steps:
|
||||
- name: Check out source code
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Python dependencies
|
||||
run: |
|
||||
@@ -30,7 +22,7 @@ jobs:
|
||||
|
||||
- name: Run backport issue checker
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ secrets.ZB_GITHUB_TOKEN }}
|
||||
run: |
|
||||
./scripts/release/list_backports.py \
|
||||
-o ${{ github.event.repository.owner.login }} \
|
||||
|
||||
4
.github/workflows/bsim-tests-publish.yaml
vendored
4
.github/workflows/bsim-tests-publish.yaml
vendored
@@ -13,12 +13,12 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Download artifacts
|
||||
uses: dawidd6/action-download-artifact@07ab29fd4a977ae4d2b275087cf67563dfdf0295 # v9
|
||||
uses: dawidd6/action-download-artifact@v3
|
||||
with:
|
||||
run_id: ${{ github.event.workflow_run.id }}
|
||||
|
||||
- name: Publish BabbleSim Test Results
|
||||
uses: EnricoMi/publish-unit-test-result-action@170bf24d20d201b842d7a52403b73ed297e6645b # v2.18.0
|
||||
uses: EnricoMi/publish-unit-test-result-action@v2
|
||||
with:
|
||||
check_name: BabbleSim Test Results
|
||||
comment_mode: off
|
||||
|
||||
18
.github/workflows/bsim-tests.yaml
vendored
18
.github/workflows/bsim-tests.yaml
vendored
@@ -34,7 +34,7 @@ jobs:
|
||||
runs-on:
|
||||
group: zephyr-runner-v2-linux-x64-4xlarge
|
||||
container:
|
||||
image: ghcr.io/zephyrproject-rtos/ci:v0.26.18
|
||||
image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.26.13.20240601
|
||||
options: '--entrypoint /bin/bash'
|
||||
env:
|
||||
ZEPHYR_TOOLCHAIN_VARIANT: zephyr
|
||||
@@ -63,7 +63,7 @@ jobs:
|
||||
git remote set-url origin ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -85,7 +85,7 @@ jobs:
|
||||
echo "ZEPHYR_SDK_INSTALL_DIR=/opt/toolchains/zephyr-sdk-$( cat SDK_VERSION )" >> $GITHUB_ENV
|
||||
|
||||
- name: Check common triggering files
|
||||
uses: tj-actions/changed-files@823fcebdb31bb35fdf2229d9f769b400309430d0 # v46.0.3
|
||||
uses: tj-actions/changed-files@v44
|
||||
id: check-common-files
|
||||
with:
|
||||
files: |
|
||||
@@ -100,7 +100,7 @@ jobs:
|
||||
tests/bsim/*
|
||||
|
||||
- name: Check if Bluethooth files changed
|
||||
uses: tj-actions/changed-files@823fcebdb31bb35fdf2229d9f769b400309430d0 # v46.0.3
|
||||
uses: tj-actions/changed-files@v44
|
||||
id: check-bluetooth-files
|
||||
with:
|
||||
files: |
|
||||
@@ -109,7 +109,7 @@ jobs:
|
||||
subsys/bluetooth/
|
||||
|
||||
- name: Check if Networking files changed
|
||||
uses: tj-actions/changed-files@823fcebdb31bb35fdf2229d9f769b400309430d0 # v46.0.3
|
||||
uses: tj-actions/changed-files@v44
|
||||
id: check-networking-files
|
||||
with:
|
||||
files: |
|
||||
@@ -122,7 +122,7 @@ jobs:
|
||||
include/zephyr/net/ieee802154*
|
||||
|
||||
- name: Check if UART files changed
|
||||
uses: tj-actions/changed-files@823fcebdb31bb35fdf2229d9f769b400309430d0 # v46.0.3
|
||||
uses: tj-actions/changed-files@v44
|
||||
id: check-uart-files
|
||||
with:
|
||||
files: |
|
||||
@@ -168,7 +168,7 @@ jobs:
|
||||
|
||||
- name: Upload Unit Test Results in HTML
|
||||
if: always()
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: HTML Unit Test Results
|
||||
if-no-files-found: ignore
|
||||
@@ -176,7 +176,7 @@ jobs:
|
||||
junit.html
|
||||
|
||||
- name: Publish Unit Test Results
|
||||
uses: EnricoMi/publish-unit-test-result-action@170bf24d20d201b842d7a52403b73ed297e6645b # v2.18.0
|
||||
uses: EnricoMi/publish-unit-test-result-action@v2
|
||||
with:
|
||||
check_name: Bsim Test Results
|
||||
files: "junit.xml"
|
||||
@@ -184,7 +184,7 @@ jobs:
|
||||
|
||||
- name: Upload Event Details
|
||||
if: always()
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: event
|
||||
path: |
|
||||
|
||||
67
.github/workflows/bug_snapshot.yaml
vendored
Normal file
67
.github/workflows/bug_snapshot.yaml
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
# Copyright (c) 2021, 2022 Nordic Semiconductor ASA
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
# Make a snapshot of open bugs as a python pickle file, compressed
|
||||
# using xz. Upload the xz file to Amazon S3.
|
||||
|
||||
name: Bug Snapshot
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
branches: [main]
|
||||
schedule:
|
||||
# Run daily at 14:05
|
||||
- cron: '5 14 * * *'
|
||||
|
||||
jobs:
|
||||
make_bugs_pickle:
|
||||
name: Make bugs pickle
|
||||
runs-on: ubuntu-22.04
|
||||
if: github.repository_owner == 'zephyrproject-rtos'
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Python dependencies
|
||||
run: |
|
||||
sudo pip3 install -U setuptools wheel pip
|
||||
pip3 install -U pygithub
|
||||
|
||||
- name: Snapshot bugs
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
BUGS_PICKLE_FILENAME="zephyr-bugs-$(date -I).pickle.xz"
|
||||
BUGS_PICKLE_PATH="${RUNNER_TEMP}/${BUGS_PICKLE_FILENAME}"
|
||||
|
||||
set -euo pipefail
|
||||
python3 scripts/make_bugs_pickle.py | xz > ${BUGS_PICKLE_PATH}
|
||||
|
||||
echo "BUGS_PICKLE_FILENAME=${BUGS_PICKLE_FILENAME}" >> ${GITHUB_ENV}
|
||||
echo "BUGS_PICKLE_PATH=${BUGS_PICKLE_PATH}" >> ${GITHUB_ENV}
|
||||
|
||||
- name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@v4
|
||||
with:
|
||||
aws-access-key-id: ${{ vars.AWS_BUILDS_ZEPHYR_BUG_SNAPSHOT_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_BUILDS_ZEPHYR_BUG_SNAPSHOT_SECRET_ACCESS_KEY }}
|
||||
aws-region: us-east-1
|
||||
|
||||
- name: Upload to AWS S3
|
||||
run: |
|
||||
REPOSITORY_NAME="${GITHUB_REPOSITORY#*/}"
|
||||
|
||||
PUBLISH_BUCKET="builds.zephyrproject.org"
|
||||
PUBLISH_DOMAIN="builds.zephyrproject.io"
|
||||
if [ "${{github.event_name}}" = "schedule" ]; then
|
||||
PUBLISH_ROOT="${REPOSITORY_NAME}/bug-snapshot/daily"
|
||||
else
|
||||
PUBLISH_ROOT="${REPOSITORY_NAME}/bug-snapshot"
|
||||
fi
|
||||
|
||||
PUBLISH_UPLOAD_URI="s3://${PUBLISH_BUCKET}/${PUBLISH_ROOT}/${BUGS_PICKLE_FILENAME}"
|
||||
PUBLISH_DOWNLOAD_URI="https://${PUBLISH_DOMAIN}/${PUBLISH_ROOT}/${BUGS_PICKLE_FILENAME}"
|
||||
|
||||
aws s3 cp --quiet ${BUGS_PICKLE_PATH} ${PUBLISH_UPLOAD_URI}
|
||||
echo "Bug pickle is available at: ${PUBLISH_DOWNLOAD_URI}" >> ${GITHUB_STEP_SUMMARY}
|
||||
12
.github/workflows/clang.yaml
vendored
12
.github/workflows/clang.yaml
vendored
@@ -12,7 +12,7 @@ jobs:
|
||||
runs-on:
|
||||
group: zephyr-runner-v2-linux-x64-4xlarge
|
||||
container:
|
||||
image: ghcr.io/zephyrproject-rtos/ci:v0.26.18
|
||||
image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.26.13.20240601
|
||||
options: '--entrypoint /bin/bash'
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -49,7 +49,7 @@ jobs:
|
||||
git remote set-url origin ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 0
|
||||
@@ -125,7 +125,7 @@ jobs:
|
||||
|
||||
- name: Upload Unit Test Results
|
||||
if: always() && steps.twister.outputs.report_needed != 0
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: Unit Test Results (Subset ${{ matrix.platform }})
|
||||
path: twister-out/twister.xml
|
||||
@@ -137,7 +137,7 @@ jobs:
|
||||
if: (success() || failure() ) && needs.clang-build.outputs.report_needed != 0
|
||||
steps:
|
||||
- name: Download Artifacts
|
||||
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
path: artifacts
|
||||
- name: Merge Test Results
|
||||
@@ -148,7 +148,7 @@ jobs:
|
||||
|
||||
- name: Upload Unit Test Results in HTML
|
||||
if: always()
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: HTML Unit Test Results
|
||||
if-no-files-found: ignore
|
||||
@@ -156,7 +156,7 @@ jobs:
|
||||
junit-clang.html
|
||||
|
||||
- name: Publish Unit Test Results
|
||||
uses: EnricoMi/publish-unit-test-result-action@170bf24d20d201b842d7a52403b73ed297e6645b # v2.18.0
|
||||
uses: EnricoMi/publish-unit-test-result-action@v2
|
||||
if: always()
|
||||
with:
|
||||
check_name: Unit Test Results
|
||||
|
||||
14
.github/workflows/codecov.yaml
vendored
14
.github/workflows/codecov.yaml
vendored
@@ -14,7 +14,7 @@ jobs:
|
||||
runs-on:
|
||||
group: zephyr-runner-v2-linux-x64-4xlarge
|
||||
container:
|
||||
image: ghcr.io/zephyrproject-rtos/ci:v0.26.18
|
||||
image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.26.13.20240601
|
||||
options: '--entrypoint /bin/bash'
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -61,7 +61,7 @@ jobs:
|
||||
git remote set-url origin ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}
|
||||
|
||||
- name: checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -121,7 +121,7 @@ jobs:
|
||||
|
||||
- name: Upload Coverage Results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: Coverage Data (Subset ${{ matrix.normalized }})
|
||||
path: |
|
||||
@@ -137,12 +137,12 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Download Artifacts
|
||||
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
path: coverage/reports
|
||||
|
||||
@@ -209,7 +209,7 @@ jobs:
|
||||
|
||||
- name: Upload Merged Coverage Results and Report
|
||||
if: always()
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: Coverage Data and report
|
||||
path: |
|
||||
@@ -220,7 +220,7 @@ jobs:
|
||||
|
||||
- name: Upload coverage to Codecov
|
||||
if: always()
|
||||
uses: codecov/codecov-action@0565863a31f2c772f9f0395002a31e3f06189574 # v5.4.0
|
||||
uses: codecov/codecov-action@v4
|
||||
with:
|
||||
env_vars: OS,PYTHON
|
||||
fail_ci_if_error: false
|
||||
|
||||
4
.github/workflows/coding_guidelines.yml
vendored
4
.github/workflows/coding_guidelines.yml
vendored
@@ -8,13 +8,13 @@ jobs:
|
||||
name: Run coding guidelines checks on patch series (PR)
|
||||
steps:
|
||||
- name: Checkout the code
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 0
|
||||
|
||||
- name: cache-pip
|
||||
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: ${{ runner.os }}-pip-${{ hashFiles('.github/workflows/coding_guidelines.yml') }}
|
||||
|
||||
31
.github/workflows/compliance.yml
vendored
31
.github/workflows/compliance.yml
vendored
@@ -1,12 +1,6 @@
|
||||
name: Compliance Checks
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types:
|
||||
- edited
|
||||
- opened
|
||||
- reopened
|
||||
- synchronize
|
||||
on: pull_request
|
||||
|
||||
jobs:
|
||||
check_compliance:
|
||||
@@ -18,18 +12,18 @@ jobs:
|
||||
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: Checkout the code
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: 3.11
|
||||
|
||||
- name: cache-pip
|
||||
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: ${{ runner.os }}-pip-${{ hashFiles('.github/workflows/compliance.yml') }}
|
||||
@@ -58,14 +52,6 @@ jobs:
|
||||
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
|
||||
|
||||
- name: Check for PR description
|
||||
if: ${{ github.event.pull_request.body == '' }}
|
||||
continue-on-error: true
|
||||
id: pr_description
|
||||
run: |
|
||||
echo "Pull request description cannot be empty."
|
||||
exit 1
|
||||
|
||||
- name: Run Compliance Tests
|
||||
continue-on-error: true
|
||||
id: compliance
|
||||
@@ -82,7 +68,7 @@ jobs:
|
||||
-c origin/${BASE_REF}..
|
||||
|
||||
- name: upload-results
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
uses: actions/upload-artifact@v4
|
||||
continue-on-error: true
|
||||
with:
|
||||
name: compliance.xml
|
||||
@@ -108,12 +94,5 @@ jobs:
|
||||
done
|
||||
|
||||
if [ "${exit}" == "1" ]; then
|
||||
echo "Compliance error, check for error messages in the \"Run Compliance Tests\" step"
|
||||
echo "You can run this step locally with the ./scripts/ci/check_compliance.py script."
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
if [ "${{ steps.pr_description.outcome }}" == "failure" ]; then
|
||||
echo "PR description cannot be empty"
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
38
.github/workflows/daily_test_version.yml
vendored
Normal file
38
.github/workflows/daily_test_version.yml
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
# Copyright (c) 2020 Intel Corp.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
name: Publish commit for daily testing
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '50 22 * * *'
|
||||
push:
|
||||
branches:
|
||||
- refs/tags/*
|
||||
|
||||
jobs:
|
||||
get_version:
|
||||
runs-on: ubuntu-22.04
|
||||
if: github.repository == 'zephyrproject-rtos/zephyr'
|
||||
|
||||
steps:
|
||||
- name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@v4
|
||||
with:
|
||||
aws-access-key-id: ${{ vars.AWS_TESTING_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_TESTING_SECRET_ACCESS_KEY }}
|
||||
aws-region: us-east-1
|
||||
|
||||
- name: install-pip
|
||||
run: |
|
||||
pip3 install gitpython
|
||||
|
||||
- name: checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Upload to AWS S3
|
||||
run: |
|
||||
python3 scripts/ci/version_mgr.py --update .
|
||||
aws s3 cp versions.json s3://testing.zephyrproject.org/daily_tests/versions.json
|
||||
14
.github/workflows/devicetree_checks.yml
vendored
14
.github/workflows/devicetree_checks.yml
vendored
@@ -27,22 +27,22 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: ['3.10', '3.11', '3.12']
|
||||
os: [ubuntu-22.04, macos-14, windows-2022]
|
||||
os: [ubuntu-22.04, macos-11, windows-2022]
|
||||
exclude:
|
||||
- os: macos-14
|
||||
- os: macos-11
|
||||
python-version: 3.6
|
||||
- os: windows-2022
|
||||
python-version: 3.6
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
uses: actions/checkout@v4
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- name: cache-pip-linux
|
||||
if: startsWith(runner.os, 'Linux')
|
||||
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: ${{ runner.os }}-pip-${{ matrix.python-version }}
|
||||
@@ -50,7 +50,7 @@ jobs:
|
||||
${{ runner.os }}-pip-${{ matrix.python-version }}
|
||||
- name: cache-pip-mac
|
||||
if: startsWith(runner.os, 'macOS')
|
||||
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/Library/Caches/pip
|
||||
# Trailing '-' was just to get a different cache name
|
||||
@@ -59,7 +59,7 @@ jobs:
|
||||
${{ runner.os }}-pip-${{ matrix.python-version }}-
|
||||
- name: cache-pip-win
|
||||
if: startsWith(runner.os, 'Windows')
|
||||
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~\AppData\Local\pip\Cache
|
||||
key: ${{ runner.os }}-pip-${{ matrix.python-version }}
|
||||
|
||||
20
.github/workflows/do_not_merge.yml
vendored
Normal file
20
.github/workflows/do_not_merge.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
name: Do Not Merge
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [synchronize, opened, reopened, labeled, unlabeled]
|
||||
|
||||
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
|
||||
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."
|
||||
exit 1
|
||||
20
.github/workflows/doc-build.yml
vendored
20
.github/workflows/doc-build.yml
vendored
@@ -32,12 +32,12 @@ jobs:
|
||||
file_check: ${{ steps.check-doc-files.outputs.any_changed }}
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 0
|
||||
- name: Check if Documentation related files changed
|
||||
uses: tj-actions/changed-files@823fcebdb31bb35fdf2229d9f769b400309430d0 # v46.0.3
|
||||
uses: tj-actions/changed-files@v44
|
||||
id: check-doc-files
|
||||
with:
|
||||
files: |
|
||||
@@ -86,7 +86,7 @@ jobs:
|
||||
echo "${HOME}/.local/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 0
|
||||
@@ -104,7 +104,7 @@ jobs:
|
||||
git log --graph --oneline HEAD...${PR_HEAD}
|
||||
|
||||
- name: cache-pip
|
||||
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: pip-${{ hashFiles('doc/requirements.txt') }}
|
||||
@@ -154,13 +154,13 @@ jobs:
|
||||
tar cfJ api-coverage.tar.xz coverage-report
|
||||
|
||||
- name: upload-build
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: html-output
|
||||
path: html-output.tar.xz
|
||||
|
||||
- name: upload-api-coverage
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: api-coverage
|
||||
path: api-coverage.tar.xz
|
||||
@@ -180,7 +180,7 @@ jobs:
|
||||
echo "API Coverage Report will be available shortly at: ${API_COVERAGE_URL}" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
- name: upload-pr-number
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
uses: actions/upload-artifact@v4
|
||||
if: github.event_name == 'pull_request'
|
||||
with:
|
||||
name: pr_num
|
||||
@@ -212,7 +212,7 @@ jobs:
|
||||
echo "ZEPHYR_RUNNER_CLOUD_POD = ${ZEPHYR_RUNNER_CLOUD_POD}"
|
||||
|
||||
- name: checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: install-pkgs
|
||||
run: |
|
||||
@@ -220,7 +220,7 @@ jobs:
|
||||
apt-get install -y python3-pip python3-venv ninja-build doxygen graphviz librsvg2-bin imagemagick
|
||||
|
||||
- name: cache-pip
|
||||
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: pip-${{ hashFiles('doc/requirements.txt') }}
|
||||
@@ -259,7 +259,7 @@ jobs:
|
||||
|
||||
- name: upload-build
|
||||
if: always()
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: pdf-output
|
||||
if-no-files-found: ignore
|
||||
|
||||
6
.github/workflows/doc-publish-pr.yml
vendored
6
.github/workflows/doc-publish-pr.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Download artifacts
|
||||
uses: dawidd6/action-download-artifact@07ab29fd4a977ae4d2b275087cf67563dfdf0295 # v9
|
||||
uses: dawidd6/action-download-artifact@v3
|
||||
with:
|
||||
workflow: doc-build.yml
|
||||
run_id: ${{ github.event.workflow_run.id }}
|
||||
@@ -32,7 +32,7 @@ jobs:
|
||||
|
||||
- name: Check PR number
|
||||
id: check-pr
|
||||
uses: carpentries/actions/check-valid-pr@e27aa6c531dadd357d2aa4c9a21e90849e23e963 # v0.14.0
|
||||
uses: carpentries/actions/check-valid-pr@v0.14.0
|
||||
with:
|
||||
pr: ${{ env.PR_NUM }}
|
||||
sha: ${{ github.event.workflow_run.head_sha }}
|
||||
@@ -51,7 +51,7 @@ jobs:
|
||||
fi
|
||||
|
||||
- name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0
|
||||
uses: aws-actions/configure-aws-credentials@v4
|
||||
with:
|
||||
aws-access-key-id: ${{ vars.AWS_BUILDS_ZEPHYR_PR_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_BUILDS_ZEPHYR_PR_SECRET_ACCESS_KEY }}
|
||||
|
||||
4
.github/workflows/doc-publish.yml
vendored
4
.github/workflows/doc-publish.yml
vendored
@@ -24,7 +24,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Download artifacts
|
||||
uses: dawidd6/action-download-artifact@07ab29fd4a977ae4d2b275087cf67563dfdf0295 # v9
|
||||
uses: dawidd6/action-download-artifact@v3
|
||||
with:
|
||||
workflow: doc-build.yml
|
||||
run_id: ${{ github.event.workflow_run.id }}
|
||||
@@ -37,7 +37,7 @@ jobs:
|
||||
fi
|
||||
|
||||
- name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0
|
||||
uses: aws-actions/configure-aws-credentials@v4
|
||||
with:
|
||||
aws-access-key-id: ${{ vars.AWS_DOCS_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_DOCS_SECRET_ACCESS_KEY }}
|
||||
|
||||
4
.github/workflows/errno.yml
vendored
4
.github/workflows/errno.yml
vendored
@@ -10,7 +10,7 @@ jobs:
|
||||
check-errno:
|
||||
runs-on: ubuntu-22.04
|
||||
container:
|
||||
image: ghcr.io/zephyrproject-rtos/ci:v0.26.18
|
||||
image: ghcr.io/zephyrproject-rtos/ci:v0.26.13
|
||||
|
||||
steps:
|
||||
- name: Apply container owner mismatch workaround
|
||||
@@ -22,7 +22,7 @@ jobs:
|
||||
git config --global --add safe.directory ${GITHUB_WORKSPACE}
|
||||
|
||||
- name: checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Environment Setup
|
||||
run: |
|
||||
|
||||
95
.github/workflows/footprint-tracking.yml
vendored
Normal file
95
.github/workflows/footprint-tracking.yml
vendored
Normal file
@@ -0,0 +1,95 @@
|
||||
name: Footprint Tracking
|
||||
|
||||
# Run every 12 hours and on tags
|
||||
on:
|
||||
schedule:
|
||||
- cron: '50 1/12 * * *'
|
||||
push:
|
||||
paths:
|
||||
- 'VERSION'
|
||||
- '.github/workflows/footprint-tracking.yml'
|
||||
branches:
|
||||
- main
|
||||
- v*-branch
|
||||
tags:
|
||||
# only publish v* tags, do not care about zephyr-v* which point to the
|
||||
# same commit
|
||||
- 'v*'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.head_ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
footprint-tracking:
|
||||
runs-on:
|
||||
group: zephyr-runner-v2-linux-x64-4xlarge
|
||||
if: github.repository_owner == 'zephyrproject-rtos'
|
||||
container:
|
||||
image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.26.13.20240601
|
||||
options: '--entrypoint /bin/bash'
|
||||
strategy:
|
||||
fail-fast: false
|
||||
env:
|
||||
ZEPHYR_TOOLCHAIN_VARIANT: zephyr
|
||||
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: Update PATH for west
|
||||
run: |
|
||||
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: Install packages
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y python3-venv
|
||||
sudo pip3 install -U setuptools wheel pip gitpython
|
||||
|
||||
- name: checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Environment Setup
|
||||
run: |
|
||||
echo "ZEPHYR_SDK_INSTALL_DIR=/opt/toolchains/zephyr-sdk-$( cat SDK_VERSION )" >> $GITHUB_ENV
|
||||
|
||||
- name: west setup
|
||||
run: |
|
||||
west init -l . || true
|
||||
west config --global update.narrow true
|
||||
west update 2>&1 1> west.update.log || west update 2>&1 1> west.update2.log
|
||||
|
||||
- name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@v4
|
||||
with:
|
||||
aws-access-key-id: ${{ vars.AWS_TESTING_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_TESTING_SECRET_ACCESS_KEY }}
|
||||
aws-region: us-east-1
|
||||
|
||||
- name: Record Footprint
|
||||
env:
|
||||
BASE_REF: ${{ github.base_ref }}
|
||||
run: |
|
||||
export ZEPHYR_BASE=${PWD}
|
||||
./scripts/footprint/track.py -p scripts/footprint/plan.txt
|
||||
|
||||
- name: Upload footprint data
|
||||
run: |
|
||||
python3 -m venv .venv
|
||||
. .venv/bin/activate
|
||||
pip3 install awscli
|
||||
aws s3 sync --quiet footprint_data/ s3://testing.zephyrproject.org/footprint_data/
|
||||
@@ -12,7 +12,7 @@ jobs:
|
||||
if: github.repository == 'zephyrproject-rtos/zephyr'
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
- uses: actions/checkout@v4
|
||||
- uses: zephyrproject-rtos/action-first-interaction@v1.1.1-zephyr-5
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
13
.github/workflows/hello_world_multiplatform.yaml
vendored
13
.github/workflows/hello_world_multiplatform.yaml
vendored
@@ -26,11 +26,11 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-22.04, macos-13, macos-14, windows-2022]
|
||||
os: [ubuntu-22.04, macos-12, macos-14, windows-2022]
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: zephyr
|
||||
fetch-depth: 0
|
||||
@@ -49,12 +49,12 @@ jobs:
|
||||
git log --graph --oneline HEAD...${PR_HEAD}
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: 3.11
|
||||
|
||||
- name: Setup Zephyr project
|
||||
uses: zephyrproject-rtos/action-zephyr-setup@f7b70269a8eb01f70c8e710891e4c94972a2f6b4 # v1.0.6
|
||||
uses: zephyrproject-rtos/action-zephyr-setup@v1
|
||||
with:
|
||||
app-path: zephyr
|
||||
toolchains: all
|
||||
@@ -68,13 +68,12 @@ 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 -T samples/cpp/hello_world -v $EXTRA_TWISTER_FLAGS
|
||||
./scripts/twister --force-color --inline-logs -T samples/hello_world -v $EXTRA_TWISTER_FLAGS
|
||||
|
||||
- name: Upload artifacts
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
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
|
||||
|
||||
54
.github/workflows/issue_count.yml
vendored
Normal file
54
.github/workflows/issue_count.yml
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
name: Issue Tracker
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '*/10 * * * *'
|
||||
|
||||
env:
|
||||
OUTPUT_FILE_NAME: IssuesReport.md
|
||||
COMMITTER_EMAIL: actions@github.com
|
||||
COMMITTER_NAME: github-actions
|
||||
COMMITTER_USERNAME: github-actions
|
||||
|
||||
|
||||
jobs:
|
||||
track-issues:
|
||||
name: "Collect Issue Stats"
|
||||
runs-on: ubuntu-22.04
|
||||
if: github.repository == 'zephyrproject-rtos/zephyr'
|
||||
|
||||
steps:
|
||||
- name: Download configuration file
|
||||
run: |
|
||||
wget -q https://raw.githubusercontent.com/$GITHUB_REPOSITORY/main/.github/workflows/issues-report-config.json
|
||||
|
||||
- name: install-packages
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install discount
|
||||
|
||||
- uses: brcrista/summarize-issues@v4
|
||||
with:
|
||||
title: 'Issues Report for ${{ github.repository }}'
|
||||
configPath: 'issues-report-config.json'
|
||||
outputPath: ${{ env.OUTPUT_FILE_NAME }}
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: upload-stats
|
||||
uses: actions/upload-artifact@v4
|
||||
continue-on-error: true
|
||||
with:
|
||||
name: ${{ env.OUTPUT_FILE_NAME }}
|
||||
path: ${{ env.OUTPUT_FILE_NAME }}
|
||||
|
||||
- name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@v4
|
||||
with:
|
||||
aws-access-key-id: ${{ vars.AWS_TESTING_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_TESTING_SECRET_ACCESS_KEY }}
|
||||
aws-region: us-east-1
|
||||
|
||||
- name: Post Results
|
||||
run: |
|
||||
mkd2html IssuesReport.md IssuesReport.html
|
||||
aws s3 cp --quiet IssuesReport.html s3://testing.zephyrproject.org/issues/$GITHUB_REPOSITORY/index.html
|
||||
6
.github/workflows/license_check.yml
vendored
6
.github/workflows/license_check.yml
vendored
@@ -8,16 +8,16 @@ jobs:
|
||||
name: Scan code for licenses
|
||||
steps:
|
||||
- name: Checkout the code
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Scan the code
|
||||
id: scancode
|
||||
uses: zephyrproject-rtos/action_scancode@23ef91ce31cd4b954366a7b71eea47520da9b380 # v4
|
||||
uses: zephyrproject-rtos/action_scancode@v4
|
||||
with:
|
||||
directory-to-scan: 'scan/'
|
||||
- name: Artifact Upload
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: scancode
|
||||
path: ./artifacts
|
||||
|
||||
4
.github/workflows/manifest.yml
vendored
4
.github/workflows/manifest.yml
vendored
@@ -8,7 +8,7 @@ jobs:
|
||||
name: Manifest
|
||||
steps:
|
||||
- name: Checkout the code
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: zephyrproject/zephyr
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
@@ -28,7 +28,7 @@ jobs:
|
||||
- name: Manifest
|
||||
uses: zephyrproject-rtos/action-manifest@v1.2.2
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
github-token: ${{ secrets.ZB_GITHUB_TOKEN }}
|
||||
manifest-path: 'west.yml'
|
||||
checkout-path: 'zephyrproject/zephyr'
|
||||
use-tree-checkout: 'true'
|
||||
|
||||
49
.github/workflows/pr_metadata_check.yml
vendored
49
.github/workflows/pr_metadata_check.yml
vendored
@@ -1,49 +0,0 @@
|
||||
name: PR Metadata Check
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types:
|
||||
- synchronize
|
||||
- opened
|
||||
- reopened
|
||||
- labeled
|
||||
- unlabeled
|
||||
- edited
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
do-not-merge:
|
||||
name: Prevent Merging
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
||||
with:
|
||||
python-version: 3.12
|
||||
cache: pip
|
||||
cache-dependency-path: scripts/requirements-actions.txt
|
||||
|
||||
- name: Install Python dependencies
|
||||
run: |
|
||||
pip install -r scripts/requirements-actions.txt --require-hashes
|
||||
|
||||
- name: Run the check script
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
./scripts/ci/do_not_merge.py -p "${{ github.event.pull_request.number }}"
|
||||
|
||||
empty_pr_description:
|
||||
if: ${{ github.event.pull_request.body == '' }}
|
||||
name: PR Description
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Check for PR description
|
||||
run: |
|
||||
echo "Pull request description cannot be empty."
|
||||
exit 1
|
||||
6
.github/workflows/pylib_tests.yml
vendored
6
.github/workflows/pylib_tests.yml
vendored
@@ -29,14 +29,14 @@ jobs:
|
||||
os: [ubuntu-22.04]
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
uses: actions/checkout@v4
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- name: cache-pip-linux
|
||||
if: startsWith(runner.os, 'Linux')
|
||||
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: ${{ runner.os }}-pip-${{ matrix.python-version }}
|
||||
|
||||
10
.github/workflows/release.yml
vendored
10
.github/workflows/release.yml
vendored
@@ -10,7 +10,7 @@ jobs:
|
||||
release:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -21,12 +21,12 @@ jobs:
|
||||
echo "TRIMMED_VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: REUSE Compliance Check
|
||||
uses: fsfe/reuse-action@bb774aa972c2a89ff34781233d275075cbddf542 # v5.0.0
|
||||
uses: fsfe/reuse-action@v1
|
||||
with:
|
||||
args: spdx -o zephyr-${{ steps.get_version.outputs.VERSION }}.spdx
|
||||
|
||||
- name: upload-results
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
uses: actions/upload-artifact@v4
|
||||
continue-on-error: true
|
||||
with:
|
||||
name: zephyr-${{ steps.get_version.outputs.VERSION }}.spdx
|
||||
@@ -38,7 +38,7 @@ jobs:
|
||||
|
||||
- name: Create Release
|
||||
id: create_release
|
||||
uses: actions/create-release@0cb9c9b65d5d1901c1f53e5e66eaf4afd303e70e # v1.1.4
|
||||
uses: actions/create-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
@@ -50,7 +50,7 @@ jobs:
|
||||
|
||||
- name: Upload Release Assets
|
||||
id: upload-release-asset
|
||||
uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 # v1.0.2
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
|
||||
6
.github/workflows/scripts_tests.yml
vendored
6
.github/workflows/scripts_tests.yml
vendored
@@ -29,7 +29,7 @@ jobs:
|
||||
os: [ubuntu-20.04]
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 0
|
||||
@@ -46,13 +46,13 @@ jobs:
|
||||
git log --graph --oneline HEAD...${PR_HEAD}
|
||||
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
|
||||
- name: cache-pip-linux
|
||||
if: startsWith(runner.os, 'Linux')
|
||||
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: ${{ runner.os }}-pip-${{ matrix.python-version }}
|
||||
|
||||
@@ -18,7 +18,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Delete stale queued workflow runs
|
||||
uses: MajorScruffy/delete-old-workflow-runs@78b5af714fefaefdf74862181c467b061782719e # v0.3.0
|
||||
uses: MajorScruffy/delete-old-workflow-runs@v0.3.0
|
||||
with:
|
||||
repository: ${{ github.repository }}
|
||||
# Remove any workflow runs in "queued" state for more than 1 day
|
||||
|
||||
24
.github/workflows/stats_merged_prs.yml
vendored
Normal file
24
.github/workflows/stats_merged_prs.yml
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
name: Merged PR stats
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
branches:
|
||||
- main
|
||||
- v*-branch
|
||||
types: [closed]
|
||||
jobs:
|
||||
record_merged:
|
||||
if: github.event.pull_request.merged == true && github.repository == 'zephyrproject-rtos/zephyr'
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: PR event
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
ELASTICSEARCH_KEY: ${{ secrets.ELASTICSEARCH_KEY }}
|
||||
ELASTICSEARCH_SERVER: "https://elasticsearch.zephyrproject.io:443"
|
||||
PR_STAT_ES_INDEX: ${{ vars.PR_STAT_ES_INDEX }}
|
||||
run: |
|
||||
pip3 install pygithub elasticsearch
|
||||
python3 ./scripts/ci/stats/merged_prs.py --pull-request ${{ github.event.pull_request.number }} --repo ${{ github.repository }}
|
||||
53
.github/workflows/twister.yaml
vendored
53
.github/workflows/twister.yaml
vendored
@@ -6,7 +6,7 @@ on:
|
||||
- main
|
||||
- v*-branch
|
||||
- collab-*
|
||||
pull_request:
|
||||
pull_request_target:
|
||||
branches:
|
||||
- main
|
||||
- v*-branch
|
||||
@@ -25,7 +25,7 @@ jobs:
|
||||
runs-on:
|
||||
group: zephyr-runner-v2-linux-x64-4xlarge
|
||||
container:
|
||||
image: ghcr.io/zephyrproject-rtos/ci:v0.26.18
|
||||
image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.26.13.20240601
|
||||
options: '--entrypoint /bin/bash'
|
||||
outputs:
|
||||
subset: ${{ steps.output-services.outputs.subset }}
|
||||
@@ -56,22 +56,22 @@ jobs:
|
||||
echo "ZEPHYR_RUNNER_CLOUD_POD = ${ZEPHYR_RUNNER_CLOUD_POD}"
|
||||
|
||||
- name: Clone cached Zephyr repository
|
||||
if: github.event_name == 'pull_request'
|
||||
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'
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
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'
|
||||
if: github.event_name == 'pull_request_target'
|
||||
run: |
|
||||
git config --global user.email "bot@zephyrproject.org"
|
||||
git config --global user.name "Zephyr Bot"
|
||||
@@ -87,7 +87,7 @@ jobs:
|
||||
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'
|
||||
if: github.event_name == 'pull_request_target'
|
||||
id: test-plan
|
||||
run: |
|
||||
export ZEPHYR_BASE=${PWD}
|
||||
@@ -103,7 +103,7 @@ jobs:
|
||||
- name: Determine matrix size
|
||||
id: output-services
|
||||
run: |
|
||||
if [ "${{github.event_name}}" = "pull_request" ]; then
|
||||
if [ "${{github.event_name}}" = "pull_request_target" ]; then
|
||||
if [ -n "${TWISTER_NODES}" ]; then
|
||||
subset="[$(seq -s',' 1 ${TWISTER_NODES})]"
|
||||
else
|
||||
@@ -129,7 +129,7 @@ jobs:
|
||||
needs: twister-build-prep
|
||||
if: needs.twister-build-prep.outputs.size != 0
|
||||
container:
|
||||
image: ghcr.io/zephyrproject-rtos/ci:v0.26.18
|
||||
image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.26.13.20240601
|
||||
options: '--entrypoint /bin/bash'
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -172,7 +172,7 @@ jobs:
|
||||
git remote set-url origin ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 0
|
||||
@@ -180,7 +180,7 @@ jobs:
|
||||
|
||||
- name: Environment Setup
|
||||
run: |
|
||||
if [ "${{github.event_name}}" = "pull_request" ]; then
|
||||
if [ "${{github.event_name}}" = "pull_request_target" ]; then
|
||||
git config --global user.email "bot@zephyrproject.org"
|
||||
git config --global user.name "Zephyr Builder"
|
||||
rm -fr ".git/rebase-apply"
|
||||
@@ -236,7 +236,7 @@ jobs:
|
||||
fi
|
||||
fi
|
||||
|
||||
- if: github.event_name == 'pull_request'
|
||||
- if: github.event_name == 'pull_request_target'
|
||||
name: Run Tests with Twister (Pull Request)
|
||||
run: |
|
||||
rm -f testplan.json
|
||||
@@ -271,7 +271,7 @@ jobs:
|
||||
|
||||
- name: Upload Unit Test Results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: Unit Test Results (Subset ${{ matrix.subset }})
|
||||
if-no-files-found: ignore
|
||||
@@ -293,7 +293,7 @@ jobs:
|
||||
|
||||
- if: matrix.subset == 1 && github.event_name == 'push'
|
||||
name: Upload the list of Python packages
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: Frozen PIP package set
|
||||
path: |
|
||||
@@ -301,6 +301,9 @@ 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
|
||||
runs-on: ubuntu-22.04
|
||||
# the build-and-test job might be skipped, we don't need to run this job then
|
||||
@@ -310,16 +313,30 @@ jobs:
|
||||
# Needed for opensearch and upload script
|
||||
- if: github.event_name == 'push' || github.event_name == 'schedule'
|
||||
name: Checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
|
||||
- name: Download Artifacts
|
||||
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
path: artifacts
|
||||
|
||||
- if: github.event_name == 'push' || github.event_name == 'schedule'
|
||||
name: Upload to opensearch
|
||||
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
|
||||
@@ -328,7 +345,7 @@ jobs:
|
||||
|
||||
- name: Upload Unit Test Results in HTML
|
||||
if: always()
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: HTML Unit Test Results
|
||||
if-no-files-found: ignore
|
||||
@@ -336,7 +353,7 @@ jobs:
|
||||
junit.html
|
||||
|
||||
- name: Publish Unit Test Results
|
||||
uses: EnricoMi/publish-unit-test-result-action@170bf24d20d201b842d7a52403b73ed297e6645b # v2.18.0
|
||||
uses: EnricoMi/publish-unit-test-result-action@v2
|
||||
with:
|
||||
check_name: Unit Test Results
|
||||
files: "**/twister.xml"
|
||||
|
||||
25
.github/workflows/twister_tests.yml
vendored
25
.github/workflows/twister_tests.yml
vendored
@@ -36,31 +36,34 @@ jobs:
|
||||
os: [ubuntu-22.04]
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
uses: actions/checkout@v4
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
cache: pip
|
||||
cache-dependency-path: scripts/requirements-actions.txt
|
||||
|
||||
- name: Install Python packages
|
||||
- name: cache-pip-linux
|
||||
if: startsWith(runner.os, 'Linux')
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: ${{ runner.os }}-pip-${{ matrix.python-version }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pip-${{ matrix.python-version }}
|
||||
- name: install-packages
|
||||
run: |
|
||||
pip install -r scripts/requirements-actions.txt --require-hashes
|
||||
|
||||
pip3 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: ./
|
||||
ZEPHYR_TOOLCHAIN_VARIANT: zephyr
|
||||
run: |
|
||||
export ZEPHYR_BASE=${PWD}
|
||||
echo "Run twister tests"
|
||||
PYTHONPATH=./scripts/tests pytest ./scripts/tests/twister
|
||||
- name: Run pytest for pytest-twister-harness
|
||||
env:
|
||||
ZEPHYR_BASE: ./
|
||||
ZEPHYR_TOOLCHAIN_VARIANT: zephyr
|
||||
PYTHONPATH: ./scripts/pylib/pytest-twister-harness/src:${PYTHONPATH}
|
||||
run: |
|
||||
export ZEPHYR_BASE=${PWD}
|
||||
echo "Run twister tests"
|
||||
pytest ./scripts/pylib/pytest-twister-harness/tests
|
||||
|
||||
63
.github/workflows/twister_tests_blackbox.yml
vendored
63
.github/workflows/twister_tests_blackbox.yml
vendored
@@ -15,52 +15,63 @@ on:
|
||||
- 'scripts/tests/twister_blackbox/**'
|
||||
- '.github/workflows/twister_tests_blackbox.yml'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
twister-tests:
|
||||
name: Twister Black Box Tests
|
||||
runs-on: ubuntu-24.04
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: ['3.10', '3.11', '3.12', '3.13']
|
||||
python-version: ['3.10', '3.11', '3.12']
|
||||
os: [ubuntu-22.04]
|
||||
container:
|
||||
image: ghcr.io/zephyrproject-rtos/ci:v0.26.13
|
||||
|
||||
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: Checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
path: zephyr
|
||||
fetch-depth: 0
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Environment Setup
|
||||
run: |
|
||||
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
||||
|
||||
west init -l . || true
|
||||
west config --global update.narrow true
|
||||
west update --path-cache /github/cache/zephyrproject 2>&1 1> west.update.log || west update --path-cache /github/cache/zephyrproject 2>&1 1> west.update.log || ( rm -rf ../modules ../bootloader ../tools && west update --path-cache /github/cache/zephyrproject)
|
||||
west forall -c 'git reset --hard HEAD'
|
||||
|
||||
echo "ZEPHYR_SDK_INSTALL_DIR=/opt/toolchains/zephyr-sdk-$( cat SDK_VERSION )" >> $GITHUB_ENV
|
||||
|
||||
- name: Set Up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
cache: pip
|
||||
cache-dependency-path: scripts/requirements-actions.txt
|
||||
|
||||
- name: install-packages
|
||||
working-directory: zephyr
|
||||
- name: Go Into Venv
|
||||
shell: bash
|
||||
run: |
|
||||
pip install -r scripts/requirements-actions.txt --require-hashes
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y lcov
|
||||
python3 -m pip install --user virtualenv
|
||||
python3 -m venv env
|
||||
source env/bin/activate
|
||||
echo "$(which python)"
|
||||
|
||||
- name: Setup Zephyr project
|
||||
uses: zephyrproject-rtos/action-zephyr-setup@f7b70269a8eb01f70c8e710891e4c94972a2f6b4 # v1.0.6
|
||||
with:
|
||||
app-path: zephyr
|
||||
sdk-version: 0.16.9
|
||||
toolchains: all
|
||||
- name: Install Packages
|
||||
run: |
|
||||
python3 -m pip install -U -r scripts/requirements-base.txt -r scripts/requirements-build-test.txt -r scripts/requirements-run-test.txt
|
||||
|
||||
- name: Run Pytest For Twister Black Box Tests
|
||||
working-directory: zephyr
|
||||
shell: bash
|
||||
env:
|
||||
ZEPHYR_BASE: ./
|
||||
ZEPHYR_TOOLCHAIN_VARIANT: zephyr
|
||||
run: |
|
||||
export ZEPHYR_SDK_INSTALL_DIR=${{ github.workspace }}/zephyr-sdk
|
||||
echo "Run twister tests"
|
||||
source zephyr-env.sh
|
||||
PYTHONPATH="./scripts/tests" pytest ./scripts/tests/twister_blackbox/
|
||||
PYTHONPATH="./scripts/tests" pytest ./scripts/tests/twister_blackbox
|
||||
|
||||
14
.github/workflows/west_cmds.yml
vendored
14
.github/workflows/west_cmds.yml
vendored
@@ -30,22 +30,22 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: ['3.10', '3.11', '3.12']
|
||||
os: [ubuntu-22.04, macos-14, windows-2022]
|
||||
os: [ubuntu-22.04, macos-11, windows-2022]
|
||||
exclude:
|
||||
- os: macos-14
|
||||
- os: macos-11
|
||||
python-version: 3.6
|
||||
- os: windows-2022
|
||||
python-version: 3.6
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
uses: actions/checkout@v4
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- name: cache-pip-linux
|
||||
if: startsWith(runner.os, 'Linux')
|
||||
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: ${{ runner.os }}-pip-${{ matrix.python-version }}
|
||||
@@ -53,7 +53,7 @@ jobs:
|
||||
${{ runner.os }}-pip-${{ matrix.python-version }}
|
||||
- name: cache-pip-mac
|
||||
if: startsWith(runner.os, 'macOS')
|
||||
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/Library/Caches/pip
|
||||
# Trailing '-' was just to get a different cache name
|
||||
@@ -62,7 +62,7 @@ jobs:
|
||||
${{ runner.os }}-pip-${{ matrix.python-version }}-
|
||||
- name: cache-pip-win
|
||||
if: startsWith(runner.os, 'Windows')
|
||||
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~\AppData\Local\pip\Cache
|
||||
key: ${{ runner.os }}-pip-${{ matrix.python-version }}
|
||||
|
||||
@@ -1898,6 +1898,7 @@ if (CONFIG_LLEXT AND CONFIG_LLEXT_EXPORT_BUILTINS_BY_SLID)
|
||||
${ZEPHYR_BASE}/scripts/build/llext_prepare_exptab.py
|
||||
--elf-file ${PROJECT_BINARY_DIR}/${KERNEL_ELF_NAME}
|
||||
--slid-listing ${PROJECT_BINARY_DIR}/slid_listing.txt
|
||||
-vvv
|
||||
)
|
||||
|
||||
endif()
|
||||
@@ -1988,39 +1989,22 @@ elseif(CONFIG_LOG_MIPI_SYST_USE_CATALOG)
|
||||
endif()
|
||||
|
||||
if(LOG_DICT_DB_NAME_ARG)
|
||||
set(log_dict_gen_command
|
||||
if (NOT CONFIG_LOG_DICTIONARY_DB_TARGET)
|
||||
set(LOG_DICT_DB_ALL_TARGET ALL)
|
||||
endif()
|
||||
add_custom_command(
|
||||
OUTPUT ${LOG_DICT_DB_NAME}
|
||||
COMMAND
|
||||
${PYTHON_EXECUTABLE}
|
||||
${ZEPHYR_BASE}/scripts/logging/dictionary/database_gen.py
|
||||
${KERNEL_ELF_NAME}
|
||||
${LOG_DICT_DB_NAME_ARG}=${LOG_DICT_DB_NAME}
|
||||
--build-header ${PROJECT_BINARY_DIR}/include/generated/zephyr/version.h
|
||||
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
|
||||
COMMENT "Generating logging dictionary database: ${LOG_DICT_DB_NAME}"
|
||||
DEPENDS ${logical_target_for_zephyr_elf}
|
||||
)
|
||||
|
||||
if (NOT CONFIG_LOG_DICTIONARY_DB_TARGET)
|
||||
# If not using a separate target for generating logging dictionary
|
||||
# database, add the generation to post build command to make sure
|
||||
# the database is actually being generated.
|
||||
list(APPEND
|
||||
post_build_commands
|
||||
COMMAND ${CMAKE_COMMAND} -E echo "Generating logging dictionary database: ${LOG_DICT_DB_NAME}"
|
||||
COMMAND ${log_dict_gen_command}
|
||||
)
|
||||
list(APPEND
|
||||
post_build_byproducts
|
||||
${LOG_DICT_DB_NAME}
|
||||
)
|
||||
else()
|
||||
# Seprate build target for generating logging dictionary database.
|
||||
# This needs to be explicitly called/used to generate the database.
|
||||
add_custom_command(
|
||||
OUTPUT ${LOG_DICT_DB_NAME}
|
||||
COMMAND ${log_dict_gen_command}
|
||||
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
|
||||
COMMENT "Generating logging dictionary database: ${LOG_DICT_DB_NAME}"
|
||||
DEPENDS ${logical_target_for_zephyr_elf}
|
||||
)
|
||||
add_custom_target(log_dict_db_gen DEPENDS ${LOG_DICT_DB_NAME})
|
||||
endif()
|
||||
add_custom_target(log_dict_db_gen ${LOG_DICT_DB_ALL_TARGET} DEPENDS ${LOG_DICT_DB_NAME})
|
||||
endif()
|
||||
|
||||
# Add post_build_commands to post-process the final .elf file produced by
|
||||
|
||||
@@ -119,7 +119,6 @@ ACPI:
|
||||
- lib/acpi/
|
||||
- include/zephyr/acpi/
|
||||
- tests/lib/acpi/
|
||||
- dts/bindings/acpi/
|
||||
labels:
|
||||
- "area: ACPI"
|
||||
tests:
|
||||
@@ -137,7 +136,6 @@ ARC arch:
|
||||
- include/zephyr/arch/arc/
|
||||
- tests/arch/arc/
|
||||
- dts/arc/synopsys/
|
||||
- dts/bindings/arc/
|
||||
- doc/hardware/arch/arc-support-status.rst
|
||||
labels:
|
||||
- "area: ARC"
|
||||
@@ -201,7 +199,6 @@ ARM Platforms:
|
||||
- soc/arm/designstart/
|
||||
- soc/arm/fvp_aemv8*/
|
||||
- dts/arm/armv*.dtsi
|
||||
- dts/bindings/arm/arm*.yaml
|
||||
labels:
|
||||
- "platform: ARM"
|
||||
|
||||
@@ -240,11 +237,10 @@ MIPS arch:
|
||||
- arch.mips
|
||||
|
||||
Ambiq Platforms:
|
||||
status: maintained
|
||||
maintainers:
|
||||
- AlessandroLuo
|
||||
status: odd fixes
|
||||
collaborators:
|
||||
- aaronyegx
|
||||
- AlessandroLuo
|
||||
- RichardSWheatley
|
||||
files:
|
||||
- soc/ambiq/
|
||||
@@ -304,6 +300,7 @@ Bluetooth:
|
||||
collaborators:
|
||||
- hermabe
|
||||
- Vudentz
|
||||
- Thalley
|
||||
- asbjornsabo
|
||||
- sjanc
|
||||
files:
|
||||
@@ -398,9 +395,6 @@ Bluetooth Host:
|
||||
- subsys/bluetooth/shell/
|
||||
- tests/bluetooth/host*/
|
||||
- tests/bsim/bluetooth/host/
|
||||
files-exclude:
|
||||
- subsys/bluetooth/host/classic/
|
||||
- include/zephyr/bluetooth/classic/
|
||||
labels:
|
||||
- "area: Bluetooth Host"
|
||||
- "area: Bluetooth"
|
||||
@@ -478,7 +472,6 @@ Bluetooth Classic:
|
||||
- include/zephyr/bluetooth/classic/
|
||||
labels:
|
||||
- "area: Bluetooth Classic"
|
||||
- "area: Bluetooth"
|
||||
tests:
|
||||
- bluetooth
|
||||
|
||||
@@ -601,22 +594,6 @@ CMSIS API layer:
|
||||
- portability.cmsis_rtos_v1
|
||||
- portability.cmsis_rtos_v2
|
||||
|
||||
DAP:
|
||||
status: maintained
|
||||
maintainers:
|
||||
- jfischer-no
|
||||
collaborators:
|
||||
- maxd-nordic
|
||||
files:
|
||||
- include/zephyr/drivers/swdp.h
|
||||
- drivers/dp/
|
||||
- subsys/dap/
|
||||
- samples/subsys/dap/
|
||||
description: >-
|
||||
Debug Access Port controller
|
||||
labels:
|
||||
- "area: dap"
|
||||
|
||||
DSP subsystem:
|
||||
status: maintained
|
||||
maintainers:
|
||||
@@ -805,7 +782,8 @@ DFU:
|
||||
- dfu
|
||||
|
||||
Devicetree:
|
||||
status: odd fixes
|
||||
status: maintained
|
||||
maintainers: []
|
||||
collaborators:
|
||||
- decsny
|
||||
- galak
|
||||
@@ -816,7 +794,6 @@ Devicetree:
|
||||
- doc/build/dts/
|
||||
- include/zephyr/devicetree/
|
||||
- scripts/kconfig/kconfigfunctions.py
|
||||
- doc/build/kconfig/preprocessor-functions.rst
|
||||
- include/zephyr/devicetree.h
|
||||
files-exclude:
|
||||
- dts/common/nordic/
|
||||
@@ -826,11 +803,13 @@ Devicetree:
|
||||
- libraries.devicetree
|
||||
|
||||
Devicetree Bindings:
|
||||
status: odd fixes
|
||||
status: maintained
|
||||
maintainers: []
|
||||
collaborators:
|
||||
- decsny
|
||||
- galak
|
||||
files:
|
||||
- dts/bindings/
|
||||
- include/zephyr/dt-bindings/
|
||||
- dts/binding-template.yaml
|
||||
labels:
|
||||
@@ -870,14 +849,10 @@ Display drivers:
|
||||
- include/zephyr/drivers/display.h
|
||||
- subsys/fb/
|
||||
- samples/subsys/display/
|
||||
- tests/subsys/display/
|
||||
- doc/hardware/peripherals/display/
|
||||
- tests/drivers/*/display/
|
||||
labels:
|
||||
- "area: Display"
|
||||
tests:
|
||||
- display.cfb
|
||||
- drivers.display
|
||||
|
||||
Documentation:
|
||||
status: maintained
|
||||
@@ -910,7 +885,6 @@ Documentation:
|
||||
files-exclude:
|
||||
- doc/releases/migration-guide-*
|
||||
- doc/releases/release-notes-*
|
||||
- doc/develop/test/
|
||||
labels:
|
||||
- "area: Documentation"
|
||||
|
||||
@@ -959,7 +933,6 @@ Release Notes:
|
||||
- doc/hardware/peripherals/adc.rst
|
||||
- tests/drivers/build_all/adc/
|
||||
- include/zephyr/dt-bindings/adc/
|
||||
- dts/bindings/adc/
|
||||
labels:
|
||||
- "area: ADC"
|
||||
tests:
|
||||
@@ -1036,7 +1009,6 @@ Release Notes:
|
||||
- samples/modules/canopennode/
|
||||
- samples/net/sockets/can/
|
||||
- samples/subsys/canbus/
|
||||
- scripts/west_commands/runners/canopen_program.py
|
||||
- subsys/canbus/
|
||||
- subsys/net/l2/canbus/
|
||||
- tests/drivers/build_all/can/
|
||||
@@ -1234,7 +1206,7 @@ Release Notes:
|
||||
- samples/drivers/eeprom/
|
||||
- tests/drivers/eeprom/
|
||||
- tests/drivers/*/eeprom/
|
||||
- doc/hardware/peripherals/eeprom/
|
||||
- doc/hardware/peripherals/eeprom.rst
|
||||
labels:
|
||||
- "area: EEPROM"
|
||||
tests:
|
||||
@@ -1518,7 +1490,6 @@ Release Notes:
|
||||
- drivers/mdio/
|
||||
- include/zephyr/drivers/mdio.h
|
||||
- tests/drivers/build_all/mdio/
|
||||
- dts/bindings/mdio/
|
||||
labels:
|
||||
- "area: MDIO"
|
||||
tests:
|
||||
@@ -1566,7 +1537,6 @@ Release Notes:
|
||||
files:
|
||||
- drivers/reset/
|
||||
- include/zephyr/drivers/reset.h
|
||||
- dts/bindings/reset/
|
||||
|
||||
"Interrupt Handling":
|
||||
status: odd fixes
|
||||
@@ -1636,7 +1606,6 @@ Release Notes:
|
||||
- tests/drivers/led/
|
||||
- doc/hardware/peripherals/led.rst
|
||||
- tests/drivers/build_all/led/
|
||||
- dts/bindings/led/
|
||||
labels:
|
||||
- "area: LED"
|
||||
tests:
|
||||
@@ -1705,7 +1674,6 @@ Release Notes:
|
||||
- tests/drivers/regulator/
|
||||
- tests/drivers/build_all/regulator/
|
||||
- doc/hardware/peripherals/regulators.rst
|
||||
- dts/bindings/regulator/
|
||||
labels:
|
||||
- "area: Regulators"
|
||||
tests:
|
||||
@@ -1721,7 +1689,6 @@ Release Notes:
|
||||
- include/zephyr/drivers/retained_mem.h
|
||||
- tests/drivers/retained_mem/
|
||||
- doc/hardware/peripherals/retained_mem.rst
|
||||
- dts/bindings/retained_mem/
|
||||
labels:
|
||||
- "area: Retained Memory"
|
||||
tests:
|
||||
@@ -1738,7 +1705,6 @@ Release Notes:
|
||||
- doc/hardware/peripherals/rtc.rst
|
||||
- include/zephyr/drivers/rtc.h
|
||||
- tests/drivers/build_all/rtc/
|
||||
- dts/bindings/rtc/
|
||||
labels:
|
||||
- "area: RTC"
|
||||
tests:
|
||||
@@ -1752,7 +1718,6 @@ Release Notes:
|
||||
- drivers/pcie/
|
||||
- include/zephyr/drivers/pcie/
|
||||
- doc/hardware/peripherals/pcie.rst
|
||||
- dts/bindings/pcie/
|
||||
labels:
|
||||
- "area: PCI"
|
||||
|
||||
@@ -1767,7 +1732,6 @@ Release Notes:
|
||||
- include/zephyr/drivers/peci.h
|
||||
- samples/drivers/peci/
|
||||
- doc/hardware/peripherals/peci.rst
|
||||
- dts/bindings/peci/
|
||||
labels:
|
||||
- "area: PECI"
|
||||
tests:
|
||||
@@ -1825,7 +1789,6 @@ Release Notes:
|
||||
- include/zephyr/drivers/pm_cpu_ops/
|
||||
- include/zephyr/drivers/pm_cpu_ops.h
|
||||
- include/zephyr/arch/arm64/arm-smccc.h
|
||||
- dts/bindings/pm_cpu_ops/
|
||||
labels:
|
||||
- "area: PM CPU ops"
|
||||
|
||||
@@ -1937,7 +1900,6 @@ Release Notes:
|
||||
- drivers/spi/
|
||||
- include/zephyr/drivers/spi.h
|
||||
- tests/drivers/spi/
|
||||
- dts/bindings/spi/
|
||||
- doc/hardware/peripherals/spi.rst
|
||||
labels:
|
||||
- "area: SPI"
|
||||
@@ -1953,7 +1915,6 @@ Release Notes:
|
||||
files:
|
||||
- drivers/timer/
|
||||
- include/zephyr/drivers/timer/
|
||||
- dts/bindings/timer/
|
||||
labels:
|
||||
- "area: Timer"
|
||||
|
||||
@@ -1967,7 +1928,6 @@ Release Notes:
|
||||
- include/zephyr/drivers/video-controls.h
|
||||
- doc/hardware/peripherals/video.rst
|
||||
- tests/drivers/*/video/
|
||||
- dts/bindings/video/
|
||||
labels:
|
||||
- "area: Video"
|
||||
tests:
|
||||
@@ -2020,7 +1980,6 @@ Release Notes:
|
||||
- krish2718
|
||||
files:
|
||||
- drivers/wifi/
|
||||
- dts/bindings/wifi/
|
||||
labels:
|
||||
- "area: Wi-Fi"
|
||||
|
||||
@@ -2106,7 +2065,6 @@ Xen Platform:
|
||||
- arch/arm64/core/xen/
|
||||
- soc/xen/
|
||||
- boards/xen/
|
||||
- dts/bindings/xen/
|
||||
labels:
|
||||
- "area: Xen Platform"
|
||||
|
||||
@@ -2122,7 +2080,6 @@ Filesystems:
|
||||
- samples/subsys/fs/
|
||||
- subsys/fs/
|
||||
- tests/subsys/fs/
|
||||
- dts/bindings/fs/
|
||||
labels:
|
||||
- "area: File System"
|
||||
tests:
|
||||
@@ -2221,7 +2178,6 @@ IPC:
|
||||
- subsys/ipc/
|
||||
- tests/subsys/ipc/
|
||||
- doc/services/ipc/
|
||||
- dts/bindings/ipc/
|
||||
description: >-
|
||||
Inter-Processor Communication
|
||||
labels:
|
||||
@@ -2944,13 +2900,7 @@ Open AMP:
|
||||
- carlocaione
|
||||
files:
|
||||
- lib/open-amp/
|
||||
- samples/subsys/ipc/openamp/
|
||||
- samples/subsys/ipc/openamp_rsc_table/
|
||||
- samples/subsys/ipc/rpmsg_service/
|
||||
labels:
|
||||
- "area: Open AMP"
|
||||
tests:
|
||||
- sample.ipc.openamp
|
||||
|
||||
|
||||
POSIX API layer:
|
||||
status: maintained
|
||||
@@ -3079,7 +3029,6 @@ Sensor Subsystem:
|
||||
- "area: Sensor Subsystem"
|
||||
tests:
|
||||
- sample.sensing
|
||||
- sensing.api
|
||||
|
||||
Stats:
|
||||
status: odd fixes
|
||||
@@ -3096,6 +3045,7 @@ Twister:
|
||||
collaborators:
|
||||
- PerMac
|
||||
- hakehuang
|
||||
- gopiotr
|
||||
- golowanow
|
||||
- gchwier
|
||||
- LukaszMrugala
|
||||
@@ -3670,10 +3620,6 @@ Renesas RA Platforms:
|
||||
status: maintained
|
||||
maintainers:
|
||||
- soburi
|
||||
- KhiemNguyenT
|
||||
collaborators:
|
||||
- duynguyenxa
|
||||
- thaoluonguw
|
||||
files:
|
||||
- boards/arduino/uno_r4/
|
||||
- drivers/*/*renesas_ra*
|
||||
@@ -3732,6 +3678,7 @@ STM32 Platforms:
|
||||
maintainers:
|
||||
- erwango
|
||||
collaborators:
|
||||
- ajarmouni-st
|
||||
- FRASTM
|
||||
- gautierg-st
|
||||
- GeorgeCGV
|
||||
@@ -4111,6 +4058,7 @@ USB:
|
||||
- tests/drivers/usb/
|
||||
- tests/drivers/udc/
|
||||
- doc/connectivity/usb/
|
||||
- scripts/generate_usb_vif/
|
||||
labels:
|
||||
- "area: USB"
|
||||
tests:
|
||||
@@ -4132,7 +4080,6 @@ USB-C:
|
||||
- subsys/usb/usb_c/
|
||||
- doc/connectivity/usb/pd/
|
||||
- doc/hardware/peripherals/usbc_vbus.rst
|
||||
- scripts/generate_usb_vif/
|
||||
labels:
|
||||
- "area: USB-C"
|
||||
tests:
|
||||
@@ -4184,7 +4131,8 @@ VFS:
|
||||
- filesystem
|
||||
|
||||
West:
|
||||
status: odd fixes
|
||||
status: maintained
|
||||
maintainers: []
|
||||
collaborators:
|
||||
- mbolivar-ampere
|
||||
- carlescufi
|
||||
@@ -4331,7 +4279,7 @@ West:
|
||||
files:
|
||||
- modules/cmsis/
|
||||
labels:
|
||||
- "area: CMSIS-Core"
|
||||
- "area: ARM"
|
||||
|
||||
"West project: cmsis-dsp":
|
||||
status: maintained
|
||||
@@ -4448,7 +4396,7 @@ West:
|
||||
- drivers/misc/ethos_u/
|
||||
- modules/hal_ethos_u/
|
||||
labels:
|
||||
- "platform: ARM"
|
||||
- "area: ARM"
|
||||
|
||||
"West project: hal_gigadevice":
|
||||
status: maintained
|
||||
@@ -4554,9 +4502,6 @@ West:
|
||||
- blauret
|
||||
- andrzej-kaczmarek
|
||||
- ydamigos
|
||||
- soburi
|
||||
- duynguyenxa
|
||||
- thaoluonguw
|
||||
files: []
|
||||
labels:
|
||||
- "platform: Renesas"
|
||||
@@ -4723,7 +4668,6 @@ West:
|
||||
- ceolin
|
||||
collaborators:
|
||||
- ithinuel
|
||||
- valeriosetti
|
||||
files:
|
||||
- modules/mbedtls/
|
||||
labels:
|
||||
@@ -5022,7 +4966,6 @@ Continuous Integration:
|
||||
files:
|
||||
- .github/
|
||||
- scripts/ci/
|
||||
- scripts/make_bugs_pickle.py
|
||||
- .checkpatch.conf
|
||||
- scripts/gitlint/
|
||||
- scripts/set_assignees.py
|
||||
@@ -5044,7 +4987,7 @@ Test Framework (Ztest):
|
||||
- tests/unit/util/
|
||||
- tests/subsys/testsuite/
|
||||
- samples/subsys/testsuite/
|
||||
- doc/develop/test/
|
||||
- doc/develop/test/ztest.rst
|
||||
labels:
|
||||
- "area: Testsuite"
|
||||
tests:
|
||||
@@ -5086,7 +5029,7 @@ Random:
|
||||
|
||||
# This area is to be converted to a subarea
|
||||
Testing with Renode:
|
||||
status: odd fixes
|
||||
status: maintained
|
||||
collaborators:
|
||||
- mateusz-holenko
|
||||
- fkokosinski
|
||||
@@ -5126,6 +5069,6 @@ zbus:
|
||||
- subsys/llext/
|
||||
- doc/services/llext/
|
||||
labels:
|
||||
- "area: llext"
|
||||
- "area: Linkable Loadable Extensions"
|
||||
tests:
|
||||
- llext
|
||||
|
||||
@@ -1 +1 @@
|
||||
0.16.9
|
||||
0.16.8
|
||||
|
||||
2
VERSION
2
VERSION
@@ -1,5 +1,5 @@
|
||||
VERSION_MAJOR = 3
|
||||
VERSION_MINOR = 7
|
||||
PATCHLEVEL = 2
|
||||
PATCHLEVEL = 0
|
||||
VERSION_TWEAK = 0
|
||||
EXTRAVERSION = rc1
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
if(CONFIG_BIG_ENDIAN)
|
||||
set_property(GLOBAL PROPERTY PROPERTY_OUTPUT_FORMAT elf32-bigarm)
|
||||
else()
|
||||
set_property(GLOBAL PROPERTY PROPERTY_OUTPUT_FORMAT elf32-littlearm)
|
||||
endif()
|
||||
set_property(GLOBAL PROPERTY PROPERTY_OUTPUT_FORMAT elf32-littlearm)
|
||||
|
||||
add_subdirectory(core)
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2014 Wind River Systems, Inc.
|
||||
* Copyright (c) 2021 Lexmark International, Inc.
|
||||
* Copyright 2025 Arm Limited and/or its affiliates <open-source-office@arm.com>
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -38,34 +37,6 @@
|
||||
*/
|
||||
#define DEFAULT_EXC_RETURN 0xFD;
|
||||
|
||||
#ifdef CONFIG_USERSPACE
|
||||
static void setup_priv_stack(struct k_thread *thread)
|
||||
{
|
||||
/* Set up privileged stack before entering user mode */
|
||||
thread->arch.priv_stack_start = (uint32_t)z_priv_stack_find(thread->stack_obj);
|
||||
|
||||
/* CONFIG_PRIVILEGED_STACK_SIZE does not account for MPU_GUARD_ALIGN_AND_SIZE or
|
||||
* MPU_GUARD_ALIGN_AND_SIZE_FLOAT. Therefore, we must compute priv_stack_end here before
|
||||
* adjusting priv_stack_start for the mpu guard alignment
|
||||
*/
|
||||
thread->arch.priv_stack_end = thread->arch.priv_stack_start + CONFIG_PRIVILEGED_STACK_SIZE;
|
||||
|
||||
#if defined(CONFIG_MPU_STACK_GUARD)
|
||||
/* Stack guard area reserved at the bottom of the thread's
|
||||
* privileged stack. Adjust the available (writable) stack
|
||||
* buffer area accordingly.
|
||||
*/
|
||||
#if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING)
|
||||
thread->arch.priv_stack_start +=
|
||||
((thread->arch.mode & Z_ARM_MODE_MPU_GUARD_FLOAT_Msk) != 0) ?
|
||||
MPU_GUARD_ALIGN_AND_SIZE_FLOAT : MPU_GUARD_ALIGN_AND_SIZE;
|
||||
#else
|
||||
thread->arch.priv_stack_start += MPU_GUARD_ALIGN_AND_SIZE;
|
||||
#endif /* CONFIG_FPU && CONFIG_FPU_SHARING */
|
||||
#endif /* CONFIG_MPU_STACK_GUARD */
|
||||
}
|
||||
#endif
|
||||
|
||||
/* An initial context, to be "restored" by z_arm_pendsv(), is put at the other
|
||||
* end of the stack, and thus reusable by the stack when not needed anymore.
|
||||
*
|
||||
@@ -107,24 +78,9 @@ void arch_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
|
||||
#endif /* FP_GUARD_EXTRA_SIZE */
|
||||
#endif /* CONFIG_MPU_STACK_GUARD */
|
||||
|
||||
#if defined(CONFIG_ARM_STORE_EXC_RETURN) || defined(CONFIG_USERSPACE)
|
||||
thread->arch.mode = 0;
|
||||
#if defined(CONFIG_ARM_STORE_EXC_RETURN)
|
||||
thread->arch.mode_exc_return = DEFAULT_EXC_RETURN;
|
||||
#endif
|
||||
#if FP_GUARD_EXTRA_SIZE > 0
|
||||
if ((thread->base.user_options & K_FP_REGS) != 0) {
|
||||
thread->arch.mode |= Z_ARM_MODE_MPU_GUARD_FLOAT_Msk;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
iframe = Z_STACK_PTR_TO_FRAME(struct __basic_sf, stack_ptr);
|
||||
#if defined(CONFIG_USERSPACE)
|
||||
thread->arch.priv_stack_start = 0;
|
||||
if ((thread->base.user_options & K_USER) != 0) {
|
||||
setup_priv_stack(thread);
|
||||
iframe = Z_STACK_PTR_TO_FRAME(struct __basic_sf, thread->arch.priv_stack_end);
|
||||
iframe->pc = (uint32_t)arch_user_mode_enter;
|
||||
} else {
|
||||
iframe->pc = (uint32_t)z_thread_entry;
|
||||
@@ -139,10 +95,6 @@ void arch_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
|
||||
iframe->a4 = (uint32_t)p3;
|
||||
|
||||
iframe->xpsr = A_BIT | MODE_SYS;
|
||||
#if defined(CONFIG_BIG_ENDIAN)
|
||||
iframe->xpsr |= E_BIT;
|
||||
#endif /* CONFIG_BIG_ENDIAN */
|
||||
|
||||
#if defined(CONFIG_COMPILER_ISA_THUMB2)
|
||||
iframe->xpsr |= T_BIT;
|
||||
#endif /* CONFIG_COMPILER_ISA_THUMB2 */
|
||||
@@ -156,6 +108,20 @@ void arch_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
|
||||
thread->callee_saved.psp = (uint32_t)iframe;
|
||||
thread->arch.basepri = 0;
|
||||
|
||||
#if defined(CONFIG_ARM_STORE_EXC_RETURN) || defined(CONFIG_USERSPACE)
|
||||
thread->arch.mode = 0;
|
||||
#if defined(CONFIG_ARM_STORE_EXC_RETURN)
|
||||
thread->arch.mode_exc_return = DEFAULT_EXC_RETURN;
|
||||
#endif
|
||||
#if FP_GUARD_EXTRA_SIZE > 0
|
||||
if ((thread->base.user_options & K_FP_REGS) != 0) {
|
||||
thread->arch.mode |= Z_ARM_MODE_MPU_GUARD_FLOAT_Msk;
|
||||
}
|
||||
#endif
|
||||
#if defined(CONFIG_USERSPACE)
|
||||
thread->arch.priv_stack_start = 0;
|
||||
#endif
|
||||
#endif
|
||||
/*
|
||||
* initial values in all other registers/thread entries are
|
||||
* irrelevant.
|
||||
@@ -226,8 +192,10 @@ static inline void z_arm_thread_stack_info_adjust(struct k_thread *thread,
|
||||
FUNC_NORETURN void arch_user_mode_enter(k_thread_entry_t user_entry,
|
||||
void *p1, void *p2, void *p3)
|
||||
{
|
||||
uint32_t sp_is_priv = 1;
|
||||
|
||||
/* Set up privileged stack before entering user mode */
|
||||
_current->arch.priv_stack_start =
|
||||
(uint32_t)z_priv_stack_find(_current->stack_obj);
|
||||
#if defined(CONFIG_MPU_STACK_GUARD)
|
||||
#if defined(CONFIG_THREAD_STACK_INFO)
|
||||
/* We're dropping to user mode which means the guard area is no
|
||||
@@ -244,29 +212,29 @@ FUNC_NORETURN void arch_user_mode_enter(k_thread_entry_t user_entry,
|
||||
_current->stack_info.start -= MPU_GUARD_ALIGN_AND_SIZE;
|
||||
_current->stack_info.size += MPU_GUARD_ALIGN_AND_SIZE;
|
||||
#endif /* CONFIG_THREAD_STACK_INFO */
|
||||
|
||||
/* Stack guard area reserved at the bottom of the thread's
|
||||
* privileged stack. Adjust the available (writable) stack
|
||||
* buffer area accordingly.
|
||||
*/
|
||||
#if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING)
|
||||
_current->arch.priv_stack_start +=
|
||||
((_current->arch.mode & Z_ARM_MODE_MPU_GUARD_FLOAT_Msk) != 0) ?
|
||||
MPU_GUARD_ALIGN_AND_SIZE_FLOAT : MPU_GUARD_ALIGN_AND_SIZE;
|
||||
#else
|
||||
_current->arch.priv_stack_start += MPU_GUARD_ALIGN_AND_SIZE;
|
||||
#endif /* CONFIG_FPU && CONFIG_FPU_SHARING */
|
||||
#endif /* CONFIG_MPU_STACK_GUARD */
|
||||
|
||||
/* 2 ways how arch_user_mode_enter is called:
|
||||
* - called as part of context switch from z_arm_pendsv, in this case privileged stack is
|
||||
* already setup and stack pointer points to privileged stack.
|
||||
* - called directly from k_thread_user_mode_enter, in this case privileged stack is not
|
||||
* setup and stack pointer points to user stack.
|
||||
*
|
||||
* When called from k_thread_user_mode_enter, we need to check and setup the privileged
|
||||
* stack and then instruct z_arm_userspace_enter to change the PSP to the privileged stack.
|
||||
* Note that we do not change the PSP in this function to avoid any conflict with compiler's
|
||||
* sequence which has already pushed stuff on the user stack.
|
||||
*/
|
||||
if (0 == _current->arch.priv_stack_start) {
|
||||
setup_priv_stack(_current);
|
||||
sp_is_priv = 0;
|
||||
}
|
||||
#if defined(CONFIG_CPU_AARCH32_CORTEX_R)
|
||||
_current->arch.priv_stack_end =
|
||||
_current->arch.priv_stack_start + CONFIG_PRIVILEGED_STACK_SIZE;
|
||||
#endif
|
||||
|
||||
z_arm_userspace_enter(user_entry, p1, p2, p3,
|
||||
(uint32_t)_current->stack_info.start,
|
||||
_current->stack_info.size -
|
||||
_current->stack_info.delta,
|
||||
sp_is_priv);
|
||||
_current->stack_info.delta);
|
||||
CODE_UNREACHABLE;
|
||||
}
|
||||
|
||||
|
||||
@@ -55,8 +55,13 @@ FUNC_ALIAS(z_arm_exc_exit, z_arm_int_exit, void);
|
||||
Z_GENERIC_SECTION(.text._HandlerModeExit) void z_arm_exc_exit(void)
|
||||
{
|
||||
#ifdef CONFIG_PREEMPT_ENABLED
|
||||
if (_kernel.ready_q.cache != _kernel.cpus->current) {
|
||||
SCB->ICSR |= SCB_ICSR_PENDSVSET_Msk;
|
||||
/* If thread is preemptible */
|
||||
if (_kernel.cpus->current->base.prio >= 0) {
|
||||
/* and cached thread is not current thread */
|
||||
if (_kernel.ready_q.cache != _kernel.cpus->current) {
|
||||
/* trigger a context switch */
|
||||
SCB->ICSR |= SCB_ICSR_PENDSVSET_Msk;
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_PREEMPT_ENABLED */
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2018 Linaro, Limited
|
||||
* Copyright (c) 2023 Arm Limited
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -47,3 +48,63 @@ int arch_swap(unsigned int key)
|
||||
*/
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ _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
|
||||
@@ -117,125 +118,20 @@ out_fp_endif:
|
||||
#error Unknown ARM architecture
|
||||
#endif /* CONFIG_ARMV6_M_ARMV8_M_BASELINE */
|
||||
|
||||
/* 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 */
|
||||
mov r4, lr
|
||||
mov r0, lr
|
||||
bl z_arm_pendsv_c
|
||||
mov lr, r4
|
||||
|
||||
/*
|
||||
* 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
|
||||
ldr r1, =_kernel
|
||||
ldr r2, [r1, #_kernel_offset_to_current]
|
||||
|
||||
#if defined(CONFIG_ARM_STORE_EXC_RETURN)
|
||||
/* Restore EXC_RETURN value. */
|
||||
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]
|
||||
mov lr, r0
|
||||
#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
|
||||
|
||||
@@ -253,9 +149,6 @@ _thread_irq_disabled:
|
||||
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
|
||||
@@ -285,30 +178,6 @@ 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}
|
||||
@@ -431,7 +300,6 @@ _stack_frame_endif:
|
||||
/* exception return is done in z_arm_int_exit() */
|
||||
ldr r0, =z_arm_int_exit
|
||||
bx r0
|
||||
|
||||
#endif
|
||||
|
||||
_oops:
|
||||
@@ -484,219 +352,20 @@ _oops:
|
||||
* r8 - saved link register
|
||||
*/
|
||||
_do_syscall:
|
||||
/*
|
||||
* Build a privilege stack frame from the user stack frame, then switch PSP
|
||||
* to it. This ensures return from SVC does not rely on the user stack.
|
||||
*
|
||||
* Layout of privilege stack created from user stack:
|
||||
*
|
||||
* +------+-------------------------+------+-------------------------+--------------------------+
|
||||
* | User stack | Privilege stack | Notes |
|
||||
* +------+-------------------------+------+-------------------------+--------------------------+
|
||||
* |Offset| contents |Offset| contents | |
|
||||
* +------+-------------------------+------+-------------------------+--------------------------+
|
||||
* | 0 | R0 -> | 0 | R0 | PSP switches from 0th |
|
||||
* | | | | | offset of user stack to |
|
||||
* | | | | | 0th offset of priv stack |
|
||||
* | 4 | R1 -> | 4 | R1 | |
|
||||
* | 8 | R2 -> | 8 | R2 | |
|
||||
* | 12 | R3 -> |12 | R3 | |
|
||||
* | 16 | R12 -> |16 | R12 | |
|
||||
* | 20 | LR -> |20 | LR | |
|
||||
* | 24 | Return Address -x> |24 | z_arm_do_syscall |return address from user |
|
||||
* | | | | |sf is not copied. Instead,|
|
||||
* | | | | |it is replaced so that |
|
||||
* | | | | |z_arm_svc returns to |
|
||||
* | | | | |z_arm_do_syscall. |
|
||||
* | | | | | |
|
||||
* | 28 | xPSR (w/ or w/o pad) -> |28 | xPSR (pad bit cleared) |This completes the basic |
|
||||
* | | | | |exception sf w/ or w/o pad|
|
||||
* | | | | | |
|
||||
* | -- | FP regs + FPSCR -> |-- | FP regs + FPSCR |For arch supporting fp |
|
||||
* | | (w/ or w/o pad) | | |context an additional |
|
||||
* | | | | |extended sf is copied. |
|
||||
* |________________________________|______|_________________________|__________________________|
|
||||
* | | | | |On returning to |
|
||||
* | | | | |z_arm_do_syscall, the |
|
||||
* | | | | |above sf has already been |
|
||||
* | | | | |unstacked and 8B from the |
|
||||
* | | | | |then sf are used to pass |
|
||||
* | | | | |original pre-svc sp & the |
|
||||
* | | | | |return address. |
|
||||
* | | | | |Note: at the moment |
|
||||
* | | | | |z_arm_do_syscall also |
|
||||
* | | | | |expects the return address|
|
||||
* | | | | |to be set in r8. |
|
||||
* | | | | | |
|
||||
* | | | 0 | address that |z_arm_do_syscall expects |
|
||||
* | | | | z_arm_do_syscall should |the original pre-svc sp at|
|
||||
* | | | | set as PSP before |0th offset i.e. new sp[0] |
|
||||
* | | | | returning from svc. |and, |
|
||||
* | | | | | |
|
||||
* | | | 4 | Address that |the return address at |
|
||||
* | | | | z_arm_do_syscall should |sp[4]. Note that this is |
|
||||
* | | | | return to after handling|the return address copied |
|
||||
* | | | | svc |from user exception sf[24]|
|
||||
* | | | | |which was not copied in |
|
||||
* | | | | |the previous sf. |
|
||||
* +------+-------------------------+------+-------------------------+--------------------------+
|
||||
* "sf" in this function is used as abbreviation for "stack frame".
|
||||
* Note that the "FP regs + FPSCR" are only present if CONFIG_FPU_SHARING=y, and the optional pad
|
||||
* is only present if PSP was not 8-byte aligned when SVC was executed.
|
||||
* Also note that FPU cannot be present in ARMv6-M or ARMv8-M Baseline implementations
|
||||
* (i.e., it may only be present when CONFIG_ARMV7_M_ARMV8_M_MAINLINE is enabled).
|
||||
*/
|
||||
/* Start by fetching the top of privileged stack */
|
||||
#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
|
||||
ldr r1, =_kernel
|
||||
ldr r1, [r1, #_kernel_offset_to_current]
|
||||
adds r1, r1, #_thread_offset_to_priv_stack_start
|
||||
ldr r1, [r1] /* bottom of priv stack */
|
||||
ldr r3, =CONFIG_PRIVILEGED_STACK_SIZE
|
||||
subs r3, #(_EXC_HW_SAVED_BASIC_SF_SIZE+8) /* 8 for original sp and pc */
|
||||
add r1, r3
|
||||
mov ip, r1
|
||||
movs r3, #24
|
||||
ldr r1, [r0, r3] /* grab address of PC from stack frame */
|
||||
mov r8, r1
|
||||
#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
|
||||
ldr ip, =_kernel
|
||||
ldr ip, [ip, #_kernel_offset_to_current]
|
||||
ldr ip, [ip, #_thread_offset_to_priv_stack_start] /* bottom of priv stack */
|
||||
add ip, #CONFIG_PRIVILEGED_STACK_SIZE
|
||||
#ifdef CONFIG_FPU_SHARING
|
||||
/* Assess whether svc calling thread had been using the FP registers. */
|
||||
tst lr, #_EXC_RETURN_FTYPE_Msk
|
||||
ite eq
|
||||
moveq r8, #_EXC_HW_SAVED_EXTENDED_SF_SIZE
|
||||
movne r8, #_EXC_HW_SAVED_BASIC_SF_SIZE
|
||||
#else
|
||||
mov r8, #_EXC_HW_SAVED_BASIC_SF_SIZE
|
||||
ldr r8, [r0, #24] /* grab address of PC from stack frame */
|
||||
#endif
|
||||
sub ip, #8 /* z_arm_do_syscall will use this to get original sp and pc */
|
||||
sub ip, r8 /* 32 for basic sf + 72 for the optional esf */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* At this point:
|
||||
* r0 has PSP i.e. top of user stack
|
||||
* ip has top of privilege stack
|
||||
* r8 has hardware-saved stack frame size (only in case of mainline)
|
||||
*/
|
||||
push {r4-r7}
|
||||
push {r2}
|
||||
ldr r1, =z_arm_do_syscall
|
||||
#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
|
||||
mov r2, r0 /* safe to use r2 since it is saved on MSP */
|
||||
|
||||
/* Check for padding in the sf */
|
||||
ldr r1, [r0, #_EXC_HW_SAVED_BASIC_SF_XPSR_OFFSET] /* grab xPSR from sf which has the pad bit */
|
||||
movs r3, #1
|
||||
/* Check if pad bit 9 is set */
|
||||
lsls r3, r3, #9
|
||||
tst r1, r3
|
||||
beq .L_no_padding
|
||||
/* special handling for padded sf */
|
||||
bics r1, r3 /* clear the pad bit (priv stack is aligned and doesn't need it) */
|
||||
adds r2, #4
|
||||
.L_no_padding:
|
||||
/* Calculate original pre-svc user sp which is psp + sf size (+4B if pad bit was set) */
|
||||
adds r2, #_EXC_HW_SAVED_BASIC_SF_SIZE
|
||||
mov r3, ip
|
||||
str r2,[r3, #0]
|
||||
|
||||
/* Store the pre-SVC user SP at the offset expected by z_arm_do_syscall,
|
||||
* as detailed in the table above.
|
||||
*/
|
||||
str r2,[r3, #_EXC_HW_SAVED_BASIC_SF_SIZE]
|
||||
/* sf of priv stack has the same xPSR as user stack but with 9th bit reset */
|
||||
str r1,[r3, #_EXC_HW_SAVED_BASIC_SF_XPSR_OFFSET]
|
||||
|
||||
/* r0-r3, r12, LR from user stack sf are copied to sf of priv stack */
|
||||
mov r1, r0
|
||||
mov r2, r3
|
||||
ldmia r1!, {r4-r7}
|
||||
stmia r2!, {r4-r7}
|
||||
ldmia r1!, {r4-r5}
|
||||
stmia r2!, {r4-r5}
|
||||
|
||||
/* Store the svc return address at the offset expected by z_arm_do_syscall,
|
||||
* as detailed in the table above.
|
||||
*/
|
||||
str r5, [r3, #(_EXC_HW_SAVED_BASIC_SF_SIZE+4)]
|
||||
|
||||
ldr r1, =z_arm_do_syscall
|
||||
str r1, [r3, #_EXC_HW_SAVED_BASIC_SF_RETADDR_OFFSET] /* Execution return to z_arm_do_syscall */
|
||||
ldr r1, [r0, #_EXC_HW_SAVED_BASIC_SF_RETADDR_OFFSET] /* grab address of PC from stack frame */
|
||||
/* Store the svc return address (i.e. next instr to svc) in r8 as expected by z_arm_do_syscall.
|
||||
*/
|
||||
mov r8, r1
|
||||
|
||||
str r1, [r0, r3] /* overwrite the PC to point to z_arm_do_syscall */
|
||||
#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
|
||||
mov r2, r0 /* safe to use r2 since it is saved on MSP */
|
||||
|
||||
/* Calculate original pre-svc user sp without pad which is psp + sf size */
|
||||
add r2, r8
|
||||
|
||||
/* Also, check for padding in the sf */
|
||||
ldr r1, [r0, #_EXC_HW_SAVED_BASIC_SF_XPSR_OFFSET] /* grab xPSR from sf which has the pad bit */
|
||||
tst r1, #(1<<9) /* Check if pad bit 9 is set */
|
||||
beq .L_no_padding
|
||||
bics r1, #(1<<9) /* clear the pad bit (priv stack is aligned and doesn't need it) */
|
||||
/* Calculate original pre-svc user sp with pad */
|
||||
add r2, #4
|
||||
.L_no_padding:
|
||||
str r2,[ip, #0]
|
||||
/* Store the pre-SVC user SP at the offset expected by z_arm_do_syscall,
|
||||
* as detailed in the table above.
|
||||
*/
|
||||
str r2,[ip, r8]
|
||||
str r1,[ip, #_EXC_HW_SAVED_BASIC_SF_XPSR_OFFSET] /* priv sf get user sf xPSR with bit9 reset */
|
||||
|
||||
/* r0-r3, r12, LR from user stack sf are copied to sf of priv stack */
|
||||
mov r1, r0
|
||||
mov r2, ip
|
||||
ldmia r1!, {r4-r7}
|
||||
stmia r2!, {r4-r7}
|
||||
ldmia r1!, {r4-r5}
|
||||
stmia r2!, {r4-r5}
|
||||
|
||||
/* Store the svc return address at the offset expected by z_arm_do_syscall,
|
||||
* as detailed in the table above.
|
||||
*/
|
||||
add r8, #4
|
||||
str r5, [ip, r8]
|
||||
|
||||
ldr r1, =z_arm_do_syscall
|
||||
str r1, [ip, #_EXC_HW_SAVED_BASIC_SF_RETADDR_OFFSET] /* Execution return to z_arm_do_syscall */
|
||||
ldr r1, [r0, #_EXC_HW_SAVED_BASIC_SF_RETADDR_OFFSET] /* grab address of PC from stack frame */
|
||||
/* Store the svc return address (i.e. next instr to svc) in r8 as expected by z_arm_do_syscall.
|
||||
*/
|
||||
mov r8, r1
|
||||
|
||||
/* basic stack frame is copied at this point to privilege stack,
|
||||
* now time to copy the fp context
|
||||
*/
|
||||
#ifdef CONFIG_FPU_SHARING
|
||||
tst lr, #_EXC_RETURN_FTYPE_Msk
|
||||
bne .L_skip_fp_copy
|
||||
add r1, r0, #32
|
||||
add r2, ip, #32
|
||||
|
||||
vldmia r1!, {s0-s15}
|
||||
vstmia r2!, {s0-s15}
|
||||
|
||||
/* copy FPSCR + reserved (8 bytes) */
|
||||
ldmia r1!, {r4, r5}
|
||||
stmia r2!, {r4, r5}
|
||||
.L_skip_fp_copy:
|
||||
str r1, [r0, #24] /* overwrite the PC to point to z_arm_do_syscall */
|
||||
#endif
|
||||
|
||||
#endif
|
||||
pop {r2} /* restore CONTROL value */
|
||||
pop {r4-r7}
|
||||
|
||||
/* Point PSP to privilege stack,
|
||||
* note that r0 still has the old PSP
|
||||
*/
|
||||
msr PSP, ip
|
||||
|
||||
#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
|
||||
ldr r3, =K_SYSCALL_LIMIT
|
||||
cmp r6, r3
|
||||
@@ -750,12 +419,14 @@ valid_syscall_id:
|
||||
isb
|
||||
|
||||
#if defined(CONFIG_BUILTIN_STACK_GUARD)
|
||||
/* Set stack pointer limit (needed in privileged mode) */
|
||||
ldr ip, =_kernel
|
||||
ldr ip, [ip, #_kernel_offset_to_current]
|
||||
ldr ip, [ip, #_thread_offset_to_priv_stack_start] /* priv stack ptr */
|
||||
msr PSPLIM, ip
|
||||
#endif
|
||||
/* Thread is now in privileged mode; after returning from SCVall it
|
||||
* will use the default (user) stack before switching to the privileged
|
||||
* stack to execute the system call. We need to protect the user stack
|
||||
* against stack overflows until this stack transition.
|
||||
*/
|
||||
ldr r1, [r0, #_thread_offset_to_stack_info_start] /* stack_info.start */
|
||||
msr PSPLIM, r1
|
||||
#endif /* CONFIG_BUILTIN_STACK_GUARD */
|
||||
|
||||
/* return from SVC to the modified LR - z_arm_do_syscall */
|
||||
bx lr
|
||||
|
||||
@@ -46,35 +46,6 @@
|
||||
K_THREAD_STACK_DECLARE(z_main_stack, CONFIG_MAIN_STACK_SIZE);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_USERSPACE
|
||||
static void setup_priv_stack(struct k_thread *thread)
|
||||
{
|
||||
/* Set up privileged stack before entering user mode */
|
||||
thread->arch.priv_stack_start = (uint32_t)z_priv_stack_find(thread->stack_obj);
|
||||
|
||||
/* CONFIG_PRIVILEGED_STACK_SIZE does not account for MPU_GUARD_ALIGN_AND_SIZE or
|
||||
* MPU_GUARD_ALIGN_AND_SIZE_FLOAT. Therefore, we must compute priv_stack_end here before
|
||||
* adjusting priv_stack_start for the mpu guard alignment
|
||||
*/
|
||||
thread->arch.priv_stack_end = thread->arch.priv_stack_start + CONFIG_PRIVILEGED_STACK_SIZE;
|
||||
|
||||
#if defined(CONFIG_MPU_STACK_GUARD)
|
||||
/* Stack guard area reserved at the bottom of the thread's
|
||||
* privileged stack. Adjust the available (writable) stack
|
||||
* buffer area accordingly.
|
||||
*/
|
||||
#if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING)
|
||||
thread->arch.priv_stack_start +=
|
||||
((thread->arch.mode & Z_ARM_MODE_MPU_GUARD_FLOAT_Msk) != 0)
|
||||
? MPU_GUARD_ALIGN_AND_SIZE_FLOAT
|
||||
: MPU_GUARD_ALIGN_AND_SIZE;
|
||||
#else
|
||||
thread->arch.priv_stack_start += MPU_GUARD_ALIGN_AND_SIZE;
|
||||
#endif /* CONFIG_FPU && CONFIG_FPU_SHARING */
|
||||
#endif /* CONFIG_MPU_STACK_GUARD */
|
||||
}
|
||||
#endif
|
||||
|
||||
/* An initial context, to be "restored" by z_arm_pendsv(), is put at the other
|
||||
* end of the stack, and thus reusable by the stack when not needed anymore.
|
||||
*
|
||||
@@ -116,24 +87,9 @@ void arch_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
|
||||
#endif /* FP_GUARD_EXTRA_SIZE */
|
||||
#endif /* CONFIG_MPU_STACK_GUARD */
|
||||
|
||||
#if defined(CONFIG_ARM_STORE_EXC_RETURN) || defined(CONFIG_USERSPACE)
|
||||
thread->arch.mode = 0;
|
||||
#if defined(CONFIG_ARM_STORE_EXC_RETURN)
|
||||
thread->arch.mode_exc_return = DEFAULT_EXC_RETURN;
|
||||
#endif
|
||||
#if FP_GUARD_EXTRA_SIZE > 0
|
||||
if ((thread->base.user_options & K_FP_REGS) != 0) {
|
||||
thread->arch.mode |= Z_ARM_MODE_MPU_GUARD_FLOAT_Msk;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
iframe = Z_STACK_PTR_TO_FRAME(struct __basic_sf, stack_ptr);
|
||||
#if defined(CONFIG_USERSPACE)
|
||||
thread->arch.priv_stack_start = 0;
|
||||
if ((thread->base.user_options & K_USER) != 0) {
|
||||
setup_priv_stack(thread);
|
||||
iframe = Z_STACK_PTR_TO_FRAME(struct __basic_sf, thread->arch.priv_stack_end);
|
||||
iframe->pc = (uint32_t)arch_user_mode_enter;
|
||||
} else {
|
||||
iframe->pc = (uint32_t)z_thread_entry;
|
||||
@@ -155,6 +111,20 @@ void arch_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
|
||||
thread->callee_saved.psp = (uint32_t)iframe;
|
||||
thread->arch.basepri = 0;
|
||||
|
||||
#if defined(CONFIG_ARM_STORE_EXC_RETURN) || defined(CONFIG_USERSPACE)
|
||||
thread->arch.mode = 0;
|
||||
#if defined(CONFIG_ARM_STORE_EXC_RETURN)
|
||||
thread->arch.mode_exc_return = DEFAULT_EXC_RETURN;
|
||||
#endif
|
||||
#if FP_GUARD_EXTRA_SIZE > 0
|
||||
if ((thread->base.user_options & K_FP_REGS) != 0) {
|
||||
thread->arch.mode |= Z_ARM_MODE_MPU_GUARD_FLOAT_Msk;
|
||||
}
|
||||
#endif
|
||||
#if defined(CONFIG_USERSPACE)
|
||||
thread->arch.priv_stack_start = 0;
|
||||
#endif
|
||||
#endif
|
||||
/*
|
||||
* initial values in all other registers/thread entries are
|
||||
* irrelevant.
|
||||
@@ -256,10 +226,13 @@ uint32_t z_arm_mpu_stack_guard_and_fpu_adjust(struct k_thread *thread)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_USERSPACE
|
||||
FUNC_NORETURN void arch_user_mode_enter(k_thread_entry_t user_entry, void *p1, void *p2, void *p3)
|
||||
FUNC_NORETURN void arch_user_mode_enter(k_thread_entry_t user_entry,
|
||||
void *p1, void *p2, void *p3)
|
||||
{
|
||||
uint32_t sp_is_priv = 1;
|
||||
|
||||
/* Set up privileged stack before entering user mode */
|
||||
_current->arch.priv_stack_start =
|
||||
(uint32_t)z_priv_stack_find(_current->stack_obj);
|
||||
#if defined(CONFIG_MPU_STACK_GUARD)
|
||||
#if defined(CONFIG_THREAD_STACK_INFO)
|
||||
/* We're dropping to user mode which means the guard area is no
|
||||
@@ -276,26 +249,24 @@ FUNC_NORETURN void arch_user_mode_enter(k_thread_entry_t user_entry, void *p1, v
|
||||
_current->stack_info.start -= MPU_GUARD_ALIGN_AND_SIZE;
|
||||
_current->stack_info.size += MPU_GUARD_ALIGN_AND_SIZE;
|
||||
#endif /* CONFIG_THREAD_STACK_INFO */
|
||||
|
||||
/* Stack guard area reserved at the bottom of the thread's
|
||||
* privileged stack. Adjust the available (writable) stack
|
||||
* buffer area accordingly.
|
||||
*/
|
||||
#if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING)
|
||||
_current->arch.priv_stack_start +=
|
||||
((_current->arch.mode & Z_ARM_MODE_MPU_GUARD_FLOAT_Msk) != 0) ?
|
||||
MPU_GUARD_ALIGN_AND_SIZE_FLOAT : MPU_GUARD_ALIGN_AND_SIZE;
|
||||
#else
|
||||
_current->arch.priv_stack_start += MPU_GUARD_ALIGN_AND_SIZE;
|
||||
#endif /* CONFIG_FPU && CONFIG_FPU_SHARING */
|
||||
#endif /* CONFIG_MPU_STACK_GUARD */
|
||||
|
||||
/* 2 ways how arch_user_mode_enter is called:
|
||||
* - called as part of context switch from z_arm_pendsv, in this case privileged stack is
|
||||
* already setup and stack pointer points to privileged stack.
|
||||
* - called directly from k_thread_user_mode_enter, in this case privileged stack is not
|
||||
* setup and stack pointer points to user stack.
|
||||
*
|
||||
* When called from k_thread_user_mode_enter, we need to check and setup the privileged
|
||||
* stack and then instruct z_arm_userspace_enter to change the PSP to the privileged stack.
|
||||
* Note that we do not change the PSP in this function to avoid any conflict with compiler's
|
||||
* sequence which has already pushed stuff on the user stack.
|
||||
*/
|
||||
if (0 == _current->arch.priv_stack_start) {
|
||||
setup_priv_stack(_current);
|
||||
sp_is_priv = 0;
|
||||
}
|
||||
|
||||
z_arm_userspace_enter(user_entry, p1, p2, p3, (uint32_t)_current->stack_info.start,
|
||||
_current->stack_info.size - _current->stack_info.delta, sp_is_priv);
|
||||
z_arm_userspace_enter(user_entry, p1, p2, p3,
|
||||
(uint32_t)_current->stack_info.start,
|
||||
_current->stack_info.size -
|
||||
_current->stack_info.delta);
|
||||
CODE_UNREACHABLE;
|
||||
}
|
||||
|
||||
@@ -615,11 +586,9 @@ void arch_switch_to_main_thread(struct k_thread *main_thread, char *stack_ptr,
|
||||
"mov 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. */
|
||||
/* Force a literal pool placement for the addresses referenced above */
|
||||
".ltorg\n"
|
||||
:
|
||||
: "r" (_main), "r" (stack_ptr)
|
||||
: "r0", "r1", "r2", "r3", "r4", "ip", "lr", "memory");
|
||||
: "+r" (_main)
|
||||
: "r" (stack_ptr)
|
||||
: "r0", "r1", "r2", "r3", "r4");
|
||||
|
||||
CODE_UNREACHABLE;
|
||||
}
|
||||
@@ -684,15 +653,13 @@ FUNC_NORETURN void z_arm_switch_to_main_no_multithreading(
|
||||
"ldr r0, =arch_irq_lock_outlined\n"
|
||||
"blx r0\n"
|
||||
"loop: b loop\n\t" /* while (true); */
|
||||
/* Force a literal pool placement for the addresses referenced above */
|
||||
".ltorg\n"
|
||||
:
|
||||
: [_p1]"r" (p1), [_p2]"r" (p2), [_p3]"r" (p3),
|
||||
[_psp]"r" (psp), [_main_entry]"r" (main_entry)
|
||||
#ifdef CONFIG_BUILTIN_STACK_GUARD
|
||||
, [_psplim]"r" (psplim)
|
||||
#endif
|
||||
: "r0", "r1", "r2", "ip", "lr"
|
||||
: "r0", "r1", "r2", "r3"
|
||||
);
|
||||
|
||||
CODE_UNREACHABLE; /* LCOV_EXCL_LINE */
|
||||
|
||||
@@ -45,9 +45,8 @@ GEN_OFFSET_SYM(_thread_arch_t, mode_exc_return);
|
||||
#endif
|
||||
#if defined(CONFIG_USERSPACE)
|
||||
GEN_OFFSET_SYM(_thread_arch_t, priv_stack_start);
|
||||
GEN_OFFSET_SYM(_thread_arch_t, priv_stack_end);
|
||||
|
||||
#if defined(CONFIG_CPU_AARCH32_CORTEX_R)
|
||||
GEN_OFFSET_SYM(_thread_arch_t, priv_stack_end);
|
||||
GEN_OFFSET_SYM(_thread_arch_t, sp_usr);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
* Userspace and service handler hooks
|
||||
*
|
||||
* Copyright (c) 2017 Linaro Limited
|
||||
* Copyright 2025 Arm Limited and/or its affiliates <open-source-office@arm.com>
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
@@ -42,41 +41,45 @@ GDATA(_k_syscall_table)
|
||||
*
|
||||
* The function is invoked as:
|
||||
* z_arm_userspace_enter(user_entry, p1, p2, p3,
|
||||
* stack_info.start, stack_info.size,
|
||||
* sp_is_priv);
|
||||
* stack_info.start, stack_info.size);
|
||||
*/
|
||||
SECTION_FUNC(TEXT,z_arm_userspace_enter)
|
||||
/* move user_entry to lr */
|
||||
mov lr, r0
|
||||
|
||||
/* load arguments from stack:
|
||||
* r4 = user stack start
|
||||
* r5 = user stack size
|
||||
* r6 = sp_is_priv (1 if already on privileged stack)
|
||||
*/
|
||||
pop {r4, r5, r6}
|
||||
|
||||
/* get current thread pointer */
|
||||
/* prepare to set stack to privileged stack */
|
||||
ldr r0, =_kernel
|
||||
ldr r0, [r0, #_kernel_offset_to_current]
|
||||
|
||||
#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
|
||||
/* move p1 to ip */
|
||||
mov ip, r1
|
||||
ldr r1, =_thread_offset_to_priv_stack_end
|
||||
ldr r0, [r0, r1]
|
||||
ldr r1, =_thread_offset_to_priv_stack_start
|
||||
ldr r0, [r0, r1] /* priv stack ptr */
|
||||
ldr r1, =CONFIG_PRIVILEGED_STACK_SIZE
|
||||
add r0, r0, r1
|
||||
/* Restore p1 from ip */
|
||||
mov r1, ip
|
||||
#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE) \
|
||||
|| defined(CONFIG_CPU_AARCH32_CORTEX_R)
|
||||
ldr r0, [r0, #_thread_offset_to_priv_stack_end] /* privileged stack ptr */
|
||||
#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
|
||||
ldr r0, [r0, #_thread_offset_to_priv_stack_start] /* priv stack ptr */
|
||||
ldr ip, =CONFIG_PRIVILEGED_STACK_SIZE
|
||||
add r0, r0, ip
|
||||
#elif defined(CONFIG_CPU_AARCH32_CORTEX_R)
|
||||
ldr r0, [r0, #_thread_offset_to_priv_stack_start] /* priv stack ptr */
|
||||
ldr ip, =CONFIG_PRIVILEGED_STACK_SIZE
|
||||
add r0, r0, ip
|
||||
|
||||
ldr ip, =_kernel
|
||||
ldr ip, [ip, #_kernel_offset_to_current]
|
||||
str r0, [ip, #_thread_offset_to_priv_stack_end] /* priv stack end */
|
||||
#endif
|
||||
|
||||
/* check if current stack is privileged and switch to it if not */
|
||||
cmp r6, #1
|
||||
beq 1f
|
||||
/* store current stack pointer to ip
|
||||
* the current stack pointer is needed to retrieve
|
||||
* stack_info.start and stack_info.size
|
||||
*/
|
||||
mov ip, sp
|
||||
|
||||
#if defined(CONFIG_CPU_AARCH32_CORTEX_R) || defined(CONFIG_CPU_AARCH32_CORTEX_A)
|
||||
#if defined(CONFIG_CPU_AARCH32_CORTEX_R)
|
||||
mov sp, r0
|
||||
#else
|
||||
/* set stack to privileged stack
|
||||
@@ -90,28 +93,35 @@ SECTION_FUNC(TEXT,z_arm_userspace_enter)
|
||||
msr PSP, r0
|
||||
#endif
|
||||
|
||||
1:
|
||||
/* push thread args and entrypoint to stack */
|
||||
push {r1,r2,r3,lr}
|
||||
|
||||
#if defined(CONFIG_BUILTIN_STACK_GUARD)
|
||||
/* At this point the privileged stack is not yet protected by PSPLIM.
|
||||
* Since we have switched to the top of the privileged stack, we
|
||||
* Since we have just switched to the top of the privileged stack, we
|
||||
* are safe, as long as the stack can accommodate the maximum exception
|
||||
* stack frame.
|
||||
*/
|
||||
ldr r1, =CONFIG_PRIVILEGED_STACK_SIZE
|
||||
sub r0, r0, r1 /* Calculate start of privileged stack */
|
||||
/* set stack pointer limit to the start of the privileged stack */
|
||||
|
||||
/* set stack pointer limit to the start of the priv stack */
|
||||
ldr r0, =_kernel
|
||||
ldr r0, [r0, #_kernel_offset_to_current]
|
||||
ldr r0, [r0, #_thread_offset_to_priv_stack_start] /* priv stack ptr */
|
||||
msr PSPLIM, r0
|
||||
#endif
|
||||
|
||||
/* push args to stack */
|
||||
push {r1,r2,r3,lr}
|
||||
#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
|
||||
mov r1, ip
|
||||
push {r0,r1}
|
||||
#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE) \
|
||||
|| defined(CONFIG_CPU_AARCH32_CORTEX_R)
|
||||
push {r0,ip}
|
||||
#endif
|
||||
|
||||
/* Re-program dynamic memory map.
|
||||
*
|
||||
* Important note:
|
||||
* z_arm_configure_dynamic_mpu_regions() may re-program the MPU Stack Guard
|
||||
* to guard the privileged stack for overflows (if building with option
|
||||
* to guard the privilege stack for overflows (if building with option
|
||||
* CONFIG_MPU_STACK_GUARD). There is a risk of actually overflowing the
|
||||
* stack while doing the re-programming. We minimize the risk by placing
|
||||
* this function immediately after we have switched to the privileged stack
|
||||
@@ -125,10 +135,29 @@ SECTION_FUNC(TEXT,z_arm_userspace_enter)
|
||||
ldr r0, [r0, #_kernel_offset_to_current]
|
||||
bl z_arm_configure_dynamic_mpu_regions
|
||||
|
||||
#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
|
||||
pop {r0,r3}
|
||||
|
||||
/* load up stack info from user stack */
|
||||
ldr r0, [r3]
|
||||
ldr r3, [r3, #4]
|
||||
mov ip, r3
|
||||
|
||||
push {r0,r3}
|
||||
#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE) \
|
||||
|| defined(CONFIG_CPU_AARCH32_CORTEX_R)
|
||||
pop {r0,ip}
|
||||
|
||||
/* load up stack info from user stack */
|
||||
ldr r0, [ip]
|
||||
ldr ip, [ip, #4]
|
||||
|
||||
push {r0,ip}
|
||||
#endif
|
||||
|
||||
/* clear the user stack area to clean out privileged data */
|
||||
/* from right past the guard right up to the end */
|
||||
mov r0, r4
|
||||
mov r2, r5
|
||||
mov r2, ip
|
||||
#ifdef CONFIG_INIT_STACKS
|
||||
ldr r1,=0xaaaaaaaa
|
||||
#else
|
||||
@@ -136,18 +165,17 @@ SECTION_FUNC(TEXT,z_arm_userspace_enter)
|
||||
#endif
|
||||
bl memset
|
||||
|
||||
/* At this point:
|
||||
* r4 contains user stack start
|
||||
* r5 contains user stack size
|
||||
* calculate top of user stack in r0 (start+size)
|
||||
*/
|
||||
#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
|
||||
adds r0, r4, r5
|
||||
pop {r0, r1}
|
||||
mov ip, r1
|
||||
#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE) \
|
||||
|| defined(CONFIG_CPU_AARCH32_CORTEX_R)
|
||||
add r0, r4, r5
|
||||
pop {r0,ip}
|
||||
#endif
|
||||
|
||||
/* r0 contains user stack start, ip contains user stack size */
|
||||
add r0, r0, ip /* calculate top of stack */
|
||||
|
||||
/* pop remaining arguments from stack before switching stacks */
|
||||
#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
|
||||
/* Use r4 to pop lr, then restore r4 */
|
||||
@@ -160,7 +188,7 @@ SECTION_FUNC(TEXT,z_arm_userspace_enter)
|
||||
pop {r1,r2,r3,lr}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_CPU_AARCH32_CORTEX_R) || defined(CONFIG_CPU_AARCH32_CORTEX_A)
|
||||
#if defined(CONFIG_CPU_AARCH32_CORTEX_R)
|
||||
/*
|
||||
* set stack to user stack. We are in SYSTEM state, so r13 and r14 are
|
||||
* shared with USER state
|
||||
@@ -195,7 +223,10 @@ SECTION_FUNC(TEXT,z_arm_userspace_enter)
|
||||
isb
|
||||
|
||||
/* Set PSPLIM to guard the thread's user stack. */
|
||||
msr PSPLIM, r4
|
||||
ldr r0, =_kernel
|
||||
ldr r0, [r0, #_kernel_offset_to_current]
|
||||
ldr r0, [r0, #_thread_offset_to_stack_info_start]
|
||||
msr PSPLIM, r0
|
||||
|
||||
pop {r0, ip}
|
||||
#endif
|
||||
@@ -277,8 +308,9 @@ SECTION_FUNC(TEXT,z_arm_userspace_enter)
|
||||
* This function is used to do system calls from unprivileged code. This
|
||||
* function is responsible for the following:
|
||||
* 1) Fixing up bad syscalls
|
||||
* 2) Dispatching the system call
|
||||
* 3) Restoring stack and calling back to the caller of the SVC
|
||||
* 2) Configuring privileged stack and loading up stack arguments
|
||||
* 3) Dispatching the system call
|
||||
* 4) Restoring stack and calling back to the caller of the SVC
|
||||
*
|
||||
*/
|
||||
SECTION_FUNC(TEXT, z_arm_do_syscall)
|
||||
@@ -296,7 +328,41 @@ SECTION_FUNC(TEXT, z_arm_do_syscall)
|
||||
* At this point PSPLIM is already configured to guard the default (user)
|
||||
* stack, so pushing to the default thread's stack is safe.
|
||||
*/
|
||||
#if defined(CONFIG_CPU_AARCH32_CORTEX_R)
|
||||
#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
|
||||
/* save current stack pointer (user stack) */
|
||||
mov ip, sp
|
||||
/* temporarily push to user stack */
|
||||
push {r0,r1}
|
||||
/* setup privileged stack */
|
||||
ldr r0, =_kernel
|
||||
ldr r0, [r0, #_kernel_offset_to_current]
|
||||
adds r0, r0, #_thread_offset_to_priv_stack_start
|
||||
ldr r0, [r0] /* priv stack ptr */
|
||||
ldr r1, =CONFIG_PRIVILEGED_STACK_SIZE
|
||||
add r0, r1
|
||||
|
||||
/* Store current SP and LR at the beginning of the priv stack */
|
||||
subs r0, #8
|
||||
mov r1, ip
|
||||
str r1, [r0, #0]
|
||||
mov r1, lr
|
||||
str r1, [r0, #4]
|
||||
mov ip, r0
|
||||
/* Restore user stack and original r0, r1 */
|
||||
pop {r0, r1}
|
||||
|
||||
#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
|
||||
/* setup privileged stack */
|
||||
ldr ip, =_kernel
|
||||
ldr ip, [ip, #_kernel_offset_to_current]
|
||||
ldr ip, [ip, #_thread_offset_to_priv_stack_start] /* priv stack ptr */
|
||||
add ip, #CONFIG_PRIVILEGED_STACK_SIZE
|
||||
|
||||
/* Store current SP and LR at the beginning of the priv stack */
|
||||
subs ip, #8
|
||||
str sp, [ip, #0]
|
||||
str lr, [ip, #4]
|
||||
#elif defined(CONFIG_CPU_AARCH32_CORTEX_R)
|
||||
/*
|
||||
* The SVC handler has already switched to the privileged stack.
|
||||
* Store the user SP and LR at the beginning of the priv stack.
|
||||
@@ -307,6 +373,11 @@ SECTION_FUNC(TEXT, z_arm_do_syscall)
|
||||
push {ip, lr}
|
||||
#endif
|
||||
|
||||
#if !defined(CONFIG_CPU_AARCH32_CORTEX_R)
|
||||
/* switch to privileged stack */
|
||||
msr PSP, ip
|
||||
#endif
|
||||
|
||||
/* Note (applies when using stack limit checking):
|
||||
* We do not need to lock IRQs after switching PSP to the privileged stack;
|
||||
* PSPLIM is guarding the default (user) stack, which, by design, is
|
||||
@@ -315,6 +386,14 @@ SECTION_FUNC(TEXT, z_arm_do_syscall)
|
||||
* the maximum exception stack frame.
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_BUILTIN_STACK_GUARD)
|
||||
/* Set stack pointer limit (needed in privileged mode) */
|
||||
ldr ip, =_kernel
|
||||
ldr ip, [ip, #_kernel_offset_to_current]
|
||||
ldr ip, [ip, #_thread_offset_to_priv_stack_start] /* priv stack ptr */
|
||||
msr PSPLIM, ip
|
||||
#endif
|
||||
|
||||
/*
|
||||
* r0-r5 contain arguments
|
||||
* r6 contains call_id
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019 Carlo Caione <ccaione@baylibre.com>
|
||||
* Copyright 2025 Arm Limited and/or its affiliates <open-source-office@arm.com>
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -58,8 +57,7 @@ static ALWAYS_INLINE void arch_switch(void *switch_to, void **switched_from)
|
||||
extern FUNC_NORETURN void z_arm_userspace_enter(k_thread_entry_t user_entry,
|
||||
void *p1, void *p2, void *p3,
|
||||
uint32_t stack_end,
|
||||
uint32_t stack_start,
|
||||
uint32_t sp_is_priv);
|
||||
uint32_t stack_start);
|
||||
|
||||
extern void z_arm_fatal_error(unsigned int reason, const struct arch_esf *esf);
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019 Carlo Caione <ccaione@baylibre.com>
|
||||
* Copyright 2025 Arm Limited and/or its affiliates <open-source-office@arm.com>
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -72,9 +71,10 @@ extern FUNC_NORETURN void z_arm_switch_to_main_no_multithreading(
|
||||
|
||||
#endif /* !CONFIG_MULTITHREADING */
|
||||
|
||||
extern FUNC_NORETURN void z_arm_userspace_enter(k_thread_entry_t user_entry, void *p1, void *p2,
|
||||
void *p3, uint32_t stack_end, uint32_t stack_start,
|
||||
uint32_t sp_is_priv);
|
||||
extern FUNC_NORETURN void z_arm_userspace_enter(k_thread_entry_t user_entry,
|
||||
void *p1, void *p2, void *p3,
|
||||
uint32_t stack_end,
|
||||
uint32_t stack_start);
|
||||
|
||||
extern void z_arm_fatal_error(unsigned int reason, const struct arch_esf *esf);
|
||||
|
||||
|
||||
@@ -45,10 +45,10 @@
|
||||
#define _thread_offset_to_priv_stack_start \
|
||||
(___thread_t_arch_OFFSET + ___thread_arch_t_priv_stack_start_OFFSET)
|
||||
|
||||
#if defined(CONFIG_CPU_AARCH32_CORTEX_R)
|
||||
#define _thread_offset_to_priv_stack_end \
|
||||
(___thread_t_arch_OFFSET + ___thread_arch_t_priv_stack_end_OFFSET)
|
||||
|
||||
#if defined(CONFIG_CPU_AARCH32_CORTEX_R)
|
||||
#define _thread_offset_to_sp_usr \
|
||||
(___thread_t_arch_OFFSET + ___thread_arch_t_sp_usr_OFFSET)
|
||||
#endif
|
||||
|
||||
@@ -15,11 +15,11 @@
|
||||
struct int_list_header {
|
||||
uint32_t table_size;
|
||||
uint32_t offset;
|
||||
#if defined(CONFIG_ISR_TABLES_LOCAL_DECLARATION)
|
||||
#if IS_ENABLED(CONFIG_ISR_TABLES_LOCAL_DECLARATION)
|
||||
uint32_t swi_table_entry_size;
|
||||
uint32_t shared_isr_table_entry_size;
|
||||
uint32_t shared_isr_client_num_offset;
|
||||
#endif /* defined(CONFIG_ISR_TABLES_LOCAL_DECLARATION) */
|
||||
#endif /* IS_ENABLED(CONFIG_ISR_TABLES_LOCAL_DECLARATION) */
|
||||
};
|
||||
|
||||
/* These values are not included in the resulting binary, but instead form the
|
||||
@@ -29,13 +29,13 @@ struct int_list_header {
|
||||
Z_GENERIC_SECTION(.irq_info) __used struct int_list_header _iheader = {
|
||||
.table_size = IRQ_TABLE_SIZE,
|
||||
.offset = CONFIG_GEN_IRQ_START_VECTOR,
|
||||
#if defined(CONFIG_ISR_TABLES_LOCAL_DECLARATION)
|
||||
#if IS_ENABLED(CONFIG_ISR_TABLES_LOCAL_DECLARATION)
|
||||
.swi_table_entry_size = sizeof(struct _isr_table_entry),
|
||||
#if defined(CONFIG_SHARED_INTERRUPTS)
|
||||
#if IS_ENABLED(CONFIG_SHARED_INTERRUPTS)
|
||||
.shared_isr_table_entry_size = sizeof(struct z_shared_isr_table_entry),
|
||||
.shared_isr_client_num_offset = offsetof(struct z_shared_isr_table_entry, client_num),
|
||||
#endif /* defined(CONFIG_SHARED_INTERRUPTS) */
|
||||
#endif /* defined(CONFIG_ISR_TABLES_LOCAL_DECLARATION) */
|
||||
#endif /* IS_ENABLED(CONFIG_SHARED_INTERRUPTS) */
|
||||
#endif /* IS_ENABLED(CONFIG_ISR_TABLES_LOCAL_DECLARATION) */
|
||||
};
|
||||
|
||||
/* These are placeholder tables. They will be replaced by the real tables
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
|
||||
SECTION_DATA_PROLOGUE(.ramfunc,,)
|
||||
{
|
||||
__ramfunc_region_start = .;
|
||||
MPU_ALIGN(__ramfunc_size);
|
||||
__ramfunc_start = .;
|
||||
*(.ramfunc)
|
||||
|
||||
@@ -61,25 +61,6 @@ 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)
|
||||
{
|
||||
|
||||
@@ -30,6 +30,7 @@ config RISCV_GP
|
||||
config RISCV_ALWAYS_SWITCH_THROUGH_ECALL
|
||||
bool "Do not use mret outside a trap handler context"
|
||||
depends on MULTITHREADING
|
||||
depends on !RISCV_PMP
|
||||
help
|
||||
Use mret instruction only when in a trap handler.
|
||||
This is for RISC-V implementations that require every mret to be
|
||||
@@ -47,11 +48,10 @@ config RISCV_EXCEPTION_STACK_TRACE
|
||||
menu "RISCV Processor Options"
|
||||
|
||||
config INCLUDE_RESET_VECTOR
|
||||
bool "Jumps to __initialize directly"
|
||||
bool "Include Reset vector"
|
||||
help
|
||||
Select 'y' here to use the Zephyr provided default implementation that
|
||||
jumps to `__initialize` directly. Otherwise a SOC needs to provide its
|
||||
custom `__reset` routine.
|
||||
Include the reset vector stub, which initializes the stack and
|
||||
prepares for running C code.
|
||||
|
||||
config RISCV_PRIVILEGED
|
||||
bool
|
||||
|
||||
@@ -163,14 +163,6 @@ 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
|
||||
#endif /* CONFIG_RISCV_GP */
|
||||
|
||||
/* Clear our per-thread usermode flag */
|
||||
lui t0, %tprel_hi(is_user_mode)
|
||||
add t0, t0, tp, %tprel_add(is_user_mode)
|
||||
@@ -406,22 +398,6 @@ is_kernel_syscall:
|
||||
bne t0, t1, skip_schedule
|
||||
lr a0, __struct_arch_esf_a0_OFFSET(sp)
|
||||
lr a1, __struct_arch_esf_a1_OFFSET(sp)
|
||||
|
||||
#ifdef CONFIG_FPU_SHARING
|
||||
/*
|
||||
* When an ECALL is used for a context-switch, the current thread has
|
||||
* been updated to the next thread.
|
||||
* Add the exception_depth back to the previous thread.
|
||||
*/
|
||||
lb t1, _thread_offset_to_exception_depth(a0)
|
||||
add t1, t1, -1
|
||||
sb t1, _thread_offset_to_exception_depth(a0)
|
||||
|
||||
lb t1, _thread_offset_to_exception_depth(a1)
|
||||
add t1, t1, 1
|
||||
sb t1, _thread_offset_to_exception_depth(a1)
|
||||
#endif
|
||||
|
||||
j reschedule
|
||||
skip_schedule:
|
||||
#endif
|
||||
@@ -436,12 +412,6 @@ 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
|
||||
|
||||
|
||||
@@ -204,34 +204,6 @@ static bool set_pmp_entry(unsigned int *index_p, uint8_t perm,
|
||||
return ok;
|
||||
}
|
||||
|
||||
static inline bool set_pmp_mprv_catchall(unsigned int *index_p,
|
||||
unsigned long *pmp_addr, unsigned long *pmp_cfg,
|
||||
unsigned int index_limit)
|
||||
{
|
||||
/*
|
||||
* We'll be using MPRV. Make a fallback entry with everything
|
||||
* accessible as if no PMP entries were matched which is otherwise
|
||||
* the default behavior for m-mode without MPRV.
|
||||
*/
|
||||
bool ok = set_pmp_entry(index_p, PMP_R | PMP_W | PMP_X,
|
||||
0, 0, pmp_addr, pmp_cfg, index_limit);
|
||||
|
||||
#ifdef CONFIG_QEMU_TARGET
|
||||
if (ok) {
|
||||
/*
|
||||
* Workaround: The above produced 0x1fffffff which is correct.
|
||||
* But there is a QEMU bug that prevents it from interpreting
|
||||
* this value correctly. Hardcode the special case used by
|
||||
* QEMU to bypass this bug for now. The QEMU fix is here:
|
||||
* https://lists.gnu.org/archive/html/qemu-devel/2022-04/msg00961.html
|
||||
*/
|
||||
pmp_addr[*index_p - 1] = -1L;
|
||||
}
|
||||
#endif
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Write a range of PMP entries to corresponding PMP registers
|
||||
*
|
||||
@@ -348,8 +320,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[4];
|
||||
unsigned long pmp_cfg[1];
|
||||
unsigned int index = 0;
|
||||
|
||||
/* The read-only area is always there for every mode */
|
||||
@@ -379,28 +351,10 @@ void z_riscv_pmp_init(void)
|
||||
(uintptr_t)z_interrupt_stacks[_current_cpu->id],
|
||||
Z_RISCV_STACK_GUARD_SIZE,
|
||||
pmp_addr, pmp_cfg, ARRAY_SIZE(pmp_addr));
|
||||
|
||||
/*
|
||||
* This early, the kernel init code uses the IRQ stack and we want to
|
||||
* safeguard it as soon as possible. But we need a temporary default
|
||||
* "catch all" PMP entry for MPRV to work. Later on, this entry will
|
||||
* be set for each thread by z_riscv_pmp_stackguard_prepare().
|
||||
*/
|
||||
set_pmp_mprv_catchall(&index, 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));
|
||||
|
||||
/* Activate our non-locked PMP entries for m-mode */
|
||||
csr_set(mstatus, MSTATUS_MPRV);
|
||||
|
||||
/* And forget about that last entry as we won't need it later */
|
||||
index--;
|
||||
#else
|
||||
/* Write those entries to PMP regs. */
|
||||
write_pmp_entries(0, index, true, pmp_addr, pmp_cfg, ARRAY_SIZE(pmp_addr));
|
||||
#endif
|
||||
|
||||
write_pmp_entries(0, index, true, pmp_addr, pmp_cfg, ARRAY_SIZE(pmp_addr));
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#ifdef CONFIG_PMP_STACK_GUARD
|
||||
/*
|
||||
@@ -419,7 +373,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;
|
||||
@@ -476,7 +429,24 @@ void z_riscv_pmp_stackguard_prepare(struct k_thread *thread)
|
||||
set_pmp_entry(&index, PMP_NONE,
|
||||
stack_bottom, Z_RISCV_STACK_GUARD_SIZE,
|
||||
PMP_M_MODE(thread));
|
||||
set_pmp_mprv_catchall(&index, PMP_M_MODE(thread));
|
||||
|
||||
/*
|
||||
* We'll be using MPRV. Make a fallback entry with everything
|
||||
* accessible as if no PMP entries were matched which is otherwise
|
||||
* the default behavior for m-mode without MPRV.
|
||||
*/
|
||||
set_pmp_entry(&index, PMP_R | PMP_W | PMP_X,
|
||||
0, 0, PMP_M_MODE(thread));
|
||||
#ifdef CONFIG_QEMU_TARGET
|
||||
/*
|
||||
* Workaround: The above produced 0x1fffffff which is correct.
|
||||
* But there is a QEMU bug that prevents it from interpreting this
|
||||
* value correctly. Hardcode the special case used by QEMU to
|
||||
* bypass this bug for now. The QEMU fix is here:
|
||||
* https://lists.gnu.org/archive/html/qemu-devel/2022-04/msg00961.html
|
||||
*/
|
||||
thread->arch.m_mode_pmpaddr_regs[index-1] = -1L;
|
||||
#endif
|
||||
|
||||
/* remember how many entries we use */
|
||||
thread->arch.m_mode_pmp_end_index = index;
|
||||
|
||||
@@ -62,8 +62,7 @@ boot_first_core:
|
||||
#ifdef CONFIG_INIT_STACKS
|
||||
/* Pre-populate all bytes in z_interrupt_stacks with 0xAA */
|
||||
la t0, z_interrupt_stacks
|
||||
/* Total size of all cores' IRQ stack */
|
||||
li t1, __z_interrupt_all_stacks_SIZEOF
|
||||
li t1, __z_interrupt_stack_SIZEOF
|
||||
add t1, t1, t0
|
||||
|
||||
/* Populate z_interrupt_stacks with 0xaaaaaaaa */
|
||||
@@ -72,7 +71,7 @@ aa_loop:
|
||||
sw t2, 0x00(t0)
|
||||
addi t0, t0, 4
|
||||
blt t0, t1, aa_loop
|
||||
#endif /* CONFIG_INIT_STACKS */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Initially, setup stack pointer to
|
||||
|
||||
@@ -58,12 +58,12 @@ static inline bool in_user_thread_stack_bound(uintptr_t addr, const struct k_thr
|
||||
|
||||
/* See: zephyr/include/zephyr/arch/riscv/arch.h */
|
||||
if (IS_ENABLED(CONFIG_PMP_POWER_OF_TWO_ALIGNMENT)) {
|
||||
start = thread->arch.priv_stack_start + Z_RISCV_STACK_GUARD_SIZE;
|
||||
start = thread->arch.priv_stack_start - CONFIG_PRIVILEGED_STACK_SIZE;
|
||||
end = thread->arch.priv_stack_start;
|
||||
} else {
|
||||
start = thread->stack_info.start - CONFIG_PRIVILEGED_STACK_SIZE;
|
||||
end = thread->stack_info.start;
|
||||
}
|
||||
end = Z_STACK_PTR_ALIGN(thread->arch.priv_stack_start + K_KERNEL_STACK_RESERVED +
|
||||
CONFIG_PRIVILEGED_STACK_SIZE);
|
||||
|
||||
return (addr >= start) && (addr < end);
|
||||
}
|
||||
@@ -134,53 +134,22 @@ static void walk_stackframe(stack_trace_callback_fn cb, void *cookie, const stru
|
||||
ra = csf->ra;
|
||||
}
|
||||
|
||||
for (int i = 0; (i < MAX_STACK_FRAMES) && vrfy(fp, thread, esf) && (fp > last_fp); i++) {
|
||||
if (in_text_region(ra) && !cb(cookie, ra)) {
|
||||
break;
|
||||
}
|
||||
last_fp = fp;
|
||||
|
||||
/* Unwind to the previous frame */
|
||||
frame = (struct stackframe *)fp - 1;
|
||||
|
||||
if ((i == 0) && (esf != NULL)) {
|
||||
/* Print `esf->ra` if we are at the top of the stack */
|
||||
if (in_text_region(esf->ra) && !cb(cookie, esf->ra)) {
|
||||
for (int i = 0; (i < MAX_STACK_FRAMES) && vrfy(fp, thread, esf) && (fp > last_fp);) {
|
||||
if (in_text_region(ra)) {
|
||||
if (!cb(cookie, ra)) {
|
||||
break;
|
||||
}
|
||||
/**
|
||||
* For the first stack frame, the `ra` is not stored in the frame if the
|
||||
* preempted function doesn't call any other function, we can observe:
|
||||
*
|
||||
* .-------------.
|
||||
* frame[0]->fp ---> | frame[0] fp |
|
||||
* :-------------:
|
||||
* frame[0]->ra ---> | frame[1] fp |
|
||||
* | frame[1] ra |
|
||||
* :~~~~~~~~~~~~~:
|
||||
* | frame[N] fp |
|
||||
*
|
||||
* Instead of:
|
||||
*
|
||||
* .-------------.
|
||||
* frame[0]->fp ---> | frame[0] fp |
|
||||
* frame[0]->ra ---> | frame[1] ra |
|
||||
* :-------------:
|
||||
* | frame[1] fp |
|
||||
* | frame[1] ra |
|
||||
* :~~~~~~~~~~~~~:
|
||||
* | frame[N] fp |
|
||||
*
|
||||
* Check if `frame->ra` actually points to a `fp`, and adjust accordingly
|
||||
/*
|
||||
* Increment the iterator only if `ra` is within the text region to get the
|
||||
* most out of it
|
||||
*/
|
||||
if (vrfy(frame->ra, thread, esf)) {
|
||||
fp = frame->ra;
|
||||
frame = (struct stackframe *)fp;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
fp = frame->fp;
|
||||
last_fp = fp;
|
||||
/* Unwind to the previous frame */
|
||||
frame = (struct stackframe *)fp - 1;
|
||||
ra = frame->ra;
|
||||
fp = frame->fp;
|
||||
}
|
||||
}
|
||||
#else /* !CONFIG_FRAME_POINTER */
|
||||
|
||||
@@ -100,8 +100,8 @@ void z_x86_irq_connect_on_vector(unsigned int irq,
|
||||
*/
|
||||
|
||||
int arch_irq_connect_dynamic(unsigned int irq, unsigned int priority,
|
||||
void (*routine)(const void *parameter),
|
||||
const void *parameter, uint32_t flags)
|
||||
void (*func)(const void *arg),
|
||||
const void *arg, uint32_t flags)
|
||||
{
|
||||
uint32_t key;
|
||||
int vector;
|
||||
@@ -124,7 +124,7 @@ int arch_irq_connect_dynamic(unsigned int irq, unsigned int priority,
|
||||
#endif /* CONFIG_INTEL_VTD_ICTL */
|
||||
|
||||
z_irq_controller_irq_config(vector, irq, flags);
|
||||
z_x86_irq_connect_on_vector(irq, vector, routine, parameter);
|
||||
z_x86_irq_connect_on_vector(irq, vector, func, arg);
|
||||
}
|
||||
|
||||
irq_unlock(key);
|
||||
|
||||
@@ -33,9 +33,6 @@ extern char _heap_start[];
|
||||
/** MPU foreground map for kernel mode. */
|
||||
static struct xtensa_mpu_map xtensa_mpu_map_fg_kernel;
|
||||
|
||||
/** Make sure write to the MPU region is atomic. */
|
||||
static struct k_spinlock xtensa_mpu_lock;
|
||||
|
||||
/*
|
||||
* Additional information about the MPU maps: foreground and background
|
||||
* maps.
|
||||
@@ -632,9 +629,6 @@ void xtensa_mpu_map_write(struct xtensa_mpu_map *map)
|
||||
#endif
|
||||
{
|
||||
int entry;
|
||||
k_spinlock_key_t key;
|
||||
|
||||
key = k_spin_lock(&xtensa_mpu_lock);
|
||||
|
||||
#ifdef CONFIG_USERSPACE
|
||||
struct xtensa_mpu_map *map = thread->arch.mpu_map;
|
||||
@@ -658,8 +652,6 @@ void xtensa_mpu_map_write(struct xtensa_mpu_map *map)
|
||||
__asm__ volatile("wptlb %0, %1\n\t"
|
||||
: : "a"(map->entries[entry].at), "a"(map->entries[entry].as));
|
||||
}
|
||||
|
||||
k_spin_unlock(&xtensa_mpu_lock, key);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -773,7 +765,6 @@ int arch_mem_domain_partition_remove(struct k_mem_domain *domain,
|
||||
{
|
||||
int ret;
|
||||
uint32_t perm;
|
||||
struct k_thread *cur_thread;
|
||||
struct xtensa_mpu_map *map = &domain->arch.mpu_map;
|
||||
struct k_mem_partition *partition = &domain->partitions[partition_id];
|
||||
uintptr_t end_addr = partition->start + partition->size;
|
||||
@@ -842,15 +833,6 @@ int arch_mem_domain_partition_remove(struct k_mem_domain *domain,
|
||||
CONFIG_XTENSA_MPU_DEFAULT_MEM_TYPE,
|
||||
NULL);
|
||||
|
||||
/*
|
||||
* Need to update hardware MPU regions if we are removing
|
||||
* partition from the domain of the current running thread.
|
||||
*/
|
||||
cur_thread = _current_cpu->current;
|
||||
if (cur_thread->mem_domain_info.mem_domain == domain) {
|
||||
xtensa_mpu_map_write(cur_thread);
|
||||
}
|
||||
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
@@ -859,7 +841,6 @@ int arch_mem_domain_partition_add(struct k_mem_domain *domain,
|
||||
uint32_t partition_id)
|
||||
{
|
||||
int ret;
|
||||
struct k_thread *cur_thread;
|
||||
struct xtensa_mpu_map *map = &domain->arch.mpu_map;
|
||||
struct k_mem_partition *partition = &domain->partitions[partition_id];
|
||||
uintptr_t end_addr = partition->start + partition->size;
|
||||
@@ -874,20 +855,6 @@ int arch_mem_domain_partition_add(struct k_mem_domain *domain,
|
||||
CONFIG_XTENSA_MPU_DEFAULT_MEM_TYPE,
|
||||
NULL);
|
||||
|
||||
/*
|
||||
* Need to update hardware MPU regions if we are removing
|
||||
* partition from the domain of the current running thread.
|
||||
*
|
||||
* Note that this function can be called with dummy thread
|
||||
* at boot so we need to avoid writing MPU regions to
|
||||
* hardware.
|
||||
*/
|
||||
cur_thread = _current_cpu->current;
|
||||
if (((cur_thread->base.thread_state & _THREAD_DUMMY) != _THREAD_DUMMY) &&
|
||||
(cur_thread->mem_domain_info.mem_domain == domain)) {
|
||||
xtensa_mpu_map_write(cur_thread);
|
||||
}
|
||||
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -317,13 +317,6 @@ void xtensa_mmu_init(void)
|
||||
|
||||
xtensa_init_paging(xtensa_kernel_ptables);
|
||||
|
||||
/*
|
||||
* This is used to determine whether we are faulting inside double
|
||||
* exception if this is not zero. Sometimes SoC starts with this not
|
||||
* being set to zero. So clear it during boot.
|
||||
*/
|
||||
XTENSA_WSR(ZSR_DEPC_SAVE_STR, 0);
|
||||
|
||||
arch_xtensa_mmu_post_init(_current_cpu->id == 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -311,7 +311,7 @@ You can debug an application in the usual way. Here is an example for the
|
||||
:goals: debug
|
||||
|
||||
.. _pyOCD:
|
||||
https://github.com/pyocd/pyOCD
|
||||
https://github.com/mbedmicro/pyOCD
|
||||
|
||||
.. _CMSIS DAP:
|
||||
https://developer.mbed.org/handbook/CMSIS-DAP
|
||||
@@ -323,7 +323,7 @@ You can debug an application in the usual way. Here is an example for the
|
||||
http://wiki.seeed.cc/BLE_Nitrogen/
|
||||
|
||||
.. _pyOCD issue 259:
|
||||
https://github.com/pyocd/pyOCD/issues/259
|
||||
https://github.com/mbedmicro/pyOCD/issues/259
|
||||
|
||||
.. _96Boards IE Specification:
|
||||
https://linaro.co/ie-specification
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
/ {
|
||||
model = "Arduino Uno R4 Board";
|
||||
compatible = "renesas,r7fa4m1ab3cfm";
|
||||
compatible = "renesas,r7fa4m1aB3cfm";
|
||||
|
||||
chosen {
|
||||
zephyr,console = &uart2;
|
||||
|
||||
@@ -20,5 +20,4 @@ if(CONFIG_BOARD_MPS2_AN521_CPU1 AND NOT CONFIG_OPENAMP)
|
||||
BUILD_BYPRODUCTS "${CPU0_BINARY_DIR}/${KERNEL_BIN_NAME}"
|
||||
BUILD_ALWAYS True
|
||||
)
|
||||
add_dependencies(app empty_cpu0)
|
||||
endif()
|
||||
|
||||
@@ -32,7 +32,7 @@ config TEST_EXTRA_STACK_SIZE
|
||||
|
||||
endif # COVERAGE_GCOV
|
||||
|
||||
endif # BOARD_MPS2_AN383 || BOARD_MPS2_AN385 || BOARD_MPS2_AN386 || BOARD_MPS2_AN500
|
||||
endif
|
||||
|
||||
if BOARD_MPS2_AN521_CPU0 || BOARD_MPS2_AN521_CPU0_NS || BOARD_MPS2_AN521_CPU1
|
||||
|
||||
@@ -57,11 +57,4 @@ config UART_INTERRUPT_DRIVEN
|
||||
|
||||
endif # SERIAL
|
||||
|
||||
endif # BOARD_MPS2_AN521_CPU0 || BOARD_MPS2_AN521_CPU0_NS || BOARD_MPS2_AN521_CPU1
|
||||
|
||||
if QEMU_TARGET
|
||||
|
||||
config ISR_STACK_SIZE
|
||||
default 4096
|
||||
|
||||
endif
|
||||
|
||||
@@ -11,7 +11,6 @@ supported:
|
||||
- counter
|
||||
- netif:serial-net
|
||||
- gpio
|
||||
- watchdog
|
||||
testing:
|
||||
default: true
|
||||
vendor: arm
|
||||
|
||||
@@ -81,18 +81,14 @@
|
||||
/* On-board antenna pinmux states */
|
||||
board_ant_tx_pa_off: board_ant_tx_pa_off {
|
||||
pinmux = <29 IOC_PORT_GPIO>;
|
||||
bias-disable;
|
||||
};
|
||||
board_ant_tx_pa_on: board_ant_tx_pa_on {
|
||||
pinmux = <29 IOC_PORT_RFC_GPO3>;
|
||||
bias-disable;
|
||||
};
|
||||
board_ant_subg_off: board_ant_subg_off {
|
||||
pinmux = <30 IOC_PORT_GPIO>;
|
||||
bias-disable;
|
||||
};
|
||||
board_ant_subg_on: board_ant_subg_on {
|
||||
pinmux = <30 IOC_PORT_RFC_GPO0>;
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -42,33 +42,18 @@
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* The BeagleConnect Freedom has an on-board antenna switch (SKY13317-373LF) used to select
|
||||
* the appropriate RF signal port based on the currently-used PHY.
|
||||
*
|
||||
* Truth table:
|
||||
*
|
||||
* Path DIO29 DIO30
|
||||
* =========== ===== =====
|
||||
* Off 0 0
|
||||
* Sub-1 GHz 0 1 // DIO30 mux to IOC_PORT_RFC_GPO0 for auto
|
||||
* 20 dBm TX 1 0 // DIO29 mux to IOC_PORT_RFC_GPO3 for auto
|
||||
*/
|
||||
antenna_mux0: antenna_mux0 {
|
||||
compatible = "skyworks,sky13317";
|
||||
status = "okay";
|
||||
gpios = <&gpio0 29 GPIO_ACTIVE_HIGH>, <&gpio0 30 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-0 = <&board_ant_tx_pa_off &board_ant_subg_off>;
|
||||
pinctrl-1 = <&board_ant_tx_pa_off &board_ant_subg_on>;
|
||||
pinctrl-2 = <&board_ant_tx_pa_on &board_ant_subg_on>;
|
||||
pinctrl-names = "default", "ant_subg", "ant_subg_pa";
|
||||
};
|
||||
|
||||
leds: leds {
|
||||
compatible = "gpio-leds";
|
||||
led0: led_0 {
|
||||
gpios = <&gpio0 18 GPIO_ACTIVE_HIGH>; // 2.4GHz TX/RX
|
||||
};
|
||||
|
||||
/* U.FL connector switch */
|
||||
rf_sw: rf_sw {
|
||||
gpios =
|
||||
<&gpio0 29 GPIO_ACTIVE_HIGH>, // SubG TX +20dB
|
||||
<&gpio0 30 GPIO_ACTIVE_HIGH>; // SubG TX/RX 0dB
|
||||
};
|
||||
};
|
||||
|
||||
sens_i2c: sensor-switch {
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
/*
|
||||
/* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Copyright (c) 2021 Florin Stancu
|
||||
* Copyright (c) 2021 Jason Kridner, BeagleBoard.org Foundation
|
||||
* Copyright (c) 2024 Ayush Singh <ayush@beagleboard.org>
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -11,108 +10,107 @@
|
||||
* switch.
|
||||
*/
|
||||
|
||||
#define DT_DRV_COMPAT skyworks_sky13317
|
||||
|
||||
#include <zephyr/init.h>
|
||||
#include <zephyr/kernel.h>
|
||||
#include <zephyr/device.h>
|
||||
#include <zephyr/drivers/gpio.h>
|
||||
#include <zephyr/drivers/pinctrl.h>
|
||||
#include <zephyr/init.h>
|
||||
|
||||
#include <ti/drivers/rf/RF.h>
|
||||
#include <driverlib/gpio.h>
|
||||
#include <driverlib/ioc.h>
|
||||
#include <driverlib/rom.h>
|
||||
#include <driverlib/interrupt.h>
|
||||
|
||||
/* custom pinctrl states for the antenna mux */
|
||||
#define PINCTRL_STATE_ANT_SUBG 1
|
||||
#define PINCTRL_STATE_ANT_SUBG_PA 2
|
||||
/* DIOs for RF antenna paths */
|
||||
#define BOARD_RF_HIGH_PA 29 /* TODO: pull from DT */
|
||||
#define BOARD_RF_SUB1GHZ 30 /* TODO: pull from DT */
|
||||
|
||||
#define BOARD_ANT_GPIO_PA 0
|
||||
#define BOARD_ANT_GPIO_SUBG 1
|
||||
static void board_cc13xx_rf_callback(RF_Handle client, RF_GlobalEvent events,
|
||||
void *arg);
|
||||
|
||||
static int board_antenna_init(const struct device *dev);
|
||||
static void board_cc13xx_rf_callback(RF_Handle client, RF_GlobalEvent events, void *arg);
|
||||
|
||||
const RFCC26XX_HWAttrsV2 RFCC26XX_hwAttrs = {
|
||||
.hwiPriority = INT_PRI_LEVEL7,
|
||||
.swiPriority = 0,
|
||||
.hwiPriority = INT_PRI_LEVEL7,
|
||||
.swiPriority = 0,
|
||||
.xoscHfAlwaysNeeded = true,
|
||||
/* RF driver callback for custom antenna switching */
|
||||
.globalCallback = board_cc13xx_rf_callback,
|
||||
/* Subscribe to events */
|
||||
.globalEventMask = (RF_GlobalEventRadioSetup | RF_GlobalEventRadioPowerDown),
|
||||
.globalEventMask = (RF_GlobalEventRadioSetup |
|
||||
RF_GlobalEventRadioPowerDown),
|
||||
};
|
||||
|
||||
PINCTRL_DT_INST_DEFINE(0);
|
||||
DEVICE_DT_INST_DEFINE(0, board_antenna_init, NULL, NULL, NULL, POST_KERNEL,
|
||||
CONFIG_BOARD_ANTENNA_INIT_PRIO, NULL);
|
||||
|
||||
static const struct pinctrl_dev_config *ant_pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(0);
|
||||
static const struct gpio_dt_spec ant_gpios[] = {
|
||||
DT_FOREACH_PROP_ELEM_SEP(DT_NODELABEL(antenna_mux0), gpios, GPIO_DT_SPEC_GET_BY_IDX, (,))};
|
||||
|
||||
/**
|
||||
* Antenna switch GPIO init routine.
|
||||
*/
|
||||
static int board_antenna_init(const struct device *dev)
|
||||
static int board_antenna_init(void)
|
||||
{
|
||||
ARG_UNUSED(dev);
|
||||
int i;
|
||||
|
||||
/* default pinctrl configuration: set all antenna mux control pins as GPIOs */
|
||||
pinctrl_apply_state(ant_pcfg, PINCTRL_STATE_DEFAULT);
|
||||
/* set all GPIOs to 0 (all RF paths disabled) */
|
||||
for (i = 0; i < ARRAY_SIZE(ant_gpios); i++) {
|
||||
gpio_pin_configure_dt(&ant_gpios[i], 0);
|
||||
}
|
||||
/* set all paths to low */
|
||||
IOCPinTypeGpioOutput(BOARD_RF_HIGH_PA);
|
||||
GPIO_setOutputEnableDio(BOARD_RF_HIGH_PA, GPIO_OUTPUT_DISABLE);
|
||||
IOCPinTypeGpioOutput(BOARD_RF_SUB1GHZ);
|
||||
GPIO_setOutputEnableDio(BOARD_RF_SUB1GHZ, GPIO_OUTPUT_DISABLE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom TI RFCC26XX callback for switching the on-board antenna mux on radio setup.
|
||||
*/
|
||||
static void board_cc13xx_rf_callback(RF_Handle client, RF_GlobalEvent events, void *arg)
|
||||
{
|
||||
bool sub1GHz = false;
|
||||
uint8_t loDivider = 0;
|
||||
int i;
|
||||
SYS_INIT(board_antenna_init, POST_KERNEL, CONFIG_BOARD_ANTENNA_INIT_PRIO);
|
||||
|
||||
/* Clear all antenna switch GPIOs (for all cases). */
|
||||
for (i = 0; i < ARRAY_SIZE(ant_gpios); i++) {
|
||||
gpio_pin_configure_dt(&ant_gpios[i], 0);
|
||||
}
|
||||
void board_cc13xx_rf_callback(RF_Handle client, RF_GlobalEvent events, void *arg)
|
||||
{
|
||||
bool sub1GHz = false;
|
||||
uint8_t loDivider = 0;
|
||||
|
||||
/* Switch off all paths first. Needs to be done anyway in every sub-case below. */
|
||||
GPIO_setOutputEnableDio(BOARD_RF_HIGH_PA, GPIO_OUTPUT_DISABLE);
|
||||
GPIO_setOutputEnableDio(BOARD_RF_SUB1GHZ, GPIO_OUTPUT_DISABLE);
|
||||
|
||||
if (events & RF_GlobalEventRadioSetup) {
|
||||
/* Decode the current PA configuration. */
|
||||
RF_TxPowerTable_PAType paType =
|
||||
(RF_TxPowerTable_PAType)RF_getTxPower(client).paType;
|
||||
RF_TxPowerTable_PAType paType = (RF_TxPowerTable_PAType)
|
||||
RF_getTxPower(client).paType;
|
||||
/* Decode the generic argument as a setup command. */
|
||||
RF_RadioSetup *setupCommand = (RF_RadioSetup *)arg;
|
||||
|
||||
switch (setupCommand->common.commandNo) {
|
||||
case CMD_RADIO_SETUP:
|
||||
case CMD_BLE5_RADIO_SETUP:
|
||||
case (CMD_RADIO_SETUP):
|
||||
case (CMD_BLE5_RADIO_SETUP):
|
||||
loDivider = RF_LODIVIDER_MASK & setupCommand->common.loDivider;
|
||||
/* Sub-1GHz front-end. */
|
||||
if (loDivider != 0)
|
||||
sub1GHz = true;
|
||||
break;
|
||||
case CMD_PROP_RADIO_DIV_SETUP:
|
||||
case (CMD_PROP_RADIO_DIV_SETUP):
|
||||
loDivider = RF_LODIVIDER_MASK & setupCommand->prop_div.loDivider;
|
||||
/* Sub-1GHz front-end. */
|
||||
if (loDivider != 0)
|
||||
sub1GHz = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
sub1GHz = (loDivider != 0);
|
||||
|
||||
if (sub1GHz) {
|
||||
if (paType == RF_TxPowerTable_HighPA) {
|
||||
/* Note: RFC_GPO3 is a work-around because the RFC_GPO1 */
|
||||
/* is sometimes not de-asserted on CC1352 Rev A. */
|
||||
pinctrl_apply_state(ant_pcfg, PINCTRL_STATE_ANT_SUBG_PA);
|
||||
} else {
|
||||
pinctrl_apply_state(ant_pcfg, PINCTRL_STATE_ANT_SUBG);
|
||||
/* Manually set the sub-GHZ antenna switch DIO */
|
||||
gpio_pin_configure_dt(&ant_gpios[BOARD_ANT_GPIO_SUBG], 1);
|
||||
}
|
||||
/* Sub-1 GHz */
|
||||
if (paType == RF_TxPowerTable_HighPA) {
|
||||
/* PA enable --> HIGH PA */
|
||||
/* LNA enable --> Sub-1 GHz */
|
||||
/* Note: RFC_GPO3 is a work-around because the RFC_GPO1 */
|
||||
/* is sometimes not de-asserted on CC1352 Rev A. */
|
||||
IOCPortConfigureSet(BOARD_RF_HIGH_PA,
|
||||
IOC_PORT_RFC_GPO3, IOC_IOMODE_NORMAL);
|
||||
IOCPortConfigureSet(BOARD_RF_SUB1GHZ,
|
||||
IOC_PORT_RFC_GPO0, IOC_IOMODE_NORMAL);
|
||||
} else {
|
||||
/* RF core active --> Sub-1 GHz */
|
||||
IOCPortConfigureSet(BOARD_RF_HIGH_PA,
|
||||
IOC_PORT_GPIO, IOC_IOMODE_NORMAL);
|
||||
IOCPortConfigureSet(BOARD_RF_SUB1GHZ,
|
||||
IOC_PORT_GPIO, IOC_IOMODE_NORMAL);
|
||||
GPIO_setOutputEnableDio(BOARD_RF_SUB1GHZ, GPIO_OUTPUT_ENABLE);
|
||||
}
|
||||
} else {
|
||||
pinctrl_apply_state(ant_pcfg, PINCTRL_STATE_DEFAULT);
|
||||
/* Reset the IO multiplexer to GPIO functionality */
|
||||
IOCPortConfigureSet(BOARD_RF_HIGH_PA,
|
||||
IOC_PORT_GPIO, IOC_IOMODE_NORMAL);
|
||||
IOCPortConfigureSet(BOARD_RF_SUB1GHZ,
|
||||
IOC_PORT_GPIO, IOC_IOMODE_NORMAL);
|
||||
}
|
||||
}
|
||||
|
||||
BIN
boards/ct/ctcc/doc/img/ctcc_nrf52840.webp
Normal file
BIN
boards/ct/ctcc/doc/img/ctcc_nrf52840.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 30 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 31 KiB |
@@ -21,17 +21,12 @@ This board has following features:
|
||||
* :abbr:`USB (Universal Serial Bus)`
|
||||
* :abbr:`WDT (Watchdog Timer)`
|
||||
|
||||
.. figure:: img/ctcc_nrf52840_mpcie.webp
|
||||
.. figure:: img/ctcc_nrf52840.webp
|
||||
:align: center
|
||||
:alt: CTCC nRF52840 mPCIe
|
||||
:width: 300
|
||||
:alt: CTCC nRF52840
|
||||
|
||||
ctcc/nrf52840 mPCie board
|
||||
|
||||
.. figure:: img/ctcc_nrf52840_m2.webp
|
||||
:align: center
|
||||
:alt: CTCC nRF52840 M.2
|
||||
|
||||
ctcc/nrf52840 M.2 board
|
||||
ctcc/nrf52840 board target
|
||||
|
||||
More information about the board can be found at the
|
||||
`ctcc_nrf52840 Website`_ and for SoC information: `Nordic Semiconductor Infocenter`_.
|
||||
|
||||
@@ -141,10 +141,9 @@ There are two options to be used when building an application:
|
||||
|
||||
User can select the MCUboot bootloader by adding the following line
|
||||
to the board default configuration file.
|
||||
|
||||
.. code:: cfg
|
||||
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
|
||||
Sysbuild
|
||||
========
|
||||
|
||||
@@ -141,10 +141,9 @@ There are two options to be used when building an application:
|
||||
|
||||
User can select the MCUboot bootloader by adding the following line
|
||||
to the board default configuration file.
|
||||
|
||||
.. code:: cfg
|
||||
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
|
||||
Sysbuild
|
||||
========
|
||||
|
||||
@@ -463,10 +463,9 @@ There are two options to be used when building an application:
|
||||
|
||||
User can select the MCUboot bootloader by adding the following line
|
||||
to the board default configuration file.
|
||||
|
||||
.. code:: cfg
|
||||
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
|
||||
Sysbuild
|
||||
========
|
||||
|
||||
@@ -116,10 +116,9 @@ There are two options to be used when building an application:
|
||||
|
||||
User can select the MCUboot bootloader by adding the following line
|
||||
to the board default configuration file.
|
||||
|
||||
.. code:: cfg
|
||||
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
|
||||
Sysbuild
|
||||
========
|
||||
|
||||
@@ -146,10 +146,9 @@ There are two options to be used when building an application:
|
||||
|
||||
User can select the MCUboot bootloader by adding the following line
|
||||
to the board default configuration file.
|
||||
|
||||
.. code:: cfg
|
||||
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
|
||||
Sysbuild
|
||||
========
|
||||
|
||||
@@ -112,10 +112,9 @@ There are two options to be used when building an application:
|
||||
|
||||
User can select the MCUboot bootloader by adding the following line
|
||||
to the board default configuration file.
|
||||
|
||||
.. code:: cfg
|
||||
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
|
||||
Sysbuild
|
||||
========
|
||||
|
||||
@@ -112,10 +112,9 @@ There are two options to be used when building an application:
|
||||
|
||||
User can select the MCUboot bootloader by adding the following line
|
||||
to the board default configuration file.
|
||||
|
||||
.. code:: cfg
|
||||
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
|
||||
Sysbuild
|
||||
========
|
||||
|
||||
@@ -161,10 +161,9 @@ There are two options to be used when building an application:
|
||||
|
||||
User can select the MCUboot bootloader by adding the following line
|
||||
to the board default configuration file.
|
||||
|
||||
.. code:: cfg
|
||||
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
|
||||
Sysbuild
|
||||
========
|
||||
|
||||
@@ -161,10 +161,9 @@ There are two options to be used when building an application:
|
||||
|
||||
User can select the MCUboot bootloader by adding the following line
|
||||
to the board default configuration file.
|
||||
|
||||
.. code:: cfg
|
||||
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
|
||||
Sysbuild
|
||||
========
|
||||
|
||||
@@ -527,10 +527,9 @@ There are two options to be used when building an application:
|
||||
|
||||
User can select the MCUboot bootloader by adding the following line
|
||||
to the board default configuration file.
|
||||
|
||||
.. code:: cfg
|
||||
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
|
||||
Sysbuild
|
||||
========
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
compatible = "zephyr,mipi-dbi-spi";
|
||||
reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
|
||||
dc-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
|
||||
spi-dev = <&spi4>;
|
||||
spi-dev = <&spi2>;
|
||||
write-only;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
@@ -79,10 +79,9 @@ There are two options to be used when building an application:
|
||||
|
||||
User can select the MCUboot bootloader by adding the following line
|
||||
to the board default configuration file.
|
||||
|
||||
.. code:: cfg
|
||||
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
|
||||
Sysbuild
|
||||
========
|
||||
|
||||
@@ -15,7 +15,7 @@ config ESP_SPIRAM
|
||||
default y if !MCUBOOT
|
||||
|
||||
choice SPIRAM_TYPE
|
||||
default SPIRAM_TYPE_ESPPSRAM32
|
||||
default SPIRAM_TYPE_ESPPSRAM64
|
||||
endchoice
|
||||
|
||||
config HEAP_MEM_POOL_ADD_SIZE_BOARD
|
||||
|
||||
@@ -120,10 +120,9 @@ There are two options to be used when building an application:
|
||||
|
||||
User can select the MCUboot bootloader by adding the following line
|
||||
to the board default configuration file.
|
||||
|
||||
.. code:: cfg
|
||||
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
|
||||
Sysbuild
|
||||
========
|
||||
|
||||
@@ -67,10 +67,9 @@ There are two options to be used when building an application:
|
||||
|
||||
User can select the MCUboot bootloader by adding the following line
|
||||
to the board default configuration file.
|
||||
|
||||
.. code:: cfg
|
||||
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
|
||||
Sysbuild
|
||||
========
|
||||
|
||||
@@ -181,10 +181,9 @@ There are two options to be used when building an application:
|
||||
|
||||
User can select the MCUboot bootloader by adding the following line
|
||||
to the board default configuration file.
|
||||
|
||||
.. code:: cfg
|
||||
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
|
||||
Sysbuild
|
||||
========
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 51 KiB |
@@ -19,8 +19,9 @@ Hardware
|
||||
|
||||
For more information about the CYW20829 SoC and CYW920829M2EVK-02 board:
|
||||
|
||||
- `CYW20829 SoC Website`_
|
||||
- `CYW920829M2EVK-02 Board Website`_
|
||||
- `CYW920829M2EVK-02 Website`_
|
||||
- `CYW920829M2EVK-02 BT User Guide`_
|
||||
|
||||
|
||||
Kit Features:
|
||||
=============
|
||||
@@ -85,76 +86,51 @@ To fetch Binary Blobs:
|
||||
Build blinking led sample
|
||||
*************************
|
||||
|
||||
Here is an example for building the :zephyr:code-sample:`blinky` sample application.
|
||||
Here is an example for the :zephyr:code-sample:`blinky` application.
|
||||
|
||||
.. zephyr-app-commands::
|
||||
:zephyr-app: samples/basic/blinky
|
||||
:board: cyw920829m2evk_02
|
||||
:goals: build
|
||||
:goals: build flash
|
||||
|
||||
OpenOCD Installation
|
||||
====================
|
||||
|
||||
To get the OpenOCD package, it is required that you
|
||||
|
||||
1. Download and install the `ModusToolbox`_ software.
|
||||
2. After the installation, add the directory containing the OpenOCD scripts to your environment's PATH variable.
|
||||
|
||||
|
||||
Programming and Debugging
|
||||
*************************
|
||||
|
||||
The CYW920829M2EVK-02 includes an onboard programmer/debugger (`KitProg3`_) to provide debugging, flash programming, and serial communication over USB. Flash and debug commands use OpenOCD and require a custom Infineon OpenOCD version, that supports KitProg3, to be installed.
|
||||
The CYW920829M2EVK-02 includes an onboard programmer/debugger (KitProg3) to provide debugging, flash programming, and serial communication over USB. Flash and debug commands must be pointed to the Cypress OpenOCD you downloaded above.
|
||||
|
||||
Infineon OpenOCD Installation
|
||||
=============================
|
||||
On Windows:
|
||||
|
||||
Both the full `ModusToolbox`_ and the `ModusToolbox Programming Tools`_ packages include Infineon OpenOCD. Installing either of these packages will also install Infineon OpenOCD. If neither package is installed, a minimal installation can be done by downloading the `Infineon OpenOCD`_ release for your system and manually extract the files to a location of your choice.
|
||||
.. code-block:: shell
|
||||
|
||||
.. note:: Linux requires device access rights to be set up for KitProg3. This is handled automatically by the ModusToolbox and ModusToolbox Programming Tools installations. When doing a minimal installation, this can be done manually by executing the script ``openocd/udev_rules/install_rules.sh``.
|
||||
west flash --openocd path/to/infineon/openocd/bin/openocd.exe
|
||||
west debug --openocd path/to/infineon/openocd/bin/openocd.exe
|
||||
|
||||
West Commands
|
||||
=============
|
||||
On Linux:
|
||||
|
||||
The path to the installed Infineon OpenOCD executable must be available to the ``west`` tool commands. There are multiple ways of doing this. The example below uses a permanent CMake argument to set the CMake variable ``OPENOCD``.
|
||||
.. code-block:: shell
|
||||
|
||||
.. tabs::
|
||||
.. group-tab:: Windows
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
# Run west config once to set permanent CMake argument
|
||||
west config build.cmake-args -- -DOPENOCD=path/to/infineon/openocd/bin/openocd.exe
|
||||
|
||||
# Do a pristine build once after setting CMake argument
|
||||
west build -b cyw920829m2evk_02 -p always samples/basic/blinky
|
||||
|
||||
west flash
|
||||
west debug
|
||||
|
||||
.. group-tab:: Linux
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
# Run west config once to set permanent CMake argument
|
||||
west config build.cmake-args -- -DOPENOCD=path/to/infineon/openocd/bin/openocd
|
||||
|
||||
# Do a pristine build once after setting CMake argument
|
||||
west build -b cyw920829m2evk_02 -p always samples/basic/blinky
|
||||
|
||||
west flash
|
||||
west debug
|
||||
west flash --openocd path/to/infineon/openocd/bin/openocd
|
||||
west debug --openocd path/to/infineon/openocd/bin/openocd
|
||||
|
||||
Once the gdb console starts after executing the west debug command, you may now set breakpoints and perform other standard GDB debugging on the CYW20829 CM33 core.
|
||||
|
||||
.. _CYW20829 SoC Website:
|
||||
.. _CYW920829M2EVK-02 Website:
|
||||
https://www.infineon.com/cms/en/product/wireless-connectivity/airoc-bluetooth-le-bluetooth-multiprotocol/airoc-bluetooth-le/cyw20829/
|
||||
|
||||
.. _CYW920829M2EVK-02 Board Website:
|
||||
https://www.infineon.com/cms/en/product/evaluation-boards/cyw920829m2evk-02/
|
||||
|
||||
.. _CYW920829M2EVK-02 BT User Guide:
|
||||
https://www.infineon.com/cms/en/product/wireless-connectivity/airoc-bluetooth-le-bluetooth-multiprotocol/airoc-bluetooth-le/cyw20829/#!?fileId=8ac78c8c8929aa4d018a16f726c46b26
|
||||
|
||||
.. _ModusToolbox:
|
||||
https://softwaretools.infineon.com/tools/com.ifx.tb.tool.modustoolbox
|
||||
|
||||
.. _ModusToolbox Programming Tools:
|
||||
https://softwaretools.infineon.com/tools/com.ifx.tb.tool.modustoolboxprogtools
|
||||
|
||||
.. _Infineon OpenOCD:
|
||||
https://github.com/Infineon/openocd/releases/latest
|
||||
|
||||
.. _KitProg3:
|
||||
https://github.com/Infineon/KitProg3
|
||||
https://github.com/infineon/openocd/releases/tag/release-v4.3.0
|
||||
|
||||
@@ -111,9 +111,9 @@ There are two options to be used when building an application:
|
||||
User can select the MCUboot bootloader by adding the following line
|
||||
to the board default configuration file.
|
||||
|
||||
.. code-block:: cfg
|
||||
.. code-block:: cfg
|
||||
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
|
||||
Sysbuild
|
||||
========
|
||||
|
||||
@@ -108,10 +108,9 @@ There are two options to be used when building an application:
|
||||
|
||||
User can select the MCUboot bootloader by adding the following line
|
||||
to the board default configuration file.
|
||||
|
||||
.. code:: cfg
|
||||
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
|
||||
Sysbuild
|
||||
========
|
||||
|
||||
@@ -134,10 +134,9 @@ There are two options to be used when building an application:
|
||||
|
||||
User can select the MCUboot bootloader by adding the following line
|
||||
to the board default configuration file.
|
||||
|
||||
.. code:: cfg
|
||||
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
|
||||
Sysbuild
|
||||
========
|
||||
|
||||
@@ -160,10 +160,9 @@ There are two options to be used when building an application:
|
||||
|
||||
User can select the MCUboot bootloader by adding the following line
|
||||
to the board default configuration file.
|
||||
|
||||
.. code:: cfg
|
||||
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
|
||||
Sysbuild
|
||||
========
|
||||
|
||||
@@ -109,10 +109,9 @@ There are two options to be used when building an application:
|
||||
|
||||
User can select the MCUboot bootloader by adding the following line
|
||||
to the board default configuration file.
|
||||
|
||||
.. code:: cfg
|
||||
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
|
||||
Sysbuild
|
||||
========
|
||||
|
||||
@@ -78,10 +78,9 @@ There are two options to be used when building an application:
|
||||
|
||||
User can select the MCUboot bootloader by adding the following line
|
||||
to the board default configuration file.
|
||||
|
||||
.. code:: cfg
|
||||
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
```
|
||||
|
||||
Sysbuild
|
||||
========
|
||||
|
||||
@@ -2,6 +2,4 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
config BOARD_MT8195_ADSP
|
||||
select SOC_MT8195_ADSP
|
||||
help
|
||||
Board with Mediatek MT8195 Audio DSP
|
||||
bool "Mediatek MT8195 Audio DSP"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user