Compare commits
197 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4e28f0ab89 | ||
|
|
263c3525e5 | ||
|
|
d70b19aaca | ||
|
|
408ab06085 | ||
|
|
a96d03c91d | ||
|
|
c6588695ee | ||
|
|
2421e11f25 | ||
|
|
a1538a67ff | ||
|
|
f164b38a1d | ||
|
|
30520fe5a6 | ||
|
|
dca0e24b08 | ||
|
|
1441825025 | ||
|
|
c9042d82e0 | ||
|
|
dacf6fb54b | ||
|
|
0e9c0ecf40 | ||
|
|
b74d1e8a24 | ||
|
|
fe5c5d54a2 | ||
|
|
0c566ad8cf | ||
|
|
8abd6963af | ||
|
|
598ef74db1 | ||
|
|
d568a04fbb | ||
|
|
8d8eb0d824 | ||
|
|
420e5c057f | ||
|
|
4ef1d4e122 | ||
|
|
d4e799d77a | ||
|
|
c3d9ce8e27 | ||
|
|
af4e5d44f2 | ||
|
|
18928e7f60 | ||
|
|
d39e0a92c4 | ||
|
|
c9235e2833 | ||
|
|
d97299c9fa | ||
|
|
6e2fbead3a | ||
|
|
9adaf59d36 | ||
|
|
fcbd5e7bc7 | ||
|
|
4311814a05 | ||
|
|
70c57b2b96 | ||
|
|
bdd6b19a52 | ||
|
|
a599dbd128 | ||
|
|
4344299c00 | ||
|
|
0307d6ea5f | ||
|
|
f38cbb5744 | ||
|
|
4c0d57ed3e | ||
|
|
4540aa0877 | ||
|
|
1c7c4dd43e | ||
|
|
a16bc64bf8 | ||
|
|
3d37868d09 | ||
|
|
98a001e1f8 | ||
|
|
bf2eb5542a | ||
|
|
51859b8ea0 | ||
|
|
7aa536789e | ||
|
|
05a0c6fef0 | ||
|
|
9471d1f6c8 | ||
|
|
09f4f54e72 | ||
|
|
c2fe55bbe5 | ||
|
|
70028dd97f | ||
|
|
d15b758632 | ||
|
|
999c15d1b5 | ||
|
|
d108946a1b | ||
|
|
97ab403573 | ||
|
|
63538db423 | ||
|
|
272ec5e219 | ||
|
|
82804fe115 | ||
|
|
672dc9cc89 | ||
|
|
74d75f2bd5 | ||
|
|
c5a40d60bb | ||
|
|
189e5d0006 | ||
|
|
039a130861 | ||
|
|
61ec28adb6 | ||
|
|
4e38776774 | ||
|
|
14dc173c1f | ||
|
|
0a48547bc6 | ||
|
|
16f5611f3e | ||
|
|
7336b2a978 | ||
|
|
42cf1ab802 | ||
|
|
05291174df | ||
|
|
6c8409c083 | ||
|
|
bf591e9edf | ||
|
|
cf05794924 | ||
|
|
60a31d6ed1 | ||
|
|
6b6572629d | ||
|
|
96fc793c25 | ||
|
|
a30942dbb8 | ||
|
|
963d04d67e | ||
|
|
b792e4277f | ||
|
|
b006b1bb9a | ||
|
|
0fc5801607 | ||
|
|
271ab7d583 | ||
|
|
9f0e4d2a90 | ||
|
|
979aedc2d3 | ||
|
|
850877b95d | ||
|
|
8f0b4d7f4d | ||
|
|
796a6bb4d8 | ||
|
|
385e02ba52 | ||
|
|
5a5d878252 | ||
|
|
cf6e5cf730 | ||
|
|
7f1d5a47e4 | ||
|
|
aca2baa43a | ||
|
|
bf77e2616d | ||
|
|
cfa7ad5c4a | ||
|
|
30414fd866 | ||
|
|
7d21b5402c | ||
|
|
3ed3f29223 | ||
|
|
e9a4431362 | ||
|
|
56816bdbbf | ||
|
|
420594122a | ||
|
|
0efe69ec31 | ||
|
|
8173b881ba | ||
|
|
e7c091bba2 | ||
|
|
4c11ae8e60 | ||
|
|
af941d5832 | ||
|
|
32de7848c4 | ||
|
|
afe1621713 | ||
|
|
42b956050a | ||
|
|
04af679197 | ||
|
|
b082e12265 | ||
|
|
3cbabecfcc | ||
|
|
4d2ad79207 | ||
|
|
0cddc4b665 | ||
|
|
4cdbfbf9e2 | ||
|
|
c38888bccb | ||
|
|
be0db01093 | ||
|
|
a9cd7c0498 | ||
|
|
6af438c440 | ||
|
|
0ae966be58 | ||
|
|
33d0716c21 | ||
|
|
a176dd3274 | ||
|
|
ed8c6e2d1f | ||
|
|
c280ce6bf9 | ||
|
|
67d49c2344 | ||
|
|
f3c2664e53 | ||
|
|
22bbdc2f85 | ||
|
|
3b626c5e15 | ||
|
|
794a47dedf | ||
|
|
e203a64000 | ||
|
|
25a40b19ea | ||
|
|
9366bc161b | ||
|
|
602295a88f | ||
|
|
829c3ceb12 | ||
|
|
9f36bbc07a | ||
|
|
145a4c93fa | ||
|
|
0ce96e850d | ||
|
|
27d7a9e29f | ||
|
|
391ec95f38 | ||
|
|
cb409a67fd | ||
|
|
cf4ce62590 | ||
|
|
3188ed4e64 | ||
|
|
f0523be409 | ||
|
|
db089efe48 | ||
|
|
628ecfa4d7 | ||
|
|
f8d3ac0130 | ||
|
|
853c11885c | ||
|
|
f1c880aa8a | ||
|
|
653328c6e8 | ||
|
|
d88617db9b | ||
|
|
385770cf21 | ||
|
|
cf00c1c184 | ||
|
|
6a7b6679b1 | ||
|
|
3893503f49 | ||
|
|
b42719243d | ||
|
|
fd45cb4567 | ||
|
|
9f0045a30a | ||
|
|
662c8bee81 | ||
|
|
6d0fa01492 | ||
|
|
afe118fa1d | ||
|
|
247a2a0671 | ||
|
|
cb9033d10f | ||
|
|
bc7e0455c8 | ||
|
|
71e85e390b | ||
|
|
eee3a430dc | ||
|
|
32ef1480e9 | ||
|
|
39410d79fe | ||
|
|
40c944f0b6 | ||
|
|
efcdfce517 | ||
|
|
e50f05df3e | ||
|
|
3f0fcedf00 | ||
|
|
baab38500c | ||
|
|
06869d4499 | ||
|
|
de55b9f73a | ||
|
|
eb7910b9d1 | ||
|
|
95f8f6f3e0 | ||
|
|
b65e208171 | ||
|
|
2ccf0ad045 | ||
|
|
efc7ffde75 | ||
|
|
bee0fd0601 | ||
|
|
c6c73c1b2e | ||
|
|
ae495b7618 | ||
|
|
3b22494192 | ||
|
|
c4a5b9c74e | ||
|
|
ca23390e84 | ||
|
|
2644d370c8 | ||
|
|
bef829cfc0 | ||
|
|
c625aa2636 | ||
|
|
4329e5e24a | ||
|
|
4e4ac94f90 | ||
|
|
8d10dc63fc | ||
|
|
ce596d3c54 | ||
|
|
61b596b0e5 |
@@ -1,35 +0,0 @@
|
||||
steps:
|
||||
- command:
|
||||
- .buildkite/run.sh
|
||||
env:
|
||||
ZEPHYR_TOOLCHAIN_VARIANT: "zephyr"
|
||||
ZEPHYR_SDK_INSTALL_DIR: "/opt/toolchains/zephyr-sdk-0.13.1"
|
||||
parallelism: 475
|
||||
timeout_in_minutes: 210
|
||||
retry:
|
||||
manual: true
|
||||
plugins:
|
||||
- docker#v3.5.0:
|
||||
image: "zephyrprojectrtos/ci:v0.18.4"
|
||||
propagate-environment: true
|
||||
volumes:
|
||||
- "/var/lib/buildkite-agent/git-mirrors:/var/lib/buildkite-agent/git-mirrors"
|
||||
- "/var/lib/buildkite-agent/zephyr-module-cache:/var/lib/buildkite-agent/zephyr-module-cache"
|
||||
- "/var/lib/buildkite-agent/zephyr-ccache:/root/.ccache"
|
||||
workdir: "/workdir/zephyr"
|
||||
agents:
|
||||
- "queue=default"
|
||||
|
||||
- wait: ~
|
||||
continue_on_failure: true
|
||||
|
||||
- plugins:
|
||||
- junit-annotate#v1.7.0:
|
||||
artifacts: twister-*.xml
|
||||
|
||||
- command:
|
||||
- .buildkite/mergejunit.sh
|
||||
|
||||
notify:
|
||||
- email: "builds+int+399+7809482394022958124@lists.zephyrproject.org"
|
||||
if: build.state != "passed"
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Copyright (c) 2020 Linaro Limited
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
# report disk usage:
|
||||
echo "--- $0 disk usage"
|
||||
df -h
|
||||
@@ -1,44 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Copyright (c) 2020 Linaro Limited
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
# Save off where we started so we can go back there
|
||||
WORKDIR=${PWD}
|
||||
|
||||
echo "--- $0 disk usage"
|
||||
df -h
|
||||
du -hs /var/lib/buildkite-agent/*
|
||||
docker images -a
|
||||
docker system df -v
|
||||
|
||||
if [ -n "${BUILDKITE_PULL_REQUEST_BASE_BRANCH}" ]; then
|
||||
git fetch -v origin ${BUILDKITE_PULL_REQUEST_BASE_BRANCH}
|
||||
git checkout FETCH_HEAD
|
||||
git config --local user.email "builds@zephyrproject.org"
|
||||
git config --local user.name "Zephyr CI"
|
||||
git merge --no-edit "${BUILDKITE_COMMIT}" || {
|
||||
local merge_result=$?
|
||||
echo "Merge failed: ${merge_result}"
|
||||
git merge --abort
|
||||
exit $merge_result
|
||||
}
|
||||
fi
|
||||
|
||||
mkdir -p /var/lib/buildkite-agent/zephyr-ccache/
|
||||
|
||||
# create cache dirs, no-op if they already exist
|
||||
mkdir -p /var/lib/buildkite-agent/zephyr-module-cache/modules
|
||||
mkdir -p /var/lib/buildkite-agent/zephyr-module-cache/tools
|
||||
mkdir -p /var/lib/buildkite-agent/zephyr-module-cache/bootloader
|
||||
|
||||
# Clean cache - if it already exists
|
||||
cd /var/lib/buildkite-agent/zephyr-module-cache
|
||||
find -type f -not -path "*/.git/*" -not -name ".git" -delete
|
||||
|
||||
# Remove any stale locks
|
||||
find -name index.lock -delete
|
||||
|
||||
# return from where we started so we can find pipeline files from
|
||||
# git repo
|
||||
cd ${WORKDIR}
|
||||
@@ -1,19 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Copyright (c) 2021 Linaro Limited
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
set -eE
|
||||
|
||||
buildkite-agent artifact download twister-*.xml .
|
||||
|
||||
xmls=""
|
||||
|
||||
for f in twister-*xml; do [ -s ${f} ] && xmls+="${f} "; done
|
||||
|
||||
if [ "${xmls}" ]; then
|
||||
junitparser merge ${xmls} junit.xml
|
||||
buildkite-agent artifact upload junit.xml
|
||||
junit2html junit.xml
|
||||
buildkite-agent artifact upload junit.xml.html
|
||||
buildkite-agent annotate --style "info" "Read the <a href=\"artifact://junit.xml.html\">JUnit test report</a>"
|
||||
fi
|
||||
@@ -1,31 +0,0 @@
|
||||
steps:
|
||||
- command:
|
||||
- .buildkite/run.sh
|
||||
env:
|
||||
ZEPHYR_TOOLCHAIN_VARIANT: "zephyr"
|
||||
ZEPHYR_SDK_INSTALL_DIR: "/opt/toolchains/zephyr-sdk-0.13.1"
|
||||
parallelism: 20
|
||||
timeout_in_minutes: 180
|
||||
retry:
|
||||
manual: true
|
||||
plugins:
|
||||
- docker#v3.5.0:
|
||||
image: "zephyrprojectrtos/ci:v0.18.4"
|
||||
propagate-environment: true
|
||||
volumes:
|
||||
- "/var/lib/buildkite-agent/git-mirrors:/var/lib/buildkite-agent/git-mirrors"
|
||||
- "/var/lib/buildkite-agent/zephyr-module-cache:/var/lib/buildkite-agent/zephyr-module-cache"
|
||||
- "/var/lib/buildkite-agent/zephyr-ccache:/root/.ccache"
|
||||
workdir: "/workdir/zephyr"
|
||||
agents:
|
||||
- "queue=default"
|
||||
|
||||
- wait: ~
|
||||
continue_on_failure: true
|
||||
|
||||
- plugins:
|
||||
- junit-annotate#v1.7.0:
|
||||
artifacts: twister-*.xml
|
||||
|
||||
- command:
|
||||
- .buildkite/mergejunit.sh
|
||||
@@ -1,78 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Copyright (c) 2020 Linaro Limited
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
set -eE
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
# Rename twister junit xml for use with junit-annotate-buildkite-plugin
|
||||
# create dummy file if twister did nothing
|
||||
if [ ! -f twister-out/twister.xml ]; then
|
||||
touch twister-out/twister.xml
|
||||
fi
|
||||
mv twister-out/twister.xml twister-${BUILDKITE_JOB_ID}.xml
|
||||
buildkite-agent artifact upload twister-${BUILDKITE_JOB_ID}.xml
|
||||
|
||||
|
||||
# Upload test_file to get list of tests that are build/run
|
||||
if [ -f test_file.txt ]; then
|
||||
buildkite-agent artifact upload test_file.txt
|
||||
fi
|
||||
|
||||
# ccache stats
|
||||
echo "--- ccache stats at finish"
|
||||
ccache -s
|
||||
|
||||
# Cleanup on exit
|
||||
rm -fr *
|
||||
|
||||
# disk usage
|
||||
echo "--- disk usage at finish"
|
||||
df -h
|
||||
}
|
||||
|
||||
trap cleanup ERR
|
||||
|
||||
echo "--- run $0"
|
||||
|
||||
git log -n 5 --oneline --decorate --abbrev=12
|
||||
|
||||
# Setup module cache
|
||||
cd /workdir
|
||||
ln -s /var/lib/buildkite-agent/zephyr-module-cache/modules
|
||||
ln -s /var/lib/buildkite-agent/zephyr-module-cache/tools
|
||||
ln -s /var/lib/buildkite-agent/zephyr-module-cache/bootloader
|
||||
cd /workdir/zephyr
|
||||
|
||||
export JOB_NUM=$((${BUILDKITE_PARALLEL_JOB}+1))
|
||||
|
||||
# ccache stats
|
||||
echo ""
|
||||
echo "--- ccache stats at start"
|
||||
ccache -s
|
||||
|
||||
|
||||
if [ -n "${DAILY_BUILD}" ]; then
|
||||
TWISTER_OPTIONS=" --inline-logs -M -N --build-only --all --retry-failed 3 -v "
|
||||
echo "--- DAILY BUILD"
|
||||
west init -l .
|
||||
west update 1> west.update.log || west update 1> west.update-2.log
|
||||
west forall -c 'git reset --hard HEAD'
|
||||
source zephyr-env.sh
|
||||
./scripts/twister --subset ${JOB_NUM}/${BUILDKITE_PARALLEL_JOB_COUNT} ${TWISTER_OPTIONS}
|
||||
else
|
||||
if [ -n "${BUILDKITE_PULL_REQUEST_BASE_BRANCH}" ]; then
|
||||
./scripts/ci/run_ci.sh -c -b ${BUILDKITE_PULL_REQUEST_BASE_BRANCH} -r origin \
|
||||
-m ${JOB_NUM} -M ${BUILDKITE_PARALLEL_JOB_COUNT} -p ${BUILDKITE_PULL_REQUEST}
|
||||
else
|
||||
./scripts/ci/run_ci.sh -c -b ${BUILDKITE_BRANCH} -r origin \
|
||||
-m ${JOB_NUM} -M ${BUILDKITE_PARALLEL_JOB_COUNT};
|
||||
fi
|
||||
fi
|
||||
|
||||
TWISTER_EXIT_STATUS=$?
|
||||
|
||||
cleanup
|
||||
|
||||
exit ${TWISTER_EXIT_STATUS}
|
||||
@@ -1,9 +1,10 @@
|
||||
--mailback
|
||||
--no-tree
|
||||
--emacs
|
||||
--summary-file
|
||||
--show-types
|
||||
--max-line-length=100
|
||||
--max-line-length=80
|
||||
--min-conf-desc-length=1
|
||||
--typedefsfile=scripts/checkpatch/typedefsfile
|
||||
|
||||
--ignore BRACES
|
||||
--ignore PRINTK_WITHOUT_KERN_LEVEL
|
||||
@@ -11,21 +12,11 @@
|
||||
--ignore VOLATILE
|
||||
--ignore CONFIG_EXPERIMENTAL
|
||||
--ignore PREFER_KERNEL_TYPES
|
||||
--ignore PREFER_SECTION
|
||||
--ignore AVOID_EXTERNS
|
||||
--ignore NETWORKING_BLOCK_COMMENT_STYLE
|
||||
--ignore DATE_TIME
|
||||
--ignore MINMAX
|
||||
--ignore CONST_STRUCT
|
||||
--ignore FILE_PATH_CHANGES
|
||||
--ignore SPDX_LICENSE_TAG
|
||||
--ignore C99_COMMENT_TOLERANCE
|
||||
--ignore REPEATED_WORD
|
||||
--ignore UNDOCUMENTED_DT_STRING
|
||||
--ignore DT_SPLIT_BINDING_PATCH
|
||||
--ignore DT_SCHEMA_BINDING_PATCH
|
||||
--ignore TRAILING_SEMICOLON
|
||||
--ignore COMPLEX_MACRO
|
||||
--ignore MULTISTATEMENT_MACRO_USE_DO_WHILE
|
||||
--ignore ENOSYS
|
||||
--exclude ext
|
||||
--exclude net/ip/contiki
|
||||
|
||||
145
.clang-format
145
.clang-format
@@ -1,145 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# clang-format configuration file. Intended for clang-format >= 4.
|
||||
#
|
||||
# For more information, see:
|
||||
#
|
||||
# Documentation/process/clang-format.rst
|
||||
# https://clang.llvm.org/docs/ClangFormat.html
|
||||
# https://clang.llvm.org/docs/ClangFormatStyleOptions.html
|
||||
#
|
||||
---
|
||||
AccessModifierOffset: -4
|
||||
AlignAfterOpenBracket: Align
|
||||
AlignConsecutiveAssignments: false
|
||||
AlignConsecutiveDeclarations: false
|
||||
#AlignEscapedNewlines: Left # Unknown to clang-format-4.0
|
||||
AlignOperands: true
|
||||
AlignTrailingComments: false
|
||||
AllowAllParametersOfDeclarationOnNextLine: false
|
||||
AllowShortBlocksOnASingleLine: false
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
AllowShortFunctionsOnASingleLine: None
|
||||
AllowShortIfStatementsOnASingleLine: false
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
AlwaysBreakAfterDefinitionReturnType: None
|
||||
AlwaysBreakAfterReturnType: None
|
||||
AlwaysBreakBeforeMultilineStrings: false
|
||||
AlwaysBreakTemplateDeclarations: false
|
||||
BinPackArguments: true
|
||||
BinPackParameters: true
|
||||
BraceWrapping:
|
||||
AfterClass: false
|
||||
AfterControlStatement: false
|
||||
AfterEnum: false
|
||||
AfterFunction: true
|
||||
AfterNamespace: true
|
||||
AfterObjCDeclaration: false
|
||||
AfterStruct: false
|
||||
AfterUnion: false
|
||||
#AfterExternBlock: false # Unknown to clang-format-5.0
|
||||
BeforeCatch: false
|
||||
BeforeElse: false
|
||||
IndentBraces: false
|
||||
#SplitEmptyFunction: true # Unknown to clang-format-4.0
|
||||
#SplitEmptyRecord: true # Unknown to clang-format-4.0
|
||||
#SplitEmptyNamespace: true # Unknown to clang-format-4.0
|
||||
BreakBeforeBinaryOperators: None
|
||||
BreakBeforeBraces: Custom
|
||||
#BreakBeforeInheritanceComma: false # Unknown to clang-format-4.0
|
||||
BreakBeforeTernaryOperators: false
|
||||
BreakConstructorInitializersBeforeComma: false
|
||||
#BreakConstructorInitializers: BeforeComma # Unknown to clang-format-4.0
|
||||
BreakAfterJavaFieldAnnotations: false
|
||||
BreakStringLiterals: false
|
||||
ColumnLimit: 100
|
||||
CommentPragmas: '^ IWYU pragma:'
|
||||
#CompactNamespaces: false # Unknown to clang-format-4.0
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
||||
ConstructorInitializerIndentWidth: 8
|
||||
ContinuationIndentWidth: 8
|
||||
Cpp11BracedListStyle: false
|
||||
DerivePointerAlignment: false
|
||||
DisableFormat: false
|
||||
ExperimentalAutoDetectBinPacking: false
|
||||
#FixNamespaceComments: false # Unknown to clang-format-4.0
|
||||
|
||||
# Taken from:
|
||||
# git grep -h '^#define [^[:space:]]*FOR_EACH[^[:space:]]*(' include/ \
|
||||
# | sed "s,^#define \([^[:space:]]*FOR_EACH[^[:space:]]*\)(.*$, - '\1'," \
|
||||
# | sort | uniq
|
||||
ForEachMacros:
|
||||
- 'FOR_EACH'
|
||||
- 'FOR_EACH_FIXED_ARG'
|
||||
- 'RB_FOR_EACH'
|
||||
- 'RB_FOR_EACH_CONTAINER'
|
||||
- 'SYS_DLIST_FOR_EACH_CONTAINER'
|
||||
- 'SYS_DLIST_FOR_EACH_CONTAINER_SAFE'
|
||||
- 'SYS_DLIST_FOR_EACH_NODE'
|
||||
- 'SYS_DLIST_FOR_EACH_NODE_SAFE'
|
||||
- 'SYS_SFLIST_FOR_EACH_CONTAINER'
|
||||
- 'SYS_SFLIST_FOR_EACH_CONTAINER_SAFE'
|
||||
- 'SYS_SFLIST_FOR_EACH_NODE'
|
||||
- 'SYS_SFLIST_FOR_EACH_NODE_SAFE'
|
||||
- 'SYS_SLIST_FOR_EACH_CONTAINER'
|
||||
- 'SYS_SLIST_FOR_EACH_CONTAINER_SAFE'
|
||||
- 'SYS_SLIST_FOR_EACH_NODE'
|
||||
- 'SYS_SLIST_FOR_EACH_NODE_SAFE'
|
||||
- 'Z_GENLIST_FOR_EACH_CONTAINER'
|
||||
- 'Z_GENLIST_FOR_EACH_CONTAINER_SAFE'
|
||||
- 'Z_GENLIST_FOR_EACH_NODE'
|
||||
- 'Z_GENLIST_FOR_EACH_NODE_SAFE'
|
||||
- '_WAIT_Q_FOR_EACH'
|
||||
|
||||
#IncludeBlocks: Preserve # Unknown to clang-format-5.0
|
||||
IncludeCategories:
|
||||
- Regex: '.*'
|
||||
Priority: 1
|
||||
IncludeIsMainRegex: '(Test)?$'
|
||||
IndentCaseLabels: false
|
||||
#IndentPPDirectives: None # Unknown to clang-format-5.0
|
||||
IndentWidth: 8
|
||||
IndentWrappedFunctionNames: false
|
||||
JavaScriptQuotes: Leave
|
||||
JavaScriptWrapImports: true
|
||||
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||
MacroBlockBegin: ''
|
||||
MacroBlockEnd: ''
|
||||
MaxEmptyLinesToKeep: 1
|
||||
NamespaceIndentation: Inner
|
||||
#ObjCBinPackProtocolList: Auto # Unknown to clang-format-5.0
|
||||
ObjCBlockIndentWidth: 8
|
||||
ObjCSpaceAfterProperty: true
|
||||
ObjCSpaceBeforeProtocolList: true
|
||||
|
||||
# Taken from git's rules
|
||||
#PenaltyBreakAssignment: 10 # Unknown to clang-format-4.0
|
||||
PenaltyBreakBeforeFirstCallParameter: 30
|
||||
PenaltyBreakComment: 10
|
||||
PenaltyBreakFirstLessLess: 0
|
||||
PenaltyBreakString: 10
|
||||
PenaltyExcessCharacter: 100
|
||||
PenaltyReturnTypeOnItsOwnLine: 60
|
||||
|
||||
PointerAlignment: Right
|
||||
ReflowComments: false
|
||||
SortIncludes: false
|
||||
#SortUsingDeclarations: false # Unknown to clang-format-4.0
|
||||
SpaceAfterCStyleCast: false
|
||||
SpaceAfterTemplateKeyword: true
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
#SpaceBeforeCtorInitializerColon: true # Unknown to clang-format-5.0
|
||||
#SpaceBeforeInheritanceColon: true # Unknown to clang-format-5.0
|
||||
SpaceBeforeParens: ControlStatements
|
||||
#SpaceBeforeRangeBasedForLoopColon: true # Unknown to clang-format-5.0
|
||||
SpaceInEmptyParentheses: false
|
||||
SpacesBeforeTrailingComments: 1
|
||||
SpacesInAngles: false
|
||||
SpacesInContainerLiterals: false
|
||||
SpacesInCStyleCastParentheses: false
|
||||
SpacesInParentheses: false
|
||||
SpacesInSquareBrackets: false
|
||||
Standard: Cpp03
|
||||
TabWidth: 8
|
||||
UseTab: Always
|
||||
...
|
||||
31
.codecov.yml
31
.codecov.yml
@@ -1,31 +0,0 @@
|
||||
codecov:
|
||||
notify:
|
||||
require_ci_to_pass: yes
|
||||
|
||||
coverage:
|
||||
precision: 2
|
||||
round: down
|
||||
range: "70...100"
|
||||
|
||||
status:
|
||||
project: yes
|
||||
patch: yes
|
||||
changes: no
|
||||
|
||||
#ignore:
|
||||
# - "tests/**/*"
|
||||
# - "samples/**/*"
|
||||
# - "ext/hal/**/*"
|
||||
|
||||
parsers:
|
||||
gcov:
|
||||
branch_detection:
|
||||
conditional: yes
|
||||
loop: yes
|
||||
method: no
|
||||
macro: no
|
||||
|
||||
comment:
|
||||
layout: "reach, diff, flags, files, footer"
|
||||
behavior: default
|
||||
require_changes: no
|
||||
@@ -1,75 +0,0 @@
|
||||
# EditorConfig: https://editorconfig.org/
|
||||
|
||||
# top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
# All (Defaults)
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
max_line_length = 80
|
||||
|
||||
# Assembly
|
||||
[*.S]
|
||||
indent_style = tab
|
||||
indent_size = 8
|
||||
|
||||
# C
|
||||
[*.{c,h}]
|
||||
indent_style = tab
|
||||
indent_size = 8
|
||||
|
||||
# Python
|
||||
[*.py]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
# Perl
|
||||
[*.pl]
|
||||
indent_style = tab
|
||||
indent_size = 8
|
||||
|
||||
# YAML
|
||||
[*.{yml,yaml}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
# Shell Script
|
||||
[*.sh]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
# Windows Command Script
|
||||
[*.cmd]
|
||||
end_of_line = crlf
|
||||
indent_style = tab
|
||||
indent_size = 8
|
||||
|
||||
# Valgrind Suppression File
|
||||
[*.supp]
|
||||
indent_style = space
|
||||
indent_size = 3
|
||||
|
||||
# CMake
|
||||
[{CMakeLists.txt,*.cmake}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
# Makefile
|
||||
[Makefile]
|
||||
indent_style = tab
|
||||
|
||||
# Device tree
|
||||
[*.{dts,dtsi,overlay}]
|
||||
indent_style = tab
|
||||
indent_size = 8
|
||||
|
||||
# Git commit messages
|
||||
[COMMIT_EDITMSG]
|
||||
max_line_length = 72
|
||||
|
||||
# Kconfig
|
||||
[Kconfig*]
|
||||
indent_style=tab
|
||||
4
.gitattributes
vendored
4
.gitattributes
vendored
@@ -3,7 +3,3 @@
|
||||
.gitattributes export-ignore
|
||||
.gitignore export-ignore
|
||||
.mailmap export-ignore
|
||||
|
||||
# Tell linguist that generated test pattern files should not be included in the
|
||||
# language statistics.
|
||||
*.pat linguist-generated=true
|
||||
|
||||
40
.github/ISSUE_TEMPLATE/bug_report.md
vendored
40
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -1,40 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve Zephyr
|
||||
title: ''
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
What have you tried to diagnose or workaround this issue?
|
||||
|
||||
**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 about the problem here.
|
||||
20
.github/ISSUE_TEMPLATE/enhancement.md
vendored
20
.github/ISSUE_TEMPLATE/enhancement.md
vendored
@@ -1,20 +0,0 @@
|
||||
---
|
||||
name: Enhancement
|
||||
about: Suggest enhancements to existing features
|
||||
title: ''
|
||||
labels: Enhancement
|
||||
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.
|
||||
62
.github/ISSUE_TEMPLATE/ext-source.md
vendored
62
.github/ISSUE_TEMPLATE/ext-source.md
vendored
@@ -1,62 +0,0 @@
|
||||
---
|
||||
name: External Source Code
|
||||
about: Submit a proposal to integrate external source code
|
||||
title: ''
|
||||
labels: TSC
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
## Origin
|
||||
|
||||
Name of project hosting the original open source code
|
||||
Provide a link to the source
|
||||
|
||||
## Purpose
|
||||
|
||||
Brief description of what this software does
|
||||
|
||||
## Mode of integration
|
||||
|
||||
Describe whether you'd like to integrate this exernal component in the main tree
|
||||
or as a module, and why. If the mode of integration is a module, suggest a
|
||||
repository name for the module
|
||||
|
||||
## Pull Request
|
||||
|
||||
Pull request (if any) with the actual implementation of the integration, be it
|
||||
in the main tree or as a module (pointing to your own fork for now). Make sure
|
||||
the PR is correctly labeled as "DNM"
|
||||
|
||||
## Description
|
||||
|
||||
Long description that will help reviewers discuss suitability of the
|
||||
component to solve the problem at hand (there may be a better options
|
||||
available.)
|
||||
|
||||
What is its primary functionality (e.g., SQLLite is a lightweight
|
||||
database)?
|
||||
|
||||
What problem are you trying to solve? (e.g., a state store is
|
||||
required to maintain ...)
|
||||
|
||||
Why is this the right component to solve it (e.g., SQLite is small,
|
||||
easy to use, and has a very liberal license.)
|
||||
|
||||
# Dependencies
|
||||
|
||||
What other components does this package depend on?
|
||||
|
||||
Will the Zephyr project have a direct dependency on the component, or
|
||||
will it be included via an abstraction layer with this component as a
|
||||
replaceable implementation?
|
||||
|
||||
## Revision
|
||||
|
||||
Version or SHA you would like to integrate initially
|
||||
|
||||
## License
|
||||
|
||||
Please use an SPDX identifier (https://spdx.org/licenses/), such as
|
||||
``BSD-3-Clause``
|
||||
|
||||
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@@ -1,20 +0,0 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: feature request
|
||||
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.
|
||||
19
.github/ISSUE_TEMPLATE/hardware_support.md
vendored
19
.github/ISSUE_TEMPLATE/hardware_support.md
vendored
@@ -1,19 +0,0 @@
|
||||
---
|
||||
name: Hardware Support
|
||||
about: Suggest adding hardware support
|
||||
title: ''
|
||||
labels: Hardware Support
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is this request related to a missing driver support for a particular hardware platform, SoC or board? Please describe.**
|
||||
Describe in details the hardware support being requested and why this support benefits Zephyr.
|
||||
|
||||
**Describe why you are asking for this support?**
|
||||
Describe why you are asking for this support instead of contributing it directly to the tree
|
||||
|
||||
If this is a new board or SoC, please state whether you are willing to maintain the Zephyr support for it if it is included in the main tree
|
||||
|
||||
**Additional context**
|
||||
Add any other context or graphics (drag-and-drop an image) about the hardware here.
|
||||
51
.github/ISSUE_TEMPLATE/rfc-proposal.md
vendored
51
.github/ISSUE_TEMPLATE/rfc-proposal.md
vendored
@@ -1,51 +0,0 @@
|
||||
---
|
||||
name: RFC / Proposal
|
||||
about: Submit an RFC / Proposal
|
||||
title: ''
|
||||
labels: RFC
|
||||
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.
|
||||
22
.github/SECURITY.md
vendored
22
.github/SECURITY.md
vendored
@@ -1,22 +0,0 @@
|
||||
# Security Policy
|
||||
|
||||
## Supported versions
|
||||
|
||||
The Zephyr project supports the following versions with security
|
||||
updates:
|
||||
|
||||
- The most recent release, and the release prior to that.
|
||||
- Active LTS releases.
|
||||
|
||||
At this time, with the latest release of v2.5.0, the supported
|
||||
versions are:
|
||||
|
||||
- 1.14.2: Current LTS
|
||||
- v2.5.0: Prior release
|
||||
- v2.6.0: Current release
|
||||
|
||||
## Reporting process
|
||||
|
||||
Please see our [Security Vulnerability
|
||||
Reporting](https://docs.zephyrproject.org/latest/security/reporting.html)
|
||||
page for details on the process.
|
||||
168
.github/labeler.yml
vendored
168
.github/labeler.yml
vendored
@@ -1,168 +0,0 @@
|
||||
"Release Notes":
|
||||
- "doc/releases/**/*"
|
||||
"area: Modem":
|
||||
- "drivers/modem/**/*"
|
||||
"area: PWM":
|
||||
- "drivers/pwm/**/*"
|
||||
"area: Watchdog":
|
||||
- "drivers/watchdog/**/*"
|
||||
"area: Sensors":
|
||||
- "drivers/sensors/**/*"
|
||||
"area: ADC":
|
||||
- "drivers/adc/**/*"
|
||||
"area: Counter":
|
||||
- "drivers/counter/**/*"
|
||||
"area: CAN":
|
||||
- "include/drivers/can.h"
|
||||
- "include/canbus/*/**"
|
||||
- "drivers/can/**/*"
|
||||
- "subsys/canbus/*/**"
|
||||
"area: EEPROM":
|
||||
- "include/drivers/eeprom.h"
|
||||
- "drivers/eeprom/**/*"
|
||||
"area: Timer":
|
||||
- "drivers/timer/**/*"
|
||||
"area: I2S":
|
||||
- "drivers/i2s/**/*"
|
||||
"area: C Library":
|
||||
- "lib/libc/**/*"
|
||||
"area: Devicetree":
|
||||
- "dts/**/*"
|
||||
- "**/*.dts"
|
||||
- "**/*.dtsi"
|
||||
- "include/devicetree.h"
|
||||
- "include/devicetree/*"
|
||||
- "doc/guides/dts/**/*"
|
||||
"area: Devicetree Binding":
|
||||
- "include/dt-bindings/**/*"
|
||||
- "dts/bindings/**/*"
|
||||
"area: Devicetree Tooling":
|
||||
- "scripts/dts/**/*"
|
||||
"area: I2C":
|
||||
- "drivers/i2c/**/*"
|
||||
"area: SPI":
|
||||
- "drivers/spi/**/*"
|
||||
"area: Boards":
|
||||
- "boards/**/*"
|
||||
"area: POSIX":
|
||||
- "lib/posix/**/*"
|
||||
"area: native port":
|
||||
- "arch/posix/**/*"
|
||||
- "include/arch/posix/**/*"
|
||||
- "soc/posix/**/*"
|
||||
- "**/*native_posix*"
|
||||
"area: X86":
|
||||
- "arch/x86/**/*"
|
||||
- "include/arch/x86/**/*"
|
||||
"area: ARM":
|
||||
- "arch/arm/**/*"
|
||||
- "include/arch/arm/**/*"
|
||||
"area: ARM64":
|
||||
- "arch/arm64/**/*"
|
||||
- "include/arch/arm64/**/*"
|
||||
"area: NIOS2":
|
||||
- "arch/nios2/**/*"
|
||||
- "include/arch/nios2/**/*"
|
||||
"area: Xtensa":
|
||||
- "arch/xtensa/**/*"
|
||||
- "include/arch/xtensa/**/*"
|
||||
"area: RISCV":
|
||||
- "arch/risv/**/*"
|
||||
- "include/arch/riscv/**/*"
|
||||
"area: ARC":
|
||||
- "arch/arc/**/*"
|
||||
- "include/arch/arc/**/*"
|
||||
"area: Networking":
|
||||
- "subsys/net/**/*"
|
||||
- "samples/net/**/*"
|
||||
- "tests/net/**/*"
|
||||
- "include/net/**/*"
|
||||
- "include/drivers/ieee802154/**/*"
|
||||
- "drivers/ethernet/**/*"
|
||||
- "drivers/ieee802154/**/*"
|
||||
- "drivers/wifi/**/*"
|
||||
- "drivers/ptp_clock/**/*"
|
||||
- "drivers/net/**/*"
|
||||
"area: Logging":
|
||||
- "subsys/logging/**/*"
|
||||
"area: Shell":
|
||||
- "subsys/shell/**/*"
|
||||
"area: Console":
|
||||
- "subsys/console/**/*"
|
||||
"area: Test Framework":
|
||||
- "subsys/testsuite/**/*"
|
||||
"area: Settings":
|
||||
- "subsys/settings/**/*"
|
||||
"area: File System":
|
||||
- "subsys/fs/**/*"
|
||||
"area: Storage":
|
||||
- "subsys/storage/**/*"
|
||||
"area: Bluetooth":
|
||||
- "subsys/bluetooth/**/*"
|
||||
- "**/*bluetooth*"
|
||||
"area: Bluetooth Mesh":
|
||||
- "subsys/bluetooth/mesh/**/*"
|
||||
"area: Bluetooth Audio":
|
||||
- "subsys/bluetooth/audio/**/*"
|
||||
"area: Bluetooth Controller":
|
||||
- "subsys/bluetooth/controller/**/*"
|
||||
"area: Bluetooth Host":
|
||||
- "subsys/bluetooth/host/**/*"
|
||||
- "subsys/bluetooth/services/**/*"
|
||||
"area: API":
|
||||
- "include/**/*"
|
||||
"area: Samples":
|
||||
- "samples/**/*"
|
||||
"area: Tests":
|
||||
- "tests/**/*"
|
||||
"area: Kernel":
|
||||
- "kernel/**/*"
|
||||
- "tests/kernel/**/*"
|
||||
"area: Documentation":
|
||||
- "**/*.rst"
|
||||
- "**/*.md"
|
||||
"area: Build System":
|
||||
- "cmake/**/*"
|
||||
- "CmakeLists.txt"
|
||||
"area: Kconfig":
|
||||
- "scripts/kconfig/**/*"
|
||||
- "Kconfig"
|
||||
- "Kconfig.zephyr"
|
||||
"area: Twister":
|
||||
- "scripts/twister"
|
||||
- "scripts/pylib/twister/**/*"
|
||||
"area: Modules":
|
||||
- "west.yml"
|
||||
- "modules/**/*"
|
||||
"area: Shields":
|
||||
- "boards/shields/**"
|
||||
- "samples/shields/**"
|
||||
"area: Power Management":
|
||||
- "subsys/pm/**/*"
|
||||
- "include/pm/**/*"
|
||||
- "tests/subsys/pm/**/*"
|
||||
- "samples/subsys/pm/**/*"
|
||||
"platform: NXP":
|
||||
- "boards/arm/frdm*/**"
|
||||
- "boards/arm/hexiwear*/**"
|
||||
- "boards/arm/lpcxpresso*/**"
|
||||
- "boards/arm/*imx*/**"
|
||||
- "drivers/**/*imx*"
|
||||
- "drivers/**/*mcux*"
|
||||
- "dts/arm/nxp/*/*"
|
||||
- "dts/bindings/**/nxp*"
|
||||
- "soc/arm/nxp*/**"
|
||||
"platform: STM32":
|
||||
- "boards/arm/nucleo_*/**"
|
||||
- "boards/arm/*stm32*/**"
|
||||
- "drivers/**/*stm32*"
|
||||
- "dts/arm/st/*/*"
|
||||
- "include/drivers/*/*stm32*"
|
||||
- "soc/arm/st_stm32/**"
|
||||
"platform: SiLabs":
|
||||
- "boards/arm/efr32_*/**/*"
|
||||
- "boards/arm/efm32_*/**/*"
|
||||
- "drivers/**/*gecko*"
|
||||
- "dts/arm/silabs/**/*"
|
||||
- "dts/bindings/**/silabs,gecko*"
|
||||
- "soc/arm/silabs_exx32/**/*"
|
||||
16
.github/license_config.yml
vendored
16
.github/license_config.yml
vendored
@@ -1,16 +0,0 @@
|
||||
license:
|
||||
main: apache-2.0
|
||||
report_missing: true
|
||||
category: Permissive
|
||||
copyright:
|
||||
check: true
|
||||
exclude:
|
||||
extensions:
|
||||
- yml
|
||||
- yaml
|
||||
- html
|
||||
- rst
|
||||
- conf
|
||||
- cfg
|
||||
langs:
|
||||
- HTML
|
||||
19
.github/workflows/backport.yml
vendored
19
.github/workflows/backport.yml
vendored
@@ -1,19 +0,0 @@
|
||||
name: Backport
|
||||
on:
|
||||
pull_request_target:
|
||||
types:
|
||||
- closed
|
||||
- labeled
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
backport:
|
||||
runs-on: ubuntu-20.04
|
||||
name: Backport
|
||||
steps:
|
||||
- name: Backport
|
||||
uses: zephyrproject-rtos/action-backport@v1.1.1-1
|
||||
with:
|
||||
github_token: ${{ secrets.ZB_GITHUB_TOKEN }}
|
||||
issue_labels: backport
|
||||
30
.github/workflows/backport_issue_check.yml
vendored
30
.github/workflows/backport_issue_check.yml
vendored
@@ -1,30 +0,0 @@
|
||||
name: Backport Issue Check
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
branches:
|
||||
- v*-branch
|
||||
|
||||
jobs:
|
||||
backport:
|
||||
name: Backport Issue Check
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
steps:
|
||||
- name: Check out source code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Install Python dependencies
|
||||
run: |
|
||||
sudo pip3 install -U setuptools wheel pip
|
||||
pip3 install -U pygithub
|
||||
|
||||
- name: Run backport issue checker
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.ZB_GITHUB_TOKEN }}
|
||||
run: |
|
||||
./scripts/release/list_backports.py \
|
||||
-o ${{ github.event.repository.owner.login }} \
|
||||
-r ${{ github.event.repository.name }} \
|
||||
-b ${{ github.event.pull_request.base.ref }} \
|
||||
-p ${{ github.event.pull_request.number }}
|
||||
29
.github/workflows/bluetooth-tests-publish.yaml
vendored
29
.github/workflows/bluetooth-tests-publish.yaml
vendored
@@ -1,29 +0,0 @@
|
||||
name: Publish Bluetooth Tests Results
|
||||
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: ["Bluetooth Tests"]
|
||||
types:
|
||||
- completed
|
||||
jobs:
|
||||
bluetooth-test-results:
|
||||
name: "Publish Bluetooth Test Results"
|
||||
runs-on: ubuntu-20.04
|
||||
if: github.event.workflow_run.conclusion != 'skipped'
|
||||
|
||||
steps:
|
||||
- name: Download artifacts
|
||||
uses: dawidd6/action-download-artifact@v2
|
||||
with:
|
||||
workflow: bluetooth-tests.yaml
|
||||
run_id: ${{ github.event.workflow_run.id }}
|
||||
|
||||
- name: Publish Bluetooth Test Results
|
||||
uses: EnricoMi/publish-unit-test-result-action@v1
|
||||
with:
|
||||
check_name: Bluetooth Test Results
|
||||
comment_mode: off
|
||||
commit: ${{ github.event.workflow_run.head_sha }}
|
||||
event_file: event/event.json
|
||||
event_name: ${{ github.event.workflow_run.event }}
|
||||
files: "bluetooth-test-results/**/bsim_results.xml"
|
||||
67
.github/workflows/bluetooth-tests.yaml
vendored
67
.github/workflows/bluetooth-tests.yaml
vendored
@@ -1,67 +0,0 @@
|
||||
name: Bluetooth Tests
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- "west.yml"
|
||||
- "subsys/bluetooth/**"
|
||||
- "tests/bluetooth/bsim_bt/**"
|
||||
- "boards/posix/**"
|
||||
- "soc/posix/**"
|
||||
- "arch/posix/**"
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.head_ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
bluetooth-test:
|
||||
runs-on: ubuntu-20.04
|
||||
container:
|
||||
image: zephyrprojectrtos/ci:v0.18.4
|
||||
options: '--entrypoint /bin/bash'
|
||||
env:
|
||||
ZEPHYR_TOOLCHAIN_VARIANT: zephyr
|
||||
ZEPHYR_SDK_INSTALL_DIR: /opt/toolchains/zephyr-sdk-0.13.1
|
||||
CLANG_ROOT_DIR: /usr/lib/llvm-12
|
||||
BSIM_OUT_PATH: /opt/bsim/
|
||||
BSIM_COMPONENTS_PATH: /opt/bsim/components
|
||||
EDTT_PATH: ../tools/edtt
|
||||
bsim_bt_test_results_file: ./bsim_bt_out/bsim_results.xml
|
||||
steps:
|
||||
- name: Update PATH for west
|
||||
run: |
|
||||
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- 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: Run Bluetooth Tests with BSIM
|
||||
run: |
|
||||
export ZEPHYR_BASE=${PWD}
|
||||
WORK_DIR=${ZEPHYR_BASE}/bsim_bt_out tests/bluetooth/bsim_bt/compile.sh
|
||||
RESULTS_FILE=${ZEPHYR_BASE}/${bsim_bt_test_results_file} \
|
||||
SEARCH_PATH=tests/bluetooth/bsim_bt/ tests/bluetooth/bsim_bt/run_parallel.sh
|
||||
|
||||
- name: Upload Test Results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: bluetooth-test-results
|
||||
path: |
|
||||
./bsim_bt_out/bsim_results.xml
|
||||
${{ github.event_path }}
|
||||
|
||||
- name: Upload Event Details
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: event
|
||||
path: |
|
||||
${{ github.event_path }}
|
||||
138
.github/workflows/clang.yaml
vendored
138
.github/workflows/clang.yaml
vendored
@@ -1,138 +0,0 @@
|
||||
name: Build with Clang/LLVM
|
||||
|
||||
on: pull_request_target
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.head_ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
clang-build:
|
||||
runs-on: zephyr-runner-linux-x64-4xlarge
|
||||
container:
|
||||
image: zephyrprojectrtos/ci:v0.18.4
|
||||
options: '--entrypoint /bin/bash'
|
||||
volumes:
|
||||
- /repo-cache/zephyrproject:/github/cache/zephyrproject
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
platform: ["native_posix"]
|
||||
env:
|
||||
ZEPHYR_SDK_INSTALL_DIR: /opt/toolchains/zephyr-sdk-0.13.1
|
||||
CLANG_ROOT_DIR: /usr/lib/llvm-12
|
||||
COMMIT_RANGE: ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}
|
||||
BASE_REF: ${{ github.base_ref }}
|
||||
outputs:
|
||||
report_needed: ${{ steps.twister.outputs.report_needed }}
|
||||
steps:
|
||||
- name: Clone cached Zephyr repository
|
||||
continue-on-error: true
|
||||
run: |
|
||||
git clone --shared /github/cache/zephyrproject/zephyr .
|
||||
git remote set-url origin ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
|
||||
- name: Environment Setup
|
||||
run: |
|
||||
pip3 install GitPython
|
||||
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
||||
git config --global user.email "bot@zephyrproject.org"
|
||||
git config --global user.name "Zephyr Bot"
|
||||
git rebase origin/${BASE_REF}
|
||||
git log --pretty=oneline | head -n 10
|
||||
west init -l . || true
|
||||
west config --global update.narrow true
|
||||
# In some cases modules are left in a state where they can't be
|
||||
# updated (i.e. when we cancel a job and the builder is killed),
|
||||
# So first retry to update, if that does not work, remove all modules
|
||||
# and start over. (Workaround until we implement more robust module
|
||||
# west caching).
|
||||
west update --path-cache /github/cache/zephyrproject 2>&1 1> west.log || west update --path-cache /github/cache/zephyrproject 2>&1 1> west2.log || ( rm -rf ../modules && west update --path-cache /github/cache/zephyrproject)
|
||||
|
||||
- name: Check Environment
|
||||
run: |
|
||||
cmake --version
|
||||
${CLANG_ROOT_DIR}/bin/clang --version
|
||||
gcc --version
|
||||
ls -la
|
||||
|
||||
- name: Prepare ccache timestamp/data
|
||||
id: ccache_cache_timestamp
|
||||
shell: cmake -P {0}
|
||||
run: |
|
||||
string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC)
|
||||
string(REPLACE "/" "_" repo ${{github.repository}})
|
||||
string(REPLACE "-" "_" repo2 ${repo})
|
||||
file(APPEND $ENV{GITHUB_OUTPUT} "repo=${repo2}\n")
|
||||
- name: use cache
|
||||
id: cache-ccache
|
||||
uses: nashif/action-s3-cache@master
|
||||
with:
|
||||
key: ${{ steps.ccache_cache_timestamp.outputs.repo }}-${{ github.ref_name }}-clang-${{ matrix.platform }}-ccache
|
||||
path: /github/home/.ccache
|
||||
aws-s3-bucket: ccache.zephyrproject.org
|
||||
aws-access-key-id: ${{ vars.AWS_CCACHE_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_CCACHE_SECRET_ACCESS_KEY }}
|
||||
aws-region: us-east-2
|
||||
|
||||
- name: ccache stats initial
|
||||
run: |
|
||||
test -d github/home/.ccache && rm -rf /github/home/.ccache && mv github/home/.ccache /github/home/.ccache
|
||||
ccache -M 10G -s
|
||||
|
||||
- name: Run Tests with Twister
|
||||
id: twister
|
||||
run: |
|
||||
export ZEPHYR_BASE=${PWD}
|
||||
export ZEPHYR_TOOLCHAIN_VARIANT=llvm
|
||||
|
||||
# check if we need to run a full twister or not based on files changed
|
||||
python3 ./scripts/ci/test_plan.py --platform ${{ matrix.platform }} -c origin/${BASE_REF}..
|
||||
|
||||
# We can limit scope to just what has changed
|
||||
if [ -s testplan.csv ]; then
|
||||
echo "report_needed=1" >> $GITHUB_OUTPUT
|
||||
# Full twister but with options based on changes
|
||||
./scripts/twister --inline-logs -M -N -v --load-tests testplan.csv --retry-failed 2
|
||||
else
|
||||
# if nothing is run, skip reporting step
|
||||
echo "report_needed=0" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: ccache stats post
|
||||
run: |
|
||||
ccache -s
|
||||
|
||||
- name: Upload Unit Test Results
|
||||
if: always() && steps.twister.outputs.report_needed != 0
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: Unit Test Results (Subset ${{ matrix.platform }})
|
||||
path: twister-out/twister.xml
|
||||
|
||||
clang-build-results:
|
||||
name: "Publish Unit Tests Results"
|
||||
needs: clang-build
|
||||
runs-on: ubuntu-20.04
|
||||
if: (success() || failure() ) && needs.clang-build.outputs.report_needed != 0
|
||||
steps:
|
||||
- name: Download Artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
path: artifacts
|
||||
|
||||
- name: Publish Unit Test Results
|
||||
uses: EnricoMi/publish-unit-test-result-action@v1
|
||||
if: always()
|
||||
with:
|
||||
check_name: Unit Test Results
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
files: "**/twister.xml"
|
||||
comment_mode: off
|
||||
166
.github/workflows/codecov.yaml
vendored
166
.github/workflows/codecov.yaml
vendored
@@ -1,166 +0,0 @@
|
||||
name: Code Coverage with codecov
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '25 */3 * * 1-5'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.head_ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
codecov:
|
||||
runs-on: zephyr-runner-linux-x64-4xlarge
|
||||
container:
|
||||
image: zephyrprojectrtos/ci:v0.18.4
|
||||
options: '--entrypoint /bin/bash'
|
||||
volumes:
|
||||
- /repo-cache/zephyrproject:/github/cache/zephyrproject
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
platform: ["native_posix", "qemu_x86", "unit_testing"]
|
||||
env:
|
||||
ZEPHYR_SDK_INSTALL_DIR: /opt/toolchains/zephyr-sdk-0.13.1
|
||||
CLANG_ROOT_DIR: /usr/lib/llvm-12
|
||||
steps:
|
||||
- name: Update PATH for west
|
||||
run: |
|
||||
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: Clone cached Zephyr repository
|
||||
continue-on-error: true
|
||||
run: |
|
||||
git clone --shared /github/cache/zephyrproject/zephyr .
|
||||
git remote set-url origin ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}
|
||||
|
||||
- name: checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: west setup
|
||||
run: |
|
||||
west init -l . || true
|
||||
west update 1> west.update.log || west update 1> west.update-2.log
|
||||
|
||||
- name: Check Environment
|
||||
run: |
|
||||
cmake --version
|
||||
${CLANG_ROOT_DIR}/bin/clang --version
|
||||
gcc --version
|
||||
ls -la
|
||||
- name: Prepare ccache keys
|
||||
id: ccache_cache_prop
|
||||
shell: cmake -P {0}
|
||||
run: |
|
||||
string(REPLACE "/" "_" repo ${{github.repository}})
|
||||
string(REPLACE "-" "_" repo2 ${repo})
|
||||
file(APPEND $ENV{GITHUB_OUTPUT} "repo=${repo2}\n")
|
||||
|
||||
- name: use cache
|
||||
id: cache-ccache
|
||||
uses: nashif/action-s3-cache@master
|
||||
with:
|
||||
key: ${{ steps.ccache_cache_prop.outputs.repo }}-${{github.event_name}}-${{matrix.platform}}-codecov-ccache
|
||||
path: /github/home/.ccache
|
||||
aws-s3-bucket: ccache.zephyrproject.org
|
||||
aws-access-key-id: ${{ vars.AWS_CCACHE_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_CCACHE_SECRET_ACCESS_KEY }}
|
||||
aws-region: us-east-2
|
||||
|
||||
- name: ccache stats initial
|
||||
run: |
|
||||
test -d github/home/.ccache && mv github/home/.ccache /github/home/.ccache
|
||||
ccache -M 10G -s
|
||||
|
||||
- name: Run Tests with Twister (Push)
|
||||
continue-on-error: true
|
||||
run: |
|
||||
export ZEPHYR_BASE=${PWD}
|
||||
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
|
||||
mkdir -p coverage/reports
|
||||
./scripts/twister -N -v --filter runnable -p ${{ matrix.platform }} --coverage -T tests
|
||||
|
||||
- name: Generate Coverage Report
|
||||
run: |
|
||||
mv twister-out/coverage.info lcov.pre.info
|
||||
lcov -q --remove lcov.pre.info mylib.c --remove lcov.pre.info tests/\* \
|
||||
--remove lcov.pre.info samples/\* --remove lcov.pre.info ext/\* \
|
||||
--remove lcov.pre.info *generated* \
|
||||
-o coverage/reports/${{ matrix.platform }}.info --rc lcov_branch_coverage=1
|
||||
|
||||
- name: ccache stats post
|
||||
run: |
|
||||
ccache -s
|
||||
|
||||
- name: Upload Coverage Results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: Coverage Data (Subset ${{ matrix.platform }})
|
||||
path: coverage/reports/${{ matrix.platform }}.info
|
||||
|
||||
codecov-results:
|
||||
name: "Publish Coverage Results"
|
||||
needs: codecov
|
||||
runs-on: ubuntu-latest
|
||||
# the codecov job might be skipped, we don't need to run this job then
|
||||
if: success() || failure()
|
||||
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Download Artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
path: coverage/reports
|
||||
|
||||
- name: Move coverage files
|
||||
run: |
|
||||
mv ./coverage/reports/*/*.info ./coverage/reports
|
||||
ls -la ./coverage/reports
|
||||
|
||||
- name: Generate list of coverage files
|
||||
id: get-coverage-files
|
||||
shell: cmake -P {0}
|
||||
run: |
|
||||
file(GLOB INPUT_FILES_LIST "coverage/reports/*.info")
|
||||
set(MERGELIST "")
|
||||
set(FILELIST "")
|
||||
foreach(ITEM ${INPUT_FILES_LIST})
|
||||
get_filename_component(f ${ITEM} NAME)
|
||||
if(FILELIST STREQUAL "")
|
||||
set(FILELIST "${f}")
|
||||
else()
|
||||
set(FILELIST "${FILELIST},${f}")
|
||||
endif()
|
||||
endforeach()
|
||||
foreach(ITEM ${INPUT_FILES_LIST})
|
||||
get_filename_component(f ${ITEM} NAME)
|
||||
if(MERGELIST STREQUAL "")
|
||||
set(MERGELIST "-a ${f}")
|
||||
else()
|
||||
set(MERGELIST "${MERGELIST} -a ${f}")
|
||||
endif()
|
||||
endforeach()
|
||||
file(APPEND $ENV{GITHUB_OUTPUT} "mergefiles=${MERGELIST}\n")
|
||||
file(APPEND $ENV{GITHUB_OUTPUT} "covfiles=${FILELIST}\n")
|
||||
|
||||
- name: Merge coverage files
|
||||
run: |
|
||||
sudo apt-get install -y lcov
|
||||
cd ./coverage/reports
|
||||
lcov ${{ steps.get-coverage-files.outputs.mergefiles }} -o merged.info --rc lcov_branch_coverage=1
|
||||
|
||||
- name: Upload coverage to Codecov
|
||||
if: always()
|
||||
uses: codecov/codecov-action@v2
|
||||
with:
|
||||
directory: ./coverage/reports
|
||||
env_vars: OS,PYTHON
|
||||
fail_ci_if_error: false
|
||||
verbose: true
|
||||
files: merged.info
|
||||
60
.github/workflows/coding_guidelines.yml
vendored
60
.github/workflows/coding_guidelines.yml
vendored
@@ -1,60 +0,0 @@
|
||||
name: Coding Guidelines
|
||||
|
||||
on: pull_request
|
||||
|
||||
jobs:
|
||||
compliance_job:
|
||||
runs-on: ubuntu-20.04
|
||||
name: Run coding guidelines checks on patch series (PR)
|
||||
steps:
|
||||
- name: Checkout the code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 0
|
||||
|
||||
- name: cache-pip
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: ${{ runner.os }}-doc-pip
|
||||
|
||||
- name: Install python dependencies
|
||||
run: |
|
||||
pip3 install unidiff
|
||||
pip3 install wheel
|
||||
pip3 install sh
|
||||
|
||||
- name: Install Packages
|
||||
run: |
|
||||
sudo apt-get install ocaml-base-nox
|
||||
wget https://launchpad.net/~npalix/+archive/ubuntu/coccinelle/+files/coccinelle_1.0.8~20.04npalix1_amd64.deb
|
||||
sudo dpkg -i coccinelle_1.0.8~20.04npalix1_amd64.deb
|
||||
|
||||
- name: Run Coding Guildeines Checks
|
||||
continue-on-error: true
|
||||
id: coding_guidelines
|
||||
env:
|
||||
BASE_REF: ${{ github.base_ref }}
|
||||
run: |
|
||||
export ZEPHYR_BASE=$PWD
|
||||
git config --global user.email "actions@zephyrproject.org"
|
||||
git config --global user.name "Github Actions"
|
||||
git remote -v
|
||||
git rebase origin/${BASE_REF}
|
||||
source zephyr-env.sh
|
||||
# debug
|
||||
ls -la
|
||||
git log --pretty=oneline | head -n 10
|
||||
./scripts/ci/guideline_check.py --output output.txt -c origin/${BASE_REF}..
|
||||
|
||||
- name: check-warns
|
||||
run: |
|
||||
if [[ -s "output.txt" ]]; then
|
||||
errors=$(cat output.txt)
|
||||
errors="${errors//'%'/'%25'}"
|
||||
errors="${errors//$'\n'/'%0A'}"
|
||||
errors="${errors//$'\r'/'%0D'}"
|
||||
echo "::error file=output.txt::$errors"
|
||||
exit 1;
|
||||
fi
|
||||
100
.github/workflows/compliance.yml
vendored
100
.github/workflows/compliance.yml
vendored
@@ -1,100 +0,0 @@
|
||||
name: Compliance Checks
|
||||
|
||||
on: pull_request
|
||||
|
||||
jobs:
|
||||
maintainer_check:
|
||||
runs-on: ubuntu-20.04
|
||||
name: Check MAINTAINERS file
|
||||
steps:
|
||||
- name: Checkout the code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 0
|
||||
- name: Run Maintainers Script
|
||||
id: maintainer
|
||||
env:
|
||||
BASE_REF: ${{ github.base_ref }}
|
||||
run: |
|
||||
python3 ./scripts/get_maintainer.py path CMakeLists.txt
|
||||
|
||||
check_compliance:
|
||||
runs-on: ubuntu-20.04
|
||||
name: Run compliance checks on patch series (PR)
|
||||
steps:
|
||||
- name: Update PATH for west
|
||||
run: |
|
||||
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: Checkout the code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 0
|
||||
|
||||
- name: cache-pip
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: ${{ runner.os }}-doc-pip
|
||||
|
||||
- name: Install python dependencies
|
||||
run: |
|
||||
pip3 install setuptools
|
||||
pip3 install wheel
|
||||
pip3 install python-magic junitparser==1.6.3 gitlint pylint pykwalify
|
||||
pip3 install west
|
||||
|
||||
- name: west setup
|
||||
env:
|
||||
BASE_REF: ${{ github.base_ref }}
|
||||
run: |
|
||||
git config --global user.email "you@example.com"
|
||||
git config --global user.name "Your Name"
|
||||
git remote -v
|
||||
git rebase origin/${BASE_REF}
|
||||
# debug
|
||||
git log --pretty=oneline | head -n 10
|
||||
west init -l . || true
|
||||
west update 2>&1 1> west.update.log || west update 2>&1 1> west.update2.log
|
||||
|
||||
- name: Run Compliance Tests
|
||||
continue-on-error: true
|
||||
id: compliance
|
||||
env:
|
||||
BASE_REF: ${{ github.base_ref }}
|
||||
run: |
|
||||
export ZEPHYR_BASE=$PWD
|
||||
# debug
|
||||
ls -la
|
||||
git log --pretty=oneline | head -n 10
|
||||
./scripts/ci/check_compliance.py -m Codeowners -m Devicetree -m Gitlint -m Identity -m Nits -m pylint -m checkpatch -m Kconfig -c origin/${BASE_REF}..
|
||||
|
||||
- name: upload-results
|
||||
uses: actions/upload-artifact@v3
|
||||
continue-on-error: True
|
||||
with:
|
||||
name: compliance.xml
|
||||
path: compliance.xml
|
||||
|
||||
- name: check-warns
|
||||
run: |
|
||||
if [[ ! -s "compliance.xml" ]]; then
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
for file in Nits.txt checkpatch.txt Identity.txt Gitlint.txt pylint.txt Devicetree.txt Kconfig.txt Codeowners.txt; do
|
||||
if [[ -s $file ]]; then
|
||||
errors=$(cat $file)
|
||||
errors="${errors//'%'/'%25'}"
|
||||
errors="${errors//$'\n'/'%0A'}"
|
||||
errors="${errors//$'\r'/'%0D'}"
|
||||
echo "::error file=${file}::$errors"
|
||||
exit=1
|
||||
fi
|
||||
done
|
||||
|
||||
if [ ${exit} == 1 ]; then
|
||||
exit 1;
|
||||
fi
|
||||
14
.github/workflows/conflict.yml
vendored
14
.github/workflows/conflict.yml
vendored
@@ -1,14 +0,0 @@
|
||||
name: Conflict Finder
|
||||
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- '**'
|
||||
jobs:
|
||||
conflict:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: mschilde/auto-label-merge-conflicts@v2
|
||||
with:
|
||||
CONFLICT_LABEL_NAME: "has conflicts"
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
38
.github/workflows/daily_test_version.yml
vendored
38
.github/workflows/daily_test_version.yml
vendored
@@ -1,38 +0,0 @@
|
||||
# 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-20.04
|
||||
if: github.repository == 'zephyrproject-rtos/zephyr'
|
||||
|
||||
steps:
|
||||
- name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@v1
|
||||
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@v3
|
||||
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
|
||||
73
.github/workflows/devicetree_checks.yml
vendored
73
.github/workflows/devicetree_checks.yml
vendored
@@ -1,73 +0,0 @@
|
||||
# Copyright (c) 2020 Linaro Limited.
|
||||
# Copyright (c) 2020 Nordic Semiconductor ASA
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
name: Devicetree script tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- v2.7-branch
|
||||
paths:
|
||||
- 'scripts/dts/**'
|
||||
- '.github/workflows/devicetree_checks.yml'
|
||||
pull_request:
|
||||
branches:
|
||||
- v2.7-branch
|
||||
paths:
|
||||
- 'scripts/dts/**'
|
||||
- '.github/workflows/devicetree_checks.yml'
|
||||
|
||||
jobs:
|
||||
devicetree-checks:
|
||||
name: Devicetree script tests
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.6, 3.7, 3.8]
|
||||
os: [ubuntu-20.04, macos-11, windows-2022]
|
||||
exclude:
|
||||
- os: macos-11
|
||||
python-version: 3.6
|
||||
- os: windows-2022
|
||||
python-version: 3.6
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v3
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- name: cache-pip-linux
|
||||
if: startsWith(runner.os, 'Linux')
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: ${{ runner.os }}-pip-${{ matrix.python-version }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pip-${{ matrix.python-version }}
|
||||
- name: cache-pip-mac
|
||||
if: startsWith(runner.os, 'macOS')
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/Library/Caches/pip
|
||||
# Trailing '-' was just to get a different cache name
|
||||
key: ${{ runner.os }}-pip-${{ matrix.python-version }}-
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pip-${{ matrix.python-version }}-
|
||||
- name: cache-pip-win
|
||||
if: startsWith(runner.os, 'Windows')
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~\AppData\Local\pip\Cache
|
||||
key: ${{ runner.os }}-pip-${{ matrix.python-version }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pip-${{ matrix.python-version }}
|
||||
- name: install python dependencies
|
||||
run: |
|
||||
pip3 install wheel
|
||||
pip3 install pytest pyyaml tox
|
||||
- name: run tox
|
||||
working-directory: scripts/dts/python-devicetree
|
||||
run: |
|
||||
tox
|
||||
167
.github/workflows/doc-build.yml
vendored
167
.github/workflows/doc-build.yml
vendored
@@ -1,167 +0,0 @@
|
||||
# Copyright (c) 2020 Linaro Limited.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
name: Documentation Build
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 */3 * * *'
|
||||
push:
|
||||
tags:
|
||||
- v*
|
||||
pull_request:
|
||||
paths:
|
||||
- 'doc/**'
|
||||
- '**.rst'
|
||||
- 'include/**'
|
||||
- 'kernel/include/kernel_arch_interface.h'
|
||||
- 'lib/libc/**'
|
||||
- 'subsys/testsuite/ztest/include/**'
|
||||
- 'tests/**'
|
||||
- '**/Kconfig*'
|
||||
- 'west.yml'
|
||||
- '.github/workflows/doc-build.yml'
|
||||
- 'scripts/dts/**'
|
||||
- 'scripts/requirements-doc.txt'
|
||||
|
||||
env:
|
||||
# NOTE: west docstrings will be extracted from the version listed here
|
||||
WEST_VERSION: 0.11.1
|
||||
# The latest CMake available directly with apt is 3.18, but we need >=3.20
|
||||
# so we fetch that through pip.
|
||||
CMAKE_VERSION: 3.20.5
|
||||
|
||||
jobs:
|
||||
doc-build-html:
|
||||
name: "Documentation Build (HTML)"
|
||||
runs-on: ubuntu-20.04
|
||||
timeout-minutes: 30
|
||||
|
||||
concurrency:
|
||||
group: doc-build-html-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: install-pkgs
|
||||
run: |
|
||||
sudo apt-get install -y ninja-build doxygen graphviz
|
||||
|
||||
- name: cache-pip
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: pip-${{ hashFiles('scripts/requirements-doc.txt') }}
|
||||
|
||||
- name: install-pip
|
||||
run: |
|
||||
sudo pip3 install -U setuptools wheel pip
|
||||
pip3 install -r scripts/requirements-doc.txt
|
||||
pip3 install west==${WEST_VERSION}
|
||||
pip3 install cmake==${CMAKE_VERSION}
|
||||
|
||||
- name: west setup
|
||||
run: |
|
||||
west init -l .
|
||||
|
||||
- name: build-docs
|
||||
run: |
|
||||
if [[ "$GITHUB_REF" =~ "refs/tags/v" ]]; then
|
||||
DOC_TAG="release"
|
||||
else
|
||||
DOC_TAG="development"
|
||||
fi
|
||||
|
||||
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
|
||||
DOC_TARGET="html-fast"
|
||||
else
|
||||
DOC_TARGET="html"
|
||||
fi
|
||||
|
||||
DOC_TAG=${DOC_TAG} SPHINXOPTS="-q -W" make -C doc ${DOC_TARGET}
|
||||
|
||||
- name: compress-docs
|
||||
run: |
|
||||
tar cfJ html-output.tar.xz --directory=doc/_build html
|
||||
|
||||
- name: upload-build
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: html-output
|
||||
path: html-output.tar.xz
|
||||
|
||||
- name: process-pr
|
||||
if: github.event_name == 'pull_request'
|
||||
run: |
|
||||
REPO_NAME="${{ github.event.repository.name }}"
|
||||
PR_NUM="${{ github.event.pull_request.number }}"
|
||||
DOC_URL="https://builds.zephyrproject.io/${REPO_NAME}/pr/${PR_NUM}/docs/"
|
||||
|
||||
echo "${PR_NUM}" > pr_num
|
||||
echo "::notice:: Documentation will be available shortly at: ${DOC_URL}"
|
||||
|
||||
- name: upload-pr-number
|
||||
uses: actions/upload-artifact@v3
|
||||
if: github.event_name == 'pull_request'
|
||||
with:
|
||||
name: pr_num
|
||||
path: pr_num
|
||||
|
||||
doc-build-pdf:
|
||||
name: "Documentation Build (PDF)"
|
||||
runs-on: ubuntu-20.04
|
||||
container: texlive/texlive:latest
|
||||
timeout-minutes: 30
|
||||
concurrency:
|
||||
group: doc-build-pdf-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: install-pkgs
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install -y python3-pip python3-venv ninja-build doxygen graphviz librsvg2-bin
|
||||
|
||||
- name: cache-pip
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: pip-${{ hashFiles('scripts/requirements-doc.txt') }}
|
||||
|
||||
- name: setup-venv
|
||||
run: |
|
||||
python3 -m venv .venv
|
||||
. .venv/bin/activate
|
||||
echo PATH=$PATH >> $GITHUB_ENV
|
||||
|
||||
- name: install-pip
|
||||
run: |
|
||||
pip3 install -U setuptools wheel pip
|
||||
pip3 install -r scripts/requirements-doc.txt
|
||||
pip3 install west==${WEST_VERSION}
|
||||
pip3 install cmake==${CMAKE_VERSION}
|
||||
|
||||
- name: west setup
|
||||
run: |
|
||||
west init -l .
|
||||
|
||||
- name: build-docs
|
||||
run: |
|
||||
if [[ "$GITHUB_REF" =~ "refs/tags/v" ]]; then
|
||||
DOC_TAG="release"
|
||||
else
|
||||
DOC_TAG="development"
|
||||
fi
|
||||
|
||||
DOC_TAG=${DOC_TAG} SPHINXOPTS="-q -j auto" LATEXMKOPTS="-quiet -halt-on-error" make -C doc pdf
|
||||
|
||||
- name: upload-build
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: pdf-output
|
||||
path: doc/_build/latex/zephyr.pdf
|
||||
63
.github/workflows/doc-publish-pr.yml
vendored
63
.github/workflows/doc-publish-pr.yml
vendored
@@ -1,63 +0,0 @@
|
||||
# Copyright (c) 2020 Linaro Limited.
|
||||
# Copyright (c) 2021 Nordic Semiconductor ASA
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
name: Documentation Publish (Pull Request)
|
||||
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: ["Documentation Build"]
|
||||
types:
|
||||
- completed
|
||||
|
||||
jobs:
|
||||
doc-publish:
|
||||
name: Publish Documentation
|
||||
runs-on: ubuntu-20.04
|
||||
if: |
|
||||
github.event.workflow_run.event == 'pull_request' &&
|
||||
github.event.workflow_run.conclusion == 'success' &&
|
||||
github.repository == 'zephyrproject-rtos/zephyr'
|
||||
|
||||
steps:
|
||||
- name: Download artifacts
|
||||
uses: dawidd6/action-download-artifact@v2
|
||||
with:
|
||||
workflow: doc-build.yml
|
||||
run_id: ${{ github.event.workflow_run.id }}
|
||||
|
||||
- name: Load PR number
|
||||
run: |
|
||||
echo "PR_NUM=$(<pr_num/pr_num)" >> $GITHUB_ENV
|
||||
|
||||
- name: Check PR number
|
||||
id: check-pr
|
||||
uses: carpentries/actions/check-valid-pr@v0.8
|
||||
with:
|
||||
pr: ${{ env.PR_NUM }}
|
||||
sha: ${{ github.event.workflow_run.head_sha }}
|
||||
|
||||
- name: Validate PR number
|
||||
if: steps.check-pr.outputs.VALID != 'true'
|
||||
run: |
|
||||
echo "ABORT: PR number validation failed!"
|
||||
exit 1
|
||||
|
||||
- name: Uncompress HTML docs
|
||||
run: |
|
||||
tar xf html-output/html-output.tar.xz -C html-output
|
||||
|
||||
- name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@v1
|
||||
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 }}
|
||||
aws-region: us-east-1
|
||||
|
||||
- name: Upload to AWS S3
|
||||
env:
|
||||
HEAD_BRANCH: ${{ github.event.workflow_run.head_branch }}
|
||||
run: |
|
||||
aws s3 sync --quiet html-output/html \
|
||||
s3://builds.zephyrproject.org/${{ github.event.repository.name }}/pr/${PR_NUM}/docs \
|
||||
--delete
|
||||
51
.github/workflows/doc-publish.yml
vendored
51
.github/workflows/doc-publish.yml
vendored
@@ -1,51 +0,0 @@
|
||||
# Copyright (c) 2020 Linaro Limited.
|
||||
# Copyright (c) 2021 Nordic Semiconductor ASA
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
name: Documentation Publish
|
||||
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: ["Documentation Build"]
|
||||
branches:
|
||||
- main
|
||||
- v*
|
||||
types:
|
||||
- completed
|
||||
|
||||
jobs:
|
||||
doc-publish:
|
||||
name: Publish Documentation
|
||||
runs-on: ubuntu-20.04
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||
|
||||
steps:
|
||||
- name: Download artifacts
|
||||
uses: dawidd6/action-download-artifact@v2
|
||||
with:
|
||||
workflow: doc-build.yml
|
||||
|
||||
- name: Uncompress HTML docs
|
||||
run: |
|
||||
tar xf html-output/html-output.tar.xz -C html-output
|
||||
|
||||
- name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@v1
|
||||
with:
|
||||
aws-access-key-id: ${{ vars.AWS_DOCS_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_DOCS_SECRET_ACCESS_KEY }}
|
||||
aws-region: us-east-1
|
||||
|
||||
- name: Upload to AWS S3
|
||||
env:
|
||||
HEAD_BRANCH: ${{ github.event.workflow_run.head_branch }}
|
||||
run: |
|
||||
if [ "${HEAD_BRANCH:0:1}" == "v" ]; then
|
||||
VERSION=${HEAD_BRANCH:1}
|
||||
else
|
||||
VERSION="latest"
|
||||
fi
|
||||
|
||||
aws s3 sync --quiet html-output/html s3://docs.zephyrproject.org/${VERSION} --delete
|
||||
aws s3 sync --quiet html-output/html/doxygen/html s3://docs.zephyrproject.org/apidoc/${VERSION} --delete
|
||||
aws s3 cp --quiet pdf-output/zephyr.pdf s3://docs.zephyrproject.org/${VERSION}/zephyr.pdf
|
||||
20
.github/workflows/errno.yml
vendored
20
.github/workflows/errno.yml
vendored
@@ -1,20 +0,0 @@
|
||||
name: Error numbers
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'lib/libc/minimal/include/errno.h'
|
||||
|
||||
jobs:
|
||||
check-errno:
|
||||
runs-on: ubuntu-20.04
|
||||
container:
|
||||
image: zephyrprojectrtos/ci:v0.18.4
|
||||
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Run errno.py
|
||||
run: |
|
||||
export ZEPHYR_BASE=${PWD}
|
||||
./scripts/ci/errno.py
|
||||
66
.github/workflows/footprint-tracking.yml
vendored
66
.github/workflows/footprint-tracking.yml
vendored
@@ -1,66 +0,0 @@
|
||||
name: Footprint Tracking
|
||||
|
||||
# Run every 12 hours and on tags
|
||||
on:
|
||||
schedule:
|
||||
- cron: '50 1/12 * * *'
|
||||
push:
|
||||
paths:
|
||||
- 'VERSION'
|
||||
- '.github/workflows/footprint-tracking.yml'
|
||||
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: ubuntu-20.04
|
||||
if: github.repository == 'zephyrproject-rtos/zephyr'
|
||||
container:
|
||||
image: zephyrprojectrtos/ci:v0.18.4
|
||||
options: '--entrypoint /bin/bash'
|
||||
strategy:
|
||||
fail-fast: false
|
||||
env:
|
||||
ZEPHYR_SDK_INSTALL_DIR: /opt/toolchains/zephyr-sdk-0.13.1
|
||||
CLANG_ROOT_DIR: /usr/lib/llvm-12
|
||||
ZEPHYR_TOOLCHAIN_VARIANT: zephyr
|
||||
steps:
|
||||
- name: Update PATH for west
|
||||
run: |
|
||||
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
||||
- name: Install pip packages
|
||||
run: |
|
||||
sudo pip3 install -U setuptools wheel pip gitpython
|
||||
|
||||
- name: checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 0
|
||||
|
||||
- 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@v1
|
||||
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
|
||||
aws s3 sync --quiet footprint_data/ s3://testing.zephyrproject.org/footprint_data/
|
||||
63
.github/workflows/footprint.yml
vendored
63
.github/workflows/footprint.yml
vendored
@@ -1,63 +0,0 @@
|
||||
name: Footprint Delta
|
||||
|
||||
on: pull_request
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.head_ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
footprint-delta:
|
||||
runs-on: ubuntu-20.04
|
||||
if: github.repository == 'zephyrproject-rtos/zephyr'
|
||||
container:
|
||||
image: zephyrprojectrtos/ci:v0.18.4
|
||||
options: '--entrypoint /bin/bash'
|
||||
strategy:
|
||||
fail-fast: false
|
||||
env:
|
||||
ZEPHYR_SDK_INSTALL_DIR: /opt/toolchains/zephyr-sdk-0.13.1
|
||||
CLANG_ROOT_DIR: /usr/lib/llvm-12
|
||||
ZEPHYR_TOOLCHAIN_VARIANT: zephyr
|
||||
steps:
|
||||
- name: Update PATH for west
|
||||
run: |
|
||||
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 0
|
||||
|
||||
- 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.update.log
|
||||
|
||||
- name: Detect Changes in Footprint
|
||||
env:
|
||||
BASE_REF: ${{ github.base_ref }}
|
||||
run: |
|
||||
export ZEPHYR_BASE=${PWD}
|
||||
git config --global user.email "actions@zephyrproject.org"
|
||||
git config --global user.name "Github Actions"
|
||||
git remote -v
|
||||
git rebase origin/${BASE_REF}
|
||||
git checkout -b this_pr
|
||||
west build -b frdm_k64f tests/benchmarks/footprints -t ram_report
|
||||
cp build/ram.json ram2.json
|
||||
west build -b frdm_k64f tests/benchmarks/footprints -t rom_report
|
||||
cp build/rom.json rom2.json
|
||||
|
||||
git checkout origin/${BASE_REF}
|
||||
west update
|
||||
west build -p always -b frdm_k64f tests/benchmarks/footprints -t ram_report
|
||||
west build -b frdm_k64f tests/benchmarks/footprints -t rom_report
|
||||
cp build/ram.json ram1.json
|
||||
cp build/rom.json rom1.json
|
||||
|
||||
git checkout this_pr
|
||||
./scripts/footprint/fpdiff.py ram1.json ram2.json
|
||||
./scripts/footprint/fpdiff.py rom1.json rom2.json
|
||||
53
.github/workflows/issue_count.yml
vendored
53
.github/workflows/issue_count.yml
vendored
@@ -1,53 +0,0 @@
|
||||
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-20.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 install discount
|
||||
|
||||
- uses: brcrista/summarize-issues@v3
|
||||
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@v3
|
||||
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@v1
|
||||
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
|
||||
37
.github/workflows/issues-report-config.json
vendored
37
.github/workflows/issues-report-config.json
vendored
@@ -1,37 +0,0 @@
|
||||
[
|
||||
{
|
||||
"section": "High Priority Bugs",
|
||||
"labels": ["bug", "priority: high"],
|
||||
"threshold": 0
|
||||
},
|
||||
{
|
||||
"section": "Medium Priority Bugs",
|
||||
"labels": ["bug", "priority: medium"],
|
||||
"threshold": 20
|
||||
},
|
||||
{
|
||||
"section": "Low Priority Bugs",
|
||||
"labels": ["bug", "priority: low"],
|
||||
"threshold": 100
|
||||
},
|
||||
{
|
||||
"section": "Enhancements",
|
||||
"labels": ["Enhancement"],
|
||||
"threshold": 500
|
||||
},
|
||||
{
|
||||
"section": "Features",
|
||||
"labels": ["Feature"],
|
||||
"threshold": 100
|
||||
},
|
||||
{
|
||||
"section": "Questions",
|
||||
"labels": ["question"],
|
||||
"threshold": 100
|
||||
},
|
||||
{
|
||||
"section": "Static Analysis",
|
||||
"labels": ["Coverity"],
|
||||
"threshold": 100
|
||||
}
|
||||
]
|
||||
10
.github/workflows/labeler.yml
vendored
10
.github/workflows/labeler.yml
vendored
@@ -1,10 +0,0 @@
|
||||
name: 'Pull Request Labeler'
|
||||
on:
|
||||
- pull_request_target
|
||||
|
||||
jobs:
|
||||
labeler:
|
||||
name: Pull Request Labeler
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/labeler@v4
|
||||
32
.github/workflows/license_check.yml
vendored
32
.github/workflows/license_check.yml
vendored
@@ -1,32 +0,0 @@
|
||||
name: Scancode
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
scancode_job:
|
||||
runs-on: ubuntu-20.04
|
||||
name: Scan code for licenses
|
||||
steps:
|
||||
- name: Checkout the code
|
||||
uses: actions/checkout@v1
|
||||
- name: Scan the code
|
||||
id: scancode
|
||||
uses: zephyrproject-rtos/action_scancode@v3
|
||||
with:
|
||||
directory-to-scan: 'scan/'
|
||||
- name: Artifact Upload
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: scancode
|
||||
path: ./artifacts
|
||||
|
||||
- name: Verify
|
||||
run: |
|
||||
if [ -s ./artifacts/report.txt ]; then
|
||||
report=$(cat ./artifacts/report.txt)
|
||||
report="${report//'%'/'%25'}"
|
||||
report="${report//$'\n'/'%0A'}"
|
||||
report="${report//$'\r'/'%0D'}"
|
||||
echo "::error file=./artifacts/report.txt::$report"
|
||||
exit 1
|
||||
fi
|
||||
29
.github/workflows/manifest.yml
vendored
29
.github/workflows/manifest.yml
vendored
@@ -1,29 +0,0 @@
|
||||
name: Manifest
|
||||
on:
|
||||
pull_request_target:
|
||||
paths:
|
||||
- 'west.yml'
|
||||
|
||||
jobs:
|
||||
contribs:
|
||||
runs-on: ubuntu-22.04
|
||||
name: Manifest
|
||||
steps:
|
||||
- name: Checkout the code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
path: zephyrproject/zephyr
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
|
||||
- name: Manifest
|
||||
uses: zephyrproject-rtos/action-manifest@2f1ad2908599d4fe747f886f9d733dd7eebae4ef
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
manifest-path: 'west.yml'
|
||||
checkout-path: 'zephyrproject/zephyr'
|
||||
label-prefix: 'manifest-'
|
||||
verbosity-level: '1'
|
||||
labels: 'manifest, west'
|
||||
dnm-labels: 'DNM'
|
||||
62
.github/workflows/release.yml
vendored
62
.github/workflows/release.yml
vendored
@@ -1,62 +0,0 @@
|
||||
name: Create a Release
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Get the version
|
||||
id: get_version
|
||||
run: |
|
||||
echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: REUSE Compliance Check
|
||||
uses: fsfe/reuse-action@v1
|
||||
with:
|
||||
args: spdx -o zephyr-${{ steps.get_version.outputs.VERSION }}.spdx
|
||||
|
||||
- name: upload-results
|
||||
uses: actions/upload-artifact@v3
|
||||
continue-on-error: True
|
||||
with:
|
||||
name: zephyr-${{ steps.get_version.outputs.VERSION }}.spdx
|
||||
path: zephyr-${{ steps.get_version.outputs.VERSION }}.spdx
|
||||
|
||||
- name: Get Diff since last tag
|
||||
run: |
|
||||
oldtag=$(git describe --abbrev=0 ${{ github.ref }}^)
|
||||
echo "Changes since ${oldtag}:" > release-notes.txt
|
||||
echo "" >> release-notes.txt
|
||||
echo "" >> release-notes.txt
|
||||
git shortlog ${oldtag}..${{ github.ref }} >> release-notes.txt
|
||||
|
||||
- name: Create Release
|
||||
id: create_release
|
||||
uses: actions/create-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
tag_name: ${{ github.ref }}
|
||||
release_name: Zephyr ${{ github.ref }}
|
||||
body_path: release-notes.txt
|
||||
draft: true
|
||||
prerelease: true
|
||||
|
||||
- name: Upload Release Assets
|
||||
id: upload-release-asset
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: zephyr-${{ steps.get_version.outputs.VERSION }}.spdx
|
||||
asset_name: zephyr-${{ steps.get_version.outputs.VERSION }}.spdx
|
||||
asset_content_type: text/plain
|
||||
23
.github/workflows/stale_issue.yml
vendored
23
.github/workflows/stale_issue.yml
vendored
@@ -1,23 +0,0 @@
|
||||
name: "Close stale pull requests/issues"
|
||||
on:
|
||||
schedule:
|
||||
- cron: "16 00 * * *"
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
name: Find Stale issues and PRs
|
||||
runs-on: ubuntu-20.04
|
||||
if: github.repository == 'zephyrproject-rtos/zephyr'
|
||||
steps:
|
||||
- uses: actions/stale@v3
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
stale-pr-message: 'This pull request has been marked as stale because it has been open (more than) 60 days with no activity. Remove the stale label or add a comment saying that you would like to have the label removed otherwise this pull request will automatically be closed in 14 days. Note, that you can always re-open a closed pull request at any time.'
|
||||
stale-issue-message: 'This issue has been marked as stale because it has been open (more than) 60 days with no activity. Remove the stale label or add a comment saying that you would like to have the label removed otherwise this issue will automatically be closed in 14 days. Note, that you can always re-open a closed issue at any time.'
|
||||
days-before-stale: 60
|
||||
days-before-close: 14
|
||||
stale-issue-label: 'Stale'
|
||||
stale-pr-label: 'Stale'
|
||||
exempt-pr-labels: 'Blocked,In progress'
|
||||
exempt-issue-labels: 'In progress,Enhancement,Feature,Feature Request,RFC,Meta'
|
||||
operations-per-run: 400
|
||||
251
.github/workflows/twister.yaml
vendored
251
.github/workflows/twister.yaml
vendored
@@ -1,251 +0,0 @@
|
||||
name: Run tests with twister
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- v2.7-branch
|
||||
pull_request_target:
|
||||
branches:
|
||||
- v2.7-branch
|
||||
schedule:
|
||||
# Run at 00:00 on Saturday
|
||||
- cron: '20 0 * * 6'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.head_ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
twister-build-prep:
|
||||
runs-on: zephyr-runner-linux-x64-4xlarge
|
||||
container:
|
||||
image: zephyrprojectrtos/ci:v0.18.4
|
||||
options: '--entrypoint /bin/bash'
|
||||
volumes:
|
||||
- /repo-cache/zephyrproject:/github/cache/zephyrproject
|
||||
outputs:
|
||||
subset: ${{ steps.output-services.outputs.subset }}
|
||||
size: ${{ steps.output-services.outputs.size }}
|
||||
env:
|
||||
MATRIX_SIZE: 10
|
||||
PUSH_MATRIX_SIZE: 15
|
||||
DAILY_MATRIX_SIZE: 80
|
||||
ZEPHYR_SDK_INSTALL_DIR: /opt/toolchains/zephyr-sdk-0.13.1
|
||||
CLANG_ROOT_DIR: /usr/lib/llvm-12
|
||||
TESTS_PER_BUILDER: 700
|
||||
COMMIT_RANGE: ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}
|
||||
BASE_REF: ${{ github.base_ref }}
|
||||
steps:
|
||||
- name: Clone cached Zephyr repository
|
||||
if: github.event_name == 'pull_request_target'
|
||||
continue-on-error: true
|
||||
run: |
|
||||
git clone --shared /github/cache/zephyrproject/zephyr .
|
||||
git remote set-url origin ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}
|
||||
|
||||
- name: Checkout
|
||||
if: github.event_name == 'pull_request_target'
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
|
||||
- name: Environment Setup
|
||||
if: github.event_name == 'pull_request_target'
|
||||
run: |
|
||||
pip3 install GitPython
|
||||
git config --global user.email "bot@zephyrproject.org"
|
||||
git config --global user.name "Zephyr Bot"
|
||||
git rebase origin/${BASE_REF}
|
||||
git log --pretty=oneline | head -n 10
|
||||
west init -l . || true
|
||||
# no need for west update here
|
||||
|
||||
- name: Generate Test Plan with Twister
|
||||
if: github.event_name == 'pull_request_target'
|
||||
id: test-plan
|
||||
run: |
|
||||
export ZEPHYR_BASE=${PWD}
|
||||
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
|
||||
# temporary until we have all PRs rebased on top of this commit.
|
||||
git log -n 500 --oneline | grep -q "run twister using github action" || (
|
||||
echo "Your branch is not up to date, you need to rebase on top of latest HEAD of main branch"
|
||||
exit 1
|
||||
)
|
||||
python3 ./scripts/ci/test_plan.py -c origin/${BASE_REF}.. --pull-request -t $TESTS_PER_BUILDER
|
||||
if [ -s .testplan ]; then
|
||||
cat .testplan >> $GITHUB_ENV
|
||||
else
|
||||
echo "TWISTER_NODES=${MATRIX_SIZE}" >> $GITHUB_ENV
|
||||
fi
|
||||
|
||||
|
||||
rm -f testplan.csv .testplan
|
||||
|
||||
- name: Determine matrix size
|
||||
id: output-services
|
||||
run: |
|
||||
if [ "${{github.event_name}}" = "pull_request_target" ]; then
|
||||
if [ -n "${TWISTER_NODES}" ]; then
|
||||
subset="[$(seq -s',' 1 ${TWISTER_NODES})]"
|
||||
else
|
||||
subset="[$(seq -s',' 1 ${MATRIX_SIZE})]"
|
||||
fi
|
||||
size=${TWISTER_NODES}
|
||||
elif [ "${{github.event_name}}" = "push" ]; then
|
||||
subset="[$(seq -s',' 1 ${PUSH_MATRIX_SIZE})]"
|
||||
size=${MATRIX_SIZE}
|
||||
elif [ "${{github.event_name}}" = "schedule" && "${{github.repository}}" = "zephyrproject-rtos/zephyr" ]; then
|
||||
subset="[$(seq -s',' 1 ${DAILY_MATRIX_SIZE})]"
|
||||
size=${DAILY_MATRIX_SIZE}
|
||||
else
|
||||
size=0
|
||||
fi
|
||||
echo "subset=${subset}" >> $GITHUB_OUTPUT
|
||||
echo "size=${size}" >> $GITHUB_OUTPUT
|
||||
|
||||
twister-build:
|
||||
runs-on: zephyr-runner-linux-x64-4xlarge
|
||||
needs: twister-build-prep
|
||||
if: needs.twister-build-prep.outputs.size != 0
|
||||
container:
|
||||
image: zephyrprojectrtos/ci:v0.18.4
|
||||
options: '--entrypoint /bin/bash'
|
||||
volumes:
|
||||
- /repo-cache/zephyrproject:/github/cache/zephyrproject
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
subset: ${{fromJSON(needs.twister-build-prep.outputs.subset)}}
|
||||
env:
|
||||
ZEPHYR_SDK_INSTALL_DIR: /opt/toolchains/zephyr-sdk-0.13.1
|
||||
CLANG_ROOT_DIR: /usr/lib/llvm-12
|
||||
TWISTER_COMMON: ' --inline-logs -v -N -M --retry-failed 3 '
|
||||
DAILY_OPTIONS: ' -M --build-only --all '
|
||||
PR_OPTIONS: ' --clobber-output --integration '
|
||||
PUSH_OPTIONS: ' --clobber-output -M '
|
||||
COMMIT_RANGE: ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}
|
||||
BASE_REF: ${{ github.base_ref }}
|
||||
steps:
|
||||
- name: Clone cached Zephyr repository
|
||||
continue-on-error: true
|
||||
run: |
|
||||
git clone --shared /github/cache/zephyrproject/zephyr .
|
||||
git remote set-url origin ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
|
||||
- name: Environment Setup
|
||||
run: |
|
||||
pip3 install GitPython
|
||||
if [ "${{github.event_name}}" = "pull_request_target" ]; then
|
||||
git config --global user.email "bot@zephyrproject.org"
|
||||
git config --global user.name "Zephyr Builder"
|
||||
git rebase origin/${BASE_REF}
|
||||
git log --pretty=oneline | head -n 10
|
||||
fi
|
||||
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 && west update --path-cache /github/cache/zephyrproject)
|
||||
west forall -c 'git reset --hard HEAD'
|
||||
|
||||
- name: Check Environment
|
||||
run: |
|
||||
cmake --version
|
||||
${CLANG_ROOT_DIR}/bin/clang --version
|
||||
gcc --version
|
||||
ls -la
|
||||
echo "github.ref: ${{ github.ref }}"
|
||||
echo "github.base_ref: ${{ github.base_ref }}"
|
||||
echo "github.ref_name: ${{ github.ref_name }}"
|
||||
|
||||
- name: Prepare ccache timestamp/data
|
||||
id: ccache_cache_timestamp
|
||||
shell: cmake -P {0}
|
||||
run: |
|
||||
string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC)
|
||||
string(REPLACE "/" "_" repo ${{github.repository}})
|
||||
string(REPLACE "-" "_" repo2 ${repo})
|
||||
file(APPEND $ENV{GITHUB_OUTPUT} "repo=${repo2}\n")
|
||||
|
||||
- name: use cache
|
||||
id: cache-ccache
|
||||
uses: nashif/action-s3-cache@master
|
||||
with:
|
||||
key: ${{ steps.ccache_cache_timestamp.outputs.repo }}-${{ github.ref_name }}-${{github.event_name}}-${{ matrix.subset }}-ccache
|
||||
path: /github/home/.ccache
|
||||
aws-s3-bucket: ccache.zephyrproject.org
|
||||
aws-access-key-id: ${{ vars.AWS_CCACHE_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_CCACHE_SECRET_ACCESS_KEY }}
|
||||
aws-region: us-east-2
|
||||
|
||||
- name: ccache stats initial
|
||||
run: |
|
||||
test -d github/home/.ccache && rm -rf /github/home/.ccache && mv github/home/.ccache /github/home/.ccache
|
||||
ccache -M 10G -s
|
||||
|
||||
- if: github.event_name == 'push'
|
||||
name: Run Tests with Twister (Push)
|
||||
run: |
|
||||
export ZEPHYR_BASE=${PWD}
|
||||
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
|
||||
./scripts/twister --subset ${{matrix.subset}}/${{ strategy.job-total }} ${TWISTER_COMMON} ${PUSH_OPTIONS}
|
||||
|
||||
- if: github.event_name == 'pull_request_target'
|
||||
name: Run Tests with Twister (Pull Request)
|
||||
run: |
|
||||
rm -f testplan.csv
|
||||
export ZEPHYR_BASE=${PWD}
|
||||
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
|
||||
python3 ./scripts/ci/test_plan.py -c origin/${BASE_REF}.. --pull-request
|
||||
./scripts/twister --subset ${{matrix.subset}}/${{ strategy.job-total }} --load-tests testplan.csv ${TWISTER_COMMON} ${PR_OPTIONS}
|
||||
|
||||
- if: github.event_name == 'schedule'
|
||||
name: Run Tests with Twister (Daily)
|
||||
run: |
|
||||
export ZEPHYR_BASE=${PWD}
|
||||
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
|
||||
./scripts/twister --subset ${{matrix.subset}}/${{ strategy.job-total }} ${TWISTER_COMMON} ${DAILY_OPTIONS}
|
||||
|
||||
- name: ccache stats post
|
||||
run: |
|
||||
ccache -s
|
||||
|
||||
- name: Upload Unit Test Results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: Unit Test Results (Subset ${{ matrix.subset }})
|
||||
if-no-files-found: ignore
|
||||
path: |
|
||||
twister-out/twister.xml
|
||||
testplan.csv
|
||||
|
||||
twister-test-results:
|
||||
name: "Publish Unit Tests Results"
|
||||
needs: twister-build
|
||||
runs-on: ubuntu-20.04
|
||||
# the build-and-test job might be skipped, we don't need to run this job then
|
||||
if: success() || failure()
|
||||
|
||||
steps:
|
||||
- name: Download Artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
path: artifacts
|
||||
|
||||
- name: Publish Unit Test Results
|
||||
uses: EnricoMi/publish-unit-test-result-action@v1
|
||||
with:
|
||||
check_name: Unit Test Results
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
files: "**/twister.xml"
|
||||
comment_mode: off
|
||||
56
.github/workflows/twister_tests.yml
vendored
56
.github/workflows/twister_tests.yml
vendored
@@ -1,56 +0,0 @@
|
||||
# Copyright (c) 2020 Intel Corporation.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
name: Twister TestSuite
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- v2.7-branch
|
||||
paths:
|
||||
- 'scripts/pylib/twister/**'
|
||||
- 'scripts/twister'
|
||||
- 'scripts/tests/twister/**'
|
||||
- '.github/workflows/twister_tests.yml'
|
||||
pull_request:
|
||||
branches:
|
||||
- v2.7-branch
|
||||
paths:
|
||||
- 'scripts/pylib/twister/**'
|
||||
- 'scripts/twister'
|
||||
- 'scripts/tests/twister/**'
|
||||
- '.github/workflows/twister_tests.yml'
|
||||
|
||||
jobs:
|
||||
twister-tests:
|
||||
name: Twister Unit Tests
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.6, 3.7, 3.8]
|
||||
os: [ubuntu-20.04]
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v3
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- name: cache-pip-linux
|
||||
if: startsWith(runner.os, 'Linux')
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: ${{ runner.os }}-pip-${{ matrix.python-version }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pip-${{ matrix.python-version }}
|
||||
- name: install-packages
|
||||
run: |
|
||||
pip3 install pytest colorama pyyaml ply mock
|
||||
- name: Run pytest
|
||||
env:
|
||||
ZEPHYR_BASE: ./
|
||||
ZEPHYR_TOOLCHAIN_VARIANT: zephyr
|
||||
run: |
|
||||
echo "Run twister tests"
|
||||
PYTHONPATH=./scripts/tests pytest ./scripts/tests/twister
|
||||
78
.github/workflows/west_cmds.yml
vendored
78
.github/workflows/west_cmds.yml
vendored
@@ -1,78 +0,0 @@
|
||||
# Copyright (c) 2020 Linaro Limited.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
name: Zephyr West Command Tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- v2.7-branch
|
||||
paths:
|
||||
- 'scripts/west-commands.yml'
|
||||
- 'scripts/west_commands/**'
|
||||
- '.github/workflows/west_cmds.yml'
|
||||
pull_request:
|
||||
branches:
|
||||
- v2.7-branch
|
||||
paths:
|
||||
- 'scripts/west-commands.yml'
|
||||
- 'scripts/west_commands/**'
|
||||
- '.github/workflows/west_cmds.yml'
|
||||
|
||||
jobs:
|
||||
west-commnads:
|
||||
name: West Command Tests
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.6, 3.7, 3.8]
|
||||
os: [ubuntu-20.04, macos-11, windows-2022]
|
||||
exclude:
|
||||
- os: macos-11
|
||||
python-version: 3.6
|
||||
- os: windows-2022
|
||||
python-version: 3.6
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v3
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- name: cache-pip-linux
|
||||
if: startsWith(runner.os, 'Linux')
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: ${{ runner.os }}-pip-${{ matrix.python-version }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pip-${{ matrix.python-version }}
|
||||
- name: cache-pip-mac
|
||||
if: startsWith(runner.os, 'macOS')
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/Library/Caches/pip
|
||||
# Trailing '-' was just to get a different cache name
|
||||
key: ${{ runner.os }}-pip-${{ matrix.python-version }}-
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pip-${{ matrix.python-version }}-
|
||||
- name: cache-pip-win
|
||||
if: startsWith(runner.os, 'Windows')
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~\AppData\Local\pip\Cache
|
||||
key: ${{ runner.os }}-pip-${{ matrix.python-version }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pip-${{ matrix.python-version }}
|
||||
- name: install pytest
|
||||
run: |
|
||||
pip3 install wheel
|
||||
pip3 install pytest west pyelftools canopen progress mypy intelhex psutil
|
||||
- name: run pytest-win
|
||||
if: runner.os == 'Windows'
|
||||
run: |
|
||||
python ./scripts/west_commands/run_tests.py
|
||||
- name: run pytest-mac-linux
|
||||
if: runner.os != 'Windows'
|
||||
run: |
|
||||
./scripts/west_commands/run_tests.py
|
||||
43
.gitignore
vendored
43
.gitignore
vendored
@@ -7,49 +7,24 @@
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
build*/
|
||||
!doc/guides/build
|
||||
!tests/drivers/build_all
|
||||
cscope.*
|
||||
.dir
|
||||
|
||||
/*.patch
|
||||
|
||||
# The .cache directory will be used to cache toolchain capabilities if
|
||||
# no suitable out-of-tree directory is found.
|
||||
.cache
|
||||
|
||||
outdir
|
||||
outdir-*
|
||||
scripts/basic/fixdep
|
||||
scripts/gen_idt/gen_idt
|
||||
scripts/gen_offset_header/gen_offset_header
|
||||
scripts/kconfig/conf
|
||||
scripts/kconfig/mconf
|
||||
scripts/kconfig/zconf.hash.c
|
||||
scripts/kconfig/zconf.lex.c
|
||||
scripts/kconfig/zconf.tab.c
|
||||
doc/_build
|
||||
doc/doxygen
|
||||
doc/xml
|
||||
doc/html
|
||||
doc/boards
|
||||
doc/samples
|
||||
doc/latex
|
||||
doc/themes/zephyr-docs-theme
|
||||
sanity-out*
|
||||
twister-out*
|
||||
bsim_bt_out
|
||||
sanity-out/
|
||||
scripts/grub
|
||||
doc/reference/kconfig/*.rst
|
||||
doc/doc.warnings
|
||||
.*project
|
||||
.settings
|
||||
.envrc
|
||||
.vscode
|
||||
hide-defaults-note
|
||||
venv
|
||||
.venv
|
||||
|
||||
# Tag files
|
||||
GPATH
|
||||
GRTAGS
|
||||
GTAGS
|
||||
TAGS
|
||||
doc/reference/kconfig/CONFIG_*
|
||||
doc/reference/kconfig/index.rst
|
||||
tags
|
||||
|
||||
.idea
|
||||
|
||||
57
.gitlint
57
.gitlint
@@ -1,57 +0,0 @@
|
||||
# All these sections are optional, edit this file as you like.
|
||||
[general]
|
||||
ignore=title-trailing-punctuation, T3, title-max-length, T1, body-hard-tab, B3, B1
|
||||
# verbosity should be a value between 1 and 3, the commandline -v flags take precedence over this
|
||||
verbosity = 3
|
||||
# By default gitlint will ignore merge commits. Set to 'false' to disable.
|
||||
ignore-merge-commits=true
|
||||
# Enable debug mode (prints more output). Disabled by default
|
||||
debug = false
|
||||
|
||||
# Set the extra-path where gitlint will search for user defined rules
|
||||
# See http://jorisroovers.github.io/gitlint/user_defined_rules for details
|
||||
extra-path=scripts/gitlint
|
||||
|
||||
[title-max-length-no-revert]
|
||||
line-length=75
|
||||
|
||||
[body-min-line-count]
|
||||
min-line-count=1
|
||||
|
||||
[body-max-line-count]
|
||||
max-line-count=200
|
||||
|
||||
[title-starts-with-subsystem]
|
||||
regex = ^(?!subsys:)(([^:]+):)(\s([^:]+):)*\s(.+)$
|
||||
|
||||
[title-must-not-contain-word]
|
||||
# Comma-separated list of words that should not occur in the title. Matching is case
|
||||
# insensitive. It's fine if the keyword occurs as part of a larger word (so "WIPING"
|
||||
# will not cause a violation, but "WIP: my title" will.
|
||||
words=wip
|
||||
|
||||
[title-match-regex]
|
||||
# python like regex (https://docs.python.org/2/library/re.html) that the
|
||||
# commit-msg title must be matched to.
|
||||
# Note that the regex can contradict with other rules if not used correctly
|
||||
# (e.g. title-must-not-contain-word).
|
||||
#regex=^US[0-9]*
|
||||
|
||||
[max-line-length-with-exceptions]
|
||||
# B1 = body-max-line-length
|
||||
line-length=72
|
||||
|
||||
[body-min-length]
|
||||
min-length=3
|
||||
|
||||
[body-is-missing]
|
||||
# Whether to ignore this rule on merge commits (which typically only have a title)
|
||||
# default = True
|
||||
ignore-merge-commits=false
|
||||
|
||||
[body-changed-file-mention]
|
||||
# List of files that need to be explicitly mentioned in the body when they are changed
|
||||
# This is useful for when developers often erroneously edit certain files or git submodules.
|
||||
# By specifying this rule, developers can only change the file when they explicitly reference
|
||||
# it in the commit message.
|
||||
#files=gitlint/rules.py,README.md
|
||||
4
.gitreview
Normal file
4
.gitreview
Normal file
@@ -0,0 +1,4 @@
|
||||
[gerrit]
|
||||
host=gerrit.zephyrproject.org
|
||||
port=29418
|
||||
project=zephyr.git
|
||||
55
.known-issues/README
Normal file
55
.known-issues/README
Normal file
@@ -0,0 +1,55 @@
|
||||
This directory contains configuration files to ignore errors found in
|
||||
the build and test process which are known to the developers and for
|
||||
now can be safely ignored.
|
||||
|
||||
To use:
|
||||
|
||||
$ cd zephyr
|
||||
$ make SOMETHING >& result
|
||||
$ scripts/filter-known-issues.py result
|
||||
|
||||
It is included in the source tree so if anyone has to submit anything
|
||||
that triggers some kind of error that is a false positive, it can
|
||||
include the "ignore me" file, properly documented.
|
||||
|
||||
Each file can contain one or more multiline Python regular expressions
|
||||
(https://docs.python.org/2/library/re.html#regular-expression-syntax)
|
||||
that match an error message. Multiple regular expressions are
|
||||
separated by comment blocks (that start with #). Note that an empty
|
||||
line still is considered part of the multiline regular expression.
|
||||
|
||||
For example
|
||||
|
||||
---beginning---
|
||||
#
|
||||
# This testcase always fails, pending fix ZEP-1234
|
||||
#
|
||||
.*/tests/kernel/grumpy .* FAIL
|
||||
#
|
||||
# Documentation issue, masks:
|
||||
#
|
||||
# /home/e/inaky/z/kernel.git/doc/api/io_interfaces.rst:28: WARNING: Invalid definition: Expected identifier in nested name. [error at 19]
|
||||
# struct dev_config::@65 dev_config::bits
|
||||
# -------------------^
|
||||
#
|
||||
^(?P<filename>.+/doc/api/io_interfaces.rst):(?P<lineno>[0-9]+): WARNING: Invalid definition: Expected identifier in nested name. \[error at [0-9]+]
|
||||
^\s+struct dev_config::@[0-9]+ dev_config::bits.*
|
||||
^\s+-+\^
|
||||
---end---
|
||||
|
||||
Note you want to:
|
||||
|
||||
- use relateive paths; instead of
|
||||
/home/me/mydir/zephyr/something/somewhere.c you will want
|
||||
^.*/something/somewhere.c (as they will depend on where it is being
|
||||
built)
|
||||
|
||||
- Replace line numbers with [0-9]+, as they will change
|
||||
|
||||
- (?P<filename>[-._/\w]+/something/somewhere.c) saves the match on
|
||||
that file path in a "variable" called 'filename' that later you can
|
||||
match with (?P=filename) if you want to match multiple lines of the
|
||||
same error message.
|
||||
|
||||
Can get really twisted and interesting in terms of regexps; they are
|
||||
powerful, so start small :)
|
||||
38
.known-issues/doc/bluetooth.conf
Normal file
38
.known-issues/doc/bluetooth.conf
Normal file
@@ -0,0 +1,38 @@
|
||||
#
|
||||
# Bluetooth unnamed struct definition
|
||||
#
|
||||
# FIXME: all these should match the relative filename
|
||||
#
|
||||
^(?P<filename>[-._/\w]+/doc/api/bluetooth.rst):(?P<lineno>[0-9]+): WARNING: Invalid definition: Expected identifier in nested name. \[error at [0-9]+]$
|
||||
^[ \t]*$
|
||||
^[ \t]*\^$
|
||||
^(?P=filename):(?P=lineno): WARNING: Invalid definition: Expected identifier in nested name. \[error at [0-9]+]$
|
||||
^[ \t]*$
|
||||
^[ \t]*\^$
|
||||
^(?P=filename):(?P=lineno): WARNING: Invalid definition: Expected end of definition. \[error at [0-9]+]$
|
||||
^.*bt_conn_info.__unnamed__.*$
|
||||
^[- \t]*\^$
|
||||
#
|
||||
# bt_gatt_discover_params unnamed struct definition
|
||||
#
|
||||
^(?P<filename>[-._/\w]+/doc/api/bluetooth.rst):(?P<lineno>[0-9]+): WARNING: Invalid definition: Expected identifier in nested name. \[error at [0-9]+]
|
||||
^[ \t]*
|
||||
^[ \t]*\^
|
||||
^(?P=filename):(?P=lineno): WARNING: Invalid definition: Expected identifier in nested name. \[error at [0-9]+]
|
||||
^[ \t]*
|
||||
^[ \t]*\^
|
||||
^(?P=filename):(?P=lineno): WARNING: Invalid definition: Expected end of definition. \[error at [0-9]+]
|
||||
^.*bt_gatt_discover_params.__unnamed__.*
|
||||
^[- \t]*\^
|
||||
#
|
||||
# Bluetooth GATT unnamed struct definition
|
||||
#
|
||||
^(?P<filename>[-._/\w]+/doc/api/bluetooth.rst):(?P<lineno>[0-9]+): WARNING: Invalid definition: Expected identifier in nested name. \[error at [0-9]+]
|
||||
^[ \t]*
|
||||
^[ \t]*\^
|
||||
^(?P=filename):(?P=lineno): WARNING: Invalid definition: Expected identifier in nested name. \[error at [0-9]+]
|
||||
^[ \t]*
|
||||
^[ \t]*\^
|
||||
^(?P=filename):(?P=lineno): WARNING: Invalid definition: Expected end of definition. \[error at [0-9]+]
|
||||
^.*bt_gatt_read_params.__unnamed__.*
|
||||
^[- \t]*\^
|
||||
18
.known-issues/doc/header_footer.conf
Normal file
18
.known-issues/doc/header_footer.conf
Normal file
@@ -0,0 +1,18 @@
|
||||
#
|
||||
# KERNELVERSION not being defined in local builds, kill that warning,
|
||||
# can ignore it
|
||||
#
|
||||
^.*/Kconfig.zephyr:[0-9]+: warning: The symbol KERNELVERSION references the non-existent environment variable KERNELVERSION.*
|
||||
#
|
||||
# Documentation generation, early message
|
||||
#
|
||||
^cd .* && doxygen doc/doxygen.config
|
||||
^srctree=.* SRCARCH=\w+ python scripts/genrest/genrest.py .*$
|
||||
# This cuts the sphinx build line; has to be separate because in the
|
||||
# middle, we have removed the KERNELVERSION one and a full regex won't match
|
||||
^sphinx-build -t \w+ -b html -d [-._/\w]+ -q \. .*
|
||||
#
|
||||
# Documentation generation, footer message
|
||||
#
|
||||
^[ \t]*
|
||||
^Build finished. The HTML pages are in [-._/\w]+
|
||||
12
.known-issues/doc/sensor.conf
Normal file
12
.known-issues/doc/sensor.conf
Normal file
@@ -0,0 +1,12 @@
|
||||
#
|
||||
# Sensor value unnamed struct definition
|
||||
#
|
||||
^(?P<filename>[-._/\w]+/doc/api/io_interfaces.rst):(?P<lineno>[0-9]+): WARNING: Invalid definition: Expected identifier in nested name. \[error at [0-9]+]
|
||||
^[ \t]*
|
||||
^[ \t]*\^
|
||||
^(?P=filename):(?P=lineno): WARNING: Invalid definition: Expected identifier in nested name. \[error at [0-9]+]
|
||||
^[ \t]*
|
||||
^[ \t]*\^
|
||||
^(?P=filename):(?P=lineno): WARNING: Invalid definition: Expected end of definition. \[error at [0-9]+]
|
||||
^.*sensor_value.__unnamed__.*
|
||||
^[- \t]*\^
|
||||
15
.known-issues/doc/uart.conf
Normal file
15
.known-issues/doc/uart.conf
Normal file
@@ -0,0 +1,15 @@
|
||||
#
|
||||
# UART unnamed struct definition
|
||||
#
|
||||
^(?P<filename>[-._/\w]+/doc/api/io_interfaces.rst):(?P<lineno>[0-9]+): WARNING: Invalid definition: Expected identifier in nested name. \[error at [0-9]+]
|
||||
^[ \t]*
|
||||
^[ \t]*\^
|
||||
^(?P=filename):(?P=lineno): WARNING: Invalid definition: Expected identifier in nested name. \[error at [0-9]+]
|
||||
^[ \t]*
|
||||
^[ \t]*\^
|
||||
^(?P=filename):(?P=lineno): WARNING: Invalid definition: Expected identifier in nested name. \[error at [0-9]+]
|
||||
^[ \t]*
|
||||
^[ \t]*\^
|
||||
^(?P=filename):(?P=lineno): WARNING: Invalid definition: Expected end of definition. \[error at [0-9]+]
|
||||
^.*uart_device_config.__unnamed__.*
|
||||
^[- \t]*\^
|
||||
6
.known-issues/make.conf
Normal file
6
.known-issues/make.conf
Normal file
@@ -0,0 +1,6 @@
|
||||
#
|
||||
# When filtering output of the build process, ignore lines that don't
|
||||
# provide any information that helps the invoker tell if there was an
|
||||
# error.
|
||||
#
|
||||
^make: (Entering|Leaving) directory .*
|
||||
11
.known-issues/testcases/block.conf
Normal file
11
.known-issues/testcases/block.conf
Normal file
@@ -0,0 +1,11 @@
|
||||
#
|
||||
# When executing test cases, ignore the following messages as they are
|
||||
# not to be considered hard errors.
|
||||
#
|
||||
# Block line when test case cannot run in the HW due to server or connection issues
|
||||
#
|
||||
^BLCK0/[-a-z0-9:]+ (.+)#test @[^/]+/[^:]+:[^:]+: evaluation blocked(.*)$
|
||||
#
|
||||
# Block line when there is an issue with the YKUSH serial connection
|
||||
#
|
||||
^BLCK0/[-a-z0-9:]+ (.+)#test @[^/]+/(?P<board>[^:]+):[^:]+: exception: 400: (?P=board): Cannot find YKUSH serial '[A-Z0-9]+'$
|
||||
18
.known-issues/testcases/makefile.conf
Normal file
18
.known-issues/testcases/makefile.conf
Normal file
@@ -0,0 +1,18 @@
|
||||
#
|
||||
# When executing test cases under TCF, ignore the following messages
|
||||
# as they are not to be considered hard errors.
|
||||
#
|
||||
# TCF is run under make for taking advantage of the jobserver; when
|
||||
# the testcase execution fail, make will complain, which we can
|
||||
# ignore ('sommersault' was the old name of the target).
|
||||
#
|
||||
^/tmp/tcf-[a-zA-Z0-9]+.mk:[0-9]+: recipe for target ('tcf-jobserver-run'|'sommersault') failed$
|
||||
#
|
||||
# More of the same
|
||||
#
|
||||
^make: \*\*\* \[(tcf-jobserver-run|sommersault)\] Error 1$
|
||||
#
|
||||
# TCF's summary line. We don't need to consider it to determine if the
|
||||
# run failed or passed.
|
||||
#
|
||||
^[A-Z]+0/\S+:\s+\S+\s+@\S+: [0-9]+ tests \([0-9]+ passed, [0-9]+ failed, [0-9]+ blocked, [0-9]+ skipped\).*$
|
||||
4
.known-issues/testcases/skip.conf
Normal file
4
.known-issues/testcases/skip.conf
Normal file
@@ -0,0 +1,4 @@
|
||||
#
|
||||
# Skip line when test case is eliminated due to filters
|
||||
#
|
||||
^SKIP0/\S+\s+\S+: No targets can be used \(all [0-9]+ selected from [0-9]+ available eliminated by testcase filtering\)$
|
||||
15
.mailmap
15
.mailmap
@@ -18,18 +18,3 @@ Keren Siman-Tov <keren.siman-tov@intel.com> <keren.siman-tov@intel.com>
|
||||
Naga Raja Rao Tulasi <tulasi.r@tcs.com> <tulasi.r@tcs.com>
|
||||
Felipe Neves <ryukokki.felipe@gmail.com> <ryukokki.felipe@gmail.com>
|
||||
Amir Kaplan <amir.kaplan@intel.com> <amir.kaplan@intel.com>
|
||||
Anas Nashif <anas.nashif@intel.com> <anas.nashif@intel.com>
|
||||
Ruud Derwig <Ruud.Derwig@synopsys.com> <Ruud.Derwig@synopsys.com>
|
||||
Flavio Arieta Netto <flavio@exati.com.br>
|
||||
Nishikant Nayak <nishikantax.nayak@intel.com>
|
||||
Justin Watson <jwatson5@gmail.com>
|
||||
Johann Fischer <j.fischer@phytec.de>
|
||||
Jun Li <jun.r.li@intel.com>
|
||||
Xiaorui Hu <xiaorui.hu@linaro.org>
|
||||
Yannis Damigos <giannis.damigos@gmail.com> <ydamigos@iccs.gr>
|
||||
Vinayak Kariappa Chettimada <vinayak.kariappa.chettimada@nordicsemi.no> <vinayak.kariappa.chettimada@nordicsemi.no> <vich@nordicsemi.no> <vinayak.kariappa@gmail.com>
|
||||
Sean Nyekjaer <sean@geanix.com> <sean.nyekjaer@prevas.dk>
|
||||
Sean Nyekjaer <sean@geanix.com> <sean@nyekjaer.dk>
|
||||
Marc Herbert <marc.herbert@intel.com> <46978960+marc-hb@users.noreply.github.com>
|
||||
Martin Jäger <martin@libre.solar> <17674105+martinjaeger@users.noreply.github.com>
|
||||
Armand Ciejak <armand@riedonetworks.com> <armandciejak@users.noreply.github.com>
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
indent_with_tabs = 2 # 1=indent to level only, 2=indent with tabs
|
||||
input_tab_size = 8 # original tab size
|
||||
output_tab_size = 8 # new tab size
|
||||
indent_columns = output_tab_size
|
||||
indent_label = 1 # pos: absolute col, neg: relative column
|
||||
indent_switch_case = 0 # number
|
||||
|
||||
#
|
||||
# inter-symbol newlines
|
||||
#
|
||||
|
||||
nl_enum_brace = remove # "enum {" vs "enum \n {"
|
||||
nl_union_brace = remove # "union {" vs "union \n {"
|
||||
nl_struct_brace = remove # "struct {" vs "struct \n {"
|
||||
nl_do_brace = remove # "do {" vs "do \n {"
|
||||
nl_if_brace = remove # "if () {" vs "if () \n {"
|
||||
nl_for_brace = remove # "for () {" vs "for () \n {"
|
||||
nl_else_brace = remove # "else {" vs "else \n {"
|
||||
nl_while_brace = remove # "while () {" vs "while () \n {"
|
||||
nl_switch_brace = remove # "switch () {" vs "switch () \n {"
|
||||
nl_brace_while = remove # "} while" vs "} \n while" - cuddle while
|
||||
nl_brace_else = remove # "} \n else" vs "} else"
|
||||
nl_func_var_def_blk = 1
|
||||
nl_fcall_brace = remove # "list_for_each() {" vs "list_for_each()\n{"
|
||||
nl_fdef_brace = add # "int foo() {" vs "int foo()\n{"
|
||||
|
||||
#
|
||||
# Source code modifications
|
||||
#
|
||||
|
||||
mod_paren_on_return = ignore # "return 1;" vs "return (1);"
|
||||
mod_full_brace_if = add # "if() { } else { }" vs "if() else"
|
||||
|
||||
#
|
||||
# inter-character spacing options
|
||||
#
|
||||
|
||||
sp_sizeof_paren = remove # "sizeof (int)" vs "sizeof(int)"
|
||||
sp_before_sparen = force # "if (" vs "if("
|
||||
sp_after_sparen = force # "if () {" vs "if (){"
|
||||
sp_inside_braces = add # "{ 1 }" vs "{1}"
|
||||
sp_inside_braces_struct = add # "{ 1 }" vs "{1}"
|
||||
sp_inside_braces_enum = add # "{ 1 }" vs "{1}"
|
||||
sp_assign = add
|
||||
sp_arith = add
|
||||
sp_bool = add
|
||||
sp_compare = add
|
||||
sp_assign = add
|
||||
sp_after_comma = add
|
||||
sp_func_def_paren = remove # "int foo (){" vs "int foo(){"
|
||||
sp_func_call_paren = remove # "foo (" vs "foo("
|
||||
sp_func_proto_paren = remove # "int foo ();" vs "int foo();"
|
||||
sp_inside_fparen = remove # "func( arg )" vs "func(arg)"
|
||||
sp_else_brace = add # ignore/add/remove/force
|
||||
sp_before_ptr_star = add # ignore/add/remove/force
|
||||
sp_after_ptr_star = remove # ignore/add/remove/force
|
||||
sp_between_ptr_star = remove # ignore/add/remove/force
|
||||
sp_inside_paren = remove # remove spaces inside parens
|
||||
sp_paren_paren = remove # remove spaces between nested parens
|
||||
sp_inside_sparen = remove # remove spaces inside parens for if, while and the like
|
||||
sp_brace_else = add # ignore/add/remove/force
|
||||
sp_before_nl_cont = ignore
|
||||
sp_cmt_cpp_start = add
|
||||
sp_brace_typedef = add # }typedefd_name -> } typedefd_name
|
||||
|
||||
cmt_sp_after_star_cont = 1
|
||||
#
|
||||
# Aligning stuff
|
||||
#
|
||||
|
||||
align_with_tabs = FALSE # use tabs to align
|
||||
align_on_tabstop = TRUE # align on tabstops
|
||||
align_enum_equ_span = 4 # '=' in enum definition
|
||||
align_struct_init_span = 0 # align stuff in a structure init '= { }'
|
||||
align_right_cmt_span = 3
|
||||
align_nl_cont = TRUE
|
||||
|
||||
|
||||
|
||||
sp_pp_concat = ignore # ignore/add/remove/force
|
||||
1709
CMakeLists.txt
1709
CMakeLists.txt
File diff suppressed because it is too large
Load Diff
723
CODEOWNERS
723
CODEOWNERS
@@ -1,723 +0,0 @@
|
||||
# CODEOWNERS for autoreview assigning in github
|
||||
|
||||
# https://help.github.com/en/articles/about-code-owners#codeowners-syntax
|
||||
|
||||
# Order is important; for each modified file, the last matching
|
||||
# pattern takes the most precedence.
|
||||
# That is, with the last pattern being
|
||||
# *.rst @nashif
|
||||
# if only .rst files are being modified, only nashif is
|
||||
# automatically requested for review, but you can manually
|
||||
# add others as needed.
|
||||
|
||||
# Do not use wildcard on all source yet
|
||||
# * @galak @nashif
|
||||
|
||||
/.github/ @nashif
|
||||
/.github/workflows/ @galak @nashif
|
||||
/.buildkite/ @galak
|
||||
/MAINTAINERS.yml @ioannisg @MaureenHelm
|
||||
/arch/arc/ @abrodkin @ruuddw @evgeniy-paltsev
|
||||
/arch/arm/ @MaureenHelm @galak @ioannisg
|
||||
/arch/arm/core/aarch32/cortex_m/cmse/ @ioannisg
|
||||
/arch/arm/include/aarch32/cortex_m/cmse.h @ioannisg
|
||||
/arch/arm/core/aarch32/cortex_a_r/ @MaureenHelm @galak @ioannisg @bbolen @stephanosio
|
||||
/arch/arm64/ @carlocaione
|
||||
/arch/arm64/core/cortex_r/ @povergoing
|
||||
/arch/common/ @ioannisg @andyross
|
||||
/soc/arc/snps_*/ @abrodkin @ruuddw @evgeniy-paltsev
|
||||
/soc/nios2/ @nashif
|
||||
/soc/arm/ @MaureenHelm @galak @ioannisg
|
||||
/soc/arm/arm/mps2/ @fvincenzo
|
||||
/soc/arm/atmel_sam/common/*_sam4l_*.c @nandojve
|
||||
/soc/arm/atmel_sam/sam3x/ @ioannisg
|
||||
/soc/arm/atmel_sam/sam4e/ @nandojve
|
||||
/soc/arm/atmel_sam/sam4l/ @nandojve
|
||||
/soc/arm/atmel_sam/sam4s/ @fallrisk
|
||||
/soc/arm/atmel_sam/same70/ @nandojve
|
||||
/soc/arm/atmel_sam/samv71/ @nandojve
|
||||
/soc/arm/cypress/ @nandojve
|
||||
/soc/arm/bcm*/ @sbranden
|
||||
/soc/arm/infineon_xmc/ @parthitce
|
||||
/soc/arm/nxp*/ @mmahadevan108 @dleach02
|
||||
/soc/arm/nordic_nrf/ @ioannisg
|
||||
/soc/arm/nuvoton_npcx/ @MulinChao @WealianLiao @ChiHuaL
|
||||
/soc/arm/nuvoton_numicro/ @ssekar15
|
||||
/soc/arm/quicklogic_eos_s3/ @kowalewskijan @kgugala
|
||||
/soc/arm/silabs_exx32/efm32pg1b/ @rdmeneze
|
||||
/soc/arm/silabs_exx32/efr32mg21/ @l-alfred
|
||||
/soc/arm/st_stm32/ @erwango
|
||||
/soc/arm/st_stm32/*/power.c @FRASTM
|
||||
/soc/arm/st_stm32/stm32mp1/ @arnopo
|
||||
/soc/arm/ti_simplelink/cc13x2_cc26x2/ @bwitherspoon
|
||||
/soc/arm/ti_simplelink/cc32xx/ @vanti
|
||||
/soc/arm/ti_simplelink/msp432p4xx/ @Mani-Sadhasivam
|
||||
/soc/arm/xilinx_zynqmp/ @stephanosio
|
||||
/soc/arm/renesas_rcar/ @julien-massot
|
||||
/soc/xtensa/intel_s1000/ @sathishkuttan @dcpleung
|
||||
/soc/arm64/ @carlocaione
|
||||
/soc/arm64/qemu_cortex_a53/ @carlocaione
|
||||
/soc/arm64/bcm_vk/ @abhishek-brcm
|
||||
/soc/arm64/nxp_layerscape/ @JiafeiPan
|
||||
/soc/arm64/xenvm/ @lorc
|
||||
/soc/arm64/arm/ @povergoing
|
||||
/soc/arm64/arm/fvp_aemv8a/ @carlocaione
|
||||
/arch/x86/ @jhedberg @nashif @jenmwms @aasthagr
|
||||
/arch/nios2/ @nashif
|
||||
/arch/posix/ @aescolar @daor-oti
|
||||
/arch/riscv/ @kgugala @pgielda
|
||||
/soc/posix/ @aescolar @daor-oti
|
||||
/soc/riscv/ @kgugala @pgielda
|
||||
/soc/riscv/openisa*/ @dleach02
|
||||
/soc/riscv/riscv-privilege/andes_v5/ @cwshu @Teng-Shih-Wei
|
||||
/soc/x86/ @dcpleung @nashif @jenmwms @aasthagr
|
||||
/arch/xtensa/ @dcpleung @andyross @nashif
|
||||
/soc/xtensa/ @dcpleung @andyross @nashif
|
||||
/arch/sparc/ @martin-aberg
|
||||
/soc/sparc/ @martin-aberg
|
||||
/boards/arc/ @abrodkin @ruuddw @evgeniy-paltsev
|
||||
/boards/arm/ @MaureenHelm @galak
|
||||
/boards/arm/96b_argonkey/ @avisconti
|
||||
/boards/arm/96b_avenger96/ @Mani-Sadhasivam
|
||||
/boards/arm/96b_carbon/ @idlethread
|
||||
/boards/arm/96b_meerkat96/ @Mani-Sadhasivam
|
||||
/boards/arm/96b_nitrogen/ @idlethread
|
||||
/boards/arm/96b_neonkey/ @Mani-Sadhasivam
|
||||
/boards/arm/96b_stm32_sensor_mez/ @Mani-Sadhasivam
|
||||
/boards/arm/96b_wistrio/ @Mani-Sadhasivam
|
||||
/boards/arm/arduino_due/ @ioannisg
|
||||
/boards/arm/blackpill_f401ce/ @coderkalyan
|
||||
/boards/arm/blackpill_f411ce/ @coderkalyan
|
||||
/boards/arm/cc1352r1_launchxl/ @bwitherspoon
|
||||
/boards/arm/cc26x2r1_launchxl/ @bwitherspoon
|
||||
/boards/arm/cc3220sf_launchxl/ @vanti
|
||||
/boards/arm/cy8* @nandojve
|
||||
/boards/arm/disco_l475_iot1/ @erwango
|
||||
/boards/arm/efm32pg_stk3401a/ @rdmeneze
|
||||
/boards/arm/faze/ @mbittan @simonguinot
|
||||
/boards/arm/frdm*/ @mmahadevan108 @dleach02
|
||||
/boards/arm/frdm*/doc/ @dleach02 @MeganHansen
|
||||
/boards/arm/google_*/ @jackrosenthal
|
||||
/boards/arm/hexiwear*/ @mmahadevan108 @dleach02
|
||||
/boards/arm/hexiwear*/doc/ @dleach02 @MeganHansen
|
||||
/boards/arm/ip_k66f/ @parthitce @lmajewski
|
||||
/boards/arm/legend/ @mbittan @simonguinot
|
||||
/boards/arm/lpcxpresso*/ @mmahadevan108 @dleach02
|
||||
/boards/arm/lpcxpresso*/doc/ @dleach02 @MeganHansen
|
||||
/boards/arm/mimx8mm_evk/ @Mani-Sadhasivam
|
||||
/boards/arm/mimxrt*/ @mmahadevan108 @dleach02
|
||||
/boards/arm/mimxrt*/doc/ @dleach02 @MeganHansen
|
||||
/boards/arm/mps2_an385/ @fvincenzo
|
||||
/boards/arm/msp_exp432p401r_launchxl/ @Mani-Sadhasivam
|
||||
/boards/arm/npcx7m6fb_evb/ @MulinChao @WealianLiao @ChiHuaL
|
||||
/boards/arm/nrf*/ @carlescufi @lemrey @ioannisg
|
||||
/boards/arm/nucleo*/ @erwango @ABOSTM @FRASTM
|
||||
/boards/arm/nucleo_f401re/ @idlethread
|
||||
/boards/arm/nuvoton_pfm_m487/ @ssekar15
|
||||
/boards/arm/qemu_cortex_r*/ @stephanosio
|
||||
/boards/arm/qemu_cortex_m*/ @ioannisg
|
||||
/boards/arm/quick_feather/ @kowalewskijan @kgugala
|
||||
/boards/arm/rak4631_nrf52840/ @gpaquet85
|
||||
/boards/arm/rak5010_nrf52840/ @gpaquet85
|
||||
/boards/arm/ronoth_lodev/ @NorthernDean
|
||||
/boards/arm/xmc45_relax_kit/ @parthitce
|
||||
/boards/arm/sam4e_xpro/ @nandojve
|
||||
/boards/arm/sam4l_ek/ @nandojve
|
||||
/boards/arm/sam4s_xplained/ @fallrisk
|
||||
/boards/arm/sam_e70_xplained/ @nandojve
|
||||
/boards/arm/sam_v71_xult/ @nandojve
|
||||
/boards/arm/v2m_beetle/ @fvincenzo
|
||||
/boards/arm/olimexino_stm32/ @ydamigos
|
||||
/boards/arm/sensortile_box/ @avisconti
|
||||
/boards/arm/steval_fcu001v1/ @Navin-Sankar
|
||||
/boards/arm/stm32l1_disco/ @karlp
|
||||
/boards/arm/stm32*_disco/ @erwango @ABOSTM @FRASTM
|
||||
/boards/arm/stm32f3_disco/ @ydamigos
|
||||
/boards/arm/stm32*_eval/ @erwango @ABOSTM @FRASTM
|
||||
/boards/arm/rcar_h3ulcb/ @julien-massot
|
||||
/boards/arm/ubx_bmd345eval_nrf52840/ @Navin-Sankar @brec-u-blox
|
||||
/boards/common/ @mbolivar-nordic
|
||||
/boards/deprecated.cmake @tejlmand
|
||||
/boards/nios2/ @nashif
|
||||
/boards/nios2/altera_max10/ @nashif
|
||||
/boards/arm/stm32_min_dev/ @sidcha
|
||||
/boards/posix/ @aescolar @daor-oti
|
||||
/boards/posix/nrf52_bsim/ @aescolar @wopu-ot
|
||||
/boards/riscv/ @kgugala @pgielda
|
||||
/boards/riscv/rv32m1_vega/ @dleach02
|
||||
/boards/riscv/beaglev_starlight_jh7100/ @rajnesh-kanwal
|
||||
/boards/riscv/adp_xc7k_ae350/ @cwshu @Teng-Shih-Wei
|
||||
/boards/shields/ @erwango
|
||||
/boards/shields/atmel_rf2xx/ @nandojve
|
||||
/boards/shields/esp_8266/ @nandojve
|
||||
/boards/shields/inventek_eswifi/ @nandojve
|
||||
/boards/x86/ @dcpleung @nashif @jenmwms @aasthagr
|
||||
/boards/x86/acrn/ @enjiamai
|
||||
/boards/xtensa/ @nashif @dcpleung
|
||||
/boards/xtensa/intel_s1000_crb/ @sathishkuttan @dcpleung
|
||||
/boards/xtensa/odroid_go/ @ydamigos
|
||||
/boards/xtensa/nxp_adsp_imx8/ @iuliana-prodan @dbaluta
|
||||
/boards/sparc/ @martin-aberg
|
||||
/boards/arm64/qemu_cortex_a53/ @carlocaione
|
||||
/boards/arm64/bcm958402m2_a72/ @abhishek-brcm
|
||||
/boards/arm64/nxp_ls1046ardb/ @JiafeiPan
|
||||
/boards/arm64/xenvm/ @lorc
|
||||
/boards/arm64/fvp_baser_aemv8r/ @povergoing
|
||||
/boards/arm64/fvp_base_revc_2xaemv8a/ @carlocaione
|
||||
# All cmake related files
|
||||
/cmake/ @tejlmand @nashif
|
||||
/cmake/*/arcmwdt/ @abrodkin @evgeniy-paltsev @tejlmand
|
||||
/CMakeLists.txt @tejlmand @nashif
|
||||
/doc/ @dbkinder
|
||||
/doc/guides/coccinelle.rst @himanshujha199640 @JuliaLawall
|
||||
/doc/CMakeLists.txt @carlescufi
|
||||
/doc/_scripts/ @carlescufi
|
||||
/doc/guides/bluetooth/ @joerchan @jhedberg @Vudentz
|
||||
/doc/guides/dts/ @galak @mbolivar-nordic
|
||||
/doc/reference/bluetooth/ @joerchan @jhedberg @Vudentz
|
||||
/doc/reference/devicetree/ @galak @mbolivar-nordic
|
||||
/doc/reference/networking/can* @alexanderwachter
|
||||
/doc/security/ @ceolin @d3zd3z
|
||||
/drivers/debug/ @nashif
|
||||
/drivers/*/*sam4l* @nandojve
|
||||
/drivers/*/*cc13xx_cc26xx* @bwitherspoon
|
||||
/drivers/*/*litex* @mateusz-holenko @kgugala @pgielda
|
||||
/drivers/*/*mcux* @mmahadevan108 @dleach02
|
||||
/drivers/*/*stm32* @erwango @ABOSTM @FRASTM
|
||||
/drivers/*/*native_posix* @aescolar @daor-oti
|
||||
/drivers/*/*lpc11u6x* @mbittan @simonguinot
|
||||
/drivers/*/*npcx* @MulinChao @WealianLiao @ChiHuaL
|
||||
/drivers/*/*andes* @cwshu @Teng-Shih-Wei
|
||||
/drivers/adc/ @anangl
|
||||
/drivers/adc/adc_stm32.c @cybertale
|
||||
/drivers/audio/*nrfx* @anangl
|
||||
/drivers/bbram/* @yperess @sjg20 @jackrosenthal
|
||||
/drivers/bluetooth/ @joerchan @jhedberg @Vudentz
|
||||
/drivers/cache/ @carlocaione
|
||||
/drivers/syscon/ @carlocaione @yperess
|
||||
/drivers/can/ @alexanderwachter
|
||||
/drivers/can/*mcp2515* @karstenkoenig
|
||||
/drivers/can/*rcar* @julien-massot
|
||||
/drivers/clock_control/*nrf* @nordic-krch
|
||||
/drivers/clock_control/*esp32* @extremegtx
|
||||
/drivers/clock_control/*rcar* @julien-massot
|
||||
/drivers/counter/ @nordic-krch
|
||||
/drivers/console/ipm_console.c @finikorg
|
||||
/drivers/console/semihost_console.c @luozhongyao
|
||||
/drivers/counter/counter_cmos.c @dcpleung
|
||||
/drivers/crypto/*nrf_ecb* @maciekfabia @anangl
|
||||
/drivers/display/ @vanwinkeljan
|
||||
/drivers/display/display_framebuf.c @dcpleung
|
||||
/drivers/dac/ @martinjaeger
|
||||
/drivers/dma/*dw* @tbursztyka
|
||||
/drivers/dma/*sam0* @Sizurka
|
||||
/drivers/dma/dma_stm32* @cybertale @lowlander
|
||||
/drivers/dma/*pl330* @raveenp
|
||||
/drivers/dma/*iproc_pax* @raveenp
|
||||
/drivers/ec_host_cmd_periph/ @jettr
|
||||
/drivers/edac/ @finikorg
|
||||
/drivers/eeprom/ @henrikbrixandersen
|
||||
/drivers/eeprom/eeprom_stm32.c @KwonTae-young
|
||||
/drivers/entropy/*b91* @yurvyn
|
||||
/drivers/entropy/*rv32m1* @dleach02
|
||||
/drivers/entropy/*gecko* @chrta
|
||||
/drivers/entropy/*litex* @mateusz-holenko @kgugala @pgielda
|
||||
/drivers/espi/ @albertofloyd @franciscomunoz @scottwcpg
|
||||
/drivers/ethernet/ @tbursztyka @pfalcon
|
||||
/drivers/ethernet/*stm32* @Nukersson @lochej
|
||||
/drivers/ethernet/*w5500* @parthitce
|
||||
/drivers/ethernet/*xlnx_gem* @ibirnbaum
|
||||
/drivers/ethernet/phy/ @rlubos @tbursztyka @arvinf
|
||||
/drivers/mdio/ @rlubos @tbursztyka @arvinf
|
||||
/drivers/flash/ @nashif @nvlsianpu
|
||||
/drivers/flash/*b91* @yurvyn
|
||||
/drivers/flash/*nrf* @nvlsianpu
|
||||
/drivers/fpga/ @tgorochowik @kgugala
|
||||
/drivers/gpio/ @mnkp
|
||||
/drivers/gpio/*b91* @yurvyn
|
||||
/drivers/gpio/*lmp90xxx* @henrikbrixandersen
|
||||
/drivers/gpio/*stm32* @erwango
|
||||
/drivers/gpio/*eos_s3* @wtatarski @kowalewskijan @kgugala
|
||||
/drivers/gpio/*rcar* @julien-massot
|
||||
/drivers/gpio/*esp32* @glaubermaroto
|
||||
/drivers/hwinfo/ @alexanderwachter
|
||||
/drivers/i2c/i2c_common.c @sjg20
|
||||
/drivers/i2c/i2c_emul.c @sjg20
|
||||
/drivers/i2c/i2c_ite_it8xxx2.c @GTLin08
|
||||
/drivers/i2c/i2c_shell.c @nashif
|
||||
/drivers/i2c/Kconfig.i2c_emul @sjg20
|
||||
/drivers/i2c/Kconfig.it8xxx2 @GTLin08
|
||||
/drivers/i2c/slave/*eeprom* @henrikbrixandersen
|
||||
/drivers/i2c/Kconfig.test @mbolivar-nordic
|
||||
/drivers/i2c/i2c_test.c @mbolivar-nordic
|
||||
/drivers/i2c/*rcar* @aaillet
|
||||
/drivers/i2s/*litex* @mateusz-holenko @kgugala @pgielda
|
||||
/drivers/i2s/i2s_ll_stm32* @avisconti
|
||||
/drivers/i2s/*nrfx* @anangl
|
||||
/drivers/ieee802154/ @rlubos @tbursztyka
|
||||
/drivers/ieee802154/*b91* @yurvyn
|
||||
/drivers/ieee802154/ieee802154_rf2xx* @tbursztyka @nandojve
|
||||
/drivers/ieee802154/ieee802154_cc13xx* @bwitherspoon @cfriedt
|
||||
/drivers/interrupt_controller/ @dcpleung @nashif
|
||||
/drivers/interrupt_controller/intc_gic.c @stephanosio
|
||||
/drivers/interrupt_controller/*esp32* @glaubermaroto
|
||||
/drivers/ipm/ipm_mhu* @karl-zh
|
||||
/drivers/ipm/Kconfig.nrfx @masz-nordic @ioannisg
|
||||
/drivers/ipm/Kconfig.nrfx_ipc_channel @masz-nordic @ioannisg
|
||||
/drivers/ipm/ipm_intel_adsp.c @finikorg
|
||||
/drivers/ipm/ipm_cavs_idc* @dcpleung
|
||||
/drivers/ipm/ipm_nrfx_ipc.c @masz-nordic @ioannisg
|
||||
/drivers/ipm/ipm_nrfx_ipc.h @masz-nordic @ioannisg
|
||||
/drivers/ipm/ipm_stm32_ipcc.c @arnopo
|
||||
/drivers/ipm/ipm_stm32_hsem.c @cameled
|
||||
/drivers/kscan/ @VenkatKotakonda @franciscomunoz @scottwcpg
|
||||
/drivers/kscan/*xec* @franciscomunoz @scottwcpg
|
||||
/drivers/kscan/*ft5336* @MaureenHelm
|
||||
/drivers/kscan/*ht16k33* @henrikbrixandersen
|
||||
/drivers/led/ @Mani-Sadhasivam
|
||||
/drivers/led_strip/ @mbolivar-nordic
|
||||
/drivers/lora/ @Mani-Sadhasivam
|
||||
/drivers/memc/ @gmarull
|
||||
/drivers/misc/ @tejlmand
|
||||
/drivers/misc/ft8xx/ @hubertmis
|
||||
/drivers/modem/hl7800.c @LairdCP/zephyr
|
||||
/drivers/modem/Kconfig.hl7800 @LairdCP/zephyr
|
||||
/drivers/pcie/ @dcpleung @nashif @jhedberg
|
||||
/drivers/peci/ @albertofloyd @franciscomunoz @scottwcpg
|
||||
/drivers/pinmux/*b91* @yurvyn
|
||||
/drivers/pinmux/*hsdk* @iriszzw
|
||||
/drivers/pinmux/*it8xxx2* @ite
|
||||
/drivers/pinmux/*esp32* @glaubermaroto
|
||||
/drivers/pm_cpu_ops/ @carlocaione
|
||||
/drivers/ps2/ @franciscomunoz @scottwcpg
|
||||
/drivers/ps2/*xec* @franciscomunoz @scottwcpg
|
||||
/drivers/ps2/*npcx* @MulinChao @WealianLiao @ChiHuaL
|
||||
/drivers/pwm/*b91* @yurvyn
|
||||
/drivers/pwm/*rv32m1* @henrikbrixandersen
|
||||
/drivers/pwm/*sam0* @nzmichaelh
|
||||
/drivers/pwm/*stm32* @gmarull
|
||||
/drivers/pwm/*xlnx* @henrikbrixandersen
|
||||
/drivers/pwm/pwm_capture.c @henrikbrixandersen
|
||||
/drivers/pwm/pwm_shell.c @henrikbrixandersen
|
||||
/drivers/pwm/*gecko* @sun681
|
||||
/drivers/pwm/*it8xxx2* @RuibinChang
|
||||
/drivers/sensor/ @MaureenHelm
|
||||
/drivers/sensor/ams_iAQcore/ @alexanderwachter
|
||||
/drivers/sensor/ens210/ @alexanderwachter
|
||||
/drivers/sensor/hts*/ @avisconti
|
||||
/drivers/sensor/lis*/ @avisconti
|
||||
/drivers/sensor/lps*/ @avisconti
|
||||
/drivers/sensor/lsm*/ @avisconti
|
||||
/drivers/sensor/mpr/ @sven-hm
|
||||
/drivers/sensor/st*/ @avisconti
|
||||
/drivers/serial/*b91* @yurvyn
|
||||
/drivers/serial/uart_altera_jtag_hal.c @nashif
|
||||
/drivers/serial/*ns16550* @dcpleung @nashif @jenmwms @aasthagr
|
||||
/drivers/serial/*nrfx* @Mierunski @anangl
|
||||
/drivers/serial/uart_liteuart.c @mateusz-holenko @kgugala @pgielda
|
||||
/drivers/serial/Kconfig.mcux_iuart @Mani-Sadhasivam
|
||||
/drivers/serial/uart_mcux_iuart.c @Mani-Sadhasivam
|
||||
/drivers/serial/Kconfig.rtt @carlescufi @pkral78
|
||||
/drivers/serial/uart_rtt.c @carlescufi @pkral78
|
||||
/drivers/serial/Kconfig.xlnx @wjliang
|
||||
/drivers/serial/uart_xlnx_ps.c @wjliang
|
||||
/drivers/serial/uart_xlnx_uartlite.c @henrikbrixandersen
|
||||
/drivers/serial/*xmc4xxx* @parthitce
|
||||
/drivers/serial/*numicro* @ssekar15
|
||||
/drivers/serial/*apbuart* @martin-aberg
|
||||
/drivers/serial/*rcar* @aaillet
|
||||
/drivers/serial/Kconfig.test @str4t0m
|
||||
/drivers/serial/serial_test.c @str4t0m
|
||||
/drivers/serial/*esp32c3* @uLipe
|
||||
/drivers/serial/*esp32s2* @glaubermaroto
|
||||
/drivers/disk/ @jfischer-no
|
||||
/drivers/disk/sdmmc_sdhc.h @JunYangNXP
|
||||
/drivers/disk/sdmmc_spi.c @JunYangNXP
|
||||
/drivers/disk/usdhc.c @JunYangNXP
|
||||
/drivers/disk/sdmmc_stm32.c @anthonybrandon
|
||||
/drivers/net/ @rlubos @tbursztyka
|
||||
/drivers/ptp_clock/ @tbursztyka
|
||||
/drivers/spi/ @tbursztyka
|
||||
/drivers/spi/*b91* @yurvyn
|
||||
/drivers/spi/spi_rv32m1_lpspi* @karstenkoenig
|
||||
/drivers/timer/apic_timer.c @dcpleung @nashif
|
||||
/drivers/timer/apic_tsc.c @andyross
|
||||
/drivers/timer/arm_arch_timer.c @carlocaione
|
||||
/drivers/timer/cortex_m_systick.c @ioannisg
|
||||
/drivers/timer/altera_avalon_timer_hal.c @nashif
|
||||
/drivers/timer/riscv_machine_timer.c @kgugala @pgielda
|
||||
/drivers/timer/ite_it8xxx2_timer.c @ite
|
||||
/drivers/timer/xlnx_psttc_timer* @wjliang @stephanosio
|
||||
/drivers/timer/cc13x2_cc26x2_rtc_timer.c @vanti
|
||||
/drivers/timer/cavs_timer.c @dcpleung
|
||||
/drivers/timer/stm32_lptim_timer.c @FRASTM
|
||||
/drivers/timer/leon_gptimer.c @martin-aberg
|
||||
/drivers/timer/rcar_cmt_timer.c @julien-massot
|
||||
/drivers/timer/esp32c3_sys_timer.c @uLipe
|
||||
/drivers/usb/ @jfischer-no
|
||||
/drivers/usb/device/usb_dc_stm32.c @ydamigos @loicpoulain
|
||||
/drivers/video/ @loicpoulain
|
||||
/drivers/i2c/*b91* @yurvyn
|
||||
/drivers/i2c/i2c_ll_stm32* @ydamigos
|
||||
/drivers/i2c/i2c_rv32m1_lpi2c* @henrikbrixandersen
|
||||
/drivers/i2c/*sam0* @Sizurka
|
||||
/drivers/i2c/i2c_dw* @dcpleung
|
||||
/drivers/i2c/*tca9546a* @kurddt
|
||||
/drivers/*/*xec* @franciscomunoz @albertofloyd @scottwcpg
|
||||
/drivers/watchdog/*gecko* @oanerer
|
||||
/drivers/watchdog/*sifive* @katsuster
|
||||
/drivers/watchdog/wdt_handlers.c @dcpleung @nashif
|
||||
/drivers/watchdog/*cc32xx* @pavlohamov
|
||||
/drivers/watchdog/wdt_ite_it8xxx2.c @RuibinChang
|
||||
/drivers/watchdog/Kconfig.it8xxx2 @RuibinChang
|
||||
/drivers/wifi/ @rlubos @tbursztyka @pfalcon
|
||||
/drivers/wifi/esp_at/ @mniestroj
|
||||
/drivers/wifi/eswifi/ @loicpoulain @nandojve
|
||||
/drivers/wifi/winc1500/ @kludentwo
|
||||
/drivers/virtualization/ @tbursztyka
|
||||
/dts/arc/ @abrodkin @ruuddw @iriszzw @evgeniy-paltsev
|
||||
/dts/arm/acsip/ @NorthernDean
|
||||
/dts/arm/atmel/sam4e* @nandojve
|
||||
/dts/arm/atmel/sam4l* @nandojve
|
||||
/dts/arm/atmel/samr21.dtsi @benpicco
|
||||
/dts/arm/atmel/sam*5*.dtsi @benpicco
|
||||
/dts/arm/atmel/same70* @nandojve
|
||||
/dts/arm/atmel/samv71* @nandojve
|
||||
/dts/arm/atmel/ @galak
|
||||
/dts/arm/broadcom/ @sbranden
|
||||
/dts/arm/cypress/ @nandojve
|
||||
/dts/arm/infineon/ @parthitce
|
||||
/dts/arm64/ @carlocaione
|
||||
/dts/arm64/armv8-r.dtsi @povergoing
|
||||
/dts/arm64/nxp/ @JiafeiPan
|
||||
/dts/arm/quicklogic/ @wtatarski @kowalewskijan @kgugala
|
||||
/dts/arm/seeed/ @str4t0m
|
||||
/dts/arm/st/ @erwango
|
||||
/dts/arm/ti/cc13?2* @bwitherspoon
|
||||
/dts/arm/ti/cc26?2* @bwitherspoon
|
||||
/dts/arm/ti/cc3235* @vanti
|
||||
/dts/arm/nordic/ @ioannisg @carlescufi
|
||||
/dts/arm/nuvoton/ @ssekar15 @MulinChao @WealianLiao @ChiHuaL
|
||||
/dts/arm/nxp/ @mmahadevan108 @dleach02
|
||||
/dts/arm/microchip/ @franciscomunoz @albertofloyd @scottwcpg
|
||||
/dts/arm/silabs/efm32_pg_1b.dtsi @rdmeneze
|
||||
/dts/arm/silabs/efm32gg11b* @oanerer
|
||||
/dts/arm/silabs/efm32_jg_pg* @chrta
|
||||
/dts/arm/silabs/efr32bg13p* @mnkp
|
||||
/dts/arm/silabs/efr32xg13p* @mnkp
|
||||
/dts/arm/silabs/efm32jg12b* @chrta
|
||||
/dts/arm/silabs/efm32pg12b* @chrta
|
||||
/dts/arm/silabs/efm32pg1b* @rdmeneze
|
||||
/dts/arm/silabs/efr32mg21* @l-alfred
|
||||
/dts/arm/silabs/efr32fg13* @yonsch
|
||||
/dts/riscv/ @kgugala @pgielda
|
||||
/dts/riscv/it8xxx2.dtsi @ite
|
||||
/dts/riscv/microsemi-miv.dtsi @galak
|
||||
/dts/riscv/rv32m1* @dleach02
|
||||
/dts/riscv/riscv32-litex-vexriscv.dtsi @mateusz-holenko @kgugala @pgielda
|
||||
/dts/riscv/starfive/ @rajnesh-kanwal
|
||||
/dts/riscv/andes_v5* @cwshu @Teng-Shih-Wei
|
||||
/dts/arm/armv*m.dtsi @galak @ioannisg
|
||||
/dts/arm/armv7-r.dtsi @bbolen @stephanosio
|
||||
/dts/arm/xilinx/ @bbolen @stephanosio
|
||||
/dts/arm/renesas/ @julien-massot
|
||||
/dts/x86/ @jhedberg
|
||||
/dts/xtensa/xtensa.dtsi @ydamigos
|
||||
/dts/xtensa/intel/ @dcpleung
|
||||
/dts/xtensa/espressif/ @glaubermaroto
|
||||
/dts/xtensa/nxp/ @iuliana-prodan @dbaluta
|
||||
/dts/sparc/ @martin-aberg
|
||||
/dts/bindings/ @galak
|
||||
/dts/bindings/can/ @alexanderwachter
|
||||
/dts/bindings/i2c/zephyr*i2c-emul.yaml @sjg20
|
||||
/dts/bindings/adc/st*stm32-adc.yaml @cybertale
|
||||
/dts/bindings/modem/*hl7800.yaml @LairdCP/zephyr
|
||||
/dts/bindings/serial/ns16550.yaml @dcpleung @nashif
|
||||
/dts/bindings/wifi/*esp-at.yaml @mniestroj
|
||||
/dts/bindings/*/*npcx* @MulinChao @WealianLiao @ChiHuaL
|
||||
/dts/bindings/*/*psoc6* @nandojve
|
||||
/dts/bindings/*/nordic* @anangl
|
||||
/dts/bindings/*/nxp* @mmahadevan108 @dleach02
|
||||
/dts/bindings/*/openisa* @dleach02
|
||||
/dts/bindings/*/st* @erwango
|
||||
/dts/bindings/sensor/ams* @alexanderwachter
|
||||
/dts/bindings/*/sifive* @mateusz-holenko @kgugala @pgielda
|
||||
/dts/bindings/*/litex* @mateusz-holenko @kgugala @pgielda
|
||||
/dts/bindings/*/vexriscv* @mateusz-holenko @kgugala @pgielda
|
||||
/dts/bindings/*/andes* @cwshu @Teng-Shih-Wei
|
||||
/dts/bindings/pm_cpu_ops/* @carlocaione
|
||||
/dts/bindings/ethernet/*gem.yaml @ibirnbaum
|
||||
/dts/posix/ @aescolar @vanwinkeljan @daor-oti
|
||||
/dts/bindings/sensor/*bme680* @BoschSensortec
|
||||
/dts/bindings/sensor/st* @avisconti
|
||||
/dts/common/ @galak
|
||||
/include/ @nashif @carlescufi @galak @MaureenHelm
|
||||
/include/drivers/*/*litex* @mateusz-holenko @kgugala @pgielda
|
||||
/include/drivers/adc.h @anangl
|
||||
/include/drivers/can.h @alexanderwachter
|
||||
/include/drivers/counter.h @nordic-krch
|
||||
/include/drivers/dac.h @martinjaeger
|
||||
/include/drivers/display.h @vanwinkeljan
|
||||
/include/drivers/espi.h @albertofloyd @franciscomunoz @scottwcpg
|
||||
/include/drivers/bluetooth/ @joerchan @jhedberg @Vudentz
|
||||
/include/drivers/flash.h @nashif @carlescufi @galak @MaureenHelm @nvlsianpu
|
||||
/include/drivers/i2c_emul.h @sjg20
|
||||
/include/drivers/led/ht16k33.h @henrikbrixandersen
|
||||
/include/drivers/interrupt_controller/ @dcpleung @nashif
|
||||
/include/drivers/interrupt_controller/gic.h @stephanosio
|
||||
/include/drivers/modem/hl7800.h @LairdCP/zephyr
|
||||
/include/drivers/pcie/ @dcpleung
|
||||
/include/drivers/hwinfo.h @alexanderwachter
|
||||
/include/drivers/led.h @Mani-Sadhasivam
|
||||
/include/drivers/led_strip.h @mbolivar-nordic
|
||||
/include/drivers/sensor.h @MaureenHelm
|
||||
/include/drivers/spi.h @tbursztyka
|
||||
/include/drivers/lora.h @Mani-Sadhasivam
|
||||
/include/drivers/peci.h @albertofloyd @franciscomunoz @scottwcpg
|
||||
/include/drivers/pm_cpu_ops.h @carlocaione
|
||||
/include/drivers/pm_cpu_ops/ @carlocaione
|
||||
/include/app_memory/ @dcpleung
|
||||
/include/arch/arc/ @abrodkin @ruuddw @evgeniy-paltsev
|
||||
/include/arch/arc/arch.h @abrodkin @ruuddw @evgeniy-paltsev
|
||||
/include/arch/arc/v2/irq.h @abrodkin @ruuddw @evgeniy-paltsev
|
||||
/include/arch/arm/aarch32/ @MaureenHelm @galak @ioannisg
|
||||
/include/arch/arm/aarch32/cortex_a_r/ @stephanosio
|
||||
/include/arch/arm64/ @carlocaione
|
||||
/include/arch/arm64/cortex_r/ @povergoing
|
||||
/include/arch/arm/aarch32/irq.h @carlocaione
|
||||
/include/arch/nios2/ @nashif
|
||||
/include/arch/nios2/arch.h @nashif
|
||||
/include/arch/posix/ @aescolar @daor-oti
|
||||
/include/arch/riscv/ @kgugala @pgielda
|
||||
/include/arch/x86/ @jhedberg @dcpleung
|
||||
/include/arch/common/ @andyross @nashif
|
||||
/include/arch/xtensa/ @andyross @dcpleung
|
||||
/include/arch/sparc/ @martin-aberg
|
||||
/include/sys/atomic.h @andyross
|
||||
/include/bluetooth/ @joerchan @jhedberg @Vudentz
|
||||
/include/bluetooth/audio/ @joerchan @jhedberg @Vudentz @Thalley @asbjornsabo
|
||||
/include/cache.h @carlocaione @andyross
|
||||
/include/canbus/ @alexanderwachter
|
||||
/include/tracing/ @nashif
|
||||
/include/debug/ @nashif
|
||||
/include/debug/coredump.h @dcpleung
|
||||
/include/debug/gdbstub.h @ceolin
|
||||
/include/device.h @tbursztyka @nashif
|
||||
/include/devicetree.h @galak
|
||||
/include/display/ @vanwinkeljan
|
||||
/include/dt-bindings/clock/kinetis_mcg.h @henrikbrixandersen
|
||||
/include/dt-bindings/clock/kinetis_scg.h @henrikbrixandersen
|
||||
/include/dt-bindings/ethernet/xlnx_gem.h @ibirnbaum
|
||||
/include/dt-bindings/pcie/ @dcpleung
|
||||
/include/dt-bindings/pwm/*it8xxx2* @RuibinChang
|
||||
/include/dt-bindings/usb/usb.h @galak
|
||||
/include/drivers/emul.h @sjg20
|
||||
/include/fs/ @nashif @nvlsianpu @de-nordic
|
||||
/include/init.h @nashif @andyross
|
||||
/include/irq.h @dcpleung @nashif @andyross
|
||||
/include/irq_offload.h @dcpleung @nashif @andyross
|
||||
/include/kernel.h @dcpleung @nashif @andyross
|
||||
/include/kernel_version.h @dcpleung @nashif @andyross
|
||||
/include/linker/app_smem*.ld @dcpleung @nashif
|
||||
/include/linker/ @dcpleung @nashif @andyross
|
||||
/include/logging/ @nordic-krch
|
||||
/include/lorawan/lorawan.h @Mani-Sadhasivam
|
||||
/include/mgmt/osdp.h @sidcha
|
||||
/include/net/ @rlubos @tbursztyka @pfalcon
|
||||
/include/net/buf.h @jhedberg @tbursztyka @pfalcon @rlubos
|
||||
/include/net/coap*.h @rlubos
|
||||
/include/net/lwm2m*.h @rlubos
|
||||
/include/net/mqtt.h @rlubos
|
||||
/include/posix/ @pfalcon
|
||||
/include/pm/pm.h @nashif @ceolin
|
||||
/include/drivers/ptp_clock.h @tbursztyka
|
||||
/include/shared_irq.h @dcpleung @nashif @andyross
|
||||
/include/shell/ @jakub-uC @nordic-krch
|
||||
/include/sw_isr_table.h @dcpleung @nashif @andyross
|
||||
/include/sys_clock.h @dcpleung @nashif @andyross
|
||||
/include/sys/sys_io.h @dcpleung @nashif @andyross
|
||||
/include/sys/kobject.h @dcpleung @nashif
|
||||
/include/toolchain.h @dcpleung @andyross @nashif
|
||||
/include/toolchain/ @dcpleung @nashif @andyross
|
||||
/include/zephyr.h @dcpleung @nashif @andyross
|
||||
/kernel/ @dcpleung @nashif @andyross
|
||||
/lib/util/ @carlescufi @jakub-uC
|
||||
/lib/util/fnmatch/ @carlescufi @jakub-uC
|
||||
/lib/util/getopt/ @jakub-uC
|
||||
/lib/gui/ @vanwinkeljan
|
||||
/lib/open-amp/ @arnopo
|
||||
/lib/os/ @dcpleung @nashif @andyross
|
||||
/lib/os/cbprintf_packaged.c @npitre
|
||||
/lib/posix/ @pfalcon
|
||||
/subsys/portability/ @nashif
|
||||
/lib/libc/ @nashif
|
||||
/lib/libc/arcmwdt/ @abrodkin @ruuddw @evgeniy-paltsev
|
||||
/modules/ @nashif
|
||||
/modules/trusted-firmware-m/ @ioannisg @microbuilder
|
||||
/kernel/device.c @andyross @nashif
|
||||
/kernel/idle.c @andyross @nashif
|
||||
/samples/ @nashif
|
||||
/samples/basic/minimal/ @carlescufi
|
||||
/samples/basic/servo_motor/boards/*microbit* @jhe
|
||||
/samples/bluetooth/ @jhedberg @Vudentz @joerchan
|
||||
/samples/boards/intel_s1000_crb/ @sathishkuttan @dcpleung @nashif
|
||||
/samples/subsys/display/ @vanwinkeljan
|
||||
/samples/compression/ @Navin-Sankar
|
||||
/samples/drivers/can/ @alexanderwachter
|
||||
/samples/drivers/clock_control_litex/ @mateusz-holenko @kgugala @pgielda
|
||||
/samples/drivers/display/ @vanwinkeljan
|
||||
/samples/drivers/eeprom/ @henrikbrixandersen
|
||||
/samples/drivers/ht16k33/ @henrikbrixandersen
|
||||
/samples/drivers/lora/ @Mani-Sadhasivam
|
||||
/samples/subsys/lorawan/ @Mani-Sadhasivam
|
||||
/samples/net/ @rlubos @tbursztyka @pfalcon
|
||||
/samples/net/cloud/tagoio_http_post/ @nandojve
|
||||
/samples/net/dns_resolve/ @rlubos @tbursztyka @pfalcon
|
||||
/samples/net/lwm2m_client/ @rlubos
|
||||
/samples/net/mqtt_publisher/ @rlubos
|
||||
/samples/net/sockets/coap_*/ @rlubos
|
||||
/samples/net/sockets/ @rlubos @tbursztyka @pfalcon
|
||||
/samples/net/*civetweb* @Nukersson
|
||||
/samples/sensor/ @MaureenHelm
|
||||
/samples/shields/ @avisconti
|
||||
/samples/subsys/logging/ @nordic-krch @jakub-uC
|
||||
/samples/subsys/shell/ @jakub-uC @nordic-krch
|
||||
/samples/subsys/mgmt/mcumgr/smp_svr/ @aunsbjerg @nvlsianpu
|
||||
/samples/subsys/mgmt/updatehub/ @nandojve @otavio
|
||||
/samples/subsys/mgmt/osdp/ @sidcha
|
||||
/samples/subsys/usb/ @jfischer-no
|
||||
/samples/subsys/pm/ @nashif @ceolin
|
||||
/samples/tfm_integration/ @ioannisg @microbuilder
|
||||
/samples/userspace/ @dcpleung @nashif
|
||||
/scripts/release/bug_bash.py @cfriedt
|
||||
/scripts/coccicheck @himanshujha199640 @JuliaLawall
|
||||
/scripts/coccinelle/ @himanshujha199640 @JuliaLawall
|
||||
/scripts/coredump/ @dcpleung
|
||||
/scripts/footprint/ @nashif
|
||||
/scripts/kconfig/ @ulfalizer
|
||||
/scripts/logging/dictionary/ @dcpleung
|
||||
/scripts/pylib/twister/expr_parser.py @nashif
|
||||
/scripts/schemas/twister/ @nashif
|
||||
/scripts/gen_app_partitions.py @dcpleung @nashif
|
||||
/scripts/get_maintainer.py @nashif
|
||||
/scripts/dts/ @mbolivar-nordic @galak
|
||||
/scripts/release/ @nashif
|
||||
/scripts/ci/ @nashif
|
||||
/arch/x86/gen_gdt.py @dcpleung @nashif
|
||||
/arch/x86/gen_idt.py @dcpleung @nashif
|
||||
/scripts/gen_kobject_list.py @dcpleung @nashif
|
||||
/scripts/gen_kobject_placeholders.py @dcpleung
|
||||
/scripts/gen_syscalls.py @dcpleung @nashif
|
||||
/scripts/list_boards.py @mbolivar-nordic
|
||||
/scripts/process_gperf.py @dcpleung @nashif
|
||||
/scripts/gen_relocate_app.py @dcpleung
|
||||
/scripts/requirements*.txt @mbolivar-nordic @galak @nashif
|
||||
/scripts/tests/twister/ @aasthagr
|
||||
/scripts/tests/build/test_subfolder_list.py @rmstoi
|
||||
/scripts/tracing/ @nashif
|
||||
/scripts/pylib/twister/ @nashif
|
||||
/scripts/twister @nashif
|
||||
/scripts/series-push-hook.sh @erwango
|
||||
/scripts/west_commands/ @mbolivar-nordic
|
||||
/scripts/west-commands.yml @mbolivar-nordic
|
||||
/scripts/zephyr_module.py @tejlmand
|
||||
/scripts/uf2conv.py @petejohanson
|
||||
/scripts/user_wordsize.py @cfriedt
|
||||
/scripts/valgrind.supp @aescolar @daor-oti
|
||||
/share/zephyr-package/ @tejlmand
|
||||
/share/zephyrunittest-package/ @tejlmand
|
||||
/subsys/bluetooth/ @joerchan @jhedberg @Vudentz
|
||||
/subsys/bluetooth/audio/ @joerchan @jhedberg @Vudentz @Thalley @asbjornsabo
|
||||
/subsys/bluetooth/controller/ @carlescufi @cvinayak @thoh-ot @kruithofa
|
||||
/subsys/bluetooth/mesh/ @jhedberg @trond-snekvik @joerchan @Vudentz
|
||||
/subsys/canbus/ @alexanderwachter
|
||||
/subsys/cpp/ @vanwinkeljan
|
||||
/subsys/debug/ @nashif
|
||||
/subsys/debug/coredump/ @dcpleung
|
||||
/subsys/debug/gdbstub/ @ceolin
|
||||
/subsys/debug/gdbstub.c @ceolin
|
||||
/subsys/dfu/ @nvlsianpu
|
||||
/subsys/disk/ @jfischer-no
|
||||
/subsys/tracing/ @nashif
|
||||
/subsys/debug/asan_hacks.c @vanwinkeljan @aescolar @daor-oti
|
||||
/subsys/demand_paging/ @dcpleung @nashif
|
||||
/subsys/emul/ @sjg20
|
||||
/subsys/fb/ @jfischer-no
|
||||
/subsys/fs/ @nashif
|
||||
/subsys/fs/fcb/ @nvlsianpu
|
||||
/subsys/fs/fuse_fs_access.c @vanwinkeljan
|
||||
/subsys/fs/nvs/ @Laczen
|
||||
/subsys/ipc/ @ioannisg
|
||||
/subsys/logging/ @nordic-krch
|
||||
/subsys/logging/log_backend_net.c @nordic-krch @rlubos
|
||||
/subsys/lorawan/ @Mani-Sadhasivam
|
||||
/subsys/mgmt/ec_host_cmd/ @jettr
|
||||
/subsys/mgmt/mcumgr/ @carlescufi @nvlsianpu
|
||||
/subsys/mgmt/hawkbit/ @Navin-Sankar
|
||||
/subsys/mgmt/mcumgr/smp_udp.c @aunsbjerg
|
||||
/subsys/mgmt/updatehub/ @nandojve @otavio
|
||||
/subsys/mgmt/osdp/ @sidcha
|
||||
/subsys/modbus/ @jfischer-no
|
||||
/subsys/net/buf.c @jhedberg @tbursztyka @pfalcon @rlubos
|
||||
/subsys/net/ip/ @rlubos @tbursztyka @pfalcon
|
||||
/subsys/net/lib/ @rlubos @tbursztyka @pfalcon
|
||||
/subsys/net/lib/dns/ @rlubos @tbursztyka @pfalcon @cfriedt
|
||||
/subsys/net/lib/lwm2m/ @rlubos
|
||||
/subsys/net/lib/config/ @rlubos @tbursztyka @pfalcon
|
||||
/subsys/net/lib/mqtt/ @rlubos
|
||||
/subsys/net/lib/coap/ @rlubos
|
||||
/subsys/net/lib/sockets/socketpair.c @cfriedt
|
||||
/subsys/net/lib/sockets/ @rlubos @tbursztyka @pfalcon
|
||||
/subsys/net/lib/tls_credentials/ @rlubos
|
||||
/subsys/net/l2/ @rlubos @tbursztyka
|
||||
/subsys/net/l2/canbus/ @alexanderwachter
|
||||
/subsys/net/*/openthread/ @rlubos
|
||||
/subsys/pm/ @nashif @ceolin
|
||||
/subsys/random/ @dleach02
|
||||
/subsys/settings/ @nvlsianpu
|
||||
/subsys/shell/ @jakub-uC @nordic-krch
|
||||
/subsys/stats/ @nvlsianpu
|
||||
/subsys/storage/ @nvlsianpu
|
||||
/subsys/task_wdt/ @martinjaeger
|
||||
/subsys/testsuite/ @nashif
|
||||
/subsys/timing/ @nashif @dcpleung
|
||||
/subsys/usb/ @jfischer-no
|
||||
/subsys/usb/class/dfu/usb_dfu.c @nvlsianpu
|
||||
/tests/ @nashif
|
||||
/tests/arch/arm/ @ioannisg @stephanosio
|
||||
/tests/benchmarks/cmsis_dsp/ @stephanosio
|
||||
/tests/boards/native_posix/ @aescolar @daor-oti
|
||||
/tests/boards/intel_s1000_crb/ @dcpleung @sathishkuttan
|
||||
/tests/bluetooth/ @joerchan @jhedberg @Vudentz
|
||||
/tests/bluetooth/bsim_bt/ @joerchan @jhedberg @Vudentz @aescolar @wopu-ot
|
||||
/tests/bluetooth/bsim_bt/bsim_test_audio/ @joerchan @jhedberg @Vudentz @aescolar @wopu-ot @Thalley @asbjornsabo
|
||||
/tests/posix/ @pfalcon
|
||||
/tests/crypto/ @ceolin
|
||||
/tests/crypto/mbedtls/ @nashif @ceolin
|
||||
/tests/drivers/can/ @alexanderwachter
|
||||
/tests/drivers/counter/ @nordic-krch
|
||||
/tests/drivers/eeprom/ @henrikbrixandersen @sjg20
|
||||
/tests/drivers/flash_simulator/ @nvlsianpu
|
||||
/tests/drivers/gpio/ @mnkp
|
||||
/tests/drivers/hwinfo/ @alexanderwachter
|
||||
/tests/drivers/spi/ @tbursztyka
|
||||
/tests/drivers/uart/uart_async_api/ @Mierunski
|
||||
/tests/kernel/ @dcpleung @andyross @nashif
|
||||
/tests/lib/ @nashif
|
||||
/tests/lib/cmsis_dsp/ @stephanosio
|
||||
/tests/net/ @rlubos @tbursztyka @pfalcon
|
||||
/tests/net/buf/ @jhedberg @tbursztyka @pfalcon
|
||||
/tests/net/lib/ @rlubos @tbursztyka @pfalcon
|
||||
/tests/net/lib/http_header_fields/ @rlubos @tbursztyka
|
||||
/tests/net/lib/mqtt_packet/ @rlubos
|
||||
/tests/net/lib/coap/ @rlubos
|
||||
/tests/net/socket/socketpair/ @cfriedt
|
||||
/tests/net/socket/ @rlubos @tbursztyka @pfalcon
|
||||
/tests/subsys/debug/coredump/ @dcpleung
|
||||
/tests/subsys/fs/ @nashif @nvlsianpu @de-nordic
|
||||
/tests/subsys/settings/ @nvlsianpu
|
||||
/tests/subsys/shell/ @jakub-uC @nordic-krch
|
||||
# Get all docs reviewed
|
||||
*.rst @nashif
|
||||
/doc/reference/kernel/ @andyross @nashif
|
||||
*posix*.rst @aescolar @daor-oti
|
||||
@@ -1,78 +0,0 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
||||
level of experience, education, socio-economic status, nationality, personal
|
||||
appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at conduct@zephyrproject.org.
|
||||
Reports will be received by Kate Stewart (Linux Foundation) and Amy Occhialino
|
||||
(Intel). All complaints will be reviewed and investigated, and will result in a
|
||||
response that is deemed necessary and appropriate to the circumstances. The
|
||||
project team is obligated to maintain confidentiality with regard to the
|
||||
reporter of an incident. Further details of specific enforcement policies may
|
||||
be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see
|
||||
https://www.contributor-covenant.org/faq
|
||||
@@ -1,39 +0,0 @@
|
||||
Contribution Guidelines
|
||||
#######################
|
||||
|
||||
As an open-source project, we welcome and encourage the community to submit
|
||||
patches directly to the project. In our collaborative open source environment,
|
||||
standards and methods for submitting changes help reduce the chaos that can result
|
||||
from an active development community.
|
||||
|
||||
This document briefly summarizes the full `Contribution
|
||||
Guidelines <http://docs.zephyrproject.org/latest/contribute/index.html>`_
|
||||
documentation.
|
||||
|
||||
* Zephyr uses the permissive open source `Apache 2.0 license`_
|
||||
that allows you to freely use, modify, distribute and sell your own products
|
||||
that include Apache 2.0 licensed software.
|
||||
|
||||
* There are some imported or reused components of the Zephyr project that
|
||||
use other licensing and are clearly identified.
|
||||
|
||||
* The Developer Certificate of Origin (DCO) process is followed to
|
||||
ensure developers are following licensing criteria for their
|
||||
contributions, and documented with a ``Signed-off-by`` line in commits.
|
||||
|
||||
* Zephyr development workflow is supported on Linux, macOS, and Windows,
|
||||
(with a few exceptions).
|
||||
|
||||
* Source code for the project is maintained in the GitHub repo:
|
||||
https://github.com/zephyrproject-rtos/zephyr
|
||||
|
||||
* Issue and feature tracking is done using GitHub issues in this repo.
|
||||
|
||||
* A Continuous Integration (CI) system runs on every Pull Request (PR)
|
||||
to verify several aspects of the PR including Git commit formatting,
|
||||
Coding Style, sanity checks builds, and documentation builds.
|
||||
|
||||
* The `Zephyr devel mailing list`_ is a great place to engage with the
|
||||
community, ask questions, discuss issues, and help each other.
|
||||
|
||||
.. _Zephyr devel mailing list: https://lists.zephyrproject.org/g/devel
|
||||
123
Kbuild
Normal file
123
Kbuild
Normal file
@@ -0,0 +1,123 @@
|
||||
# vim: filetype=make
|
||||
|
||||
ifneq ("$(wildcard $(MDEF_FILE))","")
|
||||
MDEF_FILE_PATH=$(strip $(MDEF_FILE))
|
||||
else
|
||||
ifneq ($(MDEF_FILE),)
|
||||
MDEF_FILE_PATH=$(strip $(PROJECT_BASE)/$(MDEF_FILE))
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq (${CONFIG_NUM_COMMAND_PACKETS},)
|
||||
CONFIG_NUM_COMMAND_PACKETS=0
|
||||
endif
|
||||
ifeq (${CONFIG_NUM_TIMER_PACKETS},)
|
||||
CONFIG_NUM_TIMER_PACKETS=0
|
||||
endif
|
||||
ifeq (${CONFIG_NUM_TASK_PRIORITIES},)
|
||||
CONFIG_NUM_TASK_PRIORITIES=$(CONFIG_NUM_PREEMPT_PRIORITIES)
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),x86)
|
||||
TASKGROUP_SSE=" TASKGROUP SSE"
|
||||
endif
|
||||
|
||||
define filechk_prj.mdef
|
||||
(echo "% WARNING. THIS FILE IS AUTO-GENERATED. DO NOT MODIFY!"; \
|
||||
echo; \
|
||||
echo "% CONFIG NUM_COMMAND_PACKETS NUM_TIMER_PACKETS NUM_TASK_PRIORITIES"; \
|
||||
echo "% ============================================================="; \
|
||||
echo " CONFIG ${CONFIG_NUM_COMMAND_PACKETS} ${CONFIG_NUM_TIMER_PACKETS} ${CONFIG_NUM_TASK_PRIORITIES}"; \
|
||||
echo; \
|
||||
echo "% TASKGROUP NAME";\
|
||||
echo "% ==============";\
|
||||
echo " TASKGROUP EXE";\
|
||||
echo " TASKGROUP SYS";\
|
||||
echo " TASKGROUP FPU_LEGACY";\
|
||||
echo $(TASKGROUP_SSE);\
|
||||
echo; \
|
||||
if test -e "$(MDEF_FILE_PATH)"; then \
|
||||
cat $(MDEF_FILE_PATH); \
|
||||
fi;)
|
||||
endef
|
||||
|
||||
misc/generated/sysgen/prj.mdef: $(MDEF_FILE_PATH) \
|
||||
include/config/auto.conf FORCE
|
||||
$(call filechk,prj.mdef)
|
||||
|
||||
sysgen_cmd=$(strip \
|
||||
$(PYTHON) $(srctree)/scripts/sysgen \
|
||||
-i $(CURDIR)/misc/generated/sysgen/prj.mdef \
|
||||
-o $(CURDIR)/misc/generated/sysgen/ \
|
||||
)
|
||||
|
||||
misc/generated/sysgen/kernel_main.c: misc/generated/sysgen/prj.mdef \
|
||||
$(srctree)/scripts/sysgen
|
||||
$(Q)$(sysgen_cmd)
|
||||
|
||||
define filechk_configs.c
|
||||
(echo "/* file is auto-generated, do not modify ! */"; \
|
||||
echo; \
|
||||
echo "#include <toolchain.h>"; \
|
||||
echo; \
|
||||
echo "GEN_ABS_SYM_BEGIN (_ConfigAbsSyms)"; \
|
||||
echo; \
|
||||
cat $(CURDIR)/include/generated/autoconf.h | sed \
|
||||
's/".*"/1/' | awk \
|
||||
'/#define/{printf "GEN_ABSOLUTE_SYM(%s, %s);\n", $$2, $$3}'; \
|
||||
echo; \
|
||||
echo "GEN_ABS_SYM_END";)
|
||||
endef
|
||||
|
||||
misc/generated/configs.c: include/config/auto.conf FORCE
|
||||
$(call filechk,configs.c)
|
||||
|
||||
targets := misc/generated/configs.c
|
||||
targets += include/generated/offsets.h
|
||||
|
||||
|
||||
always := misc/generated/configs.c
|
||||
always += include/generated/offsets.h
|
||||
|
||||
ifeq ($(CONFIG_MDEF),y)
|
||||
targets += misc/generated/sysgen/kernel_main.c
|
||||
always += misc/generated/sysgen/kernel_main.c
|
||||
endif
|
||||
|
||||
define rule_cc_o_c_1
|
||||
$(call echo-cmd,cc_o_c_1) $(cmd_cc_o_c_1);
|
||||
endef
|
||||
|
||||
OFFSETS_INCLUDE = $(strip \
|
||||
-include $(CURDIR)/include/generated/autoconf.h \
|
||||
-I $(srctree)/include \
|
||||
-I $(CURDIR)/include/generated \
|
||||
-I $(srctree)/kernel/unified/include \
|
||||
$(OFFSETS_INCLUDE_KERNEL_LOCATION) \
|
||||
-I $(srctree)/lib/libc/minimal/include \
|
||||
-I $(srctree)/arch/${ARCH}/include )
|
||||
|
||||
cmd_cc_o_c_1 = $(CC) $(KBUILD_CFLAGS) $(OFFSETS_INCLUDE) -c -o $@ $<
|
||||
|
||||
arch/$(ARCH)/core/offsets/offsets.o: arch/$(ARCH)/core/offsets/offsets.c $(KCONFIG_CONFIG)
|
||||
$(Q)mkdir -p $(dir $@)
|
||||
$(call if_changed,cc_o_c_1)
|
||||
|
||||
|
||||
define offsetchk
|
||||
$(Q)set -e; \
|
||||
$(kecho) ' CHK $@'; \
|
||||
mkdir -p $(dir $@); \
|
||||
$(GENOFFSET_H) -i $(1) -o $@.tmp; \
|
||||
if [ -r $@ ] && cmp -s $@ $@.tmp; then \
|
||||
rm -f $@.tmp; \
|
||||
else \
|
||||
$(kecho) ' UPD $@'; \
|
||||
mv -f $@.tmp $@; \
|
||||
fi
|
||||
endef
|
||||
|
||||
include/generated/offsets.h: arch/$(ARCH)/core/offsets/offsets.o \
|
||||
include/config/auto.conf FORCE
|
||||
$(call offsetchk,arch/$(ARCH)/core/offsets/offsets.o)
|
||||
|
||||
18
Kconfig
18
Kconfig
@@ -1,8 +1,20 @@
|
||||
# General configuration options
|
||||
# Kconfig - general configuration options
|
||||
|
||||
#
|
||||
# Copyright (c) 2014-2015 Wind River Systems, Inc.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
mainmenu "Zephyr Kernel Configuration"
|
||||
|
||||
source "Kconfig.zephyr"
|
||||
|
||||
724
Kconfig.zephyr
724
Kconfig.zephyr
@@ -1,699 +1,49 @@
|
||||
# General configuration options
|
||||
# Kconfig - general configuration options
|
||||
|
||||
#
|
||||
# Copyright (c) 2014-2015 Wind River Systems, Inc.
|
||||
# Copyright (c) 2016 Intel Corporation
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
|
||||
# Include Kconfig.defconfig files first so that they can override defaults and
|
||||
# other symbol/choice properties by adding extra symbol/choice definitions.
|
||||
# After merging all definitions for a symbol/choice, Kconfig picks the first
|
||||
# property (e.g. the first default) with a satisfied condition.
|
||||
#
|
||||
# Shield defaults should have precedence over board defaults, which should have
|
||||
# precedence over SoC defaults, so include them in that order.
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# $ARCH and $BOARD_DIR will be glob patterns when building documentation.
|
||||
# This loads custom shields defconfigs (from BOARD_ROOT)
|
||||
osource "$(KCONFIG_BINARY_DIR)/Kconfig.shield.defconfig"
|
||||
# This loads Zephyr base shield defconfigs
|
||||
source "boards/shields/*/Kconfig.defconfig"
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
config KERNELVERSION
|
||||
string
|
||||
option env="KERNELVERSION"
|
||||
|
||||
source "$(BOARD_DIR)/Kconfig.defconfig"
|
||||
|
||||
# This loads custom SoC root defconfigs
|
||||
osource "$(KCONFIG_BINARY_DIR)/Kconfig.soc.defconfig"
|
||||
# This loads Zephyr base SoC root defconfigs
|
||||
osource "soc/$(ARCH)/*/Kconfig.defconfig"
|
||||
# This loads the toolchain defconfigs
|
||||
osource "$(TOOLCHAIN_KCONFIG_DIR)/Kconfig.defconfig"
|
||||
|
||||
menu "Modules"
|
||||
|
||||
source "modules/Kconfig"
|
||||
|
||||
endmenu
|
||||
|
||||
source "boards/Kconfig"
|
||||
source "soc/Kconfig"
|
||||
source "arch/Kconfig"
|
||||
|
||||
source "kernel/Kconfig"
|
||||
source "dts/Kconfig"
|
||||
|
||||
source "drivers/Kconfig"
|
||||
|
||||
source "net/Kconfig"
|
||||
|
||||
source "misc/Kconfig"
|
||||
|
||||
source "lib/Kconfig"
|
||||
|
||||
source "subsys/Kconfig"
|
||||
|
||||
osource "$(TOOLCHAIN_KCONFIG_DIR)/Kconfig"
|
||||
|
||||
menu "Build and Link Features"
|
||||
|
||||
menu "Linker Options"
|
||||
|
||||
choice
|
||||
prompt "Linker Orphan Section Handling"
|
||||
default LINKER_ORPHAN_SECTION_WARN
|
||||
|
||||
config LINKER_ORPHAN_SECTION_PLACE
|
||||
bool "Place"
|
||||
help
|
||||
Linker puts orphan sections in place without warnings
|
||||
or errors.
|
||||
|
||||
config LINKER_ORPHAN_SECTION_WARN
|
||||
bool "Warn"
|
||||
help
|
||||
Linker places the orphan sections in output and issues
|
||||
warning about those sections.
|
||||
|
||||
config LINKER_ORPHAN_SECTION_ERROR
|
||||
bool "Error"
|
||||
help
|
||||
Linker exits with error when an orphan section is found.
|
||||
|
||||
endchoice
|
||||
|
||||
config HAS_FLASH_LOAD_OFFSET
|
||||
bool
|
||||
help
|
||||
This option is selected by targets having a FLASH_LOAD_OFFSET
|
||||
and FLASH_LOAD_SIZE.
|
||||
|
||||
if HAS_FLASH_LOAD_OFFSET
|
||||
|
||||
config USE_DT_CODE_PARTITION
|
||||
bool "Link application into /chosen/zephyr,code-partition from devicetree"
|
||||
help
|
||||
When enabled, the application will be linked into the flash partition
|
||||
selected by the zephyr,code-partition property in /chosen in devicetree.
|
||||
When this is disabled, the flash load offset and size can be set manually
|
||||
below.
|
||||
|
||||
# Workaround for not being able to have commas in macro arguments
|
||||
DT_CHOSEN_Z_CODE_PARTITION := zephyr,code-partition
|
||||
|
||||
config FLASH_LOAD_OFFSET
|
||||
# Only user-configurable when USE_DT_CODE_PARTITION is disabled
|
||||
hex "Kernel load offset" if !USE_DT_CODE_PARTITION
|
||||
default $(dt_chosen_reg_addr_hex,$(DT_CHOSEN_Z_CODE_PARTITION)) if USE_DT_CODE_PARTITION
|
||||
default 0
|
||||
help
|
||||
This option specifies the byte offset from the beginning of flash that
|
||||
the kernel should be loaded into. Changing this value from zero will
|
||||
affect the Zephyr image's link, and will decrease the total amount of
|
||||
flash available for use by application code.
|
||||
|
||||
If unsure, leave at the default value 0.
|
||||
|
||||
config FLASH_LOAD_SIZE
|
||||
# Only user-configurable when USE_DT_CODE_PARTITION is disabled
|
||||
hex "Kernel load size" if !USE_DT_CODE_PARTITION
|
||||
default $(dt_chosen_reg_size_hex,$(DT_CHOSEN_Z_CODE_PARTITION)) if USE_DT_CODE_PARTITION
|
||||
default 0
|
||||
help
|
||||
If non-zero, this option specifies the size, in bytes, of the flash
|
||||
area that the Zephyr image will be allowed to occupy. If zero, the
|
||||
image will be able to occupy from the FLASH_LOAD_OFFSET to the end of
|
||||
the device.
|
||||
|
||||
If unsure, leave at the default value 0.
|
||||
|
||||
endif # HAS_FLASH_LOAD_OFFSET
|
||||
|
||||
config ROM_START_OFFSET
|
||||
hex
|
||||
prompt "ROM start offset" if !BOOTLOADER_MCUBOOT
|
||||
default 0x200 if BOOTLOADER_MCUBOOT
|
||||
default 0
|
||||
help
|
||||
If the application is built for chain-loading by a bootloader this
|
||||
variable is required to be set to value that leaves sufficient
|
||||
space between the beginning of the image and the start of the first
|
||||
section to store an image header or any other metadata.
|
||||
In the particular case of the MCUboot bootloader this reserves enough
|
||||
space to store the image header, which should also meet vector table
|
||||
alignment requirements on most ARM targets, although some targets
|
||||
may require smaller or larger values.
|
||||
|
||||
config LD_LINKER_SCRIPT_SUPPORTED
|
||||
bool
|
||||
default y
|
||||
|
||||
choice LINKER_SCRIPT
|
||||
prompt "Linker script"
|
||||
default LD_LINKER_TEMPLATE if LD_LINKER_SCRIPT_SUPPORTED
|
||||
|
||||
config LD_LINKER_TEMPLATE
|
||||
bool "LD template"
|
||||
depends on LD_LINKER_SCRIPT_SUPPORTED
|
||||
help
|
||||
Select this option to use the LD linker script templates.
|
||||
The templates are pre-processed by the C pre-processor to create the
|
||||
final LD linker script.
|
||||
|
||||
config CMAKE_LINKER_GENERATOR
|
||||
bool "CMake generator"
|
||||
depends on ARM
|
||||
help
|
||||
Select this option to use the Zephyr CMake linker script generator.
|
||||
The linker configuration is written in CMake and the final linker
|
||||
script will be generated by the toolchain specific linker generator.
|
||||
For LD based linkers, this will be the ld generator, for ARMClang /
|
||||
armlink based linkers it will be the scatter generator.
|
||||
|
||||
endchoice
|
||||
|
||||
config HAVE_CUSTOM_LINKER_SCRIPT
|
||||
bool "Custom linker script provided"
|
||||
help
|
||||
Set this option if you have a custom linker script which needed to
|
||||
be define in CUSTOM_LINKER_SCRIPT.
|
||||
|
||||
config CUSTOM_LINKER_SCRIPT
|
||||
string "Path to custom linker script"
|
||||
depends on HAVE_CUSTOM_LINKER_SCRIPT
|
||||
help
|
||||
Path to the linker script to be used instead of the one define by the
|
||||
board.
|
||||
|
||||
The linker script must be based on a version provided by Zephyr since
|
||||
the kernel can expect a certain layout/certain regions.
|
||||
|
||||
This is useful when an application needs to add sections into the
|
||||
linker script and avoid having to change the script provided by
|
||||
Zephyr.
|
||||
|
||||
config KERNEL_ENTRY
|
||||
string "Kernel entry symbol"
|
||||
default "__start"
|
||||
help
|
||||
Code entry symbol, to be set at linking phase.
|
||||
|
||||
config LINKER_SORT_BY_ALIGNMENT
|
||||
bool "Sort input sections by alignment"
|
||||
default y
|
||||
help
|
||||
This turns on the linker flag to sort sections by alignment
|
||||
in decreasing size of symbols. This helps to minimize
|
||||
padding between symbols.
|
||||
|
||||
config SRAM_VECTOR_TABLE
|
||||
bool "Place the vector table in SRAM instead of flash"
|
||||
help
|
||||
The option specifies that the vector table should be placed at the
|
||||
start of SRAM instead of the start of flash.
|
||||
|
||||
config HAS_SRAM_OFFSET
|
||||
bool
|
||||
help
|
||||
This option is selected by targets that require SRAM_OFFSET.
|
||||
|
||||
config SRAM_OFFSET
|
||||
hex "Kernel SRAM offset" if HAS_SRAM_OFFSET
|
||||
default 0
|
||||
help
|
||||
This option specifies the byte offset from the beginning of SRAM
|
||||
where the kernel begins. Changing this value from zero will affect
|
||||
the Zephyr image's link, and will decrease the total amount of
|
||||
SRAM available for use by application code.
|
||||
|
||||
If unsure, leave at the default value 0.
|
||||
|
||||
menu "Linker Sections"
|
||||
|
||||
config LINKER_USE_BOOT_SECTION
|
||||
bool "Enable Usage of Boot Linker Section"
|
||||
help
|
||||
If enabled, the symbols which are needed for the boot process
|
||||
will be put into another linker section reserved for these
|
||||
symbols.
|
||||
|
||||
Requires that boot sections exist in the architecture, SoC,
|
||||
board or custom linker script.
|
||||
|
||||
config LINKER_USE_PINNED_SECTION
|
||||
bool "Enable Usage of Pinned Linker Section"
|
||||
help
|
||||
If enabled, the symbols which need to be pinned in memory
|
||||
will be put into another linker section reserved for pinned
|
||||
symbols. During boot, the corresponding memory will be marked
|
||||
as pinned.
|
||||
|
||||
Requires that pinned sections exist in the architecture, SoC,
|
||||
board or custom linker script.
|
||||
|
||||
config LINKER_GENERIC_SECTIONS_PRESENT_AT_BOOT
|
||||
bool "Generic sections are present at boot" if DEMAND_PAGING && LINKER_USE_PINNED_SECTION
|
||||
default y
|
||||
help
|
||||
When disabled, the linker sections other than the boot and
|
||||
pinned sections will be marked as not present in the page
|
||||
tables. This allows kernel to pull in data pages on demand
|
||||
as required by current execution context when demand paging
|
||||
is enabled. There is no need to load all code and data into
|
||||
memory at once.
|
||||
|
||||
If unsure, say Y.
|
||||
|
||||
endmenu # "Linker Sections"
|
||||
|
||||
endmenu
|
||||
|
||||
menu "Compiler Options"
|
||||
|
||||
config CODING_GUIDELINE_CHECK
|
||||
bool "Enforce coding guideline rules"
|
||||
help
|
||||
Use available compiler flags to check coding guideline rules during
|
||||
the build.
|
||||
|
||||
config NATIVE_APPLICATION
|
||||
bool "Build as a native host application"
|
||||
help
|
||||
Build as a native application that can run on the host and using
|
||||
resources and libraries provided by the host.
|
||||
|
||||
choice
|
||||
prompt "Optimization level"
|
||||
default NO_OPTIMIZATIONS if COVERAGE
|
||||
default DEBUG_OPTIMIZATIONS if DEBUG
|
||||
default SIZE_OPTIMIZATIONS
|
||||
help
|
||||
Note that these flags shall only control the compiler
|
||||
optimization level, and that no extra debug code shall be
|
||||
conditionally compiled based on them.
|
||||
|
||||
config SIZE_OPTIMIZATIONS
|
||||
bool "Optimize for size"
|
||||
help
|
||||
Compiler optimizations will be set to -Os independently of other
|
||||
options.
|
||||
|
||||
config SPEED_OPTIMIZATIONS
|
||||
bool "Optimize for speed"
|
||||
help
|
||||
Compiler optimizations will be set to -O2 independently of other
|
||||
options.
|
||||
|
||||
config DEBUG_OPTIMIZATIONS
|
||||
bool "Optimize debugging experience"
|
||||
help
|
||||
Compiler optimizations will be set to -Og independently of other
|
||||
options.
|
||||
|
||||
config NO_OPTIMIZATIONS
|
||||
bool "Optimize nothing"
|
||||
help
|
||||
Compiler optimizations will be set to -O0 independently of other
|
||||
options.
|
||||
|
||||
endchoice
|
||||
|
||||
config COMPILER_COLOR_DIAGNOSTICS
|
||||
bool "Enable colored diganostics"
|
||||
default y
|
||||
help
|
||||
Compiler diagnostic messages are colorized.
|
||||
|
||||
config COMPILER_OPT
|
||||
string "Custom compiler options"
|
||||
help
|
||||
This option is a free-form string that is passed to the compiler
|
||||
when building all parts of a project (i.e. kernel).
|
||||
The compiler options specified by this string supplement the
|
||||
predefined set of compiler supplied by the build system,
|
||||
and can be used to change compiler optimization, warning and error
|
||||
messages, and so on.
|
||||
|
||||
config MISRA_SANE
|
||||
bool "MISRA standards compliance features"
|
||||
help
|
||||
Causes the source code to build in "MISRA" mode, which
|
||||
disallows some otherwise-permitted features of the C
|
||||
standard for safety reasons. Specifically variable length
|
||||
arrays are not permitted (and gcc will enforce this).
|
||||
|
||||
endmenu
|
||||
|
||||
choice
|
||||
prompt "Error checking behavior for CHECK macro"
|
||||
default RUNTIME_ERROR_CHECKS
|
||||
|
||||
config ASSERT_ON_ERRORS
|
||||
bool "Assert on all errors"
|
||||
help
|
||||
Assert on errors covered with the CHECK macro.
|
||||
|
||||
config NO_RUNTIME_CHECKS
|
||||
bool "No runtime error checks"
|
||||
help
|
||||
Do not do any runtime checks or asserts when using the CHECK macro.
|
||||
|
||||
config RUNTIME_ERROR_CHECKS
|
||||
bool "Enable runtime error checks"
|
||||
help
|
||||
Always perform runtime checks covered with the CHECK macro. This
|
||||
option is the default and the only option used during testing.
|
||||
|
||||
endchoice
|
||||
|
||||
menu "Build Options"
|
||||
|
||||
config KERNEL_BIN_NAME
|
||||
string "The kernel binary name"
|
||||
default "zephyr"
|
||||
help
|
||||
This option sets the name of the generated kernel binary.
|
||||
|
||||
config OUTPUT_STAT
|
||||
bool "Create a statistics file"
|
||||
default y
|
||||
help
|
||||
Create a stat file using readelf -e <elf>
|
||||
|
||||
config OUTPUT_DISASSEMBLY
|
||||
bool "Create a disassembly file"
|
||||
default y
|
||||
help
|
||||
Create an .lst file with the assembly listing of the firmware.
|
||||
|
||||
config OUTPUT_DISASSEMBLE_ALL
|
||||
bool "Disassemble all sections with source. Fill zeros."
|
||||
default n
|
||||
depends on OUTPUT_DISASSEMBLY
|
||||
help
|
||||
The .lst file will contain complete disassembly of the firmware
|
||||
not just those expected to contain instructions including zeros
|
||||
|
||||
config OUTPUT_PRINT_MEMORY_USAGE
|
||||
bool "Print memory usage to stdout"
|
||||
default y
|
||||
help
|
||||
If the toolchain supports it, this option will pass
|
||||
--print-memory-region to the linker when it is doing it's first
|
||||
linker pass. Note that the memory regions are symbolic concepts
|
||||
defined by the linker scripts and do not necessarily map
|
||||
directly to the real physical address space. Take also note that
|
||||
some platforms do two passes of the linker so the results do not
|
||||
match exactly to the final elf file. See also rom_report,
|
||||
ram_report and
|
||||
https://sourceware.org/binutils/docs/ld/MEMORY.html
|
||||
|
||||
config CLEANUP_INTERMEDIATE_FILES
|
||||
bool "Remove all intermediate files"
|
||||
help
|
||||
Delete intermediate files to save space and cleanup clutter resulting
|
||||
from the build process.
|
||||
|
||||
config BUILD_NO_GAP_FILL
|
||||
bool "Don't fill gaps in generated hex/bin/s19 files."
|
||||
|
||||
config BUILD_OUTPUT_HEX
|
||||
bool "Build a binary in HEX format"
|
||||
help
|
||||
Build an Intel HEX binary zephyr/zephyr.hex in the build directory.
|
||||
The name of this file can be customized with CONFIG_KERNEL_BIN_NAME.
|
||||
|
||||
config BUILD_OUTPUT_BIN
|
||||
bool "Build a binary in BIN format"
|
||||
default y
|
||||
help
|
||||
Build a "raw" binary zephyr/zephyr.bin in the build directory.
|
||||
The name of this file can be customized with CONFIG_KERNEL_BIN_NAME.
|
||||
|
||||
config BUILD_OUTPUT_EFI
|
||||
bool "Build as an EFI application"
|
||||
default n
|
||||
depends on X86_64
|
||||
help
|
||||
Build as an EFI application.
|
||||
|
||||
This works by creating a "zephyr.efi" EFI binary containing a zephyr
|
||||
image extracted from a built zephyr.elf file. EFI applications are
|
||||
relocatable, and cannot be placed at specific locations in memory.
|
||||
Instead, the stub code will copy the embedded zephyr sections to the
|
||||
appropriate locations at startup, clear any zero-filled (BSS, etc...)
|
||||
areas, then jump into the 64 bit entry point.
|
||||
|
||||
config BUILD_OUTPUT_EXE
|
||||
bool "Build a binary in ELF format with .exe extension"
|
||||
help
|
||||
Build an ELF binary that can run in the host system at
|
||||
zephyr/zephyr.exe in the build directory.
|
||||
The name of this file can be customized with CONFIG_KERNEL_BIN_NAME.
|
||||
|
||||
config BUILD_OUTPUT_S19
|
||||
bool "Build a binary in S19 format"
|
||||
help
|
||||
Build an S19 binary zephyr/zephyr.s19 in the build directory.
|
||||
The name of this file can be customized with CONFIG_KERNEL_BIN_NAME.
|
||||
|
||||
config BUILD_OUTPUT_UF2
|
||||
bool "Build a binary in UF2 format"
|
||||
depends on BUILD_OUTPUT_BIN
|
||||
help
|
||||
Build a UF2 binary zephyr/zephyr.uf2 in the build directory.
|
||||
The name of this file can be customized with CONFIG_KERNEL_BIN_NAME.
|
||||
|
||||
if BUILD_OUTPUT_UF2
|
||||
|
||||
config BUILD_OUTPUT_UF2_FAMILY_ID
|
||||
string "UF2 device family ID"
|
||||
default "0x1c5f21b0" if SOC_ESP32
|
||||
default "0xada52840" if SOC_NRF52840_QIAA
|
||||
default "0x4fb2d5bd" if SOC_SERIES_IMX_RT
|
||||
default "0x2abc77ec" if SOC_SERIES_LPC55XXX
|
||||
default "0x68ed2b88" if SOC_SERIES_SAMD21
|
||||
default "0x55114460" if SOC_SERIES_SAMD51
|
||||
default "0x647824b6" if SOC_SERIES_STM32F0X
|
||||
default "0x5d1a0a2e" if SOC_SERIES_STM32F2X
|
||||
default "0x6b846188" if SOC_SERIES_STM32F3X
|
||||
default "0x53b80f00" if SOC_SERIES_STM32F7X
|
||||
default "0x300f5633" if SOC_SERIES_STM32G0X
|
||||
default "0x4c71240a" if SOC_SERIES_STM32G4X
|
||||
default "0x6db66082" if SOC_SERIES_STM32H7X
|
||||
default "0x202e3a91" if SOC_SERIES_STM32L0X
|
||||
default "0x1e1f432d" if SOC_SERIES_STM32L1X
|
||||
default "0x00ff6919" if SOC_SERIES_STM32L4X
|
||||
default "0x04240bdf" if SOC_SERIES_STM32L5X
|
||||
default "0x70d16653" if SOC_SERIES_STM32WBX
|
||||
default "0x5ee21072" if SOC_STM32F103XE
|
||||
default "0x57755a57" if SOC_STM32F401XC || SOC_STM32F401XE
|
||||
default "0x6d0922fa" if SOC_STM32F407XE
|
||||
default "0x8fb060fe" if SOC_STM32F407XG
|
||||
help
|
||||
UF2 bootloaders only accept UF2 files with a matching family ID.
|
||||
This can be either a hex, e.g. 0x68ed2b88, or well-known family
|
||||
name string. If the SoC in use is known by UF2, the Family ID will
|
||||
be pre-filled with the known value.
|
||||
|
||||
endif # BUILD_OUTPUT_UF2
|
||||
|
||||
config BUILD_OUTPUT_STRIPPED
|
||||
bool "Build a stripped binary"
|
||||
help
|
||||
Build a stripped binary zephyr/zephyr.strip in the build directory.
|
||||
The name of this file can be customized with CONFIG_KERNEL_BIN_NAME.
|
||||
|
||||
config APPLICATION_DEFINED_SYSCALL
|
||||
bool "Scan application folder for any syscall definition"
|
||||
help
|
||||
Scan additional folders inside application source folder
|
||||
for application defined syscalls.
|
||||
|
||||
config MAKEFILE_EXPORTS
|
||||
bool "Generate build metadata files named Makefile.exports"
|
||||
help
|
||||
Generates a file with build information that can be read by
|
||||
third party Makefile-based build systems.
|
||||
|
||||
endmenu
|
||||
endmenu
|
||||
|
||||
|
||||
menu "Boot Options"
|
||||
|
||||
config IS_BOOTLOADER
|
||||
bool "Act as a bootloader"
|
||||
depends on XIP
|
||||
depends on ARM
|
||||
help
|
||||
This option indicates that Zephyr will act as a bootloader to execute
|
||||
a separate Zephyr image payload.
|
||||
|
||||
config BOOTLOADER_SRAM_SIZE
|
||||
int "SRAM reserved for bootloader"
|
||||
default 16
|
||||
depends on !XIP || IS_BOOTLOADER
|
||||
depends on ARM || XTENSA
|
||||
help
|
||||
This option specifies the amount of SRAM (measure in kB) reserved for
|
||||
a bootloader image, when either:
|
||||
- the Zephyr image itself is to act as the bootloader, or
|
||||
- Zephyr is a !XIP image, which implicitly assumes existence of a
|
||||
bootloader that loads the Zephyr !XIP image onto SRAM.
|
||||
|
||||
config MCUBOOT
|
||||
bool
|
||||
help
|
||||
Hidden option used to indicate that the current image is MCUBoot
|
||||
|
||||
config BOOTLOADER_MCUBOOT
|
||||
bool "MCUboot bootloader support"
|
||||
select USE_DT_CODE_PARTITION
|
||||
imply INIT_ARCH_HW_AT_BOOT if ARCH_SUPPORTS_ARCH_HW_INIT
|
||||
depends on !MCUBOOT
|
||||
help
|
||||
This option signifies that the target uses MCUboot as a bootloader,
|
||||
or in other words that the image is to be chain-loaded by MCUboot.
|
||||
This sets several required build system and Device Tree options in
|
||||
order for the image generated to be bootable using the MCUboot open
|
||||
source bootloader. Currently this includes:
|
||||
|
||||
* Setting ROM_START_OFFSET to a default value that allows space
|
||||
for the MCUboot image header
|
||||
* Activating SW_VECTOR_RELAY_CLIENT on Cortex-M0
|
||||
(or Armv8-M baseline) targets with no built-in vector relocation
|
||||
mechanisms
|
||||
|
||||
By default, this option instructs Zephyr to initialize the core
|
||||
architecture HW registers during boot, when this is supported by
|
||||
the application. This removes the need by MCUboot to reset
|
||||
the core registers' state itself.
|
||||
|
||||
if BOOTLOADER_MCUBOOT
|
||||
|
||||
config MCUBOOT_SIGNATURE_KEY_FILE
|
||||
string "Path to the mcuboot signing key file"
|
||||
default ""
|
||||
help
|
||||
The file contains a key pair whose public half is verified
|
||||
by your target's MCUboot image. The file is in PEM format.
|
||||
|
||||
If set to a non-empty value, the build system tries to
|
||||
sign the final binaries using a 'west sign -t imgtool' command.
|
||||
The signed binaries are placed in the build directory
|
||||
at zephyr/zephyr.signed.bin and zephyr/zephyr.signed.hex.
|
||||
|
||||
The file names can be customized with CONFIG_KERNEL_BIN_NAME.
|
||||
The existence of bin and hex files depends on CONFIG_BUILD_OUTPUT_BIN
|
||||
and CONFIG_BUILD_OUTPUT_HEX.
|
||||
|
||||
This option should contain a path to the same file as the
|
||||
BOOT_SIGNATURE_KEY_FILE option in your MCUboot .config. The path
|
||||
may be absolute or relative to the west workspace topdir. (The MCUboot
|
||||
config option is used for the MCUboot bootloader image; this option is
|
||||
for your application which is to be loaded by MCUboot. The MCUboot
|
||||
config option can be a relative path from the MCUboot repository
|
||||
root.)
|
||||
|
||||
If left empty, you must sign the Zephyr binaries manually.
|
||||
|
||||
config MCUBOOT_ENCRYPTION_KEY_FILE
|
||||
string "Path to the mcuboot encryption key file"
|
||||
default ""
|
||||
depends on MCUBOOT_SIGNATURE_KEY_FILE != ""
|
||||
help
|
||||
The file contains the public key that is used to encrypt the
|
||||
ephemeral key that encrypts the image. The corresponding
|
||||
private key is hard coded in the MCUboot source code and is
|
||||
used to decrypt the ephemeral key that is embedded in the
|
||||
image. The file is in PEM format.
|
||||
|
||||
If set to a non-empty value, the build system tries to
|
||||
sign and encrypt the final binaries using a 'west sign -t imgtool'
|
||||
command. The binaries are placed in the build directory at
|
||||
zephyr/zephyr.signed.encrypted.bin and
|
||||
zephyr/zephyr.signed.encrypted.hex.
|
||||
|
||||
The file names can be customized with CONFIG_KERNEL_BIN_NAME.
|
||||
The existence of bin and hex files depends on CONFIG_BUILD_OUTPUT_BIN
|
||||
and CONFIG_BUILD_OUTPUT_HEX.
|
||||
|
||||
This option should either be an absolute path or a path relative to
|
||||
the west workspace topdir.
|
||||
Example: './bootloader/mcuboot/enc-rsa2048-pub.pem'
|
||||
|
||||
If left empty, you must encrypt the Zephyr binaries manually.
|
||||
|
||||
config MCUBOOT_EXTRA_IMGTOOL_ARGS
|
||||
string "Extra arguments to pass to imgtool"
|
||||
default ""
|
||||
help
|
||||
If CONFIG_MCUBOOT_SIGNATURE_KEY_FILE is a non-empty string,
|
||||
you can use this option to pass extra options to imgtool.
|
||||
For example, you could set this to "--version 1.2".
|
||||
|
||||
config MCUBOOT_GENERATE_CONFIRMED_IMAGE
|
||||
bool "Also generate a padded, confirmed image"
|
||||
help
|
||||
The signed, padded, and confirmed binaries are placed in the build
|
||||
directory at zephyr/zephyr.signed.confirmed.bin and
|
||||
zephyr/zephyr.signed.confirmed.hex.
|
||||
|
||||
The file names can be customized with CONFIG_KERNEL_BIN_NAME.
|
||||
The existence of bin and hex files depends on CONFIG_BUILD_OUTPUT_BIN
|
||||
and CONFIG_BUILD_OUTPUT_HEX.
|
||||
|
||||
endif # BOOTLOADER_MCUBOOT
|
||||
|
||||
config BOOTLOADER_ESP_IDF
|
||||
bool "ESP-IDF bootloader support"
|
||||
depends on SOC_ESP32 || SOC_ESP32S2
|
||||
help
|
||||
This option will trigger the compilation of the ESP-IDF bootloader
|
||||
inside the build folder.
|
||||
At flash time, the bootloader will be flashed with the zephyr image
|
||||
|
||||
config BOOTLOADER_BOSSA
|
||||
bool "BOSSA bootloader support"
|
||||
select USE_DT_CODE_PARTITION
|
||||
|
||||
help
|
||||
Signifies that the target uses a BOSSA compatible bootloader. If CDC
|
||||
ACM USB support is also enabled then the board will reboot into the
|
||||
bootloader automatically when bossac is run.
|
||||
|
||||
config BOOTLOADER_BOSSA_DEVICE_NAME
|
||||
string "BOSSA CDC ACM device name"
|
||||
depends on BOOTLOADER_BOSSA && CDC_ACM_DTE_RATE_CALLBACK_SUPPORT
|
||||
default "CDC_ACM_0"
|
||||
help
|
||||
Sets the CDC ACM port to watch for reboot commands.
|
||||
|
||||
choice
|
||||
prompt "BOSSA bootloader variant"
|
||||
depends on BOOTLOADER_BOSSA
|
||||
|
||||
config BOOTLOADER_BOSSA_LEGACY
|
||||
bool "Legacy"
|
||||
help
|
||||
Select the Legacy variant of the BOSSA bootloader. This is defined
|
||||
for compatibility mode only. The recommendation is use newer
|
||||
versions like Arduino or Adafruit UF2.
|
||||
|
||||
config BOOTLOADER_BOSSA_ARDUINO
|
||||
bool "Arduino"
|
||||
help
|
||||
Select the Arduino variant of the BOSSA bootloader. Uses 0x07738135
|
||||
as the magic value to enter the bootloader.
|
||||
|
||||
config BOOTLOADER_BOSSA_ADAFRUIT_UF2
|
||||
bool "Adafruit UF2"
|
||||
help
|
||||
Select the Adafruit UF2 variant of the BOSSA bootloader. Uses
|
||||
0xf01669ef as the magic value to enter the bootloader.
|
||||
|
||||
endchoice
|
||||
|
||||
endmenu
|
||||
|
||||
menu "Compatibility"
|
||||
|
||||
config COMPAT_INCLUDES
|
||||
bool "Suppress warnings when using header shims"
|
||||
default y
|
||||
help
|
||||
Suppress any warnings from the pre-processor when including
|
||||
deprecated header files.
|
||||
|
||||
endmenu
|
||||
source "ext/Kconfig"
|
||||
|
||||
source "tests/Kconfig"
|
||||
|
||||
#
|
||||
# The following are for Kconfig files for default values only.
|
||||
# These should be parsed at the end.
|
||||
#
|
||||
# Board defaults should be parsed after SoC defaults
|
||||
# because board usually overrides SoC values.
|
||||
#
|
||||
source "arch/*/soc/*/Kconfig.defconfig"
|
||||
source "boards/*/*/Kconfig.defconfig"
|
||||
|
||||
66
LICENSING.rst
Normal file
66
LICENSING.rst
Normal file
@@ -0,0 +1,66 @@
|
||||
.. _zephyr_licensing:
|
||||
|
||||
Licensing of Zephyr Project components
|
||||
######################################
|
||||
|
||||
The Zephyr kernel tree imports or reuses packages, scripts and other
|
||||
files that are not covered by the :download:`Apache License
|
||||
<../LICENSE>`. In some places there is no LICENSE file or way to put
|
||||
a LICENSE file there, so we describe the licensing in this document.
|
||||
|
||||
|
||||
- *kconfig* and *kbuild*
|
||||
|
||||
*Origin:* Linux Kernel
|
||||
*Licensing:* *GPLv2*
|
||||
|
||||
- *scripts/{checkpatch.pl,checkstack.pl,get_maintainers.pl,spelling.txt}*
|
||||
|
||||
*Origin:* Linux Kernel
|
||||
*Licensing:* *GPLv2*
|
||||
|
||||
- *ext/fs/fat/*
|
||||
|
||||
*Origin:* FatFs is a file system based on the FAT file system specification. This is
|
||||
provided by ELM Chan http://elm-chan.org/fsw/ff/00index_e.html
|
||||
|
||||
*Licensing*:
|
||||
|
||||
Copyright (C) 2016, ChaN, all right reserved.
|
||||
|
||||
FatFs module is an open source software. Redistribution and use of FatFs in
|
||||
source and binary forms, with or without modification, are permitted provided
|
||||
that the following condition is met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this condition and the following disclaimer.
|
||||
|
||||
This software is provided by the copyright holder and contributors "AS IS"
|
||||
and any warranties related to this software are DISCLAIMED.
|
||||
The copyright owner or contributors be NOT LIABLE for any damages caused
|
||||
by use of this software.
|
||||
|
||||
- *ext/hal/cmsis/*
|
||||
|
||||
*Origin:* https://github.com/ARM-software/CMSIS.git
|
||||
|
||||
*Licensing*: :download:`CMSIS_END_USER_LICENCE_AGREEMENT <../ext/hal/cmsis/CMSIS_END_USER_LICENCE_AGREEMENT.pdf>`
|
||||
|
||||
- *ext/hal/ksdk/*
|
||||
|
||||
*Origin:* http://kex.nxp.com
|
||||
|
||||
*Licensing*: 3-clause BSD (see :download:`source
|
||||
<../ext/hal/ksdk/drivers/fsl_rtc.h>`)
|
||||
|
||||
- *ext/hal/nordic/*
|
||||
|
||||
*Origin:*
|
||||
|
||||
*Licensing*: 3-clause BSD (see :download:`source <../ext/hal/nordic/mdk/nrf51.h>`)
|
||||
|
||||
- *ext/hal/qmsi/*
|
||||
|
||||
*Origin:* https://github.com/quark-mcu/qmsi/releases
|
||||
|
||||
*Licensing*: 3-clause BSD (see :download:`source <../ext/hal/qmsi/include/qm_common.h>`)
|
||||
458
MAINTAINERS
Normal file
458
MAINTAINERS
Normal file
@@ -0,0 +1,458 @@
|
||||
Originally from the Linux Kernel.
|
||||
# Licensed under the terms of the GNU GPL License version 2
|
||||
|
||||
Descriptions of section entries:
|
||||
|
||||
P: Person (obsolete)
|
||||
M: Mail patches to: FullName <address@domain>
|
||||
R: Designated reviewer: FullName <address@domain>
|
||||
These reviewers should be CCed on patches.
|
||||
L: Mailing list that is relevant to this area
|
||||
W: Web-page with status/info
|
||||
Q: Patchwork web based patch tracking system site
|
||||
T: SCM tree type and location.
|
||||
Type is one of: git, hg, quilt, stgit, topgit
|
||||
S: Status, one of the following:
|
||||
Supported: Someone is actually paid to look after this.
|
||||
Maintained: Someone actually looks after it.
|
||||
Odd Fixes: It has a maintainer but they don't have time to do
|
||||
much other than throw the odd patch in. See below..
|
||||
Orphan: No current maintainer [but maybe you could take the
|
||||
role as you write your new code].
|
||||
Obsolete: Old code. Something tagged obsolete generally means
|
||||
it has been replaced by a better system and you
|
||||
should be using that.
|
||||
F: Files and directories with wildcard patterns.
|
||||
A trailing slash includes all files and subdirectory files.
|
||||
F: drivers/net/ all files in and below drivers/net
|
||||
F: drivers/net/* all files in drivers/net, but not below
|
||||
F: */net/* all files in "any top level directory"/net
|
||||
One pattern per line. Multiple F: lines acceptable.
|
||||
N: Files and directories with regex patterns.
|
||||
N: [^a-z]tegra all files whose path contains the word tegra
|
||||
One pattern per line. Multiple N: lines acceptable.
|
||||
scripts/get_maintainer.pl has different behavior for files that
|
||||
match F: pattern and matches of N: patterns. By default,
|
||||
get_maintainer will not look at git log history when an F: pattern
|
||||
match occurs. When an N: match occurs, git log history is used
|
||||
to also notify the people that have git commit signatures.
|
||||
X: Files and directories that are NOT maintained, same rules as F:
|
||||
Files exclusions are tested before file matches.
|
||||
Can be useful for excluding a specific subdirectory, for instance:
|
||||
F: net/
|
||||
X: net/ipv6/
|
||||
matches all files in and below net excluding net/ipv6/
|
||||
K: Keyword perl extended regex pattern to match content in a
|
||||
patch or file. For instance:
|
||||
K: of_get_profile
|
||||
matches patches or files that contain "of_get_profile"
|
||||
K: \b(printk|pr_(info|err))\b
|
||||
matches patches or files that contain one or more of the words
|
||||
printk, pr_info or pr_err
|
||||
One regex pattern per line. Multiple K: lines acceptable.
|
||||
|
||||
Note: For the hard of thinking, this list is meant to remain in alphabetical
|
||||
order. If you could add yourselves to it in alphabetical order that would be
|
||||
so much easier [Ed]
|
||||
|
||||
Maintainers List (try to look for most precise areas first)
|
||||
|
||||
-----------------------------------
|
||||
|
||||
ARC ARCHITECTURE
|
||||
M: Ruud Derwig <Ruud.Derwig@synopsys.com>
|
||||
M: Chuck Jordan <Chuck.Jordan@synopsys.com>
|
||||
M: Benjamin Walsh <benjamin.walsh@windriver.com>
|
||||
S: Supported
|
||||
F: arch/arc/
|
||||
F: include/arch/arc/
|
||||
F: boards/arc/
|
||||
|
||||
ARM ARCHITECTURE
|
||||
M: Maureen Helm <maureen.helm@nxp.com>
|
||||
M: Kumar Gala <kumar.gala@linaro.org>
|
||||
S: Supported
|
||||
F: arch/arm/
|
||||
F: include/arch/arm/
|
||||
F: boards/arm/
|
||||
|
||||
ARM CORTEX MICROCONTROLLER SOFTWARE INTERFACE STANDARD (CMSIS)
|
||||
M: Maureen Helm <maureen.helm@nxp.com>
|
||||
M: Kumar Gala <kumar.gala@linaro.org>
|
||||
S: Supported
|
||||
F: ext/hal/cmsis/
|
||||
|
||||
BOARDS/ARC - ARDUINO 101 SSS
|
||||
M: Anas Nashif <anas.nashif@intel.com>
|
||||
S: Supported
|
||||
F: boards/arc/arduino_101_sss/
|
||||
|
||||
BOARDS/ARC - EM Starterkit
|
||||
M: Chuck Jordan <Chuck.Jordan@synopsys.com>
|
||||
S: Supported
|
||||
F: boards/arc/em_starterkit/
|
||||
|
||||
BOARDS/ARC - QUARK SE C1000 SS Devboard
|
||||
M: Anas Nashif <anas.nashif@intel.com>
|
||||
S: Supported
|
||||
F: boards/arc/quark_se_c1000_ss_devboard/
|
||||
|
||||
BOARDS/ARM - 96Boards CARBON
|
||||
M: Amit Kucheria <amit.kucheria@linaro.org>
|
||||
M: Ricardo Salveti <ricardo.salveti@linaro.org>
|
||||
S: Supported
|
||||
F: boards/arm/96b_carbon/
|
||||
|
||||
BOARDS/ARM - 96Boards NITROGEN
|
||||
M: Amit Kucheria <amit.kucheria@linaro.org>
|
||||
S: Supported
|
||||
F: boards/arm/96b_nitrogen/
|
||||
|
||||
BOARDS/ARM - ARDUINO 101 BLE
|
||||
M: Johan Hedberg <johan.hedberg@intel.com>
|
||||
S: Supported
|
||||
F: boards/arm/arduino_101_ble/
|
||||
|
||||
BOARDS/ARM - CC3200 LAUNCHXL
|
||||
M: Gil Pitney <gil.pitney@linaro.org>
|
||||
S: Supported
|
||||
F: boards/arm/cc3200_launchxl/
|
||||
|
||||
BOARDS/ARM - NXP FRDM-K64F
|
||||
M: Maureen Helm <maureen.helm@nxp.com>
|
||||
S: Supported
|
||||
F: boards/arm/frdm_k64f/
|
||||
|
||||
BOARDS/ARM - NXP Hexiwear
|
||||
M: Maureen Helm <maureen.helm@nxp.com>
|
||||
S: Supported
|
||||
F: boards/arm/hexiwear_k64/
|
||||
|
||||
BOARDS/ARM - NORDIC NRF51 REDBEAR BLENANO
|
||||
M: Ricardo Salveti <ricardo.salveti@linaro.org>
|
||||
S: Supported
|
||||
F: boards/arm/nrf51_blenano/
|
||||
|
||||
BOARDS/ARM - NORDIC NRF52 PCA10040
|
||||
M: Carles Cufi <carles.cufi@nordicsemi.no>
|
||||
S: Supported
|
||||
F: boards/arm/nrf52_pca10040/
|
||||
|
||||
BOARDS/ARM - NUCLEO-64 F401RE Devboard
|
||||
M: Amit Kucheria <amit.kucheria@linaro.org>
|
||||
M: Ricardo Salveti <ricardo.salveti@linaro.org>
|
||||
S: Supported
|
||||
F: boards/arm/nucleo_f401re/
|
||||
|
||||
BOARDS/ARM - ARM LTD V2M Beetle
|
||||
M: Vincenzo Frascino <vincenzo.frascino@linaro.org>
|
||||
S: Supported
|
||||
F: boards/arm/v2m_beetle/
|
||||
|
||||
BOARDS/NIOS2 - ALTERA MAX10
|
||||
M: Andrew Boie <andrew.p.boie@intel.com>
|
||||
S: Supported
|
||||
F: boards/nios2/altera_max10/
|
||||
|
||||
BOARDS/X86 - ARDUINO 101
|
||||
M: Anas Nashif <anas.nashif@intel.com>
|
||||
S: Supported
|
||||
F: boards/x86/arduino_101/
|
||||
|
||||
BOARDS/X86 - Galileo
|
||||
M: Anas Nashif <anas.nashif@intel.com>
|
||||
S: Supported
|
||||
F: boards/x86/galileo/
|
||||
|
||||
BOARDS/X86 - QUARK D2000 Devboard
|
||||
M: Anas Nashif <anas.nashif@intel.com>
|
||||
S: Supported
|
||||
F: boards/x86/quark_d2000/
|
||||
|
||||
BOARDS/X86 - QUARK SE C1000 Devboard
|
||||
M: Anas Nashif <anas.nashif@intel.com>
|
||||
S: Supported
|
||||
F: boards/x86/quark_se_c1000/
|
||||
|
||||
BLUETOOTH
|
||||
M: Johan Hedberg <johan.hedberg@intel.com>
|
||||
M: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
|
||||
M: Szymon Janc <szymon.janc@gmail.com>
|
||||
S: Supported
|
||||
W: https://www.zephyrproject.org/doc/subsystems/bluetooth/bluetooth.html
|
||||
F: subsys/bluetooth/
|
||||
F: include/bluetooth/
|
||||
F: drivers/bluetooth/
|
||||
F: samples/bluetooth/
|
||||
F: tests/bluetooth/
|
||||
F: doc/subsystems/bluetooth/
|
||||
|
||||
BLUETOOTH CONTROLLER
|
||||
M: Vinayak Chettimada <vinayak.kariappa.chettimada@nordicsemi.no>
|
||||
M: Carles Cufi <carles.cufi@nordicsemi.no>
|
||||
S: Supported
|
||||
F: subsys/bluetooth/controller/
|
||||
|
||||
CC3200 SDK
|
||||
M: Gil Pitney <gil.pitney@linaro.org>
|
||||
S: Supported
|
||||
F: ext/hal/cc3200sdk/
|
||||
|
||||
CC32XX SOC - TI SIMPLELINK
|
||||
M: Gil Pitney <gil.pitney@linaro.org>
|
||||
S: Supported
|
||||
F: arch/arm/soc/ti_simplelink/
|
||||
|
||||
DOCUMENTATION
|
||||
M: Kinder, David <david.b.kinder@intel.com>
|
||||
M: Perez-Gonzalez, Inaky <inaky.perez-gonzalez@intel.com>
|
||||
S: Supported
|
||||
F: doc/
|
||||
|
||||
FILE SYSTEM
|
||||
M: Ramesh Thomas <ramesh.thomas@intel.com>
|
||||
M: Kuo-Lang Tseng <kuo-lang.tseng@intel.com>
|
||||
S: Supported
|
||||
F: ext/fs/
|
||||
F: subsys/fs/
|
||||
F: include/fs/
|
||||
F: include/fs.h
|
||||
F: samples/fs/
|
||||
|
||||
FLASH DRIVER
|
||||
M: Baohong Liu <baohong.liu@intel.com>
|
||||
M: Kuo-Lang Tseng <kuo-lang.tseng@intel.com>
|
||||
S: Supported
|
||||
F: drivers/flash/
|
||||
|
||||
INTERRUPTS
|
||||
M: Andrew Boie <andrew.p.boie@intel.com>
|
||||
S: Supported
|
||||
F: drivers/interrupt_controller/
|
||||
F: arch/arc/core/
|
||||
F: arch/arm/core/
|
||||
F: arch/nios2/core/
|
||||
F: arch/x86/core/
|
||||
F: include/irq.h
|
||||
F: include/arch/x86/arch.h
|
||||
F: include/arch/arm/cortex_m/irq.h
|
||||
F: include/arch/nios2/arch.h
|
||||
F: include/arch/arc/arch.h
|
||||
F: include/arch/arc/v2/irq.h
|
||||
F: include/drivers/loapic.h
|
||||
F: include/drivers/ioapic.h
|
||||
F: include/drivers/mvic.h
|
||||
|
||||
KERNEL CORE
|
||||
M: Benjamin Walsh <benjamin.walsh@windriver.com>
|
||||
M: Allan Stephens <allan.stephens@windriver.com>
|
||||
S: Supported
|
||||
F: kernel/
|
||||
F: include/nanokernel.h
|
||||
F: include/microkernel.h
|
||||
F: include/microkernel/
|
||||
F: include/misc/
|
||||
F: include/toolchain/
|
||||
F: include/atomic.h
|
||||
F: include/cache.h
|
||||
F: include/init.h
|
||||
F: include/irq.h
|
||||
F: include/irq_offload.h
|
||||
F: include/kernel_version.h
|
||||
F: include/linker-defs.h
|
||||
F: include/linker-tool-gcc.h
|
||||
F: include/linker-tool.h
|
||||
F: include/section_tags.h
|
||||
F: include/sections.h
|
||||
F: include/shared_irq.h
|
||||
F: include/sw_isr_table.h
|
||||
F: include/sys_clock.h
|
||||
F: include/sys_io.h
|
||||
F: include/toolchain.h
|
||||
F: include/zephyr.h
|
||||
|
||||
KINETIS SOFTWARE DEVELOPMENT KIT (KSDK)
|
||||
M: Maureen Helm <maureen.helm@nxp.com>
|
||||
S: Supported
|
||||
F: ext/hal/ksdk/
|
||||
|
||||
KNOWN ISSUES
|
||||
M: Anas Nashif <anas.nashif@intel.com>
|
||||
M: Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
|
||||
M: Javier B Perez <javier.b.perez.hernandez@intel.com>
|
||||
F: .known-issues/
|
||||
|
||||
|
||||
MAINTAINERS
|
||||
M: Javier B Perez <javier.b.perez.hernandez@intel.com>
|
||||
M: Anas Nashif <anas.nashif@intel.com>
|
||||
M: Perez-Gonzalez, Inaky <inaky.perez-gonzalez@intel.com>
|
||||
S: Supported
|
||||
F: MAINTAINERS
|
||||
|
||||
MBEDTLS
|
||||
M: Sergio Rodriguez <sergio.sf.rodriguez@intel.com>
|
||||
M: Jithu Joseph <jithu.joseph@intel.com>
|
||||
M: Kuo-Lang Tseng <kuo-lang.tseng@intel.com>
|
||||
S: Supported
|
||||
F: ext/lib/crypto/mbedtls/
|
||||
F: samples/net/mbedtls_sslclient/
|
||||
F: tests/crypto/test_mbedtls/
|
||||
|
||||
NETWORKING
|
||||
M: Jukka Rissanen <jukka.rissanen@linux.intel.com>
|
||||
S: Supported
|
||||
W: https://www.zephyrproject.org/doc/subsystems/networking/networking.html
|
||||
F: net/ip/
|
||||
F: include/net/
|
||||
F: samples/net/
|
||||
F: tests/net/
|
||||
|
||||
NETWORK APPLICATIONS
|
||||
M: Flavio Santes <flavio.santes@intel.com>
|
||||
S: Supported
|
||||
F: samples/net/dns_client/
|
||||
F: samples/net/nats_clients/
|
||||
F: samples/net/paho_mqtt_clients/
|
||||
|
||||
NETWORK BUFFERS
|
||||
M: Johan Hedberg <johan.hedberg@intel.com>
|
||||
M: Jukka Rissanen <jukka.rissanen@linux.intel.com>
|
||||
S: Supported
|
||||
W: https://www.zephyrproject.org/doc/subsystems/networking/buffers.html
|
||||
F: net/buf.c
|
||||
F: include/net/buf.h
|
||||
F: tests/net/buf/
|
||||
|
||||
NIOS II
|
||||
M: Andrew Boie <andrew.p.boie@intel.com>
|
||||
S: Supported
|
||||
F: arch/nios2/
|
||||
F: include/arch/nios2/
|
||||
F: drivers/serial/uart_altera_jtag.c
|
||||
F: drivers/timer/altera_avalon_timer.c
|
||||
F: tests/kernel/test_intmath/
|
||||
F: boards/nios2/
|
||||
|
||||
NORDIC MDK
|
||||
M: Carles Cufi <carles.cufi@nordicsemi.no>
|
||||
S: Supported
|
||||
F: ext/hal/nordic/mdk/
|
||||
|
||||
POWER MANAGEMENT
|
||||
M: Ramesh Thomas <ramesh.thomas@intel.com>
|
||||
M: Kuo-Lang Tseng <kuo-lang.tseng@intel.com>
|
||||
S: Supported
|
||||
F: arch/x86/core/crt0.S
|
||||
F: include/device.h
|
||||
F: include/init.h
|
||||
F: include/power.h
|
||||
F: kernel/microkernel/k_idle.c
|
||||
F: kernel/nanokernel/device.c
|
||||
F: samples/power/
|
||||
|
||||
QMSI
|
||||
M: Anas Nashif <anas.nashif@intel.com>
|
||||
S: Supported
|
||||
F: ext/hal/qmsi/
|
||||
|
||||
QMSI DRIVERS
|
||||
M: Sergio Rodriguez <sergio.sf.rodriguez@intel.com>
|
||||
M: Baohong Liu <baohong.liu@intel.com>
|
||||
M: Kuo-Lang Tseng <kuo-lang.tseng@intel.com>
|
||||
S: Supported
|
||||
F: drivers/*/*qmsi*
|
||||
F: drivers/*/*/*qmsi*
|
||||
|
||||
QUARK D2000 SOC
|
||||
M: Anas Nashif <anas.nashif@intel.com>
|
||||
S: Supported
|
||||
F: arch/x86/soc/intel_quark/quark_d2000/
|
||||
|
||||
QUARK SE C1000 SOC
|
||||
M: Anas Nashif <anas.nashif@intel.com>
|
||||
S: Supported
|
||||
F: arch/x86/soc/intel_quark/quark_se_c1000/
|
||||
|
||||
QUARK X1000 SOC
|
||||
M: Anas Nashif <anas.nashif@intel.com>
|
||||
S: Supported
|
||||
F: arch/x86/soc/intel_quark/quark_x1000/
|
||||
|
||||
RELEASE NOTES
|
||||
M: Anas Nashif <anas.nashif@intel.com>
|
||||
M: Javier B Perez <javier.b.perez.hernandez@intel.com>
|
||||
M: Kinder, David <david.b.kinder@intel.com>
|
||||
S: Supported
|
||||
F: release-notes.rst
|
||||
|
||||
SANITYCHECK
|
||||
M: Andrew Boie <andrew.p.boie@intel.com>
|
||||
S: Supported
|
||||
F: scripts/sanitycheck
|
||||
F: scripts/expr_parser.py
|
||||
F: scripts/sanity_chk/
|
||||
|
||||
SENSOR DRIVERS
|
||||
M: Bogdan Davidoaia <bogdan.m.davidoaia@intel.com>
|
||||
M: Laurentiu Palcu <laurentiu.palcu@intel.com>
|
||||
M: Murtaza Alexandru <alexandru.murtaza@intel.com>
|
||||
M: Vlad Dogaru <vlad.dogaru@intel.com>
|
||||
S: Supported
|
||||
W: https://www.zephyrproject.org/doc/subsystems/sensor.html
|
||||
F: include/sensor.h
|
||||
F: drivers/sensor/
|
||||
F: samples/sensor/
|
||||
|
||||
STM32CUBE SDK
|
||||
M: Erwan Gouriou <erwan.gouriou@linaro.org>
|
||||
S: Supported
|
||||
F: ext/hal/st/stm32cube/
|
||||
|
||||
STM32F4X SoC FAMILY and DRIVERS
|
||||
M: Amit Kucheria <amit.kucheria@linaro.org>
|
||||
M: Ricardo Salveti <ricardo.salveti@linaro.org>
|
||||
S: Supported
|
||||
F: arch/arm/soc/st_stm32/stm32f4/
|
||||
F: drivers/pinmux/stm32/
|
||||
F: drivers/gpio/*stm32*
|
||||
F: drivers/clock_control/*stm32f4*
|
||||
|
||||
TINYCRYPT
|
||||
M: Constanza Heath <constanza.m.heath@intel.com>
|
||||
M: Flavio Santes <flavio.santes@intel.com>
|
||||
S: Supported
|
||||
F: ext/lib/crypto/tinycrypt/
|
||||
F: tests/crypto/
|
||||
|
||||
USB
|
||||
M: Jithu Joseph <jithu.joseph@intel.com>
|
||||
S: Supported
|
||||
F: subsys/usb
|
||||
F: drivers/usb
|
||||
F: samples/usb
|
||||
|
||||
X86 ARCH
|
||||
M: Benjamin Walsh <benjamin.walsh@windriver.com>
|
||||
M: Allan Stephens <allan.stephens@windriver.com>
|
||||
S: Supported
|
||||
F: arch/x86/
|
||||
F: include/arch/x86/
|
||||
F: boards/x86/
|
||||
|
||||
ZOAP
|
||||
M: Vinicius Costa Gomes <vinicius.gomes@intel.com>
|
||||
S: Supported
|
||||
F: lib/iot/zoap/
|
||||
F: samples/net/zoap_client/
|
||||
F: samples/net/zoap_server/
|
||||
F: tests/net/zoap/
|
||||
|
||||
THE REST
|
||||
M: Anas Nashif <anas.nashif@intel.com>
|
||||
M: Kumar Gala <kumar.gala@linaro.org>
|
||||
L: devel@lists.zephyrproject.com
|
||||
T: git https://gerrit.zephyrproject.org/r/a/zephyr
|
||||
S: Buried alive in reporters
|
||||
F: *
|
||||
F: */
|
||||
1651
MAINTAINERS.yml
1651
MAINTAINERS.yml
File diff suppressed because it is too large
Load Diff
149
Makefile.inc
Normal file
149
Makefile.inc
Normal file
@@ -0,0 +1,149 @@
|
||||
# vim: filetype=make
|
||||
#
|
||||
|
||||
UNAME := $(shell uname)
|
||||
ifeq (MINGW, $(findstring MINGW, $(UNAME)))
|
||||
DQUOTE = '
|
||||
# '
|
||||
PROJECT_BASE ?= $(shell sh -c "pwd -W")
|
||||
else
|
||||
DQUOTE = "
|
||||
# "
|
||||
PROJECT_BASE ?= $(CURDIR)
|
||||
endif
|
||||
|
||||
ifdef BOARD
|
||||
KBUILD_DEFCONFIG_PATH=$(wildcard $(ZEPHYR_BASE)/boards/*/*/$(BOARD)_defconfig)
|
||||
ifeq ($(KBUILD_DEFCONFIG_PATH),)
|
||||
$(error Board $(BOARD) not found!)
|
||||
endif
|
||||
else
|
||||
$(error BOARD is not defined!)
|
||||
endif
|
||||
|
||||
# Choose a default output directory if one wasn't supplied. Note that
|
||||
# PRISTINE_O depends on whether this is default or not. If building
|
||||
# in-tree, we want to remove the whole outdir and not just the BOARD
|
||||
# specified (thus "pristine"). Out of tree, we can obviously remove
|
||||
# only what we were told to build.
|
||||
ifndef O
|
||||
PRISTINE_O = outdir
|
||||
O = $(PROJECT_BASE)/outdir/$(BOARD)
|
||||
else
|
||||
PRISTINE_O = $(O)
|
||||
endif
|
||||
|
||||
# Turn O into an absolute path; we call the main Kbuild with $(MAKE) -C
|
||||
# which changes the working directory, relative paths don't work right.
|
||||
# Need to create the directory first to make realpath happy
|
||||
|
||||
ifneq ($(MAKECMDGOALS),help)
|
||||
$(shell mkdir -p $(O))
|
||||
override O := $(realpath $(O))
|
||||
endif
|
||||
|
||||
export ARCH MDEF_FILE QEMU_EXTRA_FLAGS PROJECT_BASE
|
||||
|
||||
override CONF_FILE := $(strip $(subst $(DQUOTE),,$(CONF_FILE)))
|
||||
|
||||
SOURCE_DIR ?= $(PROJECT_BASE)/src/
|
||||
override SOURCE_DIR := $(realpath $(SOURCE_DIR))
|
||||
override SOURCE_DIR := $(subst \,/,$(SOURCE_DIR))
|
||||
override SOURCE_DIR_PARENT := $(patsubst %, %/.., $(SOURCE_DIR))
|
||||
override SOURCE_DIR_PARENT := $(abspath $(SOURCE_DIR_PARENT))
|
||||
override SOURCE_DIR_PARENT := $(subst \,/,$(SOURCE_DIR_PARENT))
|
||||
export SOURCE_DIR SOURCE_DIR_PARENT
|
||||
|
||||
ifeq ("$(origin V)", "command line")
|
||||
KBUILD_VERBOSE = $(V)
|
||||
endif
|
||||
ifndef KBUILD_VERBOSE
|
||||
KBUILD_VERBOSE = 0
|
||||
endif
|
||||
|
||||
ifeq ($(KBUILD_VERBOSE),1)
|
||||
Q =
|
||||
S =
|
||||
else
|
||||
Q = @
|
||||
S = -s
|
||||
endif
|
||||
|
||||
export CFLAGS
|
||||
|
||||
zephyrmake = +$(MAKE) -C $(ZEPHYR_BASE) O=$(1) \
|
||||
PROJECT=$(PROJECT_BASE) SOURCE_DIR=$(DQUOTE)$(SOURCE_DIR)$(DQUOTE) $(2)
|
||||
|
||||
BOARDCONFIG = $(O)/.board_$(BOARD)
|
||||
|
||||
DOTCONFIG = $(O)/.config
|
||||
|
||||
all: $(DOTCONFIG)
|
||||
$(Q)$(call zephyrmake,$(O),$@)
|
||||
|
||||
ifeq ($(findstring qemu_,$(BOARD)),)
|
||||
qemu:
|
||||
@echo "Emulation not available for this platform"
|
||||
qemugdb: qemu
|
||||
else
|
||||
qemu: $(DOTCONFIG)
|
||||
$(Q)$(call zephyrmake,$(O),$@)
|
||||
qemugdb: $(DOTCONFIG)
|
||||
$(Q)$(call zephyrmake,$(O),$@)
|
||||
endif
|
||||
|
||||
debug: $(DOTCONFIG)
|
||||
$(Q)$(call zephyrmake,$(O),$@)
|
||||
|
||||
flash: $(DOTCONFIG)
|
||||
$(Q)$(call zephyrmake,$(O),$@)
|
||||
|
||||
ifeq ($(MAKECMDGOALS),debugserver)
|
||||
ARCH = $(notdir $(subst /$(BOARD),,$(wildcard $(ZEPHYR_BASE)/boards/*/$(BOARD))))
|
||||
-include $(ZEPHYR_BASE)/boards/$(ARCH)/$(BOARD)/Makefile.board
|
||||
-include $(ZEPHYR_BASE)/scripts/Makefile.toolchain.$(ZEPHYR_GCC_VARIANT)
|
||||
BOARD_NAME = $(BOARD)
|
||||
export BOARD_NAME
|
||||
endif
|
||||
debugserver: FORCE
|
||||
$(Q)$(CONFIG_SHELL) $(ZEPHYR_BASE)/scripts/support/$(FLASH_SCRIPT) debugserver
|
||||
|
||||
|
||||
initconfig outputexports: $(DOTCONFIG)
|
||||
|
||||
$(BOARDCONFIG):
|
||||
@rm -f $(O)/.board_*
|
||||
@touch $@
|
||||
|
||||
|
||||
ram_report: initconfig
|
||||
$(Q)$(call zephyrmake,$(O),$@)
|
||||
|
||||
rom_report: initconfig
|
||||
$(Q)$(call zephyrmake,$(O),$@)
|
||||
|
||||
menuconfig: initconfig
|
||||
$(Q)$(call zephyrmake,$(O),$@)
|
||||
|
||||
help:
|
||||
$(Q)$(MAKE) -s -C $(ZEPHYR_BASE) $@
|
||||
|
||||
# Catch all
|
||||
%:
|
||||
$(Q)$(call zephyrmake,$(O),$@)
|
||||
|
||||
KERNEL_CONFIG = $(ZEPHYR_BASE)/kernel/configs/unified.config
|
||||
|
||||
$(DOTCONFIG): $(BOARDCONFIG) $(KBUILD_DEFCONFIG_PATH) $(CONF_FILE)
|
||||
$(Q)$(CONFIG_SHELL) $(ZEPHYR_BASE)/scripts/kconfig/merge_config.sh \
|
||||
-q -m -O $(O) $(KBUILD_DEFCONFIG_PATH) $(KERNEL_CONFIG) $(CONF_FILE) \
|
||||
$(wildcard $(O)/*.conf)
|
||||
$(Q)$(MAKE) $(S) -C $(ZEPHYR_BASE) O=$(O) PROJECT=$(PROJECT_BASE) oldnoconfig
|
||||
|
||||
pristine:
|
||||
$(Q)rm -rf $(PRISTINE_O)
|
||||
|
||||
PHONY += FORCE initconfig
|
||||
FORCE:
|
||||
|
||||
.PHONY: $(PHONY)
|
||||
88
README.rst
88
README.rst
@@ -1,88 +0,0 @@
|
||||
.. raw:: html
|
||||
|
||||
<a href="https://www.zephyrproject.org">
|
||||
<p align="center">
|
||||
<img src="doc/_static/images/logo-readme.png">
|
||||
</p>
|
||||
</a>
|
||||
|
||||
<a href="https://bestpractices.coreinfrastructure.org/projects/74"><img
|
||||
src="https://bestpractices.coreinfrastructure.org/projects/74/badge"></a>
|
||||
<a
|
||||
href="https://github.com/zephyrproject-rtos/zephyr/actions/workflows/twister.yaml?query=branch%3Amain">
|
||||
<img
|
||||
src="https://github.com/zephyrproject-rtos/zephyr/actions/workflows/twister.yaml/badge.svg?event=push"></a>
|
||||
|
||||
|
||||
The Zephyr Project is a scalable real-time operating system (RTOS) supporting
|
||||
multiple hardware architectures, optimized for resource constrained devices,
|
||||
and built with security in mind.
|
||||
|
||||
The Zephyr OS is based on a small-footprint kernel designed for use on
|
||||
resource-constrained systems: from simple embedded environmental sensors and
|
||||
LED wearables to sophisticated smart watches and IoT wireless gateways.
|
||||
|
||||
The Zephyr kernel supports multiple architectures, including ARM Cortex-M,
|
||||
Intel x86, ARC, Nios II, Tensilica Xtensa, and RISC-V, and a large number of
|
||||
`supported boards`_.
|
||||
|
||||
.. below included in doc/introduction/introduction.rst
|
||||
|
||||
|
||||
Getting Started
|
||||
***************
|
||||
|
||||
Welcome to Zephyr! See the `Introduction to Zephyr`_ for a high-level overview,
|
||||
and the documentation's `Getting Started Guide`_ to start developing.
|
||||
|
||||
.. start_include_here
|
||||
|
||||
Community Support
|
||||
*****************
|
||||
|
||||
Community support is provided via mailing lists and Discord; see the Resources
|
||||
below for details.
|
||||
|
||||
.. _project-resources:
|
||||
|
||||
Resources
|
||||
*********
|
||||
|
||||
Here's a quick summary of resources to help you find your way around:
|
||||
|
||||
* **Help**: `Asking for Help Tips`_
|
||||
* **Documentation**: http://docs.zephyrproject.org (`Getting Started Guide`_)
|
||||
* **Source Code**: https://github.com/zephyrproject-rtos/zephyr is the main
|
||||
repository; https://elixir.bootlin.com/zephyr/latest/source contains a
|
||||
searchable index
|
||||
* **Releases**: https://github.com/zephyrproject-rtos/zephyr/releases
|
||||
* **Samples and example code**: see `Sample and Demo Code Examples`_
|
||||
* **Mailing Lists**: users@lists.zephyrproject.org and
|
||||
devel@lists.zephyrproject.org are the main user and developer mailing lists,
|
||||
respectively. You can join the developer's list and search its archives at
|
||||
`Zephyr Development mailing list`_. The other `Zephyr mailing list
|
||||
subgroups`_ have their own archives and sign-up pages.
|
||||
* **Nightly CI Build Status**: https://lists.zephyrproject.org/g/builds
|
||||
The builds@lists.zephyrproject.org mailing list archives the CI nightly build results.
|
||||
* **Chat**: Real-time chat happens in Zephyr's Discord Server. Use
|
||||
this `Discord Invite`_ to register.
|
||||
* **Contributing**: see the `Contribution Guide`_
|
||||
* **Wiki**: `Zephyr GitHub wiki`_
|
||||
* **Issues**: https://github.com/zephyrproject-rtos/zephyr/issues
|
||||
* **Security Issues**: Email vulnerabilities@zephyrproject.org to report
|
||||
security issues; also see our `Security`_ documentation. Security issues are
|
||||
tracked separately at https://zephyrprojectsec.atlassian.net.
|
||||
* **Zephyr Project Website**: https://zephyrproject.org
|
||||
|
||||
.. _Discord Invite: https://chat.zephyrproject.org
|
||||
.. _supported boards: http://docs.zephyrproject.org/latest/boards/index.html
|
||||
.. _Zephyr Documentation: http://docs.zephyrproject.org
|
||||
.. _Introduction to Zephyr: http://docs.zephyrproject.org/latest/introduction/index.html
|
||||
.. _Getting Started Guide: http://docs.zephyrproject.org/latest/getting_started/index.html
|
||||
.. _Contribution Guide: http://docs.zephyrproject.org/latest/contribute/index.html
|
||||
.. _Zephyr GitHub wiki: https://github.com/zephyrproject-rtos/zephyr/wiki
|
||||
.. _Zephyr Development mailing list: https://lists.zephyrproject.org/g/devel
|
||||
.. _Zephyr mailing list subgroups: https://lists.zephyrproject.org/g/main/subgroups
|
||||
.. _Sample and Demo Code Examples: http://docs.zephyrproject.org/latest/samples/index.html
|
||||
.. _Security: http://docs.zephyrproject.org/latest/security/index.html
|
||||
.. _Asking for Help Tips: https://docs.zephyrproject.org/latest/getting_started/index.html#asking-for-help
|
||||
5
VERSION
5
VERSION
@@ -1,5 +0,0 @@
|
||||
VERSION_MAJOR = 2
|
||||
VERSION_MINOR = 7
|
||||
PATCHLEVEL = 5
|
||||
VERSION_TWEAK = 0
|
||||
EXTRAVERSION =
|
||||
@@ -1,11 +0,0 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
add_definitions(-D__ZEPHYR_SUPERVISOR__)
|
||||
|
||||
include_directories(
|
||||
${ZEPHYR_BASE}/kernel/include
|
||||
${ARCH_DIR}/${ARCH}/include
|
||||
)
|
||||
|
||||
add_subdirectory(common)
|
||||
add_subdirectory(${ARCH_DIR}/${ARCH} arch/${ARCH})
|
||||
1031
arch/Kconfig
1031
arch/Kconfig
File diff suppressed because it is too large
Load Diff
1
arch/Makefile
Normal file
1
arch/Makefile
Normal file
@@ -0,0 +1 @@
|
||||
obj-y += $(ARCH)/
|
||||
@@ -1,26 +0,0 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
# Enable debug support in mdb
|
||||
# Dwarf version 2 can be recognized by mdb
|
||||
# The default dwarf version in gdb is not recognized by mdb
|
||||
zephyr_cc_option(-g3 -gdwarf-2)
|
||||
|
||||
# Without this (poorly named) option, compiler may generate undefined
|
||||
# references to abort().
|
||||
# See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63691
|
||||
zephyr_cc_option(-fno-delete-null-pointer-checks)
|
||||
|
||||
zephyr_cc_option_ifdef(CONFIG_ARC_USE_UNALIGNED_MEM_ACCESS -munaligned-access)
|
||||
|
||||
if(CONFIG_ISA_ARCV2)
|
||||
# Instruct compiler to use register R26 as thread pointer
|
||||
# for thread local storage.
|
||||
# For ARCv3 the register is fixed to r30, so we don't need to specify it
|
||||
zephyr_cc_option_ifdef(CONFIG_THREAD_LOCAL_STORAGE -mtp-regno=26)
|
||||
endif()
|
||||
|
||||
add_subdirectory(core)
|
||||
|
||||
if(COMPILER STREQUAL arcmwdt)
|
||||
add_subdirectory(arcmwdt)
|
||||
endif()
|
||||
6
arch/arc/Kbuild
Normal file
6
arch/arc/Kbuild
Normal file
@@ -0,0 +1,6 @@
|
||||
subdir-ccflags-y +=-I$(srctree)/include/drivers
|
||||
subdir-ccflags-y +=-I$(srctree)/drivers
|
||||
subdir-asflags-y += $(subdir-ccflags-y)
|
||||
|
||||
obj-y += soc/$(SOC_PATH)/
|
||||
obj-y += core/
|
||||
526
arch/arc/Kconfig
526
arch/arc/Kconfig
@@ -1,7 +1,28 @@
|
||||
# ARC options
|
||||
# ARC EM4 options
|
||||
|
||||
#
|
||||
# Copyright (c) 2014 Wind River Systems, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
choice
|
||||
prompt "ARC SoC Selection"
|
||||
depends on ARC
|
||||
|
||||
source "arch/arc/soc/*/Kconfig.soc"
|
||||
endchoice
|
||||
|
||||
# Copyright (c) 2014, 2019 Wind River Systems, Inc.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
menu "ARC Options"
|
||||
depends on ARC
|
||||
@@ -9,112 +30,53 @@ menu "ARC Options"
|
||||
config ARCH
|
||||
default "arc"
|
||||
|
||||
config ARCH_DEFCONFIG
|
||||
string
|
||||
default "arch/arc/defconfig"
|
||||
|
||||
config CPU_ARCEM
|
||||
menu "ARC EM4 processor options"
|
||||
|
||||
config CPU_ARCEM4
|
||||
bool
|
||||
default y
|
||||
select CPU_ARCV2
|
||||
select ATOMIC_OPERATIONS_C
|
||||
help
|
||||
This option signifies the use of an ARC EM CPU
|
||||
This option signifies the use of an ARC EM4 CPU
|
||||
|
||||
config CPU_ARCHS
|
||||
endmenu
|
||||
|
||||
menu "ARCv2 Family Options"
|
||||
|
||||
config CPU_ARCV2
|
||||
bool
|
||||
select ATOMIC_OPERATIONS_BUILTIN
|
||||
default y
|
||||
select NANOKERNEL_TICKLESS_IDLE_SUPPORTED
|
||||
help
|
||||
This option signifies the use of an ARC HS CPU
|
||||
This option signifies the use of a CPU of the ARCv2 family.
|
||||
|
||||
|
||||
choice
|
||||
prompt "ARC Instruction Set"
|
||||
default ISA_ARCV2
|
||||
|
||||
config ISA_ARCV2
|
||||
bool "ARC ISA v2"
|
||||
select ARCH_HAS_STACK_PROTECTION if ARC_HAS_STACK_CHECKING || (ARC_MPU && ARC_MPU_VER !=2)
|
||||
select ARCH_HAS_USERSPACE if ARC_MPU
|
||||
select USE_SWITCH
|
||||
select USE_SWITCH_SUPPORTED
|
||||
config NSIM
|
||||
prompt "Running on the MetaWare nSIM simulator"
|
||||
bool
|
||||
default n
|
||||
help
|
||||
v2 ISA for the ARC-HS & ARC-EM cores
|
||||
For running on nSIM simulator.
|
||||
|
||||
config ISA_ARCV3
|
||||
bool "ARC ISA v3"
|
||||
select USE_SWITCH
|
||||
select USE_SWITCH_SUPPORTED
|
||||
a) Uses non-XIP to run in RAM.
|
||||
b) Linked at address 0x4000 with 0x4000 of RAM so that it works with
|
||||
a pc_size of 16 (default).
|
||||
|
||||
endchoice
|
||||
|
||||
if ISA_ARCV2
|
||||
|
||||
config CPU_EM4
|
||||
config DATA_ENDIANNESS_LITTLE
|
||||
bool
|
||||
select CPU_ARCEM
|
||||
help
|
||||
If y, the SoC uses an ARC EM4 CPU
|
||||
|
||||
config CPU_EM4_DMIPS
|
||||
bool
|
||||
select CPU_ARCEM
|
||||
help
|
||||
If y, the SoC uses an ARC EM4 DMIPS CPU
|
||||
|
||||
config CPU_EM4_FPUS
|
||||
bool
|
||||
select CPU_ARCEM
|
||||
help
|
||||
If y, the SoC uses an ARC EM4 DMIPS CPU with the single-precision
|
||||
floating-point extension
|
||||
|
||||
config CPU_EM4_FPUDA
|
||||
bool
|
||||
select CPU_ARCEM
|
||||
help
|
||||
If y, the SoC uses an ARC EM4 DMIPS CPU with single-precision
|
||||
floating-point and double assist instructions
|
||||
|
||||
config CPU_EM6
|
||||
bool
|
||||
select CPU_ARCEM
|
||||
help
|
||||
If y, the SoC uses an ARC EM6 CPU
|
||||
|
||||
config CPU_HS3X
|
||||
bool
|
||||
select CPU_ARCHS
|
||||
help
|
||||
If y, the SoC uses an ARC HS3x or HS4x CPU
|
||||
|
||||
endif #ISA_ARCV2
|
||||
|
||||
if ISA_ARCV3
|
||||
|
||||
config CPU_HS6X
|
||||
bool
|
||||
select CPU_ARCHS
|
||||
select 64BIT
|
||||
help
|
||||
If y, the SoC uses an ARC HS6x CPU
|
||||
|
||||
endif #ISA_ARCV3
|
||||
|
||||
config FP_FPU_DA
|
||||
bool
|
||||
|
||||
menu "ARC CPU Options"
|
||||
|
||||
config ARC_HAS_ZOL
|
||||
bool
|
||||
depends on ISA_ARCV2
|
||||
default y
|
||||
help
|
||||
ARCv2 CPUs have ZOL hardware loop mechanism which the ARCv3 ISA drops.
|
||||
Architecturally ZOL provides
|
||||
- LPcc instruction
|
||||
- LP_COUNT core reg
|
||||
- LP_START, LP_END aux regs
|
||||
Disabling this option removes usage of ZOL regs from code
|
||||
This is driven by the processor implementation, since it is fixed in
|
||||
hardware. The BSP should set this value to 'n' if the data is
|
||||
implemented as big endian.
|
||||
|
||||
config NUM_IRQ_PRIO_LEVELS
|
||||
int "Number of supported interrupt priority levels"
|
||||
config NUM_IRQ_PRIO_LEVELS
|
||||
int
|
||||
prompt "Number of supported interrupt priority levels"
|
||||
range 1 16
|
||||
help
|
||||
Interrupt priorities available will be 0 to NUM_IRQ_PRIO_LEVELS-1.
|
||||
@@ -122,8 +84,9 @@ config NUM_IRQ_PRIO_LEVELS
|
||||
|
||||
The BSP must provide a valid default for proper operation.
|
||||
|
||||
config NUM_IRQS
|
||||
int "Upper limit of interrupt numbers/IDs used"
|
||||
config NUM_IRQS
|
||||
int
|
||||
prompt "Upper limit of interrupt numbers/IDs used"
|
||||
range 17 256
|
||||
help
|
||||
Interrupts available will be 0 to NUM_IRQS-1.
|
||||
@@ -133,257 +96,216 @@ config NUM_IRQS
|
||||
The BSP must provide a valid default. This drives the size of the
|
||||
vector table.
|
||||
|
||||
config RGF_NUM_BANKS
|
||||
int "Number of General Purpose Register Banks"
|
||||
depends on ARC_FIRQ
|
||||
depends on NUM_IRQ_PRIO_LEVELS > 1
|
||||
config RGF_NUM_BANKS
|
||||
int
|
||||
prompt "Number of General Purpose Register Banks"
|
||||
depends on CPU_ARCV2
|
||||
range 1 2
|
||||
default 2
|
||||
help
|
||||
The ARC CPU can be configured to have more than one register
|
||||
bank. If fast interrupts are supported (FIRQ), the 2nd
|
||||
register bank, in the set, will be used by FIRQ interrupts.
|
||||
If fast interrupts are supported but there is only 1
|
||||
register bank, the fast interrupt handler must save
|
||||
and restore general purpose registers.
|
||||
NOTE: it's required to have more than one interrupt priority level
|
||||
to use second register bank - otherwise all interrupts will use
|
||||
same register bank. Such configuration isn't supported in software
|
||||
and it is not beneficial from the performance point of view.
|
||||
The ARC CPU can be configured to have more than one register
|
||||
bank. If fast interrupts are supported (FIRQ), the 2nd
|
||||
register bank, in the set, will be used by FIRQ interrupts.
|
||||
If fast interrupts are supported but there is only 1
|
||||
register bank, the fast interrupt handler must save
|
||||
and restore general purpose regsiters.
|
||||
|
||||
config ARC_FIRQ
|
||||
bool "FIRQ enable"
|
||||
depends on ISA_ARCV2
|
||||
depends on NUM_IRQ_PRIO_LEVELS > 1
|
||||
default y
|
||||
help
|
||||
Fast interrupts are supported (FIRQ). If FIRQ enabled, for interrupts
|
||||
with highest priority, status32 and pc will be saved in aux regs,
|
||||
other regs will be saved according to the number of register bank;
|
||||
If FIRQ is disabled, the handle of interrupts with highest priority
|
||||
will be same with other interrupts.
|
||||
NOTE: we don't allow the configuration with FIRQ enabled and only one
|
||||
interrupt priority level (so all interrupts are FIRQ). Such
|
||||
configuration isn't supported in software and it is not beneficial
|
||||
from the performance point of view.
|
||||
|
||||
config ARC_FIRQ_STACK
|
||||
bool "Enable separate firq stack"
|
||||
depends on ARC_FIRQ && RGF_NUM_BANKS > 1
|
||||
help
|
||||
Use separate stack for FIRQ handing. When the fast irq is also a direct
|
||||
irq, this will get the minimal interrupt latency.
|
||||
|
||||
config ARC_FIRQ_STACK_SIZE
|
||||
int "FIRQ stack size"
|
||||
depends on ARC_FIRQ_STACK
|
||||
config FIRQ_STACK_SIZE
|
||||
int
|
||||
prompt "Size of stack for FIRQs (in bytes)"
|
||||
depends on CPU_ARCV2
|
||||
default 1024
|
||||
help
|
||||
The size of firq stack.
|
||||
FIRQs and regular IRQs have different stacks so that a FIRQ can start
|
||||
running without doing stack switching in software.
|
||||
|
||||
config ARC_HAS_STACK_CHECKING
|
||||
bool "ARC has STACK_CHECKING"
|
||||
depends on ISA_ARCV2
|
||||
default y
|
||||
config ARC_STACK_CHECKING
|
||||
bool "Enable Stack Checking"
|
||||
depends on CPU_ARCV2
|
||||
default n
|
||||
help
|
||||
ARC is configured with STACK_CHECKING which is a mechanism for
|
||||
checking stack accesses and raising an exception when a stack
|
||||
overflow or underflow is detected.
|
||||
ARCV2 has a special feature allowing to check stack overflows. This
|
||||
enables code that allows using this debug feature
|
||||
|
||||
config ARC_CONNECT
|
||||
bool "ARC has ARC connect"
|
||||
select SCHED_IPI_SUPPORTED
|
||||
help
|
||||
ARC is configured with ARC CONNECT which is a hardware for connecting
|
||||
multi cores.
|
||||
|
||||
config ARC_STACK_CHECKING
|
||||
bool
|
||||
select NO_UNUSED_STACK_INSPECTION
|
||||
help
|
||||
Use ARC STACK_CHECKING to do stack protection
|
||||
|
||||
config ARC_STACK_PROTECTION
|
||||
bool
|
||||
default y if HW_STACK_PROTECTION
|
||||
select ARC_STACK_CHECKING if ARC_HAS_STACK_CHECKING
|
||||
select MPU_STACK_GUARD if (!ARC_STACK_CHECKING && ARC_MPU && ARC_MPU_VER !=2)
|
||||
select THREAD_STACK_INFO
|
||||
help
|
||||
This option enables either:
|
||||
- The ARC stack checking, or
|
||||
- the MPU-based stack guard
|
||||
to cause a system fatal error
|
||||
if the bounds of the current process stack are overflowed.
|
||||
The two stack guard options are mutually exclusive. The
|
||||
selection of the ARC stack checking is
|
||||
prioritized over the MPU-based stack guard.
|
||||
|
||||
config ARC_USE_UNALIGNED_MEM_ACCESS
|
||||
bool "Enable unaligned access in HW"
|
||||
default y if CPU_ARCHS
|
||||
depends on (CPU_ARCEM && !ARC_HAS_SECURE) || CPU_ARCHS
|
||||
help
|
||||
ARC EM cores w/o secure shield 2+2 mode support might be configured
|
||||
to support unaligned memory access which is then disabled by default.
|
||||
Enable unaligned access in hardware and make software to use it.
|
||||
|
||||
config FAULT_DUMP
|
||||
int "Fault dump level"
|
||||
config FAULT_DUMP
|
||||
int
|
||||
prompt "Fault dump level"
|
||||
default 2
|
||||
range 0 2
|
||||
help
|
||||
Different levels for display information when a fault occurs.
|
||||
Different levels for display information when a fault occurs.
|
||||
|
||||
2: The default. Display specific and verbose information. Consumes
|
||||
2: The default. Display specific and verbose information. Consumes
|
||||
the most memory (long strings).
|
||||
|
||||
1: Display general and short information. Consumes less memory
|
||||
1: Display general and short information. Consumes less memory
|
||||
(short strings).
|
||||
|
||||
0: Off.
|
||||
0: Off.
|
||||
|
||||
config GEN_ISR_TABLES
|
||||
config IRQ_OFFLOAD
|
||||
bool "Enable IRQ offload"
|
||||
default n
|
||||
help
|
||||
Enable irq_offload() API which allows functions to be synchronously
|
||||
run in interrupt context. Uses one entry in the IDT. Mainly useful
|
||||
for test cases.
|
||||
|
||||
config XIP
|
||||
default n if NSIM
|
||||
default y
|
||||
|
||||
config GEN_IRQ_START_VECTOR
|
||||
default 16
|
||||
|
||||
config HARVARD
|
||||
bool "Harvard Architecture"
|
||||
prompt "Harvard Architecture"
|
||||
bool
|
||||
default n
|
||||
help
|
||||
The ARC CPU can be configured to have two busses;
|
||||
one for instruction fetching and another that serves as a data bus.
|
||||
|
||||
config CODE_DENSITY
|
||||
bool "Code Density Option"
|
||||
config ICCM_SIZE
|
||||
int "ICCM Size in kB"
|
||||
help
|
||||
Enable code density option to get better code density
|
||||
This option specifies the size of the ICCM in kB. It is normally set by
|
||||
the board's defconfig file and the user should generally avoid modifying
|
||||
it via the menu configuration.
|
||||
|
||||
config ARC_HAS_ACCL_REGS
|
||||
bool "Reg Pair ACCL:ACCH (FPU and/or MPY > 6)"
|
||||
default y if CPU_HS3X
|
||||
default y if FPU
|
||||
config ICCM_BASE_ADDRESS
|
||||
hex "ICCM Base Address"
|
||||
help
|
||||
Depending on the configuration, CPU can contain accumulator reg-pair
|
||||
(also referred to as r58:r59). These can also be used by gcc as GPR so
|
||||
kernel needs to save/restore per process
|
||||
This option specifies the base address of the ICCM on the board. It is
|
||||
normally set by the board's defconfig file and the user should generally
|
||||
avoid modifying it via the menu configuration.
|
||||
|
||||
config ARC_HAS_SECURE
|
||||
bool "ARC has SecureShield"
|
||||
depends on ISA_ARCV2
|
||||
select CPU_HAS_TEE
|
||||
select ARCH_HAS_TRUSTED_EXECUTION
|
||||
config DCCM_SIZE
|
||||
int "DCCM Size in kB"
|
||||
help
|
||||
This option is enabled when ARC core supports secure mode
|
||||
This option specifies the size of the DCCM in kB. It is normally set by
|
||||
the board's defconfig file and the user should generally avoid modifying
|
||||
it via the menu configuration.
|
||||
|
||||
config SJLI_TABLE_SIZE
|
||||
int "SJLI table size"
|
||||
depends on ARC_SECURE_FIRMWARE
|
||||
default 8
|
||||
config DCCM_BASE_ADDRESS
|
||||
hex "DCCM Base Address"
|
||||
help
|
||||
The size of sjli (Secure Jump and Link Indexed) table. The
|
||||
code in normal mode call secure services in secure mode through
|
||||
sjli instruction.
|
||||
This option specifies the base address of the DCCM on the board. It is
|
||||
normally set by the board's defconfig file and the user should generally
|
||||
avoid modifying it via the menu configuration.
|
||||
|
||||
config ARC_SECURE_FIRMWARE
|
||||
bool "Generate Secure Firmware"
|
||||
depends on ARC_HAS_SECURE
|
||||
default y if TRUSTED_EXECUTION_SECURE
|
||||
config SRAM_SIZE
|
||||
int "SRAM Size in kB"
|
||||
help
|
||||
This option indicates that we are building a Zephyr image that
|
||||
is intended to execute in secure mode. The option is only
|
||||
applicable to ARC processors that implement the SecureShield.
|
||||
This option specifies the size of the SRAM in kB. It is normally set by
|
||||
the board's defconfig file and the user should generally avoid modifying
|
||||
it via the menu configuration.
|
||||
|
||||
This option enables Zephyr to include code that executes in
|
||||
secure mode, as well as to exclude code that is designed to
|
||||
execute only in normal mode.
|
||||
|
||||
Code executing in secure mode has access to both the secure
|
||||
and normal resources of the ARC processors.
|
||||
|
||||
config ARC_NORMAL_FIRMWARE
|
||||
bool "Generate Normal Firmware"
|
||||
depends on !ARC_SECURE_FIRMWARE
|
||||
depends on ARC_HAS_SECURE
|
||||
default y if TRUSTED_EXECUTION_NONSECURE
|
||||
config SRAM_BASE_ADDRESS
|
||||
hex "SRAM Base Address"
|
||||
help
|
||||
This option indicates that we are building a Zephyr image that
|
||||
is intended to execute in normal mode. Execution of this
|
||||
image is triggered by secure firmware that executes in secure
|
||||
mode. The option is only applicable to ARC processors that
|
||||
implement the SecureShield.
|
||||
This option specifies the base address of the SRAM on the board. It is
|
||||
normally set by the board's defconfig file and the user should generally
|
||||
avoid modifying it via the menu configuration.
|
||||
|
||||
This option enables Zephyr to include code that executes in
|
||||
normal mode only, as well as to exclude code that is
|
||||
designed to execute only in secure mode.
|
||||
|
||||
Code executing in normal mode has no access to secure
|
||||
resources of the ARC processors, and, therefore, it shall avoid
|
||||
accessing them.
|
||||
|
||||
menu "ARC MPU Options"
|
||||
depends on CPU_HAS_MPU
|
||||
|
||||
config ARC_MPU_ENABLE
|
||||
bool "Enable MPU"
|
||||
select ARC_MPU
|
||||
config FLASH_SIZE
|
||||
int "Flash Size in kB"
|
||||
help
|
||||
Enable MPU
|
||||
This option specifies the size of the flash in kB. It is normally set by
|
||||
the board's defconfig file and the user should generally avoid modifying
|
||||
it via the menu configuration.
|
||||
|
||||
source "arch/arc/core/mpu/Kconfig"
|
||||
|
||||
endmenu
|
||||
|
||||
config DCACHE_LINE_SIZE
|
||||
default 32
|
||||
|
||||
config ARC_EXCEPTION_STACK_SIZE
|
||||
int "ARC exception handling stack size"
|
||||
default 768 if !64BIT
|
||||
default 2048 if 64BIT
|
||||
config FLASH_BASE_ADDRESS
|
||||
hex "Flash Base Address"
|
||||
help
|
||||
Size in bytes of exception handling stack which is at the top of
|
||||
interrupt stack to get smaller memory footprint because exception
|
||||
is not frequent. To reduce the impact on interrupt handling,
|
||||
especially nested interrupt, it cannot be too large.
|
||||
This option specifies the base address of the flash on the board. It is
|
||||
normally set by the board's defconfig file and the user should generally
|
||||
avoid modifying it via the menu configuration.
|
||||
|
||||
endmenu
|
||||
config SW_ISR_TABLE
|
||||
bool
|
||||
prompt "Enable software interrupt handler table"
|
||||
default y
|
||||
help
|
||||
Enable an interrupt handler table implemented in software. This
|
||||
table, unlike ISRs connected directly in the vector table, allow
|
||||
a parameter to be passed to the interrupt handlers. Also, invoking
|
||||
the exeception/interrupt exit stub is automatically done.
|
||||
|
||||
config ARC_EXCEPTION_DEBUG
|
||||
bool "Unhandled exception debugging information"
|
||||
config IRQ_VECTOR_TABLE_CUSTOM
|
||||
bool
|
||||
prompt "Projects provide a custom static IRQ part of vector table"
|
||||
depends on !SW_ISR_TABLE
|
||||
default n
|
||||
depends on PRINTK || LOG
|
||||
help
|
||||
Print human-readable information about exception vectors, cause codes,
|
||||
and parameters, at a cost of code/data size for the human-readable
|
||||
strings.
|
||||
Projects, not the BSP, provide the IRQ part of the vector table.
|
||||
|
||||
This is the table of interrupt handlers with the best potential
|
||||
performance, but is the less flexible.
|
||||
|
||||
The ISRs are installed directly in the vector table, thus are
|
||||
directly called by the CPU when an interrupt is taken. This adds
|
||||
the least overhead when handling an interrupt.
|
||||
|
||||
Downsides:
|
||||
|
||||
- ISRs cannot have a parameter
|
||||
- ISRs cannot be connected at runtime
|
||||
- ISRs must notify the kernel manually by invoking _ExcExit() when
|
||||
then are about to return.
|
||||
|
||||
config IRQ_VECTOR_TABLE_BSP
|
||||
bool
|
||||
# omit prompt to signify a "hidden" option
|
||||
depends on SW_ISR_TABLE || !IRQ_VECTOR_TABLE_CUSTOM
|
||||
default y
|
||||
help
|
||||
Not user-selectable, helps build system logic.
|
||||
|
||||
config ARCH_HAS_TASK_ABORT
|
||||
bool
|
||||
# omit prompt to signify a "hidden" option
|
||||
default n
|
||||
|
||||
config ARCH_HAS_NANO_FIBER_ABORT
|
||||
bool
|
||||
# omit prompt to signify a "hidden" option
|
||||
default n
|
||||
|
||||
config CACHE_LINE_SIZE_DETECT
|
||||
bool
|
||||
prompt "Detect d-cache line size at runtime"
|
||||
default n
|
||||
help
|
||||
This option enables querying the d-cache build register for finding
|
||||
the d-cache line size at the expense of taking more memory and code
|
||||
and a slightly increased boot time.
|
||||
|
||||
If the CPU's d-cache line size is known in advance, disable this
|
||||
option and manually enter the value for CACHE_LINE_SIZE.
|
||||
|
||||
config CACHE_LINE_SIZE
|
||||
int
|
||||
prompt "Cache line size" if !CACHE_LINE_SIZE_DETECT
|
||||
default 32
|
||||
help
|
||||
Size in bytes of a CPU d-cache line.
|
||||
|
||||
Detect automatically at runtime by selecting CACHE_LINE_SIZE_DETECT.
|
||||
|
||||
config ARCH_CACHE_FLUSH_DETECT
|
||||
bool
|
||||
default n
|
||||
|
||||
config CACHE_FLUSHING
|
||||
bool
|
||||
default n
|
||||
prompt "Enable d-cache flushing mechanism"
|
||||
help
|
||||
This links in the sys_cache_flush() function, which provides a
|
||||
way to flush multiple lines of the d-cache.
|
||||
If the d-cache is present, set this to y.
|
||||
If the d-cache is NOT present, set this to n.
|
||||
|
||||
endmenu
|
||||
|
||||
config MAIN_STACK_SIZE
|
||||
default 4096 if 64BIT
|
||||
source "arch/arc/soc/*/Kconfig"
|
||||
|
||||
config ISR_STACK_SIZE
|
||||
default 4096 if 64BIT
|
||||
|
||||
config SYSTEM_WORKQUEUE_STACK_SIZE
|
||||
default 4096 if 64BIT
|
||||
|
||||
config IDLE_STACK_SIZE
|
||||
default 1024 if 64BIT
|
||||
|
||||
config IPM_CONSOLE_STACK_SIZE
|
||||
default 2048 if 64BIT
|
||||
|
||||
config TEST_EXTRA_STACKSIZE
|
||||
default 2048 if 64BIT
|
||||
|
||||
config CMSIS_THREAD_MAX_STACK_SIZE
|
||||
default 2048 if 64BIT
|
||||
|
||||
config CMSIS_V2_THREAD_MAX_STACK_SIZE
|
||||
default 2048 if 64BIT
|
||||
|
||||
config CMSIS_V2_THREAD_DYNAMIC_STACK_SIZE
|
||||
default 2048 if 64BIT
|
||||
endmenu
|
||||
|
||||
21
arch/arc/Makefile
Normal file
21
arch/arc/Makefile
Normal file
@@ -0,0 +1,21 @@
|
||||
cflags-y += $(call cc-option,-ffunction-sections,) $(call cc-option,-fdata-sections,)
|
||||
|
||||
# Without this (poorly named) option, compiler may generate undefined
|
||||
# references to abort().
|
||||
# See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63691
|
||||
cflags-y += $(call cc-option,-fno-delete-null-pointer-checks)
|
||||
|
||||
cflags-$(CONFIG_ARC_STACK_CHECKING) = $(call cc-option,-fomit-frame-pointer)
|
||||
cflags-$(CONFIG_LTO) = $(call cc-option,-flto,)
|
||||
|
||||
include $(srctree)/arch/$(ARCH)/soc/$(SOC_PATH)/Makefile
|
||||
|
||||
KBUILD_CFLAGS += $(cflags-y)
|
||||
KBUILD_CXXFLAGS += $(cflags-y)
|
||||
|
||||
soc-cxxflags ?= $(soc-cflags)
|
||||
soc-aflags ?= $(soc-cflags)
|
||||
KBUILD_CFLAGS += $(soc-cflags)
|
||||
KBUILD_CXXFLAGS += $(soc-cxxflags)
|
||||
KBUILD_AFLAGS += $(soc-aflags)
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
if(CONFIG_ARCMWDT_LIBC OR CONFIG_CPLUSPLUS)
|
||||
zephyr_sources(arcmwdt-dtr-stubs.c)
|
||||
endif()
|
||||
@@ -1,22 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2021 Synopsys.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <toolchain.h>
|
||||
|
||||
__weak void *__dso_handle;
|
||||
|
||||
int __cxa_atexit(void (*destructor)(void *), void *objptr, void *dso)
|
||||
{
|
||||
ARG_UNUSED(destructor);
|
||||
ARG_UNUSED(objptr);
|
||||
ARG_UNUSED(dso);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int atexit(void (*function)(void))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
zephyr_library()
|
||||
|
||||
zephyr_library_sources(
|
||||
thread.c
|
||||
thread_entry_wrapper.S
|
||||
cpu_idle.S
|
||||
fatal.c
|
||||
fault.c
|
||||
fault_s.S
|
||||
irq_manage.c
|
||||
timestamp.c
|
||||
isr_wrapper.S
|
||||
regular_irq.S
|
||||
switch.S
|
||||
prep_c.c
|
||||
reset.S
|
||||
vector_table.c
|
||||
)
|
||||
|
||||
zephyr_library_sources_ifdef(CONFIG_CACHE_MANAGEMENT cache.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_ARC_FIRQ fast_irq.S)
|
||||
|
||||
zephyr_library_sources_ifdef(CONFIG_IRQ_OFFLOAD irq_offload.c)
|
||||
|
||||
zephyr_library_sources_ifdef(CONFIG_USERSPACE userspace.S)
|
||||
zephyr_library_sources_ifdef(CONFIG_ARC_CONNECT arc_connect.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_ARC_CONNECT arc_smp.c)
|
||||
|
||||
zephyr_library_sources_ifdef(CONFIG_THREAD_LOCAL_STORAGE tls.c)
|
||||
|
||||
add_subdirectory_ifdef(CONFIG_ARC_CORE_MPU mpu)
|
||||
add_subdirectory_ifdef(CONFIG_ARC_SECURE_FIRMWARE secureshield)
|
||||
|
||||
zephyr_linker_sources(ROM_START SORT_KEY 0x0vectors vector_table.ld)
|
||||
20
arch/arc/core/Makefile
Normal file
20
arch/arc/core/Makefile
Normal file
@@ -0,0 +1,20 @@
|
||||
ccflags-y += -I$(srctree)/kernel/unified/include
|
||||
ccflags-y +=-I$(srctree)/arch/$(ARCH)/include
|
||||
|
||||
obj-y += thread.o thread_entry_wrapper.o \
|
||||
cpu_idle.o fast_irq.o fatal.o fault.o \
|
||||
fault_s.o irq_manage.o cache.o \
|
||||
isr_wrapper.o regular_irq.o swap_macros.h swap.o \
|
||||
sys_fatal_error_handler.o
|
||||
|
||||
obj-y += prep_c.o \
|
||||
reset.o \
|
||||
vector_table.o
|
||||
|
||||
obj-$(CONFIG_IRQ_OFFLOAD) += irq_offload.o
|
||||
|
||||
# Some ARC cores like the EM4 lack the atomic LLOCK/SCOND and
|
||||
# can't use these.
|
||||
obj-$(CONFIG_ATOMIC_OPERATIONS_CUSTOM) += atomic.o
|
||||
obj-$(CONFIG_IRQ_VECTOR_TABLE_BSP) += irq_vector_table.o
|
||||
obj-$(CONFIG_SW_ISR_TABLE) += sw_isr_table.o
|
||||
@@ -1,443 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2019 Synopsys.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
* @brief ARCv2 ARC CONNECT driver
|
||||
*
|
||||
*/
|
||||
|
||||
#include <kernel.h>
|
||||
#include <arch/cpu.h>
|
||||
#include <spinlock.h>
|
||||
#include <kernel_internal.h>
|
||||
|
||||
static struct k_spinlock arc_connect_spinlock;
|
||||
|
||||
/* Generate an inter-core interrupt to the target core */
|
||||
void z_arc_connect_ici_generate(uint32_t core)
|
||||
{
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_INTRPT_GENERATE_IRQ, core);
|
||||
}
|
||||
}
|
||||
|
||||
/* Acknowledge the inter-core interrupt raised by core */
|
||||
void z_arc_connect_ici_ack(uint32_t core)
|
||||
{
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_INTRPT_GENERATE_ACK, core);
|
||||
}
|
||||
}
|
||||
|
||||
/* Read inter-core interrupt status */
|
||||
uint32_t z_arc_connect_ici_read_status(uint32_t core)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_INTRPT_READ_STATUS, core);
|
||||
ret = z_arc_connect_cmd_readback();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Check the source of inter-core interrupt */
|
||||
uint32_t z_arc_connect_ici_check_src(void)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_INTRPT_CHECK_SOURCE, 0);
|
||||
ret = z_arc_connect_cmd_readback();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Clear the inter-core interrupt */
|
||||
void z_arc_connect_ici_clear(void)
|
||||
{
|
||||
uint32_t cpu, c;
|
||||
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_INTRPT_CHECK_SOURCE, 0);
|
||||
cpu = z_arc_connect_cmd_readback(); /* 1,2,4,8... */
|
||||
/*
|
||||
* In rare case, multiple concurrent ICIs sent to same target can
|
||||
* possibly be coalesced by MCIP into 1 asserted IRQ, so @cpu can be
|
||||
* "vectored" (multiple bits sets) as opposed to typical single bit
|
||||
*/
|
||||
while (cpu) {
|
||||
c = find_lsb_set(cpu) - 1;
|
||||
z_arc_connect_cmd(
|
||||
ARC_CONNECT_CMD_INTRPT_GENERATE_ACK, c);
|
||||
cpu &= ~(1U << c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Reset the cores in core_mask */
|
||||
void z_arc_connect_debug_reset(uint32_t core_mask)
|
||||
{
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd_data(ARC_CONNECT_CMD_DEBUG_RESET,
|
||||
0, core_mask);
|
||||
}
|
||||
}
|
||||
|
||||
/* Halt the cores in core_mask */
|
||||
void z_arc_connect_debug_halt(uint32_t core_mask)
|
||||
{
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd_data(ARC_CONNECT_CMD_DEBUG_HALT,
|
||||
0, core_mask);
|
||||
}
|
||||
}
|
||||
|
||||
/* Run the cores in core_mask */
|
||||
void z_arc_connect_debug_run(uint32_t core_mask)
|
||||
{
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd_data(ARC_CONNECT_CMD_DEBUG_RUN,
|
||||
0, core_mask);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set core mask */
|
||||
void z_arc_connect_debug_mask_set(uint32_t core_mask, uint32_t mask)
|
||||
{
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd_data(ARC_CONNECT_CMD_DEBUG_SET_MASK,
|
||||
mask, core_mask);
|
||||
}
|
||||
}
|
||||
|
||||
/* Read core mask */
|
||||
uint32_t z_arc_connect_debug_mask_read(uint32_t core_mask)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd_data(ARC_CONNECT_CMD_DEBUG_READ_MASK,
|
||||
0, core_mask);
|
||||
ret = z_arc_connect_cmd_readback();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Select cores that should be halted if the core issuing the command is halted
|
||||
*/
|
||||
void z_arc_connect_debug_select_set(uint32_t core_mask)
|
||||
{
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd_data(ARC_CONNECT_CMD_DEBUG_SET_SELECT,
|
||||
0, core_mask);
|
||||
}
|
||||
}
|
||||
|
||||
/* Read the select value */
|
||||
uint32_t z_arc_connect_debug_select_read(void)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_DEBUG_READ_SELECT, 0);
|
||||
ret = z_arc_connect_cmd_readback();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Read the status, halt or run of all cores in the system */
|
||||
uint32_t z_arc_connect_debug_en_read(void)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_DEBUG_READ_EN, 0);
|
||||
ret = z_arc_connect_cmd_readback();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Read the last command sent */
|
||||
uint32_t z_arc_connect_debug_cmd_read(void)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_DEBUG_READ_CMD, 0);
|
||||
ret = z_arc_connect_cmd_readback();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Read the value of internal MCD_CORE register */
|
||||
uint32_t z_arc_connect_debug_core_read(void)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_DEBUG_READ_CORE, 0);
|
||||
ret = z_arc_connect_cmd_readback();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Clear global free running counter */
|
||||
void z_arc_connect_gfrc_clear(void)
|
||||
{
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_GFRC_CLEAR, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* Read total 64 bits of global free running counter */
|
||||
uint64_t z_arc_connect_gfrc_read(void)
|
||||
{
|
||||
uint32_t low;
|
||||
uint32_t high;
|
||||
uint32_t key;
|
||||
|
||||
/*
|
||||
* each core has its own arc connect interface, i.e.,
|
||||
* CMD/READBACK. So several concurrent commands to ARC
|
||||
* connect are of if they are trying to access different
|
||||
* sub-components. For GFRC, HW allows simultaneously accessing to
|
||||
* counters. So an irq lock is enough.
|
||||
*/
|
||||
key = arch_irq_lock();
|
||||
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_GFRC_READ_LO, 0);
|
||||
low = z_arc_connect_cmd_readback();
|
||||
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_GFRC_READ_HI, 0);
|
||||
high = z_arc_connect_cmd_readback();
|
||||
|
||||
arch_irq_unlock(key);
|
||||
|
||||
return (((uint64_t)high) << 32) | low;
|
||||
}
|
||||
|
||||
/* Enable global free running counter */
|
||||
void z_arc_connect_gfrc_enable(void)
|
||||
{
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_GFRC_ENABLE, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* Disable global free running counter */
|
||||
void z_arc_connect_gfrc_disable(void)
|
||||
{
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_GFRC_DISABLE, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* Disable global free running counter */
|
||||
void z_arc_connect_gfrc_core_set(uint32_t core_mask)
|
||||
{
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd_data(ARC_CONNECT_CMD_GFRC_SET_CORE,
|
||||
0, core_mask);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set the relevant cores to halt global free running counter */
|
||||
uint32_t z_arc_connect_gfrc_halt_read(void)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_GFRC_READ_HALT, 0);
|
||||
ret = z_arc_connect_cmd_readback();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Read the internal CORE register */
|
||||
uint32_t z_arc_connect_gfrc_core_read(void)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_GFRC_READ_CORE, 0);
|
||||
ret = z_arc_connect_cmd_readback();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Enable interrupt distribute unit */
|
||||
void z_arc_connect_idu_enable(void)
|
||||
{
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_IDU_ENABLE, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* Disable interrupt distribute unit */
|
||||
void z_arc_connect_idu_disable(void)
|
||||
{
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_IDU_DISABLE, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* Read enable status of interrupt distribute unit */
|
||||
uint32_t z_arc_connect_idu_read_enable(void)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_IDU_READ_ENABLE, 0);
|
||||
ret = z_arc_connect_cmd_readback();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set the triggering mode and distribution mode for the specified common
|
||||
* interrupt
|
||||
*/
|
||||
void z_arc_connect_idu_set_mode(uint32_t irq_num,
|
||||
uint16_t trigger_mode, uint16_t distri_mode)
|
||||
{
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd_data(ARC_CONNECT_CMD_IDU_SET_MODE,
|
||||
irq_num, (distri_mode | (trigger_mode << 4)));
|
||||
}
|
||||
}
|
||||
|
||||
/* Read the internal MODE register of the specified common interrupt */
|
||||
uint32_t z_arc_connect_idu_read_mode(uint32_t irq_num)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_IDU_READ_MODE, irq_num);
|
||||
ret = z_arc_connect_cmd_readback();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set the target cores to receive the specified common interrupt
|
||||
* when it is triggered
|
||||
*/
|
||||
void z_arc_connect_idu_set_dest(uint32_t irq_num, uint32_t core_mask)
|
||||
{
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd_data(ARC_CONNECT_CMD_IDU_SET_DEST,
|
||||
irq_num, core_mask);
|
||||
}
|
||||
}
|
||||
|
||||
/* Read the internal DEST register of the specified common interrupt */
|
||||
uint32_t z_arc_connect_idu_read_dest(uint32_t irq_num)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_IDU_READ_DEST, irq_num);
|
||||
ret = z_arc_connect_cmd_readback();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Assert the specified common interrupt */
|
||||
void z_arc_connect_idu_gen_cirq(uint32_t irq_num)
|
||||
{
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_IDU_GEN_CIRQ, irq_num);
|
||||
}
|
||||
}
|
||||
|
||||
/* Acknowledge the specified common interrupt */
|
||||
void z_arc_connect_idu_ack_cirq(uint32_t irq_num)
|
||||
{
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_IDU_ACK_CIRQ, irq_num);
|
||||
}
|
||||
}
|
||||
|
||||
/* Read the internal STATUS register of the specified common interrupt */
|
||||
uint32_t z_arc_connect_idu_check_status(uint32_t irq_num)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_IDU_CHECK_STATUS, irq_num);
|
||||
ret = z_arc_connect_cmd_readback();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Read the internal SOURCE register of the specified common interrupt */
|
||||
uint32_t z_arc_connect_idu_check_source(uint32_t irq_num)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_IDU_CHECK_SOURCE, irq_num);
|
||||
ret = z_arc_connect_cmd_readback();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Mask or unmask the specified common interrupt */
|
||||
void z_arc_connect_idu_set_mask(uint32_t irq_num, uint32_t mask)
|
||||
{
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd_data(ARC_CONNECT_CMD_IDU_SET_MASK,
|
||||
irq_num, mask);
|
||||
}
|
||||
}
|
||||
|
||||
/* Read the internal MASK register of the specified common interrupt */
|
||||
uint32_t z_arc_connect_idu_read_mask(uint32_t irq_num)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_IDU_READ_MASK, irq_num);
|
||||
ret = z_arc_connect_cmd_readback();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if it is the first-acknowledging core to the common interrupt
|
||||
* if IDU is programmed in the first-acknowledged mode
|
||||
*/
|
||||
uint32_t z_arc_connect_idu_check_first(uint32_t irq_num)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
LOCKED(&arc_connect_spinlock) {
|
||||
z_arc_connect_cmd(ARC_CONNECT_CMD_IDU_CHECK_FIRST, irq_num);
|
||||
ret = z_arc_connect_cmd_readback();
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
@@ -1,183 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2019 Synopsys.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
* @brief codes required for ARC multicore and Zephyr smp support
|
||||
*
|
||||
*/
|
||||
#include <device.h>
|
||||
#include <kernel.h>
|
||||
#include <kernel_structs.h>
|
||||
#include <ksched.h>
|
||||
#include <soc.h>
|
||||
#include <init.h>
|
||||
|
||||
|
||||
#ifndef IRQ_ICI
|
||||
#define IRQ_ICI 19
|
||||
#endif
|
||||
|
||||
#define ARCV2_ICI_IRQ_PRIORITY 1
|
||||
|
||||
volatile struct {
|
||||
arch_cpustart_t fn;
|
||||
void *arg;
|
||||
} arc_cpu_init[CONFIG_MP_NUM_CPUS];
|
||||
|
||||
/*
|
||||
* arc_cpu_wake_flag is used to sync up master core and slave cores
|
||||
* Slave core will spin for arc_cpu_wake_flag until master core sets
|
||||
* it to the core id of slave core. Then, slave core clears it to notify
|
||||
* master core that it's waken
|
||||
*
|
||||
*/
|
||||
volatile uint32_t arc_cpu_wake_flag;
|
||||
|
||||
volatile char *arc_cpu_sp;
|
||||
/*
|
||||
* _curr_cpu is used to record the struct of _cpu_t of each cpu.
|
||||
* for efficient usage in assembly
|
||||
*/
|
||||
volatile _cpu_t *_curr_cpu[CONFIG_MP_NUM_CPUS];
|
||||
|
||||
/* Called from Zephyr initialization */
|
||||
void arch_start_cpu(int cpu_num, k_thread_stack_t *stack, int sz,
|
||||
arch_cpustart_t fn, void *arg)
|
||||
{
|
||||
_curr_cpu[cpu_num] = &(_kernel.cpus[cpu_num]);
|
||||
arc_cpu_init[cpu_num].fn = fn;
|
||||
arc_cpu_init[cpu_num].arg = arg;
|
||||
|
||||
/* set the initial sp of target sp through arc_cpu_sp
|
||||
* arc_cpu_wake_flag will protect arc_cpu_sp that
|
||||
* only one slave cpu can read it per time
|
||||
*/
|
||||
arc_cpu_sp = Z_KERNEL_STACK_BUFFER(stack) + sz;
|
||||
|
||||
arc_cpu_wake_flag = cpu_num;
|
||||
|
||||
/* wait slave cpu to start */
|
||||
while (arc_cpu_wake_flag != 0U) {
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
static void arc_connect_debug_mask_update(int cpu_num)
|
||||
{
|
||||
uint32_t core_mask = 1 << cpu_num;
|
||||
|
||||
core_mask |= z_arc_connect_debug_select_read();
|
||||
z_arc_connect_debug_select_set(core_mask);
|
||||
/* Debugger halts cores at all conditions:
|
||||
* ARC_CONNECT_CMD_DEBUG_MASK_H: Core global halt.
|
||||
* ARC_CONNECT_CMD_DEBUG_MASK_AH: Actionpoint halt.
|
||||
* ARC_CONNECT_CMD_DEBUG_MASK_BH: Software breakpoint halt.
|
||||
* ARC_CONNECT_CMD_DEBUG_MASK_SH: Self halt.
|
||||
*/
|
||||
z_arc_connect_debug_mask_set(core_mask, (ARC_CONNECT_CMD_DEBUG_MASK_SH
|
||||
| ARC_CONNECT_CMD_DEBUG_MASK_BH | ARC_CONNECT_CMD_DEBUG_MASK_AH
|
||||
| ARC_CONNECT_CMD_DEBUG_MASK_H));
|
||||
}
|
||||
#endif
|
||||
|
||||
/* the C entry of slave cores */
|
||||
void z_arc_slave_start(int cpu_num)
|
||||
{
|
||||
arch_cpustart_t fn;
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
struct arc_connect_bcr bcr;
|
||||
|
||||
bcr.val = z_arc_v2_aux_reg_read(_ARC_V2_CONNECT_BCR);
|
||||
|
||||
if (bcr.dbg) {
|
||||
/* configure inter-core debug unit if available */
|
||||
arc_connect_debug_mask_update(cpu_num);
|
||||
}
|
||||
|
||||
z_irq_setup();
|
||||
|
||||
z_arc_connect_ici_clear();
|
||||
z_irq_priority_set(IRQ_ICI, ARCV2_ICI_IRQ_PRIORITY, 0);
|
||||
irq_enable(IRQ_ICI);
|
||||
#endif
|
||||
/* call the function set by arch_start_cpu */
|
||||
fn = arc_cpu_init[cpu_num].fn;
|
||||
|
||||
fn(arc_cpu_init[cpu_num].arg);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
|
||||
static void sched_ipi_handler(const void *unused)
|
||||
{
|
||||
ARG_UNUSED(unused);
|
||||
|
||||
z_arc_connect_ici_clear();
|
||||
z_sched_ipi();
|
||||
}
|
||||
|
||||
/* arch implementation of sched_ipi */
|
||||
void arch_sched_ipi(void)
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
/* broadcast sched_ipi request to other cores
|
||||
* if the target is current core, hardware will ignore it
|
||||
*/
|
||||
for (i = 0U; i < CONFIG_MP_NUM_CPUS; i++) {
|
||||
z_arc_connect_ici_generate(i);
|
||||
}
|
||||
}
|
||||
|
||||
static int arc_smp_init(const struct device *dev)
|
||||
{
|
||||
ARG_UNUSED(dev);
|
||||
struct arc_connect_bcr bcr;
|
||||
|
||||
/* necessary master core init */
|
||||
_curr_cpu[0] = &(_kernel.cpus[0]);
|
||||
|
||||
bcr.val = z_arc_v2_aux_reg_read(_ARC_V2_CONNECT_BCR);
|
||||
|
||||
if (bcr.dbg) {
|
||||
/* configure inter-core debug unit if available */
|
||||
arc_connect_debug_mask_update(0);
|
||||
}
|
||||
|
||||
if (bcr.ipi) {
|
||||
/* register ici interrupt, just need master core to register once */
|
||||
z_arc_connect_ici_clear();
|
||||
IRQ_CONNECT(IRQ_ICI, ARCV2_ICI_IRQ_PRIORITY,
|
||||
sched_ipi_handler, NULL, 0);
|
||||
|
||||
irq_enable(IRQ_ICI);
|
||||
} else {
|
||||
__ASSERT(0,
|
||||
"ARC connect has no inter-core interrupt\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (bcr.gfrc) {
|
||||
/* global free running count init */
|
||||
z_arc_connect_gfrc_enable();
|
||||
|
||||
/* when all cores halt, gfrc halt */
|
||||
z_arc_connect_gfrc_core_set((1 << CONFIG_MP_NUM_CPUS) - 1);
|
||||
z_arc_connect_gfrc_clear();
|
||||
} else {
|
||||
__ASSERT(0,
|
||||
"ARC connect has no global free running counter\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
SYS_INIT(arc_smp_init, PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT);
|
||||
#endif
|
||||
434
arch/arc/core/atomic.S
Normal file
434
arch/arc/core/atomic.S
Normal file
@@ -0,0 +1,434 @@
|
||||
/*
|
||||
* Copyright (c) 2014 Wind River Systems, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
* @brief ARC atomic operations library
|
||||
*
|
||||
* This library provides routines to perform a number of atomic operations
|
||||
* on a memory location: add, subtract, increment, decrement, bitwise OR,
|
||||
* bitwise NOR, bitwise AND, bitwise NAND, set, clear and compare-and-swap.
|
||||
*
|
||||
* This requires the processor to support LLOCK and SCOND instructions,
|
||||
* where they are not supported on ARC EM family processors.
|
||||
*/
|
||||
|
||||
#define _ASMLANGUAGE
|
||||
|
||||
#include <toolchain.h>
|
||||
#include <sections.h>
|
||||
|
||||
/* exports */
|
||||
|
||||
GTEXT(atomic_set)
|
||||
GTEXT(atomic_get)
|
||||
GTEXT(atomic_add)
|
||||
GTEXT(atomic_nand)
|
||||
GTEXT(atomic_and)
|
||||
GTEXT(atomic_or)
|
||||
GTEXT(atomic_xor)
|
||||
GTEXT(atomic_clear)
|
||||
GTEXT(atomic_dec)
|
||||
GTEXT(atomic_inc)
|
||||
GTEXT(atomic_sub)
|
||||
GTEXT(atomic_cas)
|
||||
|
||||
.section .TEXT._Atomic, "ax"
|
||||
.balign 2
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief Atomically clear a memory location
|
||||
*
|
||||
* This routine atomically clears the contents of <target> and returns the old
|
||||
* value that was in <target>.
|
||||
*
|
||||
* This routine can be used from both task and interrupt level.
|
||||
*
|
||||
* @return Contents of <target> before the atomic operation
|
||||
*
|
||||
* ERRNO: N/A
|
||||
*
|
||||
* atomic_val_t atomic_clear
|
||||
* (
|
||||
* atomic_t *target /@ memory location to clear @/
|
||||
* )
|
||||
*/
|
||||
|
||||
SECTION_SUBSEC_FUNC(TEXT, atomic_clear_set, atomic_clear)
|
||||
mov_s r1, 0
|
||||
/* fall through into atomic_set */
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief Atomically set a memory location
|
||||
*
|
||||
* This routine atomically sets the contents of <target> to <value> and returns
|
||||
* the old value that was in <target>.
|
||||
*
|
||||
* This routine can be used from both task and interrupt level.
|
||||
*
|
||||
* @return Contents of <target> before the atomic operation
|
||||
*
|
||||
* ERRNO: N/A
|
||||
*
|
||||
* atomic_val_t atomic_set
|
||||
* (
|
||||
* atomic_t *target, /@ memory location to set @/
|
||||
* atomic_val_t value /@ set with this value @/
|
||||
* )
|
||||
*
|
||||
*/
|
||||
|
||||
SECTION_SUBSEC_FUNC(TEXT, atomic_clear_set, atomic_set)
|
||||
|
||||
ex r1, [r0] /* swap new value with old value */
|
||||
|
||||
j_s.d [blink]
|
||||
mov_s r0, r1 /* return old value */
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief Get the value of a shared memory atomically
|
||||
*
|
||||
* This routine atomically retrieves the value in *target
|
||||
*
|
||||
* atomic_val_t atomic_get
|
||||
* (
|
||||
* atomic_t *target /@ address of atom to be retrieved @/
|
||||
* )
|
||||
*
|
||||
* RETURN: value read from address target.
|
||||
*
|
||||
*/
|
||||
|
||||
SECTION_FUNC(TEXT, atomic_get)
|
||||
ld_s r0, [r0, 0]
|
||||
j_s [blink]
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief Atomically increment a memory location
|
||||
*
|
||||
* This routine atomically increments the value in <target>. The operation is
|
||||
* done using unsigned integer arithmetic. Various CPU architectures may impose
|
||||
* restrictions with regards to the alignment and cache attributes of the
|
||||
* atomic_t type.
|
||||
*
|
||||
* This routine can be used from both task and interrupt level.
|
||||
*
|
||||
* @return Contents of <target> before the atomic operation
|
||||
*
|
||||
* ERRNO: N/A
|
||||
*
|
||||
* atomic_val_t atomic_inc
|
||||
* (
|
||||
* atomic_t *target, /@ memory location to increment @/
|
||||
* )
|
||||
*
|
||||
*/
|
||||
|
||||
SECTION_SUBSEC_FUNC(TEXT, atomic_inc_add, atomic_inc)
|
||||
mov_s r1, 1
|
||||
/* fall through into atomic_add */
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief Atomically add a value to a memory location
|
||||
*
|
||||
* This routine atomically adds the contents of <target> and <value>, placing
|
||||
* the result in <target>. The operation is done using signed integer arithmetic.
|
||||
* Various CPU architectures may impose restrictions with regards to the
|
||||
* alignment and cache attributes of the atomic_t type.
|
||||
*
|
||||
* This routine can be used from both task and interrupt level.
|
||||
*
|
||||
* @return Contents of <target> before the atomic operation
|
||||
*
|
||||
* ERRNO: N/A
|
||||
*
|
||||
* atomic_val_t atomic_add
|
||||
* (
|
||||
* atomic_t *target, /@ memory location to add to @/
|
||||
* atomic_val_t value /@ value to add @/
|
||||
* )
|
||||
*/
|
||||
|
||||
SECTION_SUBSEC_FUNC(TEXT, atomic_inc_add, atomic_add)
|
||||
|
||||
llock r2, [r0] /* load old value and mark exclusive access */
|
||||
add_s r3, r1, r2
|
||||
scond r3, [r0] /* try to store new value */
|
||||
|
||||
/* STATUS32.Z = 1 if successful */
|
||||
|
||||
bne_s atomic_add /* if store is not successful, retry */
|
||||
|
||||
j_s.d [blink]
|
||||
mov_s r0, r2 /* return old value */
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief Atomically decrement a memory location
|
||||
*
|
||||
* This routine atomically decrements the value in <target>. The operation is
|
||||
* done using unsigned integer arithmetic. Various CPU architectures may impose
|
||||
* restrictions with regards to the alignment and cache attributes of the
|
||||
* atomic_t type.
|
||||
*
|
||||
* This routine can be used from both task and interrupt level.
|
||||
*
|
||||
* @return Contents of <target> before the atomic operation
|
||||
*
|
||||
* ERRNO: N/A
|
||||
*
|
||||
* atomic_val_t atomic_dec
|
||||
* (
|
||||
* atomic_t *target, /@ memory location to decrement @/
|
||||
* )
|
||||
*
|
||||
*/
|
||||
|
||||
SECTION_SUBSEC_FUNC(TEXT, atomic_dec_sub, atomic_dec)
|
||||
mov_s r1, 1
|
||||
/* fall through into atomic_sub */
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief Atomically subtract a value from a memory location
|
||||
*
|
||||
* This routine atomically subtracts <value> from the contents of <target>,
|
||||
* placing the result in <target>. The operation is done using signed integer
|
||||
* arithmetic. Various CPU architectures may impose restrictions with regards to
|
||||
* the alignment and cache attributes of the atomic_t type.
|
||||
*
|
||||
* This routine can be used from both task and interrupt level.
|
||||
*
|
||||
* @return Contents of <target> before the atomic operation
|
||||
*
|
||||
* ERRNO: N/A
|
||||
*
|
||||
* atomic_val_t atomic_sub
|
||||
* (
|
||||
* atomic_t *target, /@ memory location to subtract from @/
|
||||
* atomic_val_t value /@ value to subtract @/
|
||||
* )
|
||||
*
|
||||
*/
|
||||
|
||||
SECTION_SUBSEC_FUNC(TEXT, atomic_dec_sub, atomic_sub)
|
||||
|
||||
llock r2, [r0] /* load old value and mark exclusive access */
|
||||
sub r3, r2, r1
|
||||
scond r3, [r0] /* try to store new value */
|
||||
|
||||
/* STATUS32.Z = 1 if successful */
|
||||
|
||||
bne_s atomic_sub /* if store is not successful, retry */
|
||||
|
||||
j_s.d [blink]
|
||||
mov_s r0, r2 /* return old value */
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief Atomically perform a bitwise NAND on a memory location
|
||||
*
|
||||
* This routine atomically performs a bitwise NAND operation of the contents of
|
||||
* <target> and <value>, placing the result in <target>.
|
||||
* Various CPU architectures may impose restrictions with regards to the
|
||||
* alignment and cache attributes of the atomic_t type.
|
||||
*
|
||||
* This routine can be used from both task and interrupt level.
|
||||
*
|
||||
* @return Contents of <target> before the atomic operation
|
||||
*
|
||||
* ERRNO: N/A
|
||||
*
|
||||
* atomic_val_t atomic_nand
|
||||
* (
|
||||
* atomic_t *target, /@ memory location to NAND @/
|
||||
* atomic_val_t value /@ NAND with this value @/
|
||||
* )
|
||||
*
|
||||
*/
|
||||
|
||||
SECTION_FUNC(TEXT, atomic_nand)
|
||||
|
||||
llock r2, [r0] /* load old value and mark exclusive access */
|
||||
and r3, r1, r2
|
||||
not r3, r3
|
||||
scond r3, [r0] /* try to store new value */
|
||||
|
||||
/* STATUS32.Z = 1 if successful */
|
||||
|
||||
bne_s atomic_nand /* if store is not successful, retry */
|
||||
|
||||
j_s.d [blink]
|
||||
mov_s r0, r2 /* return old value */
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief Atomically perform a bitwise AND on a memory location
|
||||
*
|
||||
* This routine atomically performs a bitwise AND operation of the contents of
|
||||
* <target> and <value>, placing the result in <target>.
|
||||
* Various CPU architectures may impose restrictions with regards to the
|
||||
* alignment and cache attributes of the atomic_t type.
|
||||
*
|
||||
* This routine can be used from both task and interrupt level.
|
||||
*
|
||||
* @return Contents of <target> before the atomic operation
|
||||
*
|
||||
* ERRNO: N/A
|
||||
*
|
||||
* atomic_val_t atomic_and
|
||||
* (
|
||||
* atomic_t *target, /@ memory location to AND @/
|
||||
* atomic_val_t value /@ AND with this value @/
|
||||
* )
|
||||
*
|
||||
*/
|
||||
|
||||
SECTION_FUNC(TEXT, atomic_and)
|
||||
|
||||
llock r2, [r0] /* load old value and mark exclusive access */
|
||||
and r3, r1, r2
|
||||
scond r3, [r0] /* try to store new value */
|
||||
|
||||
/* STATUS32.Z = 1 if successful */
|
||||
|
||||
bne_s atomic_and /* if store is not successful, retry */
|
||||
|
||||
j_s.d [blink]
|
||||
mov_s r0, r2 /* return old value */
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief Atomically perform a bitwise OR on memory location
|
||||
*
|
||||
* This routine atomically performs a bitwise OR operation of the contents of
|
||||
* <target> and <value>, placing the result in <target>.
|
||||
* Various CPU architectures may impose restrictions with regards to the
|
||||
* alignment and cache attributes of the atomic_t type.
|
||||
*
|
||||
* This routine can be used from both task and interrupt level.
|
||||
*
|
||||
* @return Contents of <target> before the atomic operation
|
||||
*
|
||||
* ERRNO: N/A
|
||||
*
|
||||
* atomic_val_t atomic_or
|
||||
* (
|
||||
* atomic_t *target, /@ memory location to OR @/
|
||||
* atomic_val_t value /@ OR with this value @/
|
||||
* )
|
||||
*
|
||||
*/
|
||||
|
||||
SECTION_FUNC(TEXT, atomic_or)
|
||||
|
||||
llock r2, [r0] /* load old value and mark exclusive access */
|
||||
or r3, r1, r2
|
||||
scond r3, [r0] /* try to store new value */
|
||||
|
||||
/* STATUS32.Z = 1 if successful */
|
||||
|
||||
bne_s atomic_or /* if store is not successful, retry */
|
||||
|
||||
j_s.d [blink]
|
||||
mov_s r0, r2 /* return old value */
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief Atomically perform a bitwise XOR on a memory location
|
||||
*
|
||||
* This routine atomically performs a bitwise XOR operation of the contents of
|
||||
* <target> and <value>, placing the result in <target>.
|
||||
* Various CPU architectures may impose restrictions with regards to the
|
||||
* alignment and cache attributes of the atomic_t type.
|
||||
*
|
||||
* This routine can be used from both task and interrupt level.
|
||||
*
|
||||
* @return Contents of <target> before the atomic operation
|
||||
*
|
||||
* ERRNO: N/A
|
||||
*
|
||||
* atomic_val_t atomic_xor
|
||||
* (
|
||||
* atomic_t *target, /@ memory location to XOR @/
|
||||
* atomic_val_t value /@ XOR with this value @/
|
||||
* )
|
||||
*
|
||||
*/
|
||||
|
||||
SECTION_FUNC(TEXT, atomic_xor)
|
||||
|
||||
llock r2, [r0] /* load old value and mark exclusive access */
|
||||
xor r3, r1, r2
|
||||
scond r3, [r0] /* try to store new value */
|
||||
|
||||
/* STATUS32.Z = 1 if successful */
|
||||
|
||||
bne_s atomic_xor /* if store is not successful, retry */
|
||||
|
||||
j_s.d [blink]
|
||||
mov_s r0, r2 /* return old value */
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief Atomically compare-and-swap the contents of a memory location
|
||||
*
|
||||
* This routine performs an atomic compare-and-swap. testing that the contents of
|
||||
* <target> contains <oldValue>, and if it does, setting the value of <target>
|
||||
* to <newValue>. Various CPU architectures may impose restrictions with regards
|
||||
* to the alignment and cache attributes of the atomic_t type.
|
||||
*
|
||||
* This routine can be used from both task and interrupt level.
|
||||
*
|
||||
* @return 1 if the swap is actually executed, 0 otherwise.
|
||||
*
|
||||
* ERRNO: N/A
|
||||
*
|
||||
* int atomic_cas
|
||||
* (
|
||||
* atomic_t *target, /@ memory location to compare-and-swap @/
|
||||
* atomic_val_t oldValue, /@ compare to this value @/
|
||||
* atomic_val_t newValue, /@ swap with this value @/
|
||||
* )
|
||||
*
|
||||
*/
|
||||
|
||||
SECTION_FUNC(TEXT, atomic_cas)
|
||||
|
||||
llock r3, [r0] /* load old value and mark exclusive access */
|
||||
cmp_s r1, r3
|
||||
|
||||
bne_s nanoAtomicCas_fail
|
||||
|
||||
scond r2, [r0] /* try to store new value */
|
||||
|
||||
/* STATUS32.Z = 1 if successful */
|
||||
|
||||
bne_s atomic_cas /* if store is not successful, retry */
|
||||
|
||||
j_s.d [blink]
|
||||
mov_s r0, 1 /* return TRUE */
|
||||
|
||||
/* failed comparison */
|
||||
nanoAtomicCas_fail:
|
||||
scond r1, [r0] /* write old value to clear the access lock */
|
||||
j_s.d [blink]
|
||||
mov_s r0, 0 /* return FALSE */
|
||||
@@ -3,7 +3,17 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Synopsys, Inc. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -13,20 +23,27 @@
|
||||
* This module contains functions for manipulation of the d-cache.
|
||||
*/
|
||||
|
||||
#include <kernel.h>
|
||||
#include <nanokernel.h>
|
||||
#include <arch/cpu.h>
|
||||
#include <sys/util.h>
|
||||
#include <misc/util.h>
|
||||
#include <toolchain.h>
|
||||
#include <cache.h>
|
||||
#include <linker/linker-defs.h>
|
||||
#include <linker-defs.h>
|
||||
#include <arch/arc/v2/aux_regs.h>
|
||||
#include <kernel_internal.h>
|
||||
#include <sys/__assert.h>
|
||||
#include <nano_internal.h>
|
||||
#include <misc/__assert.h>
|
||||
#include <init.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#if defined(CONFIG_DCACHE_LINE_SIZE_DETECT)
|
||||
size_t sys_cache_line_size;
|
||||
#if defined(CONFIG_CACHE_FLUSHING)
|
||||
|
||||
#if (CONFIG_CACHE_LINE_SIZE == 0) && !defined(CONFIG_CACHE_LINE_SIZE_DETECT)
|
||||
#error Cannot use this implementation with a cache line size of 0
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_CACHE_LINE_SIZE_DETECT)
|
||||
#define DCACHE_LINE_SIZE sys_cache_line_size
|
||||
#else
|
||||
#define DCACHE_LINE_SIZE CONFIG_CACHE_LINE_SIZE
|
||||
#endif
|
||||
|
||||
#define DC_CTRL_DC_ENABLE 0x0 /* enable d-cache */
|
||||
@@ -41,129 +58,120 @@ size_t sys_cache_line_size;
|
||||
#define DC_CTRL_OP_SUCCEEDED 0x4 /* d-cache operation succeeded */
|
||||
|
||||
|
||||
static bool dcache_available(void)
|
||||
static int dcache_available(void)
|
||||
{
|
||||
unsigned long val = z_arc_v2_aux_reg_read(_ARC_V2_D_CACHE_BUILD);
|
||||
unsigned long val = _arc_v2_aux_reg_read(_ARC_V2_D_CACHE_BUILD);
|
||||
|
||||
val &= 0xff; /* extract version */
|
||||
return (val == 0) ? false : true;
|
||||
return (val == 0)?0:1;
|
||||
}
|
||||
|
||||
static void dcache_dc_ctrl(uint32_t dcache_en_mask)
|
||||
{
|
||||
if (dcache_available()) {
|
||||
z_arc_v2_aux_reg_write(_ARC_V2_DC_CTRL, dcache_en_mask);
|
||||
}
|
||||
if (!dcache_available())
|
||||
return;
|
||||
_arc_v2_aux_reg_write(_ARC_V2_DC_CTRL, dcache_en_mask);
|
||||
}
|
||||
|
||||
void arch_dcache_enable(void)
|
||||
static void dcache_enable(void)
|
||||
{
|
||||
dcache_dc_ctrl(DC_CTRL_DC_ENABLE);
|
||||
}
|
||||
|
||||
static void arch_dcache_flush(void *start_addr_ptr, size_t size)
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief Flush multiple d-cache lines to memory
|
||||
*
|
||||
* No alignment is required for either <start_addr> or <size>, but since
|
||||
* dcache_flush_mlines() iterates on the d-cache lines, a cache line
|
||||
* alignment for both is optimal.
|
||||
*
|
||||
* The d-cache line size is specified either via the CONFIG_CACHE_LINE_SIZE
|
||||
* kconfig option or it is detected at runtime.
|
||||
*
|
||||
* @param start_addr the pointer to start the multi-line flush
|
||||
* @param size the number of bytes that are to be flushed
|
||||
*
|
||||
* @return N/A
|
||||
*/
|
||||
static void dcache_flush_mlines(uint32_t start_addr, uint32_t size)
|
||||
{
|
||||
size_t line_size = sys_cache_data_line_size_get();
|
||||
uintptr_t start_addr = (uintptr_t)start_addr_ptr;
|
||||
uintptr_t end_addr;
|
||||
uint32_t end_addr;
|
||||
unsigned int key;
|
||||
|
||||
if (!dcache_available() || (size == 0U) || line_size == 0U) {
|
||||
if (!dcache_available() || (size == 0)) {
|
||||
return;
|
||||
}
|
||||
|
||||
end_addr = start_addr + size;
|
||||
end_addr = start_addr + size - 1;
|
||||
start_addr &= (uint32_t)(~(DCACHE_LINE_SIZE - 1));
|
||||
|
||||
start_addr = ROUND_DOWN(start_addr, line_size);
|
||||
|
||||
key = arch_irq_lock(); /* --enter critical section-- */
|
||||
key = irq_lock(); /* --enter critical section-- */
|
||||
|
||||
do {
|
||||
z_arc_v2_aux_reg_write(_ARC_V2_DC_FLDL, start_addr);
|
||||
__builtin_arc_nop();
|
||||
__builtin_arc_nop();
|
||||
__builtin_arc_nop();
|
||||
_arc_v2_aux_reg_write(_ARC_V2_DC_FLDL, start_addr);
|
||||
__asm__ volatile("nop_s");
|
||||
__asm__ volatile("nop_s");
|
||||
__asm__ volatile("nop_s");
|
||||
/* wait for flush completion */
|
||||
do {
|
||||
if ((z_arc_v2_aux_reg_read(_ARC_V2_DC_CTRL) &
|
||||
DC_CTRL_FLUSH_STATUS) == 0) {
|
||||
if ((_arc_v2_aux_reg_read(_ARC_V2_DC_CTRL) &
|
||||
DC_CTRL_FLUSH_STATUS) == 0)
|
||||
break;
|
||||
}
|
||||
} while (1);
|
||||
start_addr += line_size;
|
||||
} while (start_addr < end_addr);
|
||||
start_addr += DCACHE_LINE_SIZE;
|
||||
} while (start_addr <= end_addr);
|
||||
|
||||
arch_irq_unlock(key); /* --exit critical section-- */
|
||||
irq_unlock(key); /* --exit critical section-- */
|
||||
|
||||
}
|
||||
|
||||
static void arch_dcache_invd(void *start_addr_ptr, size_t size)
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief Flush d-cache lines to main memory
|
||||
*
|
||||
* No alignment is required for either <virt> or <size>, but since
|
||||
* sys_cache_flush() iterates on the d-cache lines, a d-cache line alignment for
|
||||
* both is optimal.
|
||||
*
|
||||
* The d-cache line size is specified either via the CONFIG_CACHE_LINE_SIZE
|
||||
* kconfig option or it is detected at runtime.
|
||||
*
|
||||
* @param start_addr the pointer to start the multi-line flush
|
||||
* @param size the number of bytes that are to be flushed
|
||||
*
|
||||
* @return N/A
|
||||
*/
|
||||
|
||||
void sys_cache_flush(vaddr_t start_addr, size_t size)
|
||||
{
|
||||
size_t line_size = sys_cache_data_line_size_get();
|
||||
uintptr_t start_addr = (uintptr_t)start_addr_ptr;
|
||||
uintptr_t end_addr;
|
||||
unsigned int key;
|
||||
|
||||
if (!dcache_available() || (size == 0U) || line_size == 0U) {
|
||||
return;
|
||||
}
|
||||
end_addr = start_addr + size;
|
||||
start_addr = ROUND_DOWN(start_addr, line_size);
|
||||
|
||||
key = arch_irq_lock(); /* -enter critical section- */
|
||||
|
||||
do {
|
||||
z_arc_v2_aux_reg_write(_ARC_V2_DC_IVDL, start_addr);
|
||||
__builtin_arc_nop();
|
||||
__builtin_arc_nop();
|
||||
__builtin_arc_nop();
|
||||
start_addr += line_size;
|
||||
} while (start_addr < end_addr);
|
||||
irq_unlock(key); /* -exit critical section- */
|
||||
dcache_flush_mlines((uint32_t)start_addr, (uint32_t)size);
|
||||
}
|
||||
|
||||
int arch_dcache_range(void *addr, size_t size, int op)
|
||||
{
|
||||
if (op == K_CACHE_INVD) {
|
||||
/*
|
||||
* TODO: On invalidate we can contextually flush by setting the
|
||||
* DC_CTRL_INVALID_FLUSH bit
|
||||
*/
|
||||
arch_dcache_invd(addr, size);
|
||||
} else if (op == K_CACHE_WB) {
|
||||
arch_dcache_flush(addr, size);
|
||||
} else {
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_DCACHE_LINE_SIZE_DETECT)
|
||||
#if defined(CONFIG_CACHE_LINE_SIZE_DETECT)
|
||||
size_t sys_cache_line_size;
|
||||
static void init_dcache_line_size(void)
|
||||
{
|
||||
uint32_t val;
|
||||
|
||||
val = z_arc_v2_aux_reg_read(_ARC_V2_D_CACHE_BUILD);
|
||||
__ASSERT((val&0xff) != 0U, "d-cache is not present");
|
||||
val = _arc_v2_aux_reg_read(_ARC_V2_D_CACHE_BUILD);
|
||||
__ASSERT((val&0xff) != 0, "d-cache is not present");
|
||||
val = ((val>>16) & 0xf) + 1;
|
||||
val *= 16U;
|
||||
val *= 16;
|
||||
sys_cache_line_size = (size_t) val;
|
||||
}
|
||||
|
||||
size_t arch_dcache_line_size_get(void)
|
||||
{
|
||||
return sys_cache_line_size;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int init_dcache(const struct device *unused)
|
||||
static int init_dcache(struct device *unused)
|
||||
{
|
||||
ARG_UNUSED(unused);
|
||||
|
||||
arch_dcache_enable();
|
||||
dcache_enable();
|
||||
|
||||
#if defined(CONFIG_DCACHE_LINE_SIZE_DETECT)
|
||||
#if defined(CONFIG_CACHE_LINE_SIZE_DETECT)
|
||||
init_dcache_line_size();
|
||||
#endif
|
||||
|
||||
@@ -171,3 +179,6 @@ static int init_dcache(const struct device *unused)
|
||||
}
|
||||
|
||||
SYS_INIT(init_dcache, PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT);
|
||||
|
||||
#endif /* CONFIG_CACHE_FLUSHING */
|
||||
|
||||
|
||||
@@ -1,7 +1,17 @@
|
||||
/*
|
||||
* Copyright (c) 2014 Wind River Systems, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -11,19 +21,19 @@
|
||||
* CPU power management routines.
|
||||
*/
|
||||
|
||||
#define _ASMLANGUAGE
|
||||
|
||||
#include <kernel_structs.h>
|
||||
#include <offsets_short.h>
|
||||
#include <toolchain.h>
|
||||
#include <linker/sections.h>
|
||||
#include <sections.h>
|
||||
#include <arch/cpu.h>
|
||||
#include <arch/arc/asm-compat/assembler.h>
|
||||
|
||||
GTEXT(arch_cpu_idle)
|
||||
GTEXT(arch_cpu_atomic_idle)
|
||||
GDATA(z_arc_cpu_sleep_mode)
|
||||
GTEXT(nano_cpu_idle)
|
||||
GTEXT(nano_cpu_atomic_idle)
|
||||
GDATA(nano_cpu_sleep_mode)
|
||||
|
||||
SECTION_VAR(BSS, z_arc_cpu_sleep_mode)
|
||||
.align 4
|
||||
SECTION_VAR(BSS, nano_cpu_sleep_mode)
|
||||
.word 0
|
||||
|
||||
/*
|
||||
@@ -34,16 +44,15 @@ SECTION_VAR(BSS, z_arc_cpu_sleep_mode)
|
||||
* void nanCpuIdle(void)
|
||||
*/
|
||||
|
||||
SECTION_FUNC(TEXT, arch_cpu_idle)
|
||||
SECTION_FUNC(TEXT, nano_cpu_idle)
|
||||
|
||||
#ifdef CONFIG_TRACING
|
||||
PUSHR blink
|
||||
jl sys_trace_idle
|
||||
POPR blink
|
||||
#ifdef CONFIG_KERNEL_EVENT_LOGGER_SLEEP
|
||||
push_s blink
|
||||
jl _sys_k_event_logger_enter_sleep
|
||||
pop_s blink
|
||||
#endif
|
||||
|
||||
/* z_arc_cpu_sleep_mode is 32 bit despite of platform bittnes */
|
||||
ld r1, [z_arc_cpu_sleep_mode]
|
||||
ld r1, [nano_cpu_sleep_mode]
|
||||
or r1, r1, (1 << 4) /* set IRQ-enabled bit */
|
||||
sleep r1
|
||||
j_s [blink]
|
||||
@@ -54,18 +63,17 @@ SECTION_FUNC(TEXT, arch_cpu_idle)
|
||||
*
|
||||
* This function exits with interrupts restored to <key>.
|
||||
*
|
||||
* void arch_cpu_atomic_idle(unsigned int key)
|
||||
* void nano_cpu_atomic_idle(unsigned int key)
|
||||
*/
|
||||
SECTION_FUNC(TEXT, arch_cpu_atomic_idle)
|
||||
SECTION_FUNC(TEXT, nano_cpu_atomic_idle)
|
||||
|
||||
#ifdef CONFIG_TRACING
|
||||
PUSHR blink
|
||||
jl sys_trace_idle
|
||||
POPR blink
|
||||
#ifdef CONFIG_KERNEL_EVENT_LOGGER_SLEEP
|
||||
push_s blink
|
||||
jl _sys_k_event_logger_enter_sleep
|
||||
pop_s blink
|
||||
#endif
|
||||
|
||||
/* z_arc_cpu_sleep_mode is 32 bit despite of platform bittnes */
|
||||
ld r1, [z_arc_cpu_sleep_mode]
|
||||
ld r1, [nano_cpu_sleep_mode]
|
||||
or r1, r1, (1 << 4) /* set IRQ-enabled bit */
|
||||
sleep r1
|
||||
j_s.d [blink]
|
||||
|
||||
@@ -1,7 +1,17 @@
|
||||
/*
|
||||
* Copyright (c) 2014 Wind River Systems, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -13,15 +23,35 @@
|
||||
* See isr_wrapper.S for details.
|
||||
*/
|
||||
|
||||
#define _ASMLANGUAGE
|
||||
|
||||
#include <kernel_structs.h>
|
||||
#include <offsets_short.h>
|
||||
#include <toolchain.h>
|
||||
#include <linker/sections.h>
|
||||
#include <arch/cpu.h>
|
||||
#include <swap_macros.h>
|
||||
#include "swap_macros.h"
|
||||
|
||||
GTEXT(_firq_enter)
|
||||
GTEXT(_firq_exit)
|
||||
GTEXT(_firq_stack_setup)
|
||||
|
||||
#if CONFIG_RGF_NUM_BANKS != 1
|
||||
GDATA(_firq_stack)
|
||||
GTEXT(_is_next_thread_current)
|
||||
|
||||
SECTION_VAR(NOINIT, _firq_stack)
|
||||
.space CONFIG_FIRQ_STACK_SIZE
|
||||
#else
|
||||
GDATA(saved_r0)
|
||||
#endif
|
||||
|
||||
.macro _firq_return
|
||||
#if CONFIG_RGF_NUM_BANKS == 1
|
||||
b _firq_no_reschedule
|
||||
#else
|
||||
rtie
|
||||
#endif
|
||||
.endm
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -46,27 +76,24 @@ GTEXT(_firq_exit)
|
||||
*/
|
||||
|
||||
SECTION_FUNC(TEXT, _firq_enter)
|
||||
|
||||
/*
|
||||
* ATTENTION:
|
||||
* If CONFIG_RGF_NUM_BANKS>1, firq uses a 2nd register bank so GPRs do
|
||||
* not need to be saved.
|
||||
* If CONFIG_RGF_NUM_BANKS==1, firq must use the stack to save registers.
|
||||
* This has already been done by _isr_wrapper.
|
||||
* This has already been done by _isr_enter.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_ARC_STACK_CHECKING
|
||||
#ifdef CONFIG_ARC_SECURE_FIRMWARE
|
||||
lr r2, [_ARC_V2_SEC_STAT]
|
||||
bclr r2, r2, _ARC_V2_SEC_STAT_SSC_BIT
|
||||
sflag r2
|
||||
#else
|
||||
/* disable stack checking */
|
||||
lr r2, [_ARC_V2_STATUS32]
|
||||
bclr r2, r2, _ARC_V2_STATUS32_SC_BIT
|
||||
kflag r2
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if CONFIG_RGF_NUM_BANKS != 1
|
||||
#ifndef CONFIG_FIRQ_NO_LPCC
|
||||
/*
|
||||
* Save LP_START/LP_COUNT/LP_END because called handler might use.
|
||||
* Save these in callee saved registers to avoid using memory.
|
||||
@@ -76,59 +103,9 @@ SECTION_FUNC(TEXT, _firq_enter)
|
||||
lr r24, [_ARC_V2_LP_START]
|
||||
lr r25, [_ARC_V2_LP_END]
|
||||
#endif
|
||||
|
||||
/* check whether irq stack is used */
|
||||
_check_and_inc_int_nest_counter r0, r1
|
||||
|
||||
bne.d firq_nest
|
||||
mov_s r0, sp
|
||||
|
||||
_get_curr_cpu_irq_stack sp
|
||||
#if CONFIG_RGF_NUM_BANKS != 1
|
||||
b firq_nest_1
|
||||
firq_nest:
|
||||
/*
|
||||
* because firq and rirq share the same interrupt stack,
|
||||
* switch back to original register bank to get correct sp.
|
||||
* to get better firq latency, an approach is to prepare
|
||||
* separate interrupt stack for firq and do not do thread
|
||||
* switch in firq.
|
||||
*/
|
||||
lr r1, [_ARC_V2_STATUS32]
|
||||
and r1, r1, ~_ARC_V2_STATUS32_RB(7)
|
||||
kflag r1
|
||||
|
||||
/* here use _ARC_V2_USER_SP and ilink to exchange sp
|
||||
* save original value of _ARC_V2_USER_SP and ilink into
|
||||
* the stack of interrupted context first, then restore them later
|
||||
*/
|
||||
push ilink
|
||||
PUSHAX ilink, _ARC_V2_USER_SP
|
||||
|
||||
/* sp here is the sp of interrupted context */
|
||||
sr sp, [_ARC_V2_USER_SP]
|
||||
/* here, bank 0 sp must go back to the value before push and
|
||||
* PUSHAX as we will switch to bank1, the pop and POPAX later will
|
||||
* change bank1's sp, not bank0's sp
|
||||
*/
|
||||
add sp, sp, 8
|
||||
|
||||
/* switch back to banked reg, only ilink can be used */
|
||||
lr ilink, [_ARC_V2_STATUS32]
|
||||
or ilink, ilink, _ARC_V2_STATUS32_RB(1)
|
||||
kflag ilink
|
||||
lr sp, [_ARC_V2_USER_SP]
|
||||
|
||||
POPAX ilink, _ARC_V2_USER_SP
|
||||
pop ilink
|
||||
firq_nest_1:
|
||||
#else
|
||||
firq_nest:
|
||||
#endif
|
||||
push_s r0
|
||||
j _isr_demux
|
||||
|
||||
|
||||
j @_isr_demux
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -140,91 +117,113 @@ firq_nest:
|
||||
SECTION_FUNC(TEXT, _firq_exit)
|
||||
|
||||
#if CONFIG_RGF_NUM_BANKS != 1
|
||||
#ifndef CONFIG_FIRQ_NO_LPCC
|
||||
/* restore lp_count, lp_start, lp_end from r23-r25 */
|
||||
mov lp_count,r23
|
||||
sr r24, [_ARC_V2_LP_START]
|
||||
sr r25, [_ARC_V2_LP_END]
|
||||
#endif
|
||||
_dec_int_nest_counter r0, r1
|
||||
#endif
|
||||
|
||||
_check_nest_int_by_irq_act r0, r1
|
||||
mov_s r1, _kernel
|
||||
ld_s r2, [r1, _kernel_offset_to_current]
|
||||
|
||||
jne _firq_no_switch
|
||||
#if CONFIG_NUM_IRQ_PRIO_LEVELS > 1
|
||||
/* check if we're a nested interrupt: if so, let the interrupted
|
||||
* interrupt handle the reschedule */
|
||||
|
||||
/* sp is struct k_thread **old of z_arc_switch_in_isr
|
||||
* which is a wrapper of z_get_next_switch_handle.
|
||||
* r0 contains the 1st thread in ready queue. if
|
||||
* it equals _current(r2) ,then do swap, or no swap.
|
||||
lr r3, [_ARC_V2_AUX_IRQ_ACT]
|
||||
|
||||
/* the OS on ARCv2 always runs in kernel mode, so assume bit31 [U] in
|
||||
* AUX_IRQ_ACT is always 0: if the contents of AUX_IRQ_ACT is not 1, it
|
||||
* means that another bit is set so an interrupt was interrupted.
|
||||
*/
|
||||
_get_next_switch_handle
|
||||
|
||||
cmp r0, r2
|
||||
bne _firq_switch
|
||||
breq r3, 1, _firq_check_for_swap
|
||||
|
||||
/* fall to no switch */
|
||||
_firq_return
|
||||
#endif
|
||||
|
||||
.align 4
|
||||
_firq_no_switch:
|
||||
/* restore interrupted context' sp */
|
||||
pop sp
|
||||
.balign 4
|
||||
_firq_check_for_swap:
|
||||
/* coop thread ? do not schedule */
|
||||
ld_s r0, [r2, _thread_offset_to_prio]
|
||||
brlt r0, 0, _firq_no_reschedule
|
||||
|
||||
/* scheduler locked ? do not schedule */
|
||||
ld_s r0, [r2, _thread_offset_to_sched_locked]
|
||||
brgt r0, 0, _firq_no_reschedule
|
||||
|
||||
/* check if the current thread needs to be rescheduled */
|
||||
push_s r2
|
||||
push_s r1
|
||||
push_s blink
|
||||
jl _is_next_thread_current
|
||||
pop_s blink
|
||||
pop_s r1
|
||||
pop_s r2
|
||||
#if CONFIG_RGF_NUM_BANKS != 1
|
||||
#ifndef CONFIG_FIRQ_NO_LPCC
|
||||
/*
|
||||
* restore lp_count, lp_start, lp_end from r23-r25 in case
|
||||
* _is_next_thread_current() routine used them
|
||||
*/
|
||||
mov lp_count,r23
|
||||
sr r24, [_ARC_V2_LP_START]
|
||||
sr r25, [_ARC_V2_LP_END]
|
||||
#endif
|
||||
#endif
|
||||
breq r0, 0, _firq_reschedule
|
||||
/* fall to no rescheduling */
|
||||
|
||||
.balign 4
|
||||
_firq_no_reschedule:
|
||||
/*
|
||||
* Keeping this code block close to those that use it allows using brxx
|
||||
* instruction instead of a pair of cmp and bxx
|
||||
*/
|
||||
#if CONFIG_RGF_NUM_BANKS == 1
|
||||
_pop_irq_stack_frame
|
||||
add sp,sp,4 /* don't need r0 from stack */
|
||||
pop_s r1
|
||||
pop_s r2
|
||||
pop_s r3
|
||||
pop r4
|
||||
pop r5
|
||||
pop r6
|
||||
pop r7
|
||||
pop r8
|
||||
pop r9
|
||||
pop r10
|
||||
pop r11
|
||||
pop_s r12
|
||||
pop_s r13
|
||||
pop_s blink
|
||||
pop_s r0
|
||||
sr r0, [_ARC_V2_LP_END]
|
||||
pop_s r0
|
||||
sr r0, [_ARC_V2_LP_START]
|
||||
pop_s r0
|
||||
mov lp_count,r0
|
||||
ld r0,[saved_r0]
|
||||
add sp,sp,8 /* don't need ilink & status32_po from stack */
|
||||
#endif
|
||||
rtie
|
||||
|
||||
.align 4
|
||||
_firq_switch:
|
||||
/* restore interrupted context' sp */
|
||||
pop sp
|
||||
.balign 4
|
||||
_firq_reschedule:
|
||||
|
||||
#if CONFIG_RGF_NUM_BANKS != 1
|
||||
/*
|
||||
* save r0, r2 in irq stack for a while, as they will be changed by register
|
||||
* bank switch
|
||||
*/
|
||||
_get_curr_cpu_irq_stack r1
|
||||
st r0, [r1, -4]
|
||||
st r2, [r1, -8]
|
||||
|
||||
/*
|
||||
* We know there is no interrupted interrupt of lower priority at this
|
||||
* point, so when switching back to register bank 0, it will contain the
|
||||
* registers from the interrupted thread.
|
||||
*/
|
||||
#if defined(CONFIG_USERSPACE)
|
||||
/* when USERSPACE is configured, here need to consider the case where firq comes
|
||||
* out in user mode, according to ARCv2 ISA and nsim, the following micro ops
|
||||
* will be executed:
|
||||
* sp<-reg bank1'sp
|
||||
* switch between sp and _ARC_V2_USER_SP
|
||||
* then:
|
||||
* sp is the sp of kernel stack of interrupted thread
|
||||
* _ARC_V2_USER_SP is reg bank1'sp
|
||||
* the sp of user stack of interrupted thread is reg bank0'sp
|
||||
* if firq comes out in kernel mode, the following micro ops will be executed:
|
||||
* sp<-reg bank'sp
|
||||
* so, sw needs to do necessary handling to set up the correct sp
|
||||
*/
|
||||
lr r0, [_ARC_V2_AUX_IRQ_ACT]
|
||||
bbit0 r0, 31, _firq_from_kernel
|
||||
aex sp, [_ARC_V2_USER_SP]
|
||||
lr r0, [_ARC_V2_STATUS32]
|
||||
and r0, r0, ~_ARC_V2_STATUS32_RB(7)
|
||||
kflag r0
|
||||
aex sp, [_ARC_V2_USER_SP]
|
||||
b _firq_create_irq_stack_frame
|
||||
_firq_from_kernel:
|
||||
#endif
|
||||
|
||||
/* chose register bank #0 */
|
||||
lr r0, [_ARC_V2_STATUS32]
|
||||
and r0, r0, ~_ARC_V2_STATUS32_RB(7)
|
||||
kflag r0
|
||||
|
||||
_firq_create_irq_stack_frame:
|
||||
/* we're back on the outgoing thread's stack */
|
||||
_create_irq_stack_frame
|
||||
|
||||
@@ -237,56 +236,79 @@ _firq_create_irq_stack_frame:
|
||||
st_s r0, [sp, ___isf_t_status32_OFFSET]
|
||||
|
||||
st ilink, [sp, ___isf_t_pc_OFFSET] /* ilink into pc */
|
||||
/*
|
||||
* load r0, r2 from irq stack
|
||||
*/
|
||||
_get_curr_cpu_irq_stack r1
|
||||
ld r0, [r1, -4]
|
||||
ld r2, [r1, -8]
|
||||
#endif
|
||||
/* r2 is old thread */
|
||||
_irq_store_old_thread_callee_regs
|
||||
|
||||
mov_s r1, _kernel
|
||||
ld_s r2, [r1, _kernel_offset_to_current]
|
||||
|
||||
_save_callee_saved_regs
|
||||
|
||||
st _CAUSE_FIRQ, [r2, _thread_offset_to_relinquish_cause]
|
||||
|
||||
/* mov new thread (r0) to r2 */
|
||||
/*
|
||||
* Save needed registers to callee saved ones. It is faster than
|
||||
* pushing them to stack. It is possible to do since program has
|
||||
* just saved them and the calling routine will save them in turn
|
||||
* if it uses them.
|
||||
*/
|
||||
mov_s r13, blink
|
||||
mov_s r14, r1
|
||||
jl _get_next_ready_thread
|
||||
mov_s blink, r13
|
||||
mov_s r1, r14
|
||||
mov_s r2, r0
|
||||
st_s r2, [r1, _kernel_offset_to_current]
|
||||
|
||||
mov r2, r0
|
||||
_load_new_thread_callee_regs
|
||||
#ifdef CONFIG_ARC_STACK_CHECKING
|
||||
/* Use stack top and down registers from restored context */
|
||||
add r3, r2, _K_THREAD_NO_FLOAT_SIZEOF
|
||||
sr r3, [_ARC_V2_KSTACK_TOP]
|
||||
ld_s r3, [r2, _thread_offset_to_stack_top]
|
||||
sr r3, [_ARC_V2_KSTACK_BASE]
|
||||
#endif
|
||||
/*
|
||||
* _load_callee_saved_regs expects incoming thread in r2.
|
||||
* _load_callee_saved_regs restores the stack pointer.
|
||||
*/
|
||||
_load_callee_saved_regs
|
||||
|
||||
breq r3, _CAUSE_RIRQ, _firq_switch_from_rirq
|
||||
nop_s
|
||||
breq r3, _CAUSE_FIRQ, _firq_switch_from_firq
|
||||
nop_s
|
||||
ld_s r3, [r2, _thread_offset_to_relinquish_cause]
|
||||
|
||||
breq r3, _CAUSE_RIRQ, _firq_return_from_rirq
|
||||
nop
|
||||
breq r3, _CAUSE_FIRQ, _firq_return_from_firq
|
||||
nop
|
||||
|
||||
/* fall through */
|
||||
|
||||
.align 4
|
||||
_firq_switch_from_coop:
|
||||
.balign 4
|
||||
_firq_return_from_coop:
|
||||
|
||||
_set_misc_regs_irq_switch_from_coop
|
||||
ld_s r3, [r2, _thread_offset_to_intlock_key]
|
||||
st 0, [r2, _thread_offset_to_intlock_key]
|
||||
|
||||
/* pc into ilink */
|
||||
pop_s r0
|
||||
mov ilink, r0
|
||||
|
||||
pop_s r0 /* status32 into r0 */
|
||||
/*
|
||||
* There are only two interrupt lock states: locked and unlocked. When
|
||||
* entering _Swap(), they are always locked, so the IE bit is unset in
|
||||
* status32. If the incoming thread had them locked recursively, it
|
||||
* means that the IE bit should stay unset. The only time the bit
|
||||
* has to change is if they were not locked recursively.
|
||||
*/
|
||||
and.f r3, r3, (1 << 4)
|
||||
or.nz r0, r0, _ARC_V2_STATUS32_IE
|
||||
sr r0, [_ARC_V2_STATUS32_P0]
|
||||
|
||||
#ifdef CONFIG_INSTRUMENT_THREAD_SWITCHING
|
||||
push_s blink
|
||||
|
||||
bl z_thread_mark_switched_in
|
||||
|
||||
pop_s blink
|
||||
#endif
|
||||
ld_s r0, [r2, _thread_offset_to_return_value]
|
||||
rtie
|
||||
|
||||
.align 4
|
||||
_firq_switch_from_rirq:
|
||||
_firq_switch_from_firq:
|
||||
|
||||
_set_misc_regs_irq_switch_from_irq
|
||||
.balign 4
|
||||
_firq_return_from_rirq:
|
||||
_firq_return_from_firq:
|
||||
|
||||
_pop_irq_stack_frame
|
||||
|
||||
@@ -294,12 +316,35 @@ _firq_switch_from_firq:
|
||||
sr ilink, [_ARC_V2_STATUS32_P0]
|
||||
ld ilink, [sp, -8] /* pc into ilink */
|
||||
|
||||
#ifdef CONFIG_INSTRUMENT_THREAD_SWITCHING
|
||||
push_s blink
|
||||
|
||||
bl z_thread_mark_switched_in
|
||||
|
||||
pop_s blink
|
||||
#endif
|
||||
/* LP registers are already restored, just switch back to bank 0 */
|
||||
rtie
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief Install the FIRQ stack in register bank 1 if CONFIG_RGF_NUM_BANK!=1
|
||||
*
|
||||
* @return N/A
|
||||
*/
|
||||
|
||||
SECTION_FUNC(TEXT, _firq_stack_setup)
|
||||
|
||||
#if CONFIG_RGF_NUM_BANKS != 1
|
||||
lr r0, [_ARC_V2_STATUS32]
|
||||
and r0, r0, ~_ARC_V2_STATUS32_RB(7)
|
||||
or r0, r0, _ARC_V2_STATUS32_RB(1)
|
||||
kflag r0
|
||||
|
||||
mov sp, _firq_stack
|
||||
add sp, sp, CONFIG_FIRQ_STACK_SIZE
|
||||
|
||||
/*
|
||||
* We have to reload r0 here, because it is bank1 r0 which contains
|
||||
* garbage, not bank0 r0 containing the previous value of status32.
|
||||
*/
|
||||
lr r0, [_ARC_V2_STATUS32]
|
||||
and r0, r0, ~_ARC_V2_STATUS32_RB(7)
|
||||
kflag r0
|
||||
#endif
|
||||
|
||||
j_s [blink]
|
||||
|
||||
@@ -1,7 +1,17 @@
|
||||
/*
|
||||
* Copyright (c) 2014 Wind River Systems, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -12,59 +22,74 @@
|
||||
* ARCv2 CPUs.
|
||||
*/
|
||||
|
||||
#include <kernel.h>
|
||||
#include <kernel_structs.h>
|
||||
#include <offsets_short.h>
|
||||
#include <toolchain.h>
|
||||
#include <arch/cpu.h>
|
||||
#include <logging/log.h>
|
||||
#include <kernel_arch_data.h>
|
||||
#include <arch/arc/v2/exc.h>
|
||||
|
||||
LOG_MODULE_DECLARE(os, CONFIG_KERNEL_LOG_LEVEL);
|
||||
#ifdef CONFIG_PRINTK
|
||||
#include <misc/printk.h>
|
||||
#define PR_EXC(...) printk(__VA_ARGS__)
|
||||
#else
|
||||
#define PR_EXC(...)
|
||||
#endif /* CONFIG_PRINTK */
|
||||
|
||||
#ifdef CONFIG_ARC_EXCEPTION_DEBUG
|
||||
static void dump_arc_esf(const z_arch_esf_t *esf)
|
||||
const NANO_ESF _default_esf = {
|
||||
0xdeaddead, /* placeholder */
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief Nanokernel fatal error handler
|
||||
*
|
||||
* This routine is called when fatal error conditions are detected by software
|
||||
* and is responsible only for reporting the error. Once reported, it then
|
||||
* invokes the user provided routine _SysFatalErrorHandler() which is
|
||||
* responsible for implementing the error handling policy.
|
||||
*
|
||||
* The caller is expected to always provide a usable ESF. In the event that the
|
||||
* fatal error does not have a hardware generated ESF, the caller should either
|
||||
* create its own or use a pointer to the global default ESF <_default_esf>.
|
||||
*
|
||||
* @return This function does not return.
|
||||
*/
|
||||
FUNC_NORETURN void _NanoFatalErrorHandler(unsigned int reason,
|
||||
const NANO_ESF *pEsf)
|
||||
{
|
||||
LOG_ERR(" r0: 0x%" PRIxPTR " r1: 0x%" PRIxPTR " r2: 0x%" PRIxPTR " r3: 0x%" PRIxPTR "",
|
||||
esf->r0, esf->r1, esf->r2, esf->r3);
|
||||
LOG_ERR(" r4: 0x%" PRIxPTR " r5: 0x%" PRIxPTR " r6: 0x%" PRIxPTR " r7: 0x%" PRIxPTR "",
|
||||
esf->r4, esf->r5, esf->r6, esf->r7);
|
||||
LOG_ERR(" r8: 0x%" PRIxPTR " r9: 0x%" PRIxPTR " r10: 0x%" PRIxPTR " r11: 0x%" PRIxPTR "",
|
||||
esf->r8, esf->r9, esf->r10, esf->r11);
|
||||
LOG_ERR("r12: 0x%" PRIxPTR " r13: 0x%" PRIxPTR " pc: 0x%" PRIxPTR "",
|
||||
esf->r12, esf->r13, esf->pc);
|
||||
LOG_ERR(" blink: 0x%" PRIxPTR " status32: 0x%" PRIxPTR "", esf->blink, esf->status32);
|
||||
#ifdef CONFIG_ARC_HAS_ZOL
|
||||
LOG_ERR("lp_end: 0x%" PRIxPTR " lp_start: 0x%" PRIxPTR " lp_count: 0x%" PRIxPTR "",
|
||||
esf->lp_end, esf->lp_start, esf->lp_count);
|
||||
#endif /* CONFIG_ARC_HAS_ZOL */
|
||||
}
|
||||
switch (reason) {
|
||||
case _NANO_ERR_INVALID_TASK_EXIT:
|
||||
PR_EXC("***** Invalid Exit Software Error! *****\n");
|
||||
break;
|
||||
|
||||
#if defined(CONFIG_STACK_CANARIES)
|
||||
case _NANO_ERR_STACK_CHK_FAIL:
|
||||
PR_EXC("***** Stack Check Fail! *****\n");
|
||||
break;
|
||||
#endif
|
||||
|
||||
void z_arc_fatal_error(unsigned int reason, const z_arch_esf_t *esf)
|
||||
{
|
||||
#ifdef CONFIG_ARC_EXCEPTION_DEBUG
|
||||
if (esf != NULL) {
|
||||
dump_arc_esf(esf);
|
||||
case _NANO_ERR_ALLOCATION_FAIL:
|
||||
PR_EXC("**** Kernel Allocation Failure! ****\n");
|
||||
break;
|
||||
|
||||
default:
|
||||
PR_EXC("**** Unknown Fatal Error %d! ****\n", reason);
|
||||
break;
|
||||
}
|
||||
#endif /* CONFIG_ARC_EXCEPTION_DEBUG */
|
||||
PR_EXC("Current thread ID = %p\n"
|
||||
"Faulting instruction address = 0x%lx\n",
|
||||
k_current_get(),
|
||||
_arc_v2_aux_reg_read(_ARC_V2_ERET));
|
||||
|
||||
z_fatal_error(reason, esf);
|
||||
}
|
||||
|
||||
FUNC_NORETURN void arch_syscall_oops(void *ssf_ptr)
|
||||
{
|
||||
/* TODO: convert ssf_ptr contents into an esf, they are not the same */
|
||||
ARG_UNUSED(ssf_ptr);
|
||||
|
||||
z_arc_fatal_error(K_ERR_KERNEL_OOPS, NULL);
|
||||
CODE_UNREACHABLE;
|
||||
}
|
||||
|
||||
FUNC_NORETURN void arch_system_halt(unsigned int reason)
|
||||
{
|
||||
ARG_UNUSED(reason);
|
||||
|
||||
__asm__("brk");
|
||||
|
||||
CODE_UNREACHABLE;
|
||||
/*
|
||||
* Now that the error has been reported, call the user implemented
|
||||
* policy
|
||||
* to respond to the error. The decisions as to what responses are
|
||||
* appropriate to the various errors are something the customer must
|
||||
* decide.
|
||||
*/
|
||||
|
||||
_SysFatalErrorHandler(reason, pEsf);
|
||||
|
||||
for (;;)
|
||||
;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,17 @@
|
||||
/*
|
||||
* Copyright (c) 2014 Wind River Systems, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -12,402 +22,70 @@
|
||||
*/
|
||||
|
||||
#include <toolchain.h>
|
||||
#include <linker/sections.h>
|
||||
#include <sections.h>
|
||||
#include <inttypes.h>
|
||||
|
||||
#include <kernel.h>
|
||||
#include <kernel_internal.h>
|
||||
#include <nanokernel.h>
|
||||
#include <kernel_structs.h>
|
||||
#include <exc_handle.h>
|
||||
#include <logging/log.h>
|
||||
LOG_MODULE_DECLARE(os, CONFIG_KERNEL_LOG_LEVEL);
|
||||
|
||||
#ifdef CONFIG_USERSPACE
|
||||
Z_EXC_DECLARE(z_arc_user_string_nlen);
|
||||
#ifdef CONFIG_PRINTK
|
||||
#include <misc/printk.h>
|
||||
#define PR_EXC(...) printk(__VA_ARGS__)
|
||||
#else
|
||||
#define PR_EXC(...)
|
||||
#endif /* CONFIG_PRINTK */
|
||||
|
||||
static const struct z_exc_handle exceptions[] = {
|
||||
Z_EXC_HANDLE(z_arc_user_string_nlen)
|
||||
};
|
||||
#if (CONFIG_FAULT_DUMP > 0)
|
||||
#define FAULT_DUMP(esf, fault) _FaultDump(esf, fault)
|
||||
#else
|
||||
#define FAULT_DUMP(esf, fault) \
|
||||
do { \
|
||||
(void) esf; \
|
||||
(void) fault; \
|
||||
} while ((0))
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_MPU_STACK_GUARD)
|
||||
/**
|
||||
* @brief Assess occurrence of current thread's stack corruption
|
||||
#if (CONFIG_FAULT_DUMP > 0)
|
||||
/*
|
||||
* @brief Dump information regarding fault (FAULT_DUMP > 0)
|
||||
*
|
||||
* This function performs an assessment whether a memory fault (on a given
|
||||
* memory address) is the result of a stack overflow of the current thread.
|
||||
* Dump information regarding the fault when CONFIG_FAULT_DUMP is set to 1
|
||||
* (short form).
|
||||
*
|
||||
* When called, we know at this point that we received an ARC
|
||||
* protection violation, with any cause code, with the protection access
|
||||
* error either "MPU" or "Secure MPU". In other words, an MPU fault of
|
||||
* some kind. Need to determine whether this is a general MPU access
|
||||
* exception or the specific case of a stack overflow.
|
||||
*
|
||||
* @param fault_addr memory address on which memory access violation
|
||||
* has been reported.
|
||||
* @param sp stack pointer when exception comes out
|
||||
* @retval True if this appears to be a stack overflow
|
||||
* @retval False if this does not appear to be a stack overflow
|
||||
* @return N/A
|
||||
*/
|
||||
static bool z_check_thread_stack_fail(const uint32_t fault_addr, uint32_t sp)
|
||||
void _FaultDump(const NANO_ESF *esf, int fault)
|
||||
{
|
||||
const struct k_thread *thread = _current;
|
||||
uint32_t guard_end, guard_start;
|
||||
ARG_UNUSED(esf);
|
||||
#ifdef CONFIG_PRINTK
|
||||
uint32_t exc_addr = _arc_v2_aux_reg_read(_ARC_V2_EFA);
|
||||
uint32_t ecr = _arc_v2_aux_reg_read(_ARC_V2_ECR);
|
||||
|
||||
if (!thread) {
|
||||
/* TODO: Under what circumstances could we get here ? */
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_USERSPACE
|
||||
if ((thread->base.user_options & K_USER) != 0) {
|
||||
if ((z_arc_v2_aux_reg_read(_ARC_V2_ERSTATUS) &
|
||||
_ARC_V2_STATUS32_U) != 0) {
|
||||
/* Normal user mode context. There is no specific
|
||||
* "guard" installed in this case, instead what's
|
||||
* happening is that the stack pointer is crashing
|
||||
* into the privilege mode stack buffer which
|
||||
* immediately precededs it.
|
||||
*/
|
||||
guard_end = thread->stack_info.start;
|
||||
guard_start = (uint32_t)thread->stack_obj;
|
||||
} else {
|
||||
/* Special case: handling a syscall on privilege stack.
|
||||
* There is guard memory reserved immediately before
|
||||
* it.
|
||||
*/
|
||||
guard_end = thread->arch.priv_stack_start;
|
||||
guard_start = guard_end - Z_ARC_STACK_GUARD_SIZE;
|
||||
}
|
||||
} else
|
||||
#endif /* CONFIG_USERSPACE */
|
||||
{
|
||||
/* Supervisor thread */
|
||||
guard_end = thread->stack_info.start;
|
||||
guard_start = guard_end - Z_ARC_STACK_GUARD_SIZE;
|
||||
}
|
||||
|
||||
/* treat any MPU exceptions within the guard region as a stack
|
||||
* overflow.As some instrustions
|
||||
* (like enter_s {r13-r26, fp, blink}) push a collection of
|
||||
* registers on to the stack. In this situation, the fault_addr
|
||||
* will less than guard_end, but sp will greater than guard_end.
|
||||
*/
|
||||
if (fault_addr < guard_end && fault_addr >= guard_start) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
PR_EXC("Exception vector: 0x%" PRIx32 ", cause code: 0x%" PRIx32
|
||||
", parameter 0x%" PRIx32 "\n",
|
||||
_ARC_V2_ECR_VECTOR(ecr),
|
||||
_ARC_V2_ECR_CODE(ecr),
|
||||
_ARC_V2_ECR_PARAMETER(ecr));
|
||||
PR_EXC("Address 0x%" PRIx32 "\n", exc_addr);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARC_EXCEPTION_DEBUG
|
||||
/* For EV_ProtV, the numbering/semantics of the parameter are consistent across
|
||||
* several codes, although not all combination will be reported.
|
||||
*
|
||||
* These codes and parameters do not have associated* names in
|
||||
* the technical manual, just switch on the values in Table 6-5
|
||||
*/
|
||||
static const char *get_protv_access_err(uint32_t parameter)
|
||||
{
|
||||
switch (parameter) {
|
||||
case 0x1:
|
||||
return "code protection scheme";
|
||||
case 0x2:
|
||||
return "stack checking scheme";
|
||||
case 0x4:
|
||||
return "MPU";
|
||||
case 0x8:
|
||||
return "MMU";
|
||||
case 0x10:
|
||||
return "NVM";
|
||||
case 0x24:
|
||||
return "Secure MPU";
|
||||
case 0x44:
|
||||
return "Secure MPU with SID mismatch";
|
||||
default:
|
||||
return "unknown";
|
||||
}
|
||||
}
|
||||
|
||||
static void dump_protv_exception(uint32_t cause, uint32_t parameter)
|
||||
{
|
||||
switch (cause) {
|
||||
case 0x0:
|
||||
LOG_ERR("Instruction fetch violation (%s)",
|
||||
get_protv_access_err(parameter));
|
||||
break;
|
||||
case 0x1:
|
||||
LOG_ERR("Memory read protection violation (%s)",
|
||||
get_protv_access_err(parameter));
|
||||
break;
|
||||
case 0x2:
|
||||
LOG_ERR("Memory write protection violation (%s)",
|
||||
get_protv_access_err(parameter));
|
||||
break;
|
||||
case 0x3:
|
||||
LOG_ERR("Memory read-modify-write violation (%s)",
|
||||
get_protv_access_err(parameter));
|
||||
break;
|
||||
case 0x10:
|
||||
LOG_ERR("Normal vector table in secure memory");
|
||||
break;
|
||||
case 0x11:
|
||||
LOG_ERR("NS handler code located in S memory");
|
||||
break;
|
||||
case 0x12:
|
||||
LOG_ERR("NSC Table Range Violation");
|
||||
break;
|
||||
default:
|
||||
LOG_ERR("unknown");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void dump_machine_check_exception(uint32_t cause, uint32_t parameter)
|
||||
{
|
||||
switch (cause) {
|
||||
case 0x0:
|
||||
LOG_ERR("double fault");
|
||||
break;
|
||||
case 0x1:
|
||||
LOG_ERR("overlapping TLB entries");
|
||||
break;
|
||||
case 0x2:
|
||||
LOG_ERR("fatal TLB error");
|
||||
break;
|
||||
case 0x3:
|
||||
LOG_ERR("fatal cache error");
|
||||
break;
|
||||
case 0x4:
|
||||
LOG_ERR("internal memory error on instruction fetch");
|
||||
break;
|
||||
case 0x5:
|
||||
LOG_ERR("internal memory error on data fetch");
|
||||
break;
|
||||
case 0x6:
|
||||
LOG_ERR("illegal overlapping MPU entries");
|
||||
if (parameter == 0x1) {
|
||||
LOG_ERR(" - jump and branch target");
|
||||
}
|
||||
break;
|
||||
case 0x10:
|
||||
LOG_ERR("secure vector table not located in secure memory");
|
||||
break;
|
||||
case 0x11:
|
||||
LOG_ERR("NSC jump table not located in secure memory");
|
||||
break;
|
||||
case 0x12:
|
||||
LOG_ERR("secure handler code not located in secure memory");
|
||||
break;
|
||||
case 0x13:
|
||||
LOG_ERR("NSC target address not located in secure memory");
|
||||
break;
|
||||
case 0x80:
|
||||
LOG_ERR("uncorrectable ECC or parity error in vector memory");
|
||||
break;
|
||||
default:
|
||||
LOG_ERR("unknown");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void dump_privilege_exception(uint32_t cause, uint32_t parameter)
|
||||
{
|
||||
switch (cause) {
|
||||
case 0x0:
|
||||
LOG_ERR("Privilege violation");
|
||||
break;
|
||||
case 0x1:
|
||||
LOG_ERR("disabled extension");
|
||||
break;
|
||||
case 0x2:
|
||||
LOG_ERR("action point hit");
|
||||
break;
|
||||
case 0x10:
|
||||
switch (parameter) {
|
||||
case 0x1:
|
||||
LOG_ERR("N to S return using incorrect return mechanism");
|
||||
break;
|
||||
case 0x2:
|
||||
LOG_ERR("N to S return with incorrect operating mode");
|
||||
break;
|
||||
case 0x3:
|
||||
LOG_ERR("IRQ/exception return fetch from wrong mode");
|
||||
break;
|
||||
case 0x4:
|
||||
LOG_ERR("attempt to halt secure processor in NS mode");
|
||||
break;
|
||||
case 0x20:
|
||||
LOG_ERR("attempt to access secure resource from normal mode");
|
||||
break;
|
||||
case 0x40:
|
||||
LOG_ERR("SID violation on resource access (APEX/UAUX/key NVM)");
|
||||
break;
|
||||
default:
|
||||
LOG_ERR("unknown");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 0x13:
|
||||
switch (parameter) {
|
||||
case 0x20:
|
||||
LOG_ERR("attempt to access secure APEX feature from NS mode");
|
||||
break;
|
||||
case 0x40:
|
||||
LOG_ERR("SID violation on access to APEX feature");
|
||||
break;
|
||||
default:
|
||||
LOG_ERR("unknown");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
LOG_ERR("unknown");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void dump_exception_info(uint32_t vector, uint32_t cause, uint32_t parameter)
|
||||
{
|
||||
if (vector >= 0x10 && vector <= 0xFF) {
|
||||
LOG_ERR("interrupt %u", vector);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Names are exactly as they appear in Designware ARCv2 ISA
|
||||
* Programmer's reference manual for easy searching
|
||||
*/
|
||||
switch (vector) {
|
||||
case ARC_EV_RESET:
|
||||
LOG_ERR("Reset");
|
||||
break;
|
||||
case ARC_EV_MEM_ERROR:
|
||||
LOG_ERR("Memory Error");
|
||||
break;
|
||||
case ARC_EV_INS_ERROR:
|
||||
LOG_ERR("Instruction Error");
|
||||
break;
|
||||
case ARC_EV_MACHINE_CHECK:
|
||||
LOG_ERR("EV_MachineCheck");
|
||||
dump_machine_check_exception(cause, parameter);
|
||||
break;
|
||||
case ARC_EV_TLB_MISS_I:
|
||||
LOG_ERR("EV_TLBMissI");
|
||||
break;
|
||||
case ARC_EV_TLB_MISS_D:
|
||||
LOG_ERR("EV_TLBMissD");
|
||||
break;
|
||||
case ARC_EV_PROT_V:
|
||||
LOG_ERR("EV_ProtV");
|
||||
dump_protv_exception(cause, parameter);
|
||||
break;
|
||||
case ARC_EV_PRIVILEGE_V:
|
||||
LOG_ERR("EV_PrivilegeV");
|
||||
dump_privilege_exception(cause, parameter);
|
||||
break;
|
||||
case ARC_EV_SWI:
|
||||
LOG_ERR("EV_SWI");
|
||||
break;
|
||||
case ARC_EV_TRAP:
|
||||
LOG_ERR("EV_Trap");
|
||||
break;
|
||||
case ARC_EV_EXTENSION:
|
||||
LOG_ERR("EV_Extension");
|
||||
break;
|
||||
case ARC_EV_DIV_ZERO:
|
||||
LOG_ERR("EV_DivZero");
|
||||
break;
|
||||
case ARC_EV_DC_ERROR:
|
||||
LOG_ERR("EV_DCError");
|
||||
break;
|
||||
case ARC_EV_MISALIGNED:
|
||||
LOG_ERR("EV_Misaligned");
|
||||
break;
|
||||
case ARC_EV_VEC_UNIT:
|
||||
LOG_ERR("EV_VecUnit");
|
||||
break;
|
||||
default:
|
||||
LOG_ERR("unknown");
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_ARC_EXCEPTION_DEBUG */
|
||||
#endif /* CONFIG_FAULT_DUMP */
|
||||
|
||||
/*
|
||||
* @brief Fault handler
|
||||
*
|
||||
* This routine is called when fatal error conditions are detected by hardware
|
||||
* and is responsible only for reporting the error. Once reported, it then
|
||||
* invokes the user provided routine k_sys_fatal_error_handler() which is
|
||||
* invokes the user provided routine _SysFatalErrorHandler() which is
|
||||
* responsible for implementing the error handling policy.
|
||||
*
|
||||
* @return This function does not return.
|
||||
*/
|
||||
void _Fault(z_arch_esf_t *esf, uint32_t old_sp)
|
||||
void _Fault(void)
|
||||
{
|
||||
uint32_t vector, cause, parameter;
|
||||
uint32_t exc_addr = z_arc_v2_aux_reg_read(_ARC_V2_EFA);
|
||||
uint32_t ecr = z_arc_v2_aux_reg_read(_ARC_V2_ECR);
|
||||
uint32_t ecr = _arc_v2_aux_reg_read(_ARC_V2_ECR);
|
||||
|
||||
#ifdef CONFIG_USERSPACE
|
||||
for (int i = 0; i < ARRAY_SIZE(exceptions); i++) {
|
||||
uint32_t start = (uint32_t)exceptions[i].start;
|
||||
uint32_t end = (uint32_t)exceptions[i].end;
|
||||
FAULT_DUMP(&_default_esf, ecr);
|
||||
|
||||
if (esf->pc >= start && esf->pc < end) {
|
||||
esf->pc = (uint32_t)(exceptions[i].fixup);
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
vector = Z_ARC_V2_ECR_VECTOR(ecr);
|
||||
cause = Z_ARC_V2_ECR_CODE(ecr);
|
||||
parameter = Z_ARC_V2_ECR_PARAMETER(ecr);
|
||||
|
||||
/* exception raised by kernel */
|
||||
if (vector == ARC_EV_TRAP && parameter == _TRAP_S_CALL_RUNTIME_EXCEPT) {
|
||||
/*
|
||||
* in user mode software-triggered system fatal exceptions only allow
|
||||
* K_ERR_KERNEL_OOPS and K_ERR_STACK_CHK_FAIL
|
||||
*/
|
||||
#ifdef CONFIG_USERSPACE
|
||||
if ((esf->status32 & _ARC_V2_STATUS32_U) &&
|
||||
esf->r0 != K_ERR_STACK_CHK_FAIL) {
|
||||
esf->r0 = K_ERR_KERNEL_OOPS;
|
||||
}
|
||||
#endif
|
||||
|
||||
z_arc_fatal_error(esf->r0, esf);
|
||||
return;
|
||||
}
|
||||
|
||||
LOG_ERR("***** Exception vector: 0x%x, cause code: 0x%x, parameter 0x%x",
|
||||
vector, cause, parameter);
|
||||
LOG_ERR("Address 0x%x", exc_addr);
|
||||
#ifdef CONFIG_ARC_EXCEPTION_DEBUG
|
||||
dump_exception_info(vector, cause, parameter);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARC_STACK_CHECKING
|
||||
/* Vector 6 = EV_ProV. Regardless of cause, parameter 2 means stack
|
||||
* check violation
|
||||
* stack check and mpu violation can come out together, then
|
||||
* parameter = 0x2 | [0x4 | 0x8 | 0x1]
|
||||
*/
|
||||
if (vector == ARC_EV_PROT_V && parameter & 0x2) {
|
||||
z_arc_fatal_error(K_ERR_STACK_CHK_FAIL, esf);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MPU_STACK_GUARD
|
||||
if (vector == ARC_EV_PROT_V && ((parameter == 0x4) ||
|
||||
(parameter == 0x24))) {
|
||||
if (z_check_thread_stack_fail(exc_addr, old_sp)) {
|
||||
z_arc_fatal_error(K_ERR_STACK_CHK_FAIL, esf);
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
z_arc_fatal_error(K_ERR_CPU_EXCEPTION, esf);
|
||||
_SysFatalErrorHandler(_NANO_ERR_HW_EXCEPTION, &_default_esf);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,17 @@
|
||||
/*
|
||||
* Copyright (c) 2014 Wind River Systems, Inc.
|
||||
* Copyright (c) 2018 Synopsys.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -12,14 +21,15 @@
|
||||
* Fault handlers for ARCv2 processors.
|
||||
*/
|
||||
|
||||
#define _ASMLANGUAGE
|
||||
|
||||
#include <toolchain.h>
|
||||
#include <linker/sections.h>
|
||||
#include <sections.h>
|
||||
#include <arch/cpu.h>
|
||||
#include <swap_macros.h>
|
||||
#include <syscall.h>
|
||||
#include <arch/arc/asm-compat/assembler.h>
|
||||
#include "swap_macros.h"
|
||||
|
||||
GTEXT(_Fault)
|
||||
|
||||
GTEXT(__reset)
|
||||
GTEXT(__memory_error)
|
||||
GTEXT(__instruction_error)
|
||||
@@ -34,31 +44,17 @@ GTEXT(__ev_extension)
|
||||
GTEXT(__ev_div_zero)
|
||||
GTEXT(__ev_dc_error)
|
||||
GTEXT(__ev_maligned)
|
||||
#ifdef CONFIG_IRQ_OFFLOAD
|
||||
GTEXT(z_irq_do_offload);
|
||||
#endif
|
||||
|
||||
.macro _save_exc_regs_into_stack
|
||||
#ifdef CONFIG_ARC_HAS_SECURE
|
||||
/* ERSEC_STAT is IOW/RAZ in normal mode */
|
||||
lr r0,[_ARC_V2_ERSEC_STAT]
|
||||
st_s r0, [sp, ___isf_t_sec_stat_OFFSET]
|
||||
#endif
|
||||
LRR r0, [_ARC_V2_ERET]
|
||||
STR r0, sp, ___isf_t_pc_OFFSET
|
||||
LRR r0, [_ARC_V2_ERSTATUS]
|
||||
STR r0, sp, ___isf_t_status32_OFFSET
|
||||
.endm
|
||||
SECTION_VAR(BSS, saved_stack_pointer)
|
||||
.word 0
|
||||
|
||||
/*
|
||||
* The exception handling will use top part of interrupt stack to
|
||||
* get smaller memory footprint, because exception is not frequent.
|
||||
* To reduce the impact on interrupt handling, especially nested interrupt
|
||||
* the top part of interrupt stack cannot be too large, so add a check
|
||||
* here
|
||||
*/
|
||||
#if CONFIG_ARC_EXCEPTION_STACK_SIZE > (CONFIG_ISR_STACK_SIZE >> 1)
|
||||
#error "interrupt stack size is too small"
|
||||
#if CONFIG_RGF_NUM_BANKS == 1
|
||||
GDATA(_exception_stack)
|
||||
SECTION_VAR(NOINIT, _exception_stack)
|
||||
.space 512
|
||||
/* note: QUARK_SE_C1000_SS can't afford 512B */
|
||||
#else
|
||||
GDATA(_firq_stack)
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -73,196 +69,153 @@ SECTION_SUBSEC_FUNC(TEXT,__fault,__ev_tlb_miss_d)
|
||||
SECTION_SUBSEC_FUNC(TEXT,__fault,__ev_prot_v)
|
||||
SECTION_SUBSEC_FUNC(TEXT,__fault,__ev_privilege_v)
|
||||
SECTION_SUBSEC_FUNC(TEXT,__fault,__ev_swi)
|
||||
#ifndef CONFIG_IRQ_OFFLOAD
|
||||
SECTION_SUBSEC_FUNC(TEXT,__fault,__ev_trap)
|
||||
#endif
|
||||
SECTION_SUBSEC_FUNC(TEXT,__fault,__ev_extension)
|
||||
SECTION_SUBSEC_FUNC(TEXT,__fault,__ev_div_zero)
|
||||
SECTION_SUBSEC_FUNC(TEXT,__fault,__ev_dc_error)
|
||||
SECTION_SUBSEC_FUNC(TEXT,__fault,__ev_maligned)
|
||||
|
||||
_exc_entry:
|
||||
/*
|
||||
* re-use the top part of interrupt stack as exception
|
||||
* stack. If this top part is used by interrupt handling,
|
||||
* and exception is raised, then here it's guaranteed that
|
||||
* exception handling has necessary stack to use
|
||||
*/
|
||||
MOVR ilink, sp
|
||||
_get_curr_cpu_irq_stack sp
|
||||
SUBR sp, sp, (CONFIG_ISR_STACK_SIZE - CONFIG_ARC_EXCEPTION_STACK_SIZE)
|
||||
|
||||
/*
|
||||
* save caller saved registers
|
||||
* this stack frame is set up in exception stack,
|
||||
* not in the original sp (thread stack or interrupt stack).
|
||||
* Because the exception may be raised by stack checking or
|
||||
* mpu protect violation related to stack. If this stack frame
|
||||
* is setup in original sp, double exception may be raised during
|
||||
* _create_irq_stack_frame, which is unrecoverable.
|
||||
*/
|
||||
_create_irq_stack_frame
|
||||
|
||||
_save_exc_regs_into_stack
|
||||
|
||||
/* sp is parameter of _Fault */
|
||||
MOVR r0, sp
|
||||
/* ilink is the thread's original sp */
|
||||
MOVR r1, ilink
|
||||
jl _Fault
|
||||
|
||||
_exc_return:
|
||||
/* the exception cause must be fixed in exception handler when exception returns
|
||||
* directly, or exception will be repeated.
|
||||
*
|
||||
* If thread switch is raised in exception handler, the context of old thread will
|
||||
* not be saved, i.e., it cannot be recovered, because we don't know where the
|
||||
* exception comes out, thread context?irq_context?nest irq context?
|
||||
*/
|
||||
|
||||
_get_next_switch_handle
|
||||
|
||||
BREQR r0, r2, _exc_return_from_exc
|
||||
|
||||
MOVR r2, r0
|
||||
|
||||
#ifdef CONFIG_ARC_SECURE_FIRMWARE
|
||||
/*
|
||||
* sync up the ERSEC_STAT.ERM and SEC_STAT.IRM.
|
||||
* use a fake interrupt return to simulate an exception turn.
|
||||
* ERM and IRM record which mode the cpu should return, 1: secure
|
||||
* 0: normal
|
||||
*/
|
||||
lr r3,[_ARC_V2_ERSEC_STAT]
|
||||
btst r3, 31
|
||||
bset.nz r3, r3, _ARC_V2_SEC_STAT_IRM_BIT
|
||||
bclr.z r3, r3, _ARC_V2_SEC_STAT_IRM_BIT
|
||||
sflag r3
|
||||
#endif
|
||||
/* clear AE bit to forget this was an exception, and go to
|
||||
* register bank0 (if exception is raised in firq with 2 reg
|
||||
* banks, then we may be bank1)
|
||||
*/
|
||||
#if defined(CONFIG_ARC_FIRQ) && CONFIG_RGF_NUM_BANKS != 1
|
||||
/* save r2 in ilink because of the possible following reg
|
||||
* bank switch
|
||||
*/
|
||||
mov ilink, r2
|
||||
#endif
|
||||
LRR r3, [_ARC_V2_STATUS32]
|
||||
ANDR r3, r3, (~(_ARC_V2_STATUS32_AE | _ARC_V2_STATUS32_RB(7)))
|
||||
kflag r3
|
||||
/* pretend lowest priority interrupt happened to use common handler
|
||||
* if exception is raised in irq, i.e., _ARC_V2_AUX_IRQ_ACT !=0,
|
||||
* ignore irq handling, we cannot return to irq handling which may
|
||||
* raise exception again. The ignored interrupts will be re-triggered
|
||||
* if not cleared, or re-triggered by interrupt sources, or just missed
|
||||
* Before invoking exception handler, the kernel switches to an exception
|
||||
* stack, to save the faulting thread's registers.
|
||||
* The exception is fatal and all the kernel can do is just print
|
||||
* a diagnostic message and halt.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_ARC_SECURE_FIRMWARE
|
||||
mov_s r3, (1 << (ARC_N_IRQ_START_LEVEL - 1))
|
||||
#else
|
||||
MOVR r3, (1 << (CONFIG_NUM_IRQ_PRIO_LEVELS - 1))
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARC_NORMAL_FIRMWARE
|
||||
#ifdef CONFIG_ARC_STACK_CHECKING
|
||||
push_s r2
|
||||
mov_s r0, _ARC_V2_AUX_IRQ_ACT
|
||||
mov_s r1, r3
|
||||
mov_s r6, ARC_S_CALL_AUX_WRITE
|
||||
sjli SJLI_CALL_ARC_SECURE
|
||||
/* disable stack checking */
|
||||
lr r2, [_ARC_V2_STATUS32]
|
||||
bclr r2, r2, _ARC_V2_STATUS32_SC_BIT
|
||||
kflag r2
|
||||
pop_s r2
|
||||
#endif
|
||||
|
||||
st sp, [saved_stack_pointer]
|
||||
#if CONFIG_RGF_NUM_BANKS == 1
|
||||
mov_s sp, _exception_stack
|
||||
add sp, sp, 512
|
||||
#else
|
||||
SRR r3, [_ARC_V2_AUX_IRQ_ACT]
|
||||
mov_s sp, _firq_stack
|
||||
add sp, sp, CONFIG_FIRQ_STACK_SIZE
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_ARC_FIRQ) && CONFIG_RGF_NUM_BANKS != 1
|
||||
mov r2, ilink
|
||||
#endif
|
||||
|
||||
/* Assumption: r2 has next thread */
|
||||
b _rirq_newthread_switch
|
||||
|
||||
_exc_return_from_exc:
|
||||
/* exception handler may change return address.
|
||||
* reload it
|
||||
*/
|
||||
LDR r0, sp, ___isf_t_pc_OFFSET
|
||||
SRR r0, [_ARC_V2_ERET]
|
||||
|
||||
_pop_irq_stack_frame
|
||||
MOVR sp, ilink
|
||||
rtie
|
||||
|
||||
/* separated entry for trap which may be used by irq_offload, USERPSACE */
|
||||
SECTION_SUBSEC_FUNC(TEXT,__fault,__ev_trap)
|
||||
/* get the id of trap_s */
|
||||
LRR ilink, [_ARC_V2_ECR]
|
||||
ANDR ilink, ilink, 0x3f
|
||||
#ifdef CONFIG_USERSPACE
|
||||
cmp ilink, _TRAP_S_CALL_SYSTEM_CALL
|
||||
bne _do_non_syscall_trap
|
||||
/* do sys_call */
|
||||
mov ilink, K_SYSCALL_LIMIT
|
||||
cmp r6, ilink
|
||||
blo valid_syscall_id
|
||||
|
||||
mov_s r0, r6
|
||||
mov_s r6, K_SYSCALL_BAD
|
||||
|
||||
valid_syscall_id:
|
||||
/* create a sys call frame
|
||||
* caller regs (r0 - 12) are saved in _create_irq_stack_frame
|
||||
* ok to use them later
|
||||
*/
|
||||
_create_irq_stack_frame
|
||||
|
||||
_save_exc_regs_into_stack
|
||||
|
||||
/* exc return and do sys call in kernel mode,
|
||||
* so need to clear U bit, r0 is already loaded
|
||||
* with ERSTATUS in _save_exc_regs_into_stack
|
||||
*/
|
||||
|
||||
bclr r0, r0, _ARC_V2_STATUS32_U_BIT
|
||||
sr r0, [_ARC_V2_ERSTATUS]
|
||||
|
||||
mov_s r0, _arc_do_syscall
|
||||
sr r0, [_ARC_V2_ERET]
|
||||
|
||||
rtie
|
||||
|
||||
_do_non_syscall_trap:
|
||||
#endif /* CONFIG_USERSPACE */
|
||||
#ifdef CONFIG_IRQ_OFFLOAD
|
||||
/*
|
||||
* IRQ_OFFLOAD is to simulate interrupt handling through exception,
|
||||
* so its entry is different with normal exception handling, it is
|
||||
* handled in isr stack
|
||||
*/
|
||||
CMPR ilink, _TRAP_S_SCALL_IRQ_OFFLOAD
|
||||
bne _exc_entry
|
||||
/* save caller saved registers */
|
||||
_create_irq_stack_frame
|
||||
|
||||
_save_exc_regs_into_stack
|
||||
lr r0,[_ARC_V2_ERSTATUS]
|
||||
st_s r0, [sp, ___isf_t_status32_OFFSET]
|
||||
lr r0,[_ARC_V2_ERET]
|
||||
st_s r0, [sp, ___isf_t_pc_OFFSET] /* eret into pc */
|
||||
|
||||
/* check whether irq stack is used */
|
||||
_check_and_inc_int_nest_counter r0, r1
|
||||
|
||||
bne.d exc_nest_handle
|
||||
MOVR r0, sp
|
||||
|
||||
_get_curr_cpu_irq_stack sp
|
||||
exc_nest_handle:
|
||||
PUSHR r0
|
||||
|
||||
jl z_irq_do_offload
|
||||
|
||||
POPR sp
|
||||
|
||||
_dec_int_nest_counter r0, r1
|
||||
jl _Fault
|
||||
|
||||
/* if _Fault returns, restore the registers */
|
||||
_pop_irq_stack_frame
|
||||
|
||||
/* ERSTATUS, ERET are not changed, so ok to rtie */
|
||||
/* now restore the stack */
|
||||
ld sp,[saved_stack_pointer]
|
||||
rtie
|
||||
|
||||
#ifdef CONFIG_IRQ_OFFLOAD
|
||||
GTEXT(_irq_do_offload);
|
||||
|
||||
SECTION_SUBSEC_FUNC(TEXT,__fault,__ev_trap)
|
||||
/*
|
||||
* Before invoking exception handler, the kernel switches to an exception
|
||||
* stack to save the faulting thread's registers.
|
||||
* The exception is fatal and all the kernel can do is just print
|
||||
* a diagnostic message and halt.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_ARC_STACK_CHECKING
|
||||
push_s r2
|
||||
/* disable stack checking */
|
||||
lr r2, [_ARC_V2_STATUS32]
|
||||
bclr r2, r2, _ARC_V2_STATUS32_SC_BIT
|
||||
kflag r2
|
||||
pop_s r2
|
||||
#endif
|
||||
|
||||
/* save caller saved registers */
|
||||
_create_irq_stack_frame
|
||||
|
||||
lr r0,[_ARC_V2_ERSTATUS]
|
||||
st_s r0, [sp, ___isf_t_status32_OFFSET]
|
||||
lr r0,[_ARC_V2_ERET]
|
||||
st_s r0, [sp, ___isf_t_pc_OFFSET] /* eret into pc */
|
||||
|
||||
jl _irq_do_offload
|
||||
|
||||
mov_s r1, _kernel
|
||||
ld_s r2, [r1, _kernel_offset_to_current]
|
||||
/* check if we're a nested interrupt: if so, let the
|
||||
* interrupted interrupt handle the reschedule
|
||||
*/
|
||||
lr r3, [_ARC_V2_AUX_IRQ_ACT]
|
||||
/* the OS on ARCv2 always runs in kernel mode, so assume bit31 [U] in
|
||||
* AUX_IRQ_ACT is always 0: if the contents of AUX_IRQ_ACT is 0, it
|
||||
* means trap was taken from outside an interrupt handler.
|
||||
* But if it was inside, let that handler do the swap.
|
||||
*/
|
||||
breq r3, 0, _trap_check_for_swap
|
||||
_trap_return:
|
||||
_pop_irq_stack_frame
|
||||
rtie
|
||||
|
||||
.balign 4
|
||||
_trap_check_for_swap:
|
||||
/* coop thread ? do not schedule */
|
||||
ld_s r0, [r2, _thread_offset_to_prio]
|
||||
brlt r0, 0, _trap_return
|
||||
|
||||
/* scheduler locked ? do not schedule */
|
||||
ld_s r0, [r2, _thread_offset_to_sched_locked]
|
||||
brgt r0, 0, _trap_return
|
||||
|
||||
/* check if the current thread needs to be rescheduled */
|
||||
push_s r2
|
||||
push_s r1
|
||||
push_s blink
|
||||
jl _is_next_thread_current
|
||||
pop_s blink
|
||||
pop_s r1
|
||||
pop_s r2
|
||||
brne r0, 0, _trap_return
|
||||
|
||||
_save_callee_saved_regs
|
||||
|
||||
st _CAUSE_RIRQ, [r2, _thread_offset_to_relinquish_cause]
|
||||
/* note: Ok to use _CAUSE_RIRQ since everything is saved */
|
||||
|
||||
/*
|
||||
* Save needed registers to callee saved ones. It is faster than
|
||||
* pushing registers to stack. It is possible to do since program has
|
||||
* just saved them and the calling routine will save them in turn
|
||||
* if it uses them.
|
||||
*/
|
||||
mov_s r13, blink
|
||||
mov_s r14, r0
|
||||
mov_s r15, r1
|
||||
jl _get_next_ready_thread
|
||||
mov_s r2, r0
|
||||
mov_s r1, r15
|
||||
mov_s r0, r14
|
||||
mov_s blink, r13
|
||||
st_s r2, [r1, _kernel_offset_to_current]
|
||||
|
||||
/* clear AE bit to forget this was an exception */
|
||||
lr r3, [_ARC_V2_STATUS32]
|
||||
and r3,r3,(~_ARC_V2_STATUS32_AE)
|
||||
kflag r3
|
||||
/* pretend lowest priority interrupt happened to use common handler */
|
||||
lr r3, [_ARC_V2_AUX_IRQ_ACT]
|
||||
or r3,r3,(1<<(CONFIG_NUM_IRQ_PRIO_LEVELS-1)) /* use lowest */
|
||||
sr r3, [_ARC_V2_AUX_IRQ_ACT]
|
||||
|
||||
/* Assumption: r2 has current thread */
|
||||
b _rirq_common_interrupt_swap
|
||||
|
||||
#endif /* CONFIG_IRQ_OFFLOAD */
|
||||
b _exc_entry
|
||||
|
||||
@@ -1,7 +1,17 @@
|
||||
/*
|
||||
* Copyright (c) 2014 Wind River Systems, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -17,71 +27,13 @@
|
||||
* number from 16 to last IRQ number on the platform.
|
||||
*/
|
||||
|
||||
#include <kernel.h>
|
||||
#include <nanokernel.h>
|
||||
#include <arch/cpu.h>
|
||||
#include <sys/__assert.h>
|
||||
#include <misc/__assert.h>
|
||||
#include <toolchain.h>
|
||||
#include <linker/sections.h>
|
||||
#include <sections.h>
|
||||
#include <sw_isr_table.h>
|
||||
#include <irq.h>
|
||||
#include <sys/printk.h>
|
||||
|
||||
|
||||
/*
|
||||
* storage space for the interrupt stack of fast_irq
|
||||
*/
|
||||
#if defined(CONFIG_ARC_FIRQ_STACK)
|
||||
#if defined(CONFIG_SMP)
|
||||
K_KERNEL_STACK_ARRAY_DEFINE(_firq_interrupt_stack, CONFIG_MP_NUM_CPUS,
|
||||
CONFIG_ARC_FIRQ_STACK_SIZE);
|
||||
#else
|
||||
K_KERNEL_STACK_DEFINE(_firq_interrupt_stack, CONFIG_ARC_FIRQ_STACK_SIZE);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* @brief Set the stack pointer for firq handling
|
||||
*
|
||||
* @return N/A
|
||||
*/
|
||||
void z_arc_firq_stack_set(void)
|
||||
{
|
||||
#ifdef CONFIG_SMP
|
||||
char *firq_sp = Z_KERNEL_STACK_BUFFER(
|
||||
_firq_interrupt_stack[z_arc_v2_core_id()]) +
|
||||
CONFIG_ARC_FIRQ_STACK_SIZE;
|
||||
#else
|
||||
char *firq_sp = Z_KERNEL_STACK_BUFFER(_firq_interrupt_stack) +
|
||||
CONFIG_ARC_FIRQ_STACK_SIZE;
|
||||
#endif
|
||||
|
||||
/* the z_arc_firq_stack_set must be called when irq diasbled, as
|
||||
* it can be called not only in the init phase but also other places
|
||||
*/
|
||||
unsigned int key = arch_irq_lock();
|
||||
|
||||
__asm__ volatile (
|
||||
/* only ilink will not be banked, so use ilink as channel
|
||||
* between 2 banks
|
||||
*/
|
||||
"mov %%ilink, %0\n\t"
|
||||
"lr %0, [%1]\n\t"
|
||||
"or %0, %0, %2\n\t"
|
||||
"kflag %0\n\t"
|
||||
"mov %%sp, %%ilink\n\t"
|
||||
/* switch back to bank0, use ilink to avoid the pollution of
|
||||
* bank1's gp regs.
|
||||
*/
|
||||
"lr %%ilink, [%1]\n\t"
|
||||
"and %%ilink, %%ilink, %3\n\t"
|
||||
"kflag %%ilink\n\t"
|
||||
:
|
||||
: "r"(firq_sp), "i"(_ARC_V2_STATUS32),
|
||||
"i"(_ARC_V2_STATUS32_RB(1)),
|
||||
"i"(~_ARC_V2_STATUS32_RB(7))
|
||||
);
|
||||
arch_irq_unlock(key);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* @brief Enable an interrupt line
|
||||
@@ -93,9 +45,12 @@ void z_arc_firq_stack_set(void)
|
||||
* @return N/A
|
||||
*/
|
||||
|
||||
void arch_irq_enable(unsigned int irq)
|
||||
void _arch_irq_enable(unsigned int irq)
|
||||
{
|
||||
z_arc_v2_irq_unit_int_enable(irq);
|
||||
int key = irq_lock();
|
||||
|
||||
_arc_v2_irq_unit_int_enable(irq);
|
||||
irq_unlock(key);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -107,20 +62,12 @@ void arch_irq_enable(unsigned int irq)
|
||||
* @return N/A
|
||||
*/
|
||||
|
||||
void arch_irq_disable(unsigned int irq)
|
||||
void _arch_irq_disable(unsigned int irq)
|
||||
{
|
||||
z_arc_v2_irq_unit_int_disable(irq);
|
||||
}
|
||||
int key = irq_lock();
|
||||
|
||||
/**
|
||||
* @brief Return IRQ enable state
|
||||
*
|
||||
* @param irq IRQ line
|
||||
* @return interrupt enable state, true or false
|
||||
*/
|
||||
int arch_irq_is_enabled(unsigned int irq)
|
||||
{
|
||||
return z_arc_v2_irq_unit_int_enabled(irq);
|
||||
_arc_v2_irq_unit_int_disable(irq);
|
||||
irq_unlock(key);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -137,23 +84,16 @@ int arch_irq_is_enabled(unsigned int irq)
|
||||
* @return N/A
|
||||
*/
|
||||
|
||||
void z_irq_priority_set(unsigned int irq, unsigned int prio, uint32_t flags)
|
||||
void _irq_priority_set(unsigned int irq, unsigned int prio, uint32_t flags)
|
||||
{
|
||||
ARG_UNUSED(flags);
|
||||
|
||||
int key = irq_lock();
|
||||
|
||||
__ASSERT(prio < CONFIG_NUM_IRQ_PRIO_LEVELS,
|
||||
"invalid priority %d for irq %d", prio, irq);
|
||||
/* 0 -> CONFIG_NUM_IRQ_PRIO_LEVELS allocted to secure world
|
||||
* left prio levels allocated to normal world
|
||||
*/
|
||||
#if defined(CONFIG_ARC_SECURE_FIRMWARE)
|
||||
prio = prio < ARC_N_IRQ_START_LEVEL ?
|
||||
prio : (ARC_N_IRQ_START_LEVEL - 1);
|
||||
#elif defined(CONFIG_ARC_NORMAL_FIRMWARE)
|
||||
prio = prio < ARC_N_IRQ_START_LEVEL ?
|
||||
ARC_N_IRQ_START_LEVEL : prio;
|
||||
#endif
|
||||
z_arc_v2_irq_unit_prio_set(irq, prio);
|
||||
_arc_v2_irq_unit_prio_set(irq, prio);
|
||||
irq_unlock(key);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -165,19 +105,12 @@ void z_irq_priority_set(unsigned int irq, unsigned int prio, uint32_t flags)
|
||||
* @return N/A
|
||||
*/
|
||||
|
||||
void z_irq_spurious(const void *unused)
|
||||
#include <misc/printk.h>
|
||||
void _irq_spurious(void *unused)
|
||||
{
|
||||
ARG_UNUSED(unused);
|
||||
z_fatal_error(K_ERR_SPURIOUS_IRQ, NULL);
|
||||
printk("_irq_spurious(). Spinning...\n");
|
||||
for (;;)
|
||||
;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DYNAMIC_INTERRUPTS
|
||||
int arch_irq_connect_dynamic(unsigned int irq, unsigned int priority,
|
||||
void (*routine)(const void *parameter),
|
||||
const void *parameter, uint32_t flags)
|
||||
{
|
||||
z_isr_install(irq, routine, parameter);
|
||||
z_irq_priority_set(irq, priority, flags);
|
||||
return irq;
|
||||
}
|
||||
#endif /* CONFIG_DYNAMIC_INTERRUPTS */
|
||||
|
||||
@@ -1,33 +1,45 @@
|
||||
/*
|
||||
* Copyright (c) 2015 Intel corporation
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file Software interrupts utility code - ARC implementation
|
||||
*/
|
||||
|
||||
#include <kernel.h>
|
||||
#include <nanokernel.h>
|
||||
#include <irq_offload.h>
|
||||
|
||||
static irq_offload_routine_t offload_routine;
|
||||
static const void *offload_param;
|
||||
static void *offload_param;
|
||||
|
||||
/* Called by trap_s exception handler */
|
||||
void z_irq_do_offload(void)
|
||||
void _irq_do_offload(void)
|
||||
{
|
||||
offload_routine(offload_param);
|
||||
}
|
||||
|
||||
void arch_irq_offload(irq_offload_routine_t routine, const void *parameter)
|
||||
void irq_offload(irq_offload_routine_t routine, void *parameter)
|
||||
{
|
||||
int key;
|
||||
|
||||
key = irq_lock();
|
||||
offload_routine = routine;
|
||||
offload_param = parameter;
|
||||
|
||||
__asm__ volatile ("trap_s %[id]"
|
||||
:
|
||||
: [id] "i"(_TRAP_S_SCALL_IRQ_OFFLOAD) : );
|
||||
__asm__ volatile ("trap_s 0");
|
||||
|
||||
irq_unlock(key);
|
||||
}
|
||||
|
||||
|
||||
53
arch/arc/core/irq_vector_table.c
Normal file
53
arch/arc/core/irq_vector_table.c
Normal file
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright (c) 2014 Wind River Systems, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief IRQ part of vector table for Quark SE Sensor Subsystem
|
||||
*
|
||||
* This file contains the IRQ part of the vector table. It is meant to be used
|
||||
* for one of two cases:
|
||||
*
|
||||
* a) When software-managed ISRs (SW_ISR_TABLE) is enabled, and in that case it
|
||||
* binds _IsrWrapper() to all the IRQ entries in the vector table.
|
||||
*
|
||||
* b) When the BSP is written so that device ISRs are installed directly in the
|
||||
* vector table, they are enumerated here.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <toolchain.h>
|
||||
#include <sections.h>
|
||||
|
||||
extern void _isr_enter(void);
|
||||
typedef void (*vth)(void); /* Vector Table Handler */
|
||||
|
||||
#if defined(CONFIG_SW_ISR_TABLE)
|
||||
|
||||
vth __irq_vector_table _irq_vector_table[CONFIG_NUM_IRQS - 16] = {
|
||||
[0 ...(CONFIG_NUM_IRQS - 17)] = _isr_enter
|
||||
};
|
||||
|
||||
#elif !defined(CONFIG_IRQ_VECTOR_TABLE_CUSTOM)
|
||||
|
||||
extern void _SpuriousIRQ(void);
|
||||
|
||||
/* placeholders: fill with real ISRs */
|
||||
|
||||
vth __irq_vector_table _irq_vector_table[CONFIG_NUM_IRQS - 16] = {
|
||||
[0 ...(CONFIG_NUM_IRQS - 17)] = _SpuriousIRQ
|
||||