diff --git a/.checkpatch.conf b/.checkpatch.conf
index accee08b149..a6d9a31f11d 100644
--- a/.checkpatch.conf
+++ b/.checkpatch.conf
@@ -5,7 +5,6 @@
 --min-conf-desc-length=1
 --typedefsfile=scripts/checkpatch/typedefsfile
 
---ignore BRACES
 --ignore PRINTK_WITHOUT_KERN_LEVEL
 --ignore SPLIT_STRING
 --ignore VOLATILE
diff --git a/.clang-format b/.clang-format
index 2b438bf57cc..940f22994b8 100644
--- a/.clang-format
+++ b/.clang-format
@@ -46,6 +46,7 @@ ForEachMacros:
   - 'SYS_DLIST_FOR_EACH_CONTAINER_SAFE'
   - 'SYS_DLIST_FOR_EACH_NODE'
   - 'SYS_DLIST_FOR_EACH_NODE_SAFE'
+  - 'SYS_SEM_LOCK'
   - 'SYS_SFLIST_FOR_EACH_CONTAINER'
   - 'SYS_SFLIST_FOR_EACH_CONTAINER_SAFE'
   - 'SYS_SFLIST_FOR_EACH_NODE'
@@ -79,6 +80,8 @@ ForEachMacros:
   - 'HTTP_SERVER_CONTENT_TYPE_FOREACH'
   - 'HTTP_SERVICE_FOREACH'
   - 'HTTP_SERVICE_FOREACH_RESOURCE'
+  - 'I3C_BUS_FOR_EACH_I3CDEV'
+  - 'I3C_BUS_FOR_EACH_I2CDEV'
 IfMacros:
   - 'CHECKIF'
 # Disabled for now, see bug https://github.com/zephyrproject-rtos/zephyr/issues/48520
@@ -101,5 +104,11 @@ SpaceBeforeParens: ControlStatementsExceptControlMacros
 SortIncludes: Never
 UseTab: ForContinuationAndIndentation
 WhitespaceSensitiveMacros:
+  - COND_CODE_0
+  - COND_CODE_1
+  - IF_DISABLED
+  - IF_ENABLED
+  - LISTIFY
   - STRINGIFY
   - Z_STRINGIFY
+  - DT_FOREACH_PROP_ELEM_SEP
diff --git a/.github/SECURITY.md b/.github/SECURITY.md
index 42354f627cf..ba2dedb99e4 100644
--- a/.github/SECURITY.md
+++ b/.github/SECURITY.md
@@ -8,11 +8,11 @@ updates:
   - The most recent release, and the release prior to that.
   - Active LTS releases.
 
-At this time, with the latest release of v3.6, the supported
+At this time, with the latest release of v4.0, the supported
 versions are:
 
-  - v3.7: Current LTS
-  - v3.6: Prior release
+  - v4.0: Current release
+  - v3.7: Prior release and Current LTS
   - v2.7: Prior LTS
 
 ## Reporting process
diff --git a/.github/workflows/assigner.yml b/.github/workflows/assigner.yml
index 6e4e01c8ea1..be3696c4d30 100644
--- a/.github/workflows/assigner.yml
+++ b/.github/workflows/assigner.yml
@@ -24,8 +24,7 @@ jobs:
     steps:
     - name: Install Python dependencies
       run: |
-        sudo pip3 install -U setuptools wheel pip
-        pip3 install -U PyGithub>=1.55 west
+        pip install -U PyGithub>=1.55 west
 
     - name: Check out source code
       uses: actions/checkout@v4
diff --git a/.github/workflows/backport_issue_check.yml b/.github/workflows/backport_issue_check.yml
index ecaaf352827..2d2c4fda6a8 100644
--- a/.github/workflows/backport_issue_check.yml
+++ b/.github/workflows/backport_issue_check.yml
@@ -25,8 +25,7 @@ jobs:
 
       - name: Install Python dependencies
         run: |
-          sudo pip3 install -U setuptools wheel pip
-          pip3 install -U pygithub
+          pip install -U pygithub
 
       - name: Run backport issue checker
         env:
diff --git a/.github/workflows/bsim-tests.yaml b/.github/workflows/bsim-tests.yaml
index 0c50ca5d6fd..66d47c68a1c 100644
--- a/.github/workflows/bsim-tests.yaml
+++ b/.github/workflows/bsim-tests.yaml
@@ -12,12 +12,14 @@ on:
       - "dts/*/nordic/**"
       - "tests/bluetooth/common/testlib/**"
       - "samples/bluetooth/**"
-      - "boards/posix/**"
-      - "soc/posix/**"
+      - "boards/native/**"
+      - "soc/native/**"
       - "arch/posix/**"
       - "include/zephyr/arch/posix/**"
       - "scripts/native_simulator/**"
       - "samples/net/sockets/echo_*/**"
+      - "modules/hal_nordic/**"
+      - "modules/mbedtls/**"
       - "modules/openthread/**"
       - "subsys/net/l2/openthread/**"
       - "include/zephyr/net/openthread.h"
@@ -36,7 +38,7 @@ jobs:
     runs-on:
       group: zephyr-runner-v2-linux-x64-4xlarge
     container:
-      image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.26.14.20240823
+      image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.27.4.20241026
       options: '--entrypoint /bin/bash'
     env:
       ZEPHYR_TOOLCHAIN_VARIANT: zephyr
@@ -76,7 +78,9 @@ jobs:
           git config --global user.email "bot@zephyrproject.org"
           git config --global user.name "Zephyr Bot"
           rm -fr ".git/rebase-apply"
+          rm -fr ".git/rebase-merge"
           git rebase origin/${BASE_REF}
+          git clean -f -d
           git log  --pretty=oneline | head -n 10
           west init -l . || true
           west config manifest.group-filter -- +ci
@@ -94,14 +98,16 @@ jobs:
             .github/workflows/bsim-tests.yaml
             .github/workflows/bsim-tests-publish.yaml
             west.yml
-            boards/posix/
-            soc/posix/
+            boards/native/
+            soc/native/
             arch/posix/
             include/zephyr/arch/posix/
             scripts/native_simulator/
             tests/bsim/*
             boards/nordic/nrf5*/*dt*
             dts/*/nordic/
+            modules/mbedtls/**
+            modules/hal_nordic/**
 
       - name: Check if Bluethooth files changed
         uses: tj-actions/changed-files@v45
@@ -166,7 +172,7 @@ jobs:
 
       - name: Merge Test Results
         run: |
-          pip3 install junitparser junit2html
+          pip install junitparser junit2html
           junitparser merge --glob "./bsim_*/*bsim_results.*.xml" "./twister-out/twister.xml" junit.xml
           junit2html junit.xml junit.html
 
diff --git a/.github/workflows/bug_snapshot.yaml b/.github/workflows/bug_snapshot.yaml
index b4f9022bf28..f10dc718b6e 100644
--- a/.github/workflows/bug_snapshot.yaml
+++ b/.github/workflows/bug_snapshot.yaml
@@ -25,8 +25,7 @@ jobs:
 
     - name: Install Python dependencies
       run: |
-        sudo pip3 install -U setuptools wheel pip
-        pip3 install -U pygithub
+        pip install -U pygithub
 
     - name: Snapshot bugs
       env:
diff --git a/.github/workflows/clang.yaml b/.github/workflows/clang.yaml
index e88141a9e23..11d249cd937 100644
--- a/.github/workflows/clang.yaml
+++ b/.github/workflows/clang.yaml
@@ -12,7 +12,7 @@ jobs:
     runs-on:
       group: zephyr-runner-v2-linux-x64-4xlarge
     container:
-      image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.26.14.20240823
+      image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.27.4.20241026
       options: '--entrypoint /bin/bash'
     strategy:
       fail-fast: false
@@ -61,7 +61,9 @@ jobs:
           git config --global user.email "bot@zephyrproject.org"
           git config --global user.name "Zephyr Bot"
           rm -fr ".git/rebase-apply"
+          rm -fr ".git/rebase-merge"
           git rebase origin/${BASE_REF}
+          git clean -f -d
           git log  --pretty=oneline | head -n 10
           west init -l . || true
           west config --global update.narrow true
@@ -106,13 +108,13 @@ jobs:
           export ZEPHYR_TOOLCHAIN_VARIANT=llvm
 
           # check if we need to run a full twister or not based on files changed
-          python3 ./scripts/ci/test_plan.py --platform ${{ matrix.platform }} -c origin/${BASE_REF}..
+          python3 ./scripts/ci/test_plan.py --no-detailed-test-id --platform ${{ matrix.platform }} -c origin/${BASE_REF}..
 
           # We can limit scope to just what has changed
           if [ -s testplan.json ]; then
             echo "report_needed=1" >> $GITHUB_OUTPUT
             # Full twister but with options based on changes
-            ./scripts/twister --force-color --inline-logs -M -N -v --load-tests testplan.json --retry-failed 2
+            ./scripts/twister --no-detailed-test-id --force-color --inline-logs -M -N -v --load-tests testplan.json --retry-failed 2
           else
             # if nothing is run, skip reporting step
             echo "report_needed=0" >> $GITHUB_OUTPUT
@@ -142,7 +144,7 @@ jobs:
           path: artifacts
       - name: Merge Test Results
         run: |
-          pip3 install junitparser junit2html
+          pip install junitparser junit2html
           junitparser merge artifacts/*/twister.xml junit.xml
           junit2html junit.xml junit-clang.html
 
diff --git a/.github/workflows/codecov.yaml b/.github/workflows/codecov.yaml
index aa81056cdfd..d03ced6e474 100644
--- a/.github/workflows/codecov.yaml
+++ b/.github/workflows/codecov.yaml
@@ -14,7 +14,7 @@ jobs:
     runs-on:
       group: zephyr-runner-v2-linux-x64-4xlarge
     container:
-      image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.26.14.20240823
+      image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.27.4.20241026
       options: '--entrypoint /bin/bash'
     strategy:
       fail-fast: false
@@ -34,7 +34,7 @@ jobs:
       CCACHE_REMOTE_STORAGE: "redis://cache-*.keydb-cache.svc.cluster.local|shards=1,2,3"
       CCACHE_REMOTE_ONLY: "true"
       # `--specs` is ignored because ccache is unable to resovle the toolchain specs file path.
-      CCACHE_IGNOREOPTIONS: '--specs=*'
+      CCACHE_IGNOREOPTIONS: '-specs=* --specs=*'
     steps:
       - name: Apply container owner mismatch workaround
         run: |
@@ -101,7 +101,7 @@ jobs:
           export ZEPHYR_BASE=${PWD}
           export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
           mkdir -p coverage/reports
-          pip3 install gcovr==6.0
+          pip install gcovr==6.0
           ./scripts/twister -E ${{matrix.normalized}}-testplan.json
           ls -la
           ./scripts/twister \
@@ -182,7 +182,7 @@ jobs:
       - name: Merge coverage files
         run: |
           pushd ./coverage/reports
-          pip3 install gcovr==6.0
+          pip install gcovr==6.0
           gcovr ${{ steps.get-coverage-files.outputs.mergefiles }}  --merge-mode-functions=separate --json merged.json
           gcovr ${{ steps.get-coverage-files.outputs.mergefiles }} --merge-mode-functions=separate --cobertura merged.xml
           popd
diff --git a/.github/workflows/coding_guidelines.yml b/.github/workflows/coding_guidelines.yml
index 1bc6ee2e666..9ab2bc974b1 100644
--- a/.github/workflows/coding_guidelines.yml
+++ b/.github/workflows/coding_guidelines.yml
@@ -21,9 +21,8 @@ jobs:
 
     - name: Install python dependencies
       run: |
-        pip3 install unidiff
-        pip3 install wheel
-        pip3 install sh
+        pip install unidiff
+        pip install sh
 
     - name: Install Packages
       run: |
@@ -40,7 +39,10 @@ jobs:
         git config --global user.email "actions@zephyrproject.org"
         git config --global user.name "Github Actions"
         git remote -v
+        rm -fr ".git/rebase-apply"
+        rm -fr ".git/rebase-merge"
         git rebase origin/${BASE_REF}
+        git clean -f -d
         source zephyr-env.sh
         # debug
         ls -la
diff --git a/.github/workflows/compliance.yml b/.github/workflows/compliance.yml
index c8ffedcb77b..56927365550 100644
--- a/.github/workflows/compliance.yml
+++ b/.github/workflows/compliance.yml
@@ -23,6 +23,23 @@ jobs:
         ref: ${{ github.event.pull_request.head.sha }}
         fetch-depth: 0
 
+    - name: Rebase onto the target branch
+      env:
+        BASE_REF: ${{ github.base_ref }}
+      run: |
+        git config --global user.email "you@example.com"
+        git config --global user.name "Your Name"
+        git remote -v
+        # Ensure there's no merge commits in the PR
+        #[[ "$(git rev-list --merges --count origin/${BASE_REF}..)" == "0" ]] || \
+        #(echo "::error ::Merge commits not allowed, rebase instead";false)
+        rm -fr ".git/rebase-apply"
+        rm -fr ".git/rebase-merge"
+        git rebase origin/${BASE_REF}
+        git clean -f -d
+        # debug
+        git log  --pretty=oneline | head -n 10
+
     - name: Set up Python
       uses: actions/setup-python@v5
       with:
@@ -36,24 +53,11 @@ jobs:
 
     - name: Install python dependencies
       run: |
-        pip3 install setuptools
-        pip3 install wheel
-        pip3 install python-magic lxml junitparser gitlint pylint pykwalify yamllint clang-format unidiff sphinx-lint
-        pip3 install west
+        pip install -r scripts/requirements-compliance.txt
+        pip install west
 
     - name: west setup
-      env:
-        BASE_REF: ${{ github.base_ref }}
       run: |
-        git config --global user.email "you@example.com"
-        git config --global user.name "Your Name"
-        git remote -v
-        # Ensure there's no merge commits in the PR
-        #[[ "$(git rev-list --merges --count origin/${BASE_REF}..)" == "0" ]] || \
-        #(echo "::error ::Merge commits not allowed, rebase instead";false)
-        git rebase origin/${BASE_REF}
-        # debug
-        git log  --pretty=oneline | head -n 10
         west init -l . || true
         west config manifest.group-filter -- +ci,-optional
         west update -o=--depth=1 -n 2>&1 1> west.update.log || west update -o=--depth=1 -n 2>&1 1> west.update2.log
@@ -78,8 +82,8 @@ jobs:
         git log  --pretty=oneline | head -n 10
         # Increase rename limit to allow for large PRs
         git config diff.renameLimit 10000
-        ./scripts/ci/check_compliance.py --annotate -e KconfigBasic -e Kconfig \
-        -e KconfigBasicNoModules -e ModulesMaintainers -c origin/${BASE_REF}..
+        ./scripts/ci/check_compliance.py --annotate -e KconfigBasic -e ClangFormat \
+        -e Kconfig -e KconfigBasicNoModules -e ModulesMaintainers -c origin/${BASE_REF}..
 
     - name: upload-results
       uses: actions/upload-artifact@v4
diff --git a/.github/workflows/daily_test_version.yml b/.github/workflows/daily_test_version.yml
index 1886b4a8c80..3a43ac64300 100644
--- a/.github/workflows/daily_test_version.yml
+++ b/.github/workflows/daily_test_version.yml
@@ -25,7 +25,7 @@ jobs:
 
     - name: install-pip
       run: |
-        pip3 install gitpython
+        pip install gitpython
 
     - name: checkout
       uses: actions/checkout@v4
diff --git a/.github/workflows/devicetree_checks.yml b/.github/workflows/devicetree_checks.yml
index 060a5d95973..345eb5b7db0 100644
--- a/.github/workflows/devicetree_checks.yml
+++ b/.github/workflows/devicetree_checks.yml
@@ -26,7 +26,7 @@ jobs:
     runs-on: ${{ matrix.os }}
     strategy:
       matrix:
-        python-version: ['3.10', '3.11', '3.12']
+        python-version: ['3.10', '3.11', '3.12', '3.13']
         os: [ubuntu-22.04, macos-14, windows-2022]
     steps:
     - name: checkout
@@ -62,8 +62,7 @@ jobs:
           ${{ runner.os }}-pip-${{ matrix.python-version }}
     - name: install python dependencies
       run: |
-        pip3 install wheel
-        pip3 install pytest pyyaml tox
+        pip install pytest pyyaml tox
     - name: run tox
       working-directory: scripts/dts/python-devicetree
       run: |
diff --git a/.github/workflows/do_not_merge.yml b/.github/workflows/do_not_merge.yml
index b6954e288c9..b2bbefdc6fe 100644
--- a/.github/workflows/do_not_merge.yml
+++ b/.github/workflows/do_not_merge.yml
@@ -6,14 +6,14 @@ on:
 
 jobs:
   do-not-merge:
-    if: ${{ contains(github.event.*.labels.*.name, 'DNM') ||
-            contains(github.event.*.labels.*.name, 'TSC') ||
-            contains(github.event.*.labels.*.name, 'Architecture Review') ||
-            contains(github.event.*.labels.*.name, 'dev-review') }}
     name: Prevent Merging
     runs-on: ubuntu-22.04
     steps:
       - name: Check for label
+        if: ${{ contains(github.event.*.labels.*.name, 'DNM') ||
+                contains(github.event.*.labels.*.name, 'TSC') ||
+                contains(github.event.*.labels.*.name, 'Architecture Review') ||
+                contains(github.event.*.labels.*.name, 'dev-review') }}
         run: |
           echo "Pull request is labeled as 'DNM', 'TSC', 'Architecture Review' or 'dev-review'."
           echo "This workflow fails so that the pull request cannot be merged."
diff --git a/.github/workflows/doc-build.yml b/.github/workflows/doc-build.yml
index 1872a824604..69c7b787c45 100644
--- a/.github/workflows/doc-build.yml
+++ b/.github/workflows/doc-build.yml
@@ -42,6 +42,7 @@ jobs:
       with:
         files: |
           doc/
+          boards/**/doc/
           **.rst
           include/
           kernel/include/kernel_arch_interface.h
@@ -93,7 +94,10 @@ jobs:
       run: |
         git config --global user.email "actions@zephyrproject.org"
         git config --global user.name "Github Actions"
+        rm -fr ".git/rebase-apply"
+        rm -fr ".git/rebase-merge"
         git rebase origin/${BASE_REF}
+        git clean -f -d
         git log --graph --oneline HEAD...${PR_HEAD}
 
     - name: cache-pip
@@ -104,11 +108,10 @@ jobs:
 
     - name: install-pip
       run: |
-        sudo pip3 install -U setuptools wheel pip
-        pip3 install -r doc/requirements.txt
-        pip3 install west==${WEST_VERSION}
-        pip3 install cmake==${CMAKE_VERSION}
-        pip3 install coverxygen
+        pip install -r doc/requirements.txt
+        pip install west==${WEST_VERSION}
+        pip install cmake==${CMAKE_VERSION}
+        pip install coverxygen
 
     - name: west setup
       run: |
@@ -219,10 +222,9 @@ jobs:
 
     - name: install-pip
       run: |
-        pip3 install -U setuptools wheel pip
-        pip3 install -r doc/requirements.txt
-        pip3 install west==${WEST_VERSION}
-        pip3 install cmake==${CMAKE_VERSION}
+        pip install -r doc/requirements.txt
+        pip install west==${WEST_VERSION}
+        pip install cmake==${CMAKE_VERSION}
 
     - name: west setup
       run: |
diff --git a/.github/workflows/doc-publish-pr.yml b/.github/workflows/doc-publish-pr.yml
index b202b0a790a..786bd14aed2 100644
--- a/.github/workflows/doc-publish-pr.yml
+++ b/.github/workflows/doc-publish-pr.yml
@@ -21,16 +21,24 @@ jobs:
 
     steps:
     - name: Download artifacts
+      id: download-artifacts
       uses: dawidd6/action-download-artifact@v6
       with:
         workflow: doc-build.yml
         run_id: ${{ github.event.workflow_run.id }}
+        if_no_artifact_found: ignore
 
     - name: Load PR number
-      run: |
-        echo "PR_NUM=$(> $GITHUB_ENV
+      if: steps.download-artifacts.outputs.found_artifact == 'true'
+      uses: actions/github-script@v7
+      with:
+        script: |
+          let fs = require("fs");
+          let pr_number = Number(fs.readFileSync("./pr_num/pr_num"));
+          core.exportVariable("PR_NUM", pr_number);
 
     - name: Check PR number
+      if: steps.download-artifacts.outputs.found_artifact == 'true'
       id: check-pr
       uses: carpentries/actions/check-valid-pr@v0.14.0
       with:
@@ -38,12 +46,15 @@ jobs:
         sha: ${{ github.event.workflow_run.head_sha }}
 
     - name: Validate PR number
-      if: steps.check-pr.outputs.VALID != 'true'
+      if: |
+        steps.download-artifacts.outputs.found_artifact == 'true' &&
+        steps.check-pr.outputs.VALID != 'true'
       run: |
         echo "ABORT: PR number validation failed!"
         exit 1
 
     - name: Uncompress HTML docs
+      if: steps.download-artifacts.outputs.found_artifact == 'true'
       run: |
         tar xf html-output/html-output.tar.xz -C html-output
         if [ -f api-coverage/api-coverage.tar.xz ]; then
@@ -51,6 +62,7 @@ jobs:
         fi
 
     - name: Configure AWS Credentials
+      if: steps.download-artifacts.outputs.found_artifact == 'true'
       uses: aws-actions/configure-aws-credentials@v4
       with:
         aws-access-key-id: ${{ vars.AWS_BUILDS_ZEPHYR_PR_ACCESS_KEY_ID }}
@@ -58,6 +70,7 @@ jobs:
         aws-region: us-east-1
 
     - name: Upload to AWS S3
+      if: steps.download-artifacts.outputs.found_artifact == 'true'
       env:
         HEAD_BRANCH: ${{ github.event.workflow_run.head_branch }}
       run: |
diff --git a/.github/workflows/errno.yml b/.github/workflows/errno.yml
index b1f7e6f4e62..d3fe1b0dcae 100644
--- a/.github/workflows/errno.yml
+++ b/.github/workflows/errno.yml
@@ -10,7 +10,7 @@ jobs:
   check-errno:
     runs-on: ubuntu-22.04
     container:
-      image: ghcr.io/zephyrproject-rtos/ci:v0.26.13
+      image: ghcr.io/zephyrproject-rtos/ci:v0.27.4
 
     steps:
       - name: Apply container owner mismatch workaround
diff --git a/.github/workflows/footprint-tracking.yml b/.github/workflows/footprint-tracking.yml
index 08b858af477..78f761cb545 100644
--- a/.github/workflows/footprint-tracking.yml
+++ b/.github/workflows/footprint-tracking.yml
@@ -26,8 +26,11 @@ jobs:
       group: zephyr-runner-v2-linux-x64-4xlarge
     if: github.repository_owner == 'zephyrproject-rtos'
     container:
-      image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.26.14.20240823
+      image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.27.4.20241026
       options: '--entrypoint /bin/bash'
+    defaults:
+      run:
+        shell: bash
     strategy:
       fail-fast: false
     env:
@@ -55,7 +58,7 @@ jobs:
         run: |
           sudo apt-get update
           sudo apt-get install -y python3-venv
-          sudo pip3 install -U setuptools wheel pip gitpython
+          pip install -U gitpython
 
       - name: checkout
         uses: actions/checkout@v4
@@ -91,5 +94,35 @@ jobs:
         run: |
           python3 -m venv .venv
           . .venv/bin/activate
-          pip3 install awscli
+          pip install awscli
           aws s3 sync  --quiet footprint_data/ s3://testing.zephyrproject.org/footprint_data/
+
+      - name: Transform Footprint data to Twister JSON reports
+        run: |
+          shopt -s globstar
+          export ZEPHYR_BASE=${PWD}
+          python3 ./scripts/footprint/pack_as_twister.py -vvv \
+            --plan ./scripts/footprint/plan.txt \
+            --test-name='name.feature' \
+            ./footprint_data/**/
+
+      - name: Upload to ElasticSearch
+        env:
+          ELASTICSEARCH_KEY: ${{ secrets.ELASTICSEARCH_KEY }}
+          ELASTICSEARCH_SERVER: "https://elasticsearch.zephyrproject.io:443"
+          ELASTICSEARCH_INDEX: ${{ vars.FOOTPRINT_TRACKING_INDEX }}
+        run: |
+          shopt -s globstar
+          pip install -U elasticsearch
+          run_date=`date --iso-8601=minutes`
+          python3 ./scripts/ci/upload_test_results_es.py -r ${run_date} \
+            --flatten footprint \
+            --flatten-list-names "{'children':'name'}" \
+            --transform "{ 'footprint_name': '^(?P([^\/]+\/){0,2})(?P([^\/]*\/)*)(?P[^\/]*)$' }" \
+            --run-id "${{ github.run_id }}" \
+            --run-attempt "${{ github.run_attempt }}" \
+            --run-workflow "footprint-tracking:${{ github.event_name }}" \
+            --run-branch "${{ github.ref_name }}" \
+            -i ${ELASTICSEARCH_INDEX} \
+            ./footprint_data/**/twister_footprint.json
+        #
diff --git a/.github/workflows/hello_world_multiplatform.yaml b/.github/workflows/hello_world_multiplatform.yaml
index 08fd42d7866..59d622149a2 100644
--- a/.github/workflows/hello_world_multiplatform.yaml
+++ b/.github/workflows/hello_world_multiplatform.yaml
@@ -12,8 +12,7 @@ on:
       - v*-branch
       - collab-*
     paths:
-      - 'scripts/build/**'
-      - 'scripts/requirements*.txt'
+      - 'scripts/**'
       - '.github/workflows/hello_world_multiplatform.yaml'
       - 'SDK_VERSION'
 
@@ -45,7 +44,10 @@ jobs:
         run: |
           git config --global user.email "actions@zephyrproject.org"
           git config --global user.name "Github Actions"
+          rm -fr ".git/rebase-apply"
+          rm -fr ".git/rebase-merge"
           git rebase origin/${BASE_REF}
+          git clean -f -d
           git log --graph --oneline HEAD...${PR_HEAD}
 
       - name: Set up Python
@@ -68,7 +70,7 @@ jobs:
           elif [ "${{ runner.os }}" = "Windows" ]; then
             EXTRA_TWISTER_FLAGS="-P native_sim --short-build-path -O/tmp/twister-out"
           fi
-          ./scripts/twister --force-color --inline-logs -T samples/hello_world -v $EXTRA_TWISTER_FLAGS
+          ./scripts/twister --force-color --inline-logs -T samples/hello_world -T samples/cpp/hello_world -v $EXTRA_TWISTER_FLAGS
 
       - name: Upload artifacts
         if: failure()
@@ -77,3 +79,4 @@ jobs:
           if-no-files-found: ignore
           path:
             zephyr/twister-out/*/samples/hello_world/sample.basic.helloworld/build.log
+            zephyr/twister-out/*/samples/cpp/hello_world/sample.cpp.helloworld/build.log
diff --git a/.github/workflows/manifest.yml b/.github/workflows/manifest.yml
index 76b80f66504..c3bdc4ff6c8 100644
--- a/.github/workflows/manifest.yml
+++ b/.github/workflows/manifest.yml
@@ -20,13 +20,13 @@ jobs:
           BASE_REF: ${{ github.base_ref }}
         working-directory: zephyrproject/zephyr
         run: |
-          pip3 install west
+          pip install west
           git config --global user.email "you@example.com"
           git config --global user.name "Your Name"
           west init -l . || true
 
       - name: Manifest
-        uses: zephyrproject-rtos/action-manifest@v1.3.1
+        uses: zephyrproject-rtos/action-manifest@v1.7.0
         with:
           github-token: ${{ secrets.ZB_GITHUB_TOKEN }}
           manifest-path: 'west.yml'
diff --git a/.github/workflows/pylib_tests.yml b/.github/workflows/pylib_tests.yml
index 8827acebdb4..bf9d8289212 100644
--- a/.github/workflows/pylib_tests.yml
+++ b/.github/workflows/pylib_tests.yml
@@ -25,7 +25,7 @@ jobs:
     runs-on: ${{ matrix.os }}
     strategy:
       matrix:
-        python-version: ['3.10', '3.11', '3.12']
+        python-version: ['3.10', '3.11', '3.12', '3.13']
         os: [ubuntu-22.04]
     steps:
     - name: checkout
@@ -44,7 +44,7 @@ jobs:
           ${{ runner.os }}-pip-${{ matrix.python-version }}
     - name: install-packages
       run: |
-        pip3 install -r scripts/requirements-base.txt -r scripts/requirements-build-test.txt
+        pip install -r scripts/requirements-base.txt -r scripts/requirements-build-test.txt
     - name: Run pytest for build_helpers
       env:
         ZEPHYR_BASE: ./
diff --git a/.github/workflows/scripts_tests.yml b/.github/workflows/scripts_tests.yml
index 86db35ae02e..06e12ada528 100644
--- a/.github/workflows/scripts_tests.yml
+++ b/.github/workflows/scripts_tests.yml
@@ -25,7 +25,7 @@ jobs:
     runs-on: ${{ matrix.os }}
     strategy:
       matrix:
-        python-version: ['3.10', '3.11', '3.12']
+        python-version: ['3.10', '3.11', '3.12', '3.13']
         os: [ubuntu-20.04]
     steps:
       - name: checkout
@@ -42,7 +42,10 @@ jobs:
         run: |
           git config --global user.email "actions@zephyrproject.org"
           git config --global user.name "Github Actions"
+          rm -fr ".git/rebase-apply"
+          rm -fr ".git/rebase-merge"
           git rebase origin/${BASE_REF}
+          git clean -f -d
           git log --graph --oneline HEAD...${PR_HEAD}
 
       - name: Set up Python ${{ matrix.python-version }}
@@ -61,7 +64,7 @@ jobs:
 
       - name: install-packages
         run: |
-          pip3 install -r scripts/requirements-base.txt -r scripts/requirements-build-test.txt
+          pip install -r scripts/requirements-base.txt -r scripts/requirements-build-test.txt
 
       - name: Run pytest
         env:
diff --git a/.github/workflows/stats_merged_prs.yml b/.github/workflows/stats_merged_prs.yml
index cd874b65b1a..0f86958e47b 100644
--- a/.github/workflows/stats_merged_prs.yml
+++ b/.github/workflows/stats_merged_prs.yml
@@ -20,5 +20,5 @@ jobs:
           ELASTICSEARCH_SERVER: "https://elasticsearch.zephyrproject.io:443"
           PR_STAT_ES_INDEX: ${{ vars.PR_STAT_ES_INDEX }}
         run: |
-          pip3 install pygithub elasticsearch
+          pip install pygithub elasticsearch
           python3 ./scripts/ci/stats/merged_prs.py --pull-request ${{ github.event.pull_request.number }} --repo ${{ github.repository }}
diff --git a/.github/workflows/twister-prep.yaml b/.github/workflows/twister-prep.yaml
new file mode 100644
index 00000000000..51bc771059d
--- /dev/null
+++ b/.github/workflows/twister-prep.yaml
@@ -0,0 +1,147 @@
+name: Prepare For a Twister Run
+
+on:
+  workflow_call:
+    outputs:
+      subset:
+        description: subset
+        value: ${{ jobs.prep_push.outputs.subset != '' && jobs.prep_push.outputs.subset ||  jobs.prep_pr.outputs.subset }}
+      size:
+        description: size
+        value: ${{ jobs.prep_push.outputs.size != '' && jobs.prep_push.outputs.size || jobs.prep_pr.outputs.size }}
+      fullrun:
+        description: fullrun
+        value: ${{ jobs.prep_push.outputs.fullrun != '' && jobs.prep_push.outputs.fullrun || jobs.prep_pr.outputs.size }}
+
+jobs:
+  prep_pr:
+    if: github.repository_owner == 'zephyrproject-rtos' && github.event_name == 'pull_request_target'
+    runs-on:
+      group: zephyr-runner-v2-linux-x64-4xlarge
+    container:
+      image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.27.4.20241026
+      options: '--entrypoint /bin/bash'
+    outputs:
+      subset: ${{ steps.output-services.outputs.subset }}
+      size: ${{ steps.output-services.outputs.size }}
+      fullrun: ${{ steps.output-services.outputs.fullrun }}
+    env:
+      MATRIX_SIZE: 10
+      PUSH_MATRIX_SIZE: 20
+      DAILY_MATRIX_SIZE: 80
+      BSIM_OUT_PATH: /opt/bsim/
+      BSIM_COMPONENTS_PATH: /opt/bsim/components
+      TESTS_PER_BUILDER: 700
+      COMMIT_RANGE: ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}
+      BASE_REF: ${{ github.base_ref }}
+    steps:
+      - name: Apply container owner mismatch workaround
+        run: |
+          # FIXME: The owner UID of the GITHUB_WORKSPACE directory may not
+          #        match the container user UID because of the way GitHub
+          #        Actions runner is implemented. Remove this workaround when
+          #        GitHub comes up with a fundamental fix for this problem.
+          git config --global --add safe.directory ${GITHUB_WORKSPACE}
+
+      - name: Print cloud service information
+        run: |
+          echo "ZEPHYR_RUNNER_CLOUD_PROVIDER = ${ZEPHYR_RUNNER_CLOUD_PROVIDER}"
+          echo "ZEPHYR_RUNNER_CLOUD_NODE = ${ZEPHYR_RUNNER_CLOUD_NODE}"
+          echo "ZEPHYR_RUNNER_CLOUD_POD = ${ZEPHYR_RUNNER_CLOUD_POD}"
+
+      - name: Clone cached Zephyr repository
+        continue-on-error: true
+        run: |
+          git clone --shared /repo-cache/zephyrproject/zephyr .
+          git remote set-url origin ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}
+
+      - name: Checkout
+        uses: actions/checkout@v4
+        with:
+          ref: ${{ github.event.pull_request.head.sha }}
+          fetch-depth: 0
+          persist-credentials: false
+
+      - name: Environment Setup
+        run: |
+          git config --global user.email "bot@zephyrproject.org"
+          git config --global user.name "Zephyr Bot"
+          rm -fr ".git/rebase-apply"
+          rm -fr ".git/rebase-merge"
+          git rebase origin/${BASE_REF}
+          git clean -f -d
+          git log  --pretty=oneline | head -n 10
+          west init -l . || true
+          west config manifest.group-filter -- +ci,+optional
+          west config --global update.narrow true
+          west update --path-cache /repo-cache/zephyrproject 2>&1 1> west.update.log || west update --path-cache /repo-cache/zephyrproject 2>&1 1> west.update.log || ( rm -rf ../modules ../bootloader ../tools && west update --path-cache /repo-cache/zephyrproject)
+          west forall -c 'git reset --hard HEAD'
+
+          echo "ZEPHYR_SDK_INSTALL_DIR=/opt/toolchains/zephyr-sdk-$( cat SDK_VERSION )" >> $GITHUB_ENV
+
+      - name: Generate Test Plan with Twister
+        id: test-plan
+        run: |
+          export ZEPHYR_BASE=${PWD}
+          export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
+          python3 ./scripts/ci/test_plan.py -c origin/${BASE_REF}.. --no-detailed-test-id --pull-request -t $TESTS_PER_BUILDER
+          if [ -s .testplan ]; then
+            cat .testplan >> $GITHUB_ENV
+          else
+            echo "TWISTER_NODES=${MATRIX_SIZE}" >> $GITHUB_ENV
+          fi
+          rm -f testplan.json .testplan
+
+      - name: Determine matrix size
+        id: output-services
+        run: |
+          if [ -n "${TWISTER_NODES}" ]; then
+            subset="[$(seq -s',' 1 ${TWISTER_NODES})]"
+          else
+            subset="[$(seq -s',' 1 ${MATRIX_SIZE})]"
+          fi
+          size=${TWISTER_NODES}
+
+          echo "subset=${subset}" >> $GITHUB_OUTPUT
+          echo "size=${size}" >> $GITHUB_OUTPUT
+          echo "fullrun=${TWISTER_FULL}" >> $GITHUB_OUTPUT
+
+  prep_push:
+    if: github.repository_owner == 'zephyrproject-rtos' && (github.event_name == 'push' || github.event_name == 'schedule')
+    runs-on: ubuntu-22.04
+    outputs:
+      subset: ${{ steps.output-services.outputs.subset }}
+      size: ${{ steps.output-services.outputs.size }}
+      fullrun: ${{ steps.output-services.outputs.fullrun }}
+    env:
+      MATRIX_SIZE: 10
+      PUSH_MATRIX_SIZE: 20
+      DAILY_MATRIX_SIZE: 80
+      BSIM_OUT_PATH: /opt/bsim/
+      BSIM_COMPONENTS_PATH: /opt/bsim/components
+      TESTS_PER_BUILDER: 700
+      COMMIT_RANGE: ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}
+      BASE_REF: ${{ github.base_ref }}
+    steps:
+      - name: Print cloud service information
+        run: |
+          echo "ZEPHYR_RUNNER_CLOUD_PROVIDER = ${ZEPHYR_RUNNER_CLOUD_PROVIDER}"
+          echo "ZEPHYR_RUNNER_CLOUD_NODE = ${ZEPHYR_RUNNER_CLOUD_NODE}"
+          echo "ZEPHYR_RUNNER_CLOUD_POD = ${ZEPHYR_RUNNER_CLOUD_POD}"
+
+      - name: Determine matrix size
+        id: output-services
+        run: |
+          if [ "${{github.event_name}}" = "push" ]; then
+            subset="[$(seq -s',' 1 ${PUSH_MATRIX_SIZE})]"
+            size=${MATRIX_SIZE}
+          elif [ "${{github.event_name}}" = "schedule" -a "${{github.repository}}" = "zephyrproject-rtos/zephyr" ]; then
+            subset="[$(seq -s',' 1 ${DAILY_MATRIX_SIZE})]"
+            size=${DAILY_MATRIX_SIZE}
+          else
+            size=0
+          fi
+
+          echo "subset=${subset}" >> $GITHUB_OUTPUT
+          echo "size=${size}" >> $GITHUB_OUTPUT
+          echo "fullrun=${TWISTER_FULL}" >> $GITHUB_OUTPUT
diff --git a/.github/workflows/twister-publish.yaml b/.github/workflows/twister-publish.yaml
new file mode 100644
index 00000000000..3695d060726
--- /dev/null
+++ b/.github/workflows/twister-publish.yaml
@@ -0,0 +1,53 @@
+name: Publish Twister Test Results
+
+on:
+  workflow_run:
+    workflows: ["Run tests with twister"]
+    branches:
+      - main
+    types:
+      - completed
+
+jobs:
+  upload-to-elasticsearch:
+    if: |
+      github.repository == 'zephyrproject-rtos/zephyr' &&
+      github.event.workflow_run.event != 'pull_request_target'
+    env:
+      ELASTICSEARCH_KEY: ${{ secrets.ELASTICSEARCH_KEY }}
+      ELASTICSEARCH_SERVER: "https://elasticsearch.zephyrproject.io:443"
+    runs-on: ubuntu-22.04
+    steps:
+      # Needed for elasticearch and upload script
+      - name: Checkout
+        uses: actions/checkout@v4
+        with:
+          fetch-depth: 0
+          persist-credentials: false
+
+      - name: Download Artifacts
+        id: download-artifacts
+        uses: dawidd6/action-download-artifact@v6
+        with:
+          path: artifacts
+          workflow: twister.yml
+          run_id: ${{ github.event.workflow_run.id }}
+          if_no_artifact_found: ignore
+
+      - name: Upload to elasticsearch
+        if: steps.download-artifacts.outputs.found_artifact == 'true'
+        run: |
+          pip install elasticsearch
+          # set run date on upload to get consistent and unified data across the matrix.
+          run_date=`date --iso-8601=minutes`
+          if [ "${{github.event.workflow_run.event}}" = "push" ]; then
+            python3 ./scripts/ci/upload_test_results_es.py -r ${run_date} \
+            --run-attempt ${{github.run_attempt}} \
+            --run-branch ${{github.ref_name}} \
+            --index zephyr-main-ci-push-1 artifacts/*/*/twister.json
+          elif [ "${{github.event.workflow_run.event}}" = "schedule" ]; then
+            python3 ./scripts/ci/upload_test_results_es.py -r ${run_date} \
+            --run-attempt ${{github.run_attempt}} \
+            --run-branch ${{github.ref_name}} \
+            --index zephyr-main-ci-weekly-1 artifacts/*/*/twister.json
+          fi
diff --git a/.github/workflows/twister.yaml b/.github/workflows/twister.yaml
index cc3c9e3ffdf..8d3b29fa433 100644
--- a/.github/workflows/twister.yaml
+++ b/.github/workflows/twister.yaml
@@ -21,107 +21,7 @@ concurrency:
 
 jobs:
   twister-build-prep:
-    if: github.repository_owner == 'zephyrproject-rtos'
-    runs-on:
-      group: zephyr-runner-v2-linux-x64-4xlarge
-    container:
-      image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.26.14.20240823
-      options: '--entrypoint /bin/bash'
-    outputs:
-      subset: ${{ steps.output-services.outputs.subset }}
-      size: ${{ steps.output-services.outputs.size }}
-      fullrun: ${{ steps.output-services.outputs.fullrun }}
-    env:
-      MATRIX_SIZE: 10
-      PUSH_MATRIX_SIZE: 20
-      DAILY_MATRIX_SIZE: 80
-      BSIM_OUT_PATH: /opt/bsim/
-      BSIM_COMPONENTS_PATH: /opt/bsim/components
-      TESTS_PER_BUILDER: 700
-      COMMIT_RANGE: ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}
-      BASE_REF: ${{ github.base_ref }}
-    steps:
-      - name: Apply container owner mismatch workaround
-        run: |
-          # FIXME: The owner UID of the GITHUB_WORKSPACE directory may not
-          #        match the container user UID because of the way GitHub
-          #        Actions runner is implemented. Remove this workaround when
-          #        GitHub comes up with a fundamental fix for this problem.
-          git config --global --add safe.directory ${GITHUB_WORKSPACE}
-
-      - name: Print cloud service information
-        run: |
-          echo "ZEPHYR_RUNNER_CLOUD_PROVIDER = ${ZEPHYR_RUNNER_CLOUD_PROVIDER}"
-          echo "ZEPHYR_RUNNER_CLOUD_NODE = ${ZEPHYR_RUNNER_CLOUD_NODE}"
-          echo "ZEPHYR_RUNNER_CLOUD_POD = ${ZEPHYR_RUNNER_CLOUD_POD}"
-
-      - name: Clone cached Zephyr repository
-        if: github.event_name == 'pull_request_target'
-        continue-on-error: true
-        run: |
-          git clone --shared /repo-cache/zephyrproject/zephyr .
-          git remote set-url origin ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}
-
-      - name: Checkout
-        if: github.event_name == 'pull_request_target'
-        uses: actions/checkout@v4
-        with:
-          ref: ${{ github.event.pull_request.head.sha }}
-          fetch-depth: 0
-          persist-credentials: false
-
-      - name: Environment Setup
-        if: github.event_name == 'pull_request_target'
-        run: |
-          git config --global user.email "bot@zephyrproject.org"
-          git config --global user.name "Zephyr Bot"
-          rm -fr ".git/rebase-apply"
-          git rebase origin/${BASE_REF}
-          git log  --pretty=oneline | head -n 10
-          west init -l . || true
-          west config manifest.group-filter -- +ci,+optional
-          west config --global update.narrow true
-          west update --path-cache /repo-cache/zephyrproject 2>&1 1> west.update.log || west update --path-cache /repo-cache/zephyrproject 2>&1 1> west.update.log || ( rm -rf ../modules ../bootloader ../tools && west update --path-cache /repo-cache/zephyrproject)
-          west forall -c 'git reset --hard HEAD'
-
-          echo "ZEPHYR_SDK_INSTALL_DIR=/opt/toolchains/zephyr-sdk-$( cat SDK_VERSION )" >> $GITHUB_ENV
-
-      - name: Generate Test Plan with Twister
-        if: github.event_name == 'pull_request_target'
-        id: test-plan
-        run: |
-          export ZEPHYR_BASE=${PWD}
-          export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
-          python3 ./scripts/ci/test_plan.py -c origin/${BASE_REF}.. --pull-request -t $TESTS_PER_BUILDER
-          if [ -s .testplan ]; then
-            cat .testplan >> $GITHUB_ENV
-          else
-            echo "TWISTER_NODES=${MATRIX_SIZE}" >> $GITHUB_ENV
-          fi
-          rm -f testplan.json .testplan
-
-      - name: Determine matrix size
-        id: output-services
-        run: |
-          if [ "${{github.event_name}}" = "pull_request_target" ]; then
-            if [ -n "${TWISTER_NODES}" ]; then
-              subset="[$(seq -s',' 1 ${TWISTER_NODES})]"
-            else
-              subset="[$(seq -s',' 1 ${MATRIX_SIZE})]"
-            fi
-            size=${TWISTER_NODES}
-          elif [ "${{github.event_name}}" = "push" ]; then
-            subset="[$(seq -s',' 1 ${PUSH_MATRIX_SIZE})]"
-            size=${MATRIX_SIZE}
-          elif [ "${{github.event_name}}" = "schedule" -a "${{github.repository}}" = "zephyrproject-rtos/zephyr" ]; then
-            subset="[$(seq -s',' 1 ${DAILY_MATRIX_SIZE})]"
-            size=${DAILY_MATRIX_SIZE}
-          else
-            size=0
-          fi
-          echo "subset=${subset}" >> $GITHUB_OUTPUT
-          echo "size=${size}" >> $GITHUB_OUTPUT
-          echo "fullrun=${TWISTER_FULL}" >> $GITHUB_OUTPUT
+    uses: ./.github/workflows/twister-prep.yaml
 
   twister-build:
     runs-on:
@@ -129,7 +29,7 @@ jobs:
     needs: twister-build-prep
     if: needs.twister-build-prep.outputs.size != 0
     container:
-      image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.26.14.20240823
+      image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.27.4.20241026
       options: '--entrypoint /bin/bash'
     strategy:
       fail-fast: false
@@ -141,15 +41,16 @@ jobs:
       CCACHE_REMOTE_STORAGE: "redis://cache-*.keydb-cache.svc.cluster.local|shards=1,2,3"
       CCACHE_REMOTE_ONLY: "true"
       # `--specs` is ignored because ccache is unable to resolve the toolchain specs file path.
-      CCACHE_IGNOREOPTIONS: '--specs=*'
+      CCACHE_IGNOREOPTIONS: '-specs=* --specs=*'
       BSIM_OUT_PATH: /opt/bsim/
       BSIM_COMPONENTS_PATH: /opt/bsim/components
-      TWISTER_COMMON: ' --force-color --inline-logs -v -N -M --retry-failed 3 --timeout-multiplier 2 '
-      DAILY_OPTIONS: ' -M --build-only --all --show-footprint'
+      TWISTER_COMMON: '--no-detailed-test-id --force-color --inline-logs -v -N -M --retry-failed 3 --timeout-multiplier 2 '
+      WEEKLY_OPTIONS: ' -M --build-only --all --show-footprint --report-filtered'
       PR_OPTIONS: ' --clobber-output --integration'
-      PUSH_OPTIONS: ' --clobber-output -M --show-footprint'
+      PUSH_OPTIONS: ' --clobber-output -M --show-footprint --report-filtered'
       COMMIT_RANGE: ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}
       BASE_REF: ${{ github.base_ref }}
+      LLVM_TOOLCHAIN_PATH: /usr/lib/llvm-16
     steps:
       - name: Print cloud service information
         run: |
@@ -184,10 +85,13 @@ jobs:
             git config --global user.email "bot@zephyrproject.org"
             git config --global user.name "Zephyr Builder"
             rm -fr ".git/rebase-apply"
+            rm -fr ".git/rebase-merge"
             git rebase origin/${BASE_REF}
+            git clean -f -d
             git log  --pretty=oneline | head -n 10
           fi
           echo "$HOME/.local/bin" >> $GITHUB_PATH
+          echo "$HOME/.cargo/bin" >> $GITHUB_PATH
 
           west init -l . || true
           west config manifest.group-filter -- +ci,+optional
@@ -201,6 +105,8 @@ jobs:
         run: |
           cmake --version
           gcc --version
+          cargo --version
+          rustup target list --installed
           ls -la
           echo "github.ref: ${{ github.ref }}"
           echo "github.base_ref: ${{ github.base_ref }}"
@@ -225,6 +131,7 @@ jobs:
 
       - if: github.event_name == 'push'
         name: Run Tests with Twister (Push)
+        id: run_twister
         run: |
           export ZEPHYR_BASE=${PWD}
           export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
@@ -238,11 +145,12 @@ jobs:
 
       - if: github.event_name == 'pull_request_target'
         name: Run Tests with Twister (Pull Request)
+        id: run_twister_pr
         run: |
           rm -f testplan.json
           export ZEPHYR_BASE=${PWD}
           export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
-          python3 ./scripts/ci/test_plan.py -c origin/${BASE_REF}.. --pull-request
+          python3 ./scripts/ci/test_plan.py -c origin/${BASE_REF}.. --pull-request --no-detailed-test-id
           ./scripts/twister --subset ${{matrix.subset}}/${{ strategy.job-total }} --load-tests testplan.json ${TWISTER_COMMON} ${PR_OPTIONS}
           if [ "${{matrix.subset}}" = "1" -a ${{needs.twister-build-prep.outputs.fullrun}} = 'True' ]; then
             ./scripts/zephyr_module.py --twister-out module_tests.args
@@ -253,14 +161,15 @@ jobs:
 
       - if: github.event_name == 'schedule'
         name: Run Tests with Twister (Daily)
+        id: run_twister_sched
         run: |
           export ZEPHYR_BASE=${PWD}
           export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
-          ./scripts/twister --subset ${{matrix.subset}}/${{ strategy.job-total }} ${TWISTER_COMMON} ${DAILY_OPTIONS}
+          ./scripts/twister --subset ${{matrix.subset}}/${{ strategy.job-total }} ${TWISTER_COMMON} ${WEEKLY_OPTIONS}
           if [ "${{matrix.subset}}" = "1" ]; then
             ./scripts/zephyr_module.py --twister-out module_tests.args
             if [ -s module_tests.args ]; then
-              ./scripts/twister +module_tests.args --outdir module_tests ${TWISTER_COMMON} ${DAILY_OPTIONS}
+              ./scripts/twister +module_tests.args --outdir module_tests ${TWISTER_COMMON} ${WEEKLY_OPTIONS}
             fi
           fi
 
@@ -289,7 +198,7 @@ jobs:
           timestamp="$(date)"
           version="$(git describe --abbrev=12 --always)"
           echo -e "# Generated at $timestamp ($version)\n" > $FREEZE_FILE
-          pip3 freeze | tee -a $FREEZE_FILE
+          pip freeze | tee -a $FREEZE_FILE
 
       - if: matrix.subset == 1 && github.event_name == 'push'
         name: Upload the list of Python packages
@@ -301,45 +210,21 @@ jobs:
 
   twister-test-results:
     name: "Publish Unit Tests Results"
-    env:
-      ELASTICSEARCH_KEY: ${{ secrets.ELASTICSEARCH_KEY }}
-      ELASTICSEARCH_SERVER: "https://elasticsearch.zephyrproject.io:443"
-    needs: twister-build
+    needs:
+      - twister-build
     runs-on: ubuntu-22.04
     # the build-and-test job might be skipped, we don't need to run this job then
     if: success() || failure()
 
     steps:
-      # Needed for elasticearch and upload script
-      - if: github.event_name == 'push' || github.event_name == 'schedule'
-        name: Checkout
-        uses: actions/checkout@v4
-        with:
-          fetch-depth: 0
-          persist-credentials: false
-
       - name: Download Artifacts
         uses: actions/download-artifact@v4
         with:
           path: artifacts
 
-      - if: github.event_name == 'push' || github.event_name == 'schedule'
-        name: Upload to elasticsearch
-        run: |
-          pip3 install elasticsearch
-          # set run date on upload to get consistent and unified data across the matrix.
-          run_date=`date --iso-8601=minutes`
-          if [ "${{github.event_name}}" = "push" ]; then
-            python3 ./scripts/ci/upload_test_results_es.py -r ${run_date} \
-              --index zephyr-main-ci-push-1 artifacts/*/*/twister.json
-          elif [ "${{github.event_name}}" = "schedule" ]; then
-            python3 ./scripts/ci/upload_test_results_es.py -r ${run_date} \
-              --index zephyr-main-ci-weekly-1 artifacts/*/*/twister.json
-          fi
-
       - name: Merge Test Results
         run: |
-          pip3 install junitparser junit2html
+          pip install junitparser junit2html
           junitparser merge artifacts/*/*/twister.xml junit.xml
           junit2html junit.xml junit.html
 
diff --git a/.github/workflows/twister_tests.yml b/.github/workflows/twister_tests.yml
index fa6737badb8..66409bce876 100644
--- a/.github/workflows/twister_tests.yml
+++ b/.github/workflows/twister_tests.yml
@@ -32,7 +32,7 @@ jobs:
     runs-on: ${{ matrix.os }}
     strategy:
       matrix:
-        python-version: ['3.10', '3.11', '3.12']
+        python-version: ['3.10', '3.11', '3.12', '3.13']
         os: [ubuntu-22.04]
     steps:
     - name: checkout
@@ -51,7 +51,7 @@ jobs:
           ${{ runner.os }}-pip-${{ matrix.python-version }}
     - name: install-packages
       run: |
-        pip3 install -r scripts/requirements-base.txt -r scripts/requirements-build-test.txt -r scripts/requirements-run-test.txt
+        pip install -r scripts/requirements-base.txt -r scripts/requirements-build-test.txt -r scripts/requirements-run-test.txt
     - name: Run pytest for twisterlib
       env:
         ZEPHYR_BASE: ./
diff --git a/.github/workflows/twister_tests_blackbox.yml b/.github/workflows/twister_tests_blackbox.yml
index b19bce0c535..cd24a2a39ae 100644
--- a/.github/workflows/twister_tests_blackbox.yml
+++ b/.github/workflows/twister_tests_blackbox.yml
@@ -21,10 +21,10 @@ jobs:
     runs-on: ${{ matrix.os }}
     strategy:
       matrix:
-        python-version: ['3.10', '3.11', '3.12']
+        python-version: ['3.10', '3.11', '3.12', '3.13']
         os: [ubuntu-22.04]
     container:
-      image: ghcr.io/zephyrproject-rtos/ci:v0.26.13
+      image: ghcr.io/zephyrproject-rtos/ci:v0.27.4
 
     steps:
     - name: Apply Container Owner Mismatch Workaround
diff --git a/.github/workflows/west_cmds.yml b/.github/workflows/west_cmds.yml
index d910bf15a29..3d4802f0170 100644
--- a/.github/workflows/west_cmds.yml
+++ b/.github/workflows/west_cmds.yml
@@ -29,7 +29,7 @@ jobs:
     runs-on: ${{ matrix.os }}
     strategy:
       matrix:
-        python-version: ['3.10', '3.11', '3.12']
+        python-version: ['3.10', '3.11', '3.12', '3.13']
         os: [ubuntu-22.04, macos-14, windows-2022]
     steps:
     - name: checkout
@@ -65,8 +65,7 @@ jobs:
           ${{ runner.os }}-pip-${{ matrix.python-version }}
     - name: install pytest
       run: |
-        pip3 install wheel
-        pip3 install pytest west pyelftools canopen natsort progress mypy intelhex psutil ply pyserial
+        pip install pytest west pyelftools canopen natsort progress mypy intelhex psutil ply pyserial anytree
     - name: run pytest-win
       if: runner.os == 'Windows'
       run: |
diff --git a/.gitignore b/.gitignore
index 266b95a424a..b545443db31 100644
--- a/.gitignore
+++ b/.gitignore
@@ -59,6 +59,17 @@ venv
 .clangd
 new.info
 
+# Cargo drops lock files in projects to capture resolved dependencies.
+# We don't want to record these.
+Cargo.lock
+
+# Cargo encourages a .cargo/config.toml file to symlink to a generated file.  Don't save these.
+.cargo/
+
+# Normal west builds will place the Rust target directory under the build directory.  However,
+# sometimes IDEs and such will litter these target directories as well.
+target/
+
 # CI output
 compliance.xml
 _error.types
@@ -91,5 +102,7 @@ MaintainersFormat.txt
 ModulesMaintainers.txt
 Nits.txt
 Pylint.txt
+Ruff.txt
 SphinxLint.txt
+TextEncoding.txt
 YAMLLint.txt
diff --git a/.ruff-excludes.toml b/.ruff-excludes.toml
new file mode 100644
index 00000000000..ac26af8b3c8
--- /dev/null
+++ b/.ruff-excludes.toml
@@ -0,0 +1,1796 @@
+# SPDX-License-Identifier: Apache-2.0
+
+# This list is generated, it contains all python scripts that existed before ruff was introduced,
+# remove entries for files that pass CI compliance testing.
+
+[lint.per-file-ignores]
+"./arch/x86/gen_gdt.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./arch/x86/gen_idt.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP030",    # https://docs.astral.sh/ruff/rules/format-literals
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./arch/x86/gen_mmu.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+    "UP034",    # https://docs.astral.sh/ruff/rules/extraneous-parentheses
+    "UP039",    # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./arch/x86/zefi/zefi.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./arch/xtensa/core/gen_vectors.py" = [
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./arch/xtensa/core/gen_zsr.py" = [
+    "SIM401",   # https://docs.astral.sh/ruff/rules/if-else-block-instead-of-dict-get
+]
+"./arch/xtensa/core/xtensa_intgen.py" = [
+    "E713",     # https://docs.astral.sh/ruff/rules/not-in-test
+    "E741",     # https://docs.astral.sh/ruff/rules/ambiguous-variable-name
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./boards/microchip/mec172xevb_assy6906/support/mec172x_remote_flasher.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./doc/_scripts/redirects.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+]
+"./modules/mbedtls/create_psa_files.py" = [
+    "E101",     # https://docs.astral.sh/ruff/rules/mixed-spaces-and-tabs
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP006",    # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./samples/modules/tflite-micro/magic_wand/train/data_augmentation.py" = [
+    "B007",     # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP010",    # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+]
+"./samples/modules/tflite-micro/magic_wand/train/data_augmentation_test.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP010",    # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+]
+"./samples/modules/tflite-micro/magic_wand/train/data_load.py" = [
+    "B007",     # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+    "B020",     # https://docs.astral.sh/ruff/rules/loop-variable-overrides-iterator
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP004",    # https://docs.astral.sh/ruff/rules/useless-object-inheritance
+    "UP010",    # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./samples/modules/tflite-micro/magic_wand/train/data_load_test.py" = [
+    "B007",     # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP010",    # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+]
+"./samples/modules/tflite-micro/magic_wand/train/data_prepare.py" = [
+    "B007",     # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP009",    # https://docs.astral.sh/ruff/rules/utf8-encoding-declaration
+    "UP010",    # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./samples/modules/tflite-micro/magic_wand/train/data_prepare_test.py" = [
+    "B007",     # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+    "F821",     # https://docs.astral.sh/ruff/rules/undefined-name
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP010",    # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./samples/modules/tflite-micro/magic_wand/train/data_split.py" = [
+    "B007",     # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP009",    # https://docs.astral.sh/ruff/rules/utf8-encoding-declaration
+    "UP010",    # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./samples/modules/tflite-micro/magic_wand/train/data_split_person.py" = [
+    "B007",     # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP009",    # https://docs.astral.sh/ruff/rules/utf8-encoding-declaration
+    "UP010",    # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+]
+"./samples/modules/tflite-micro/magic_wand/train/data_split_person_test.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP010",    # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+]
+"./samples/modules/tflite-micro/magic_wand/train/data_split_test.py" = [
+    "B007",     # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP010",    # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./samples/modules/tflite-micro/magic_wand/train/train.py" = [
+    "B007",     # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM113",   # https://docs.astral.sh/ruff/rules/enumerate-for-loop
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP010",    # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./samples/modules/tflite-micro/magic_wand/train/train_test.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP010",    # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+]
+"./samples/net/cellular_modem/server/te_udp_echo.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP039",    # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./samples/net/cellular_modem/server/te_udp_receive.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP039",    # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./samples/sensor/sensor_shell/pytest/test_sensor_shell.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+]
+"./samples/subsys/testsuite/pytest/basic/pytest/test_sample.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM112",   # https://docs.astral.sh/ruff/rules/uncapitalized-environment-variables
+]
+"./scripts/build/check_init_priorities.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "F401",     # https://docs.astral.sh/ruff/rules/unused-import
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+    "UP039",    # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/build/check_init_priorities_test.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/build/elf_parser.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/build/file2hex.py" = [
+    "B023",     # https://docs.astral.sh/ruff/rules/function-uses-loop-variable
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+]
+"./scripts/build/gen_app_partitions.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP030",    # https://docs.astral.sh/ruff/rules/format-literals
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/build/gen_cfb_font_header.py" = [
+    "E101",     # https://docs.astral.sh/ruff/rules/mixed-spaces-and-tabs
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/build/gen_device_deps.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/build/gen_image_info.py" = [
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+]
+"./scripts/build/gen_isr_tables.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/build/gen_isr_tables_parser_carrays.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP030",    # https://docs.astral.sh/ruff/rules/format-literals
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/build/gen_isr_tables_parser_local.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP030",    # https://docs.astral.sh/ruff/rules/format-literals
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/build/gen_kobject_list.py" = [
+    "E101",     # https://docs.astral.sh/ruff/rules/mixed-spaces-and-tabs
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM102",   # https://docs.astral.sh/ruff/rules/collapsible-if
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "SIM401",   # https://docs.astral.sh/ruff/rules/if-else-block-instead-of-dict-get
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+    "W191",     # https://docs.astral.sh/ruff/rules/tab-indentation
+]
+"./scripts/build/gen_kobject_placeholders.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+]
+"./scripts/build/gen_offset_header.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/build/gen_relocate_app.py" = [
+    "B028",     # https://docs.astral.sh/ruff/rules/no-explicit-stacklevel
+    "E101",     # https://docs.astral.sh/ruff/rules/mixed-spaces-and-tabs
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM102",   # https://docs.astral.sh/ruff/rules/collapsible-if
+    "SIM401",   # https://docs.astral.sh/ruff/rules/if-else-block-instead-of-dict-get
+    "UP006",    # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+    "UP037",    # https://docs.astral.sh/ruff/rules/quoted-annotation
+]
+"./scripts/build/gen_strerror_table.py" = [
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "SIM105",   # https://docs.astral.sh/ruff/rules/suppressible-exception
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/build/gen_strsignal_table.py" = [
+    "SIM105",   # https://docs.astral.sh/ruff/rules/suppressible-exception
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/build/gen_symtab.py" = [
+    "B007",     # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/build/gen_syscalls.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "E713",     # https://docs.astral.sh/ruff/rules/not-in-test
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/build/llext_inject_slids.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM113",   # https://docs.astral.sh/ruff/rules/enumerate-for-loop
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP039",    # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/build/llext_prepare_exptab.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM113",   # https://docs.astral.sh/ruff/rules/enumerate-for-loop
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP039",    # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/build/mergehex.py" = [
+    "B904",     # https://docs.astral.sh/ruff/rules/raise-without-from-inside-except
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/build/parse_syscalls.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/build/process_gperf.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/build/subfolder_list.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/build/uf2conv.py" = [
+    "B011",     # https://docs.astral.sh/ruff/rules/assert-false
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "E711",     # https://docs.astral.sh/ruff/rules/none-comparison
+    "E722",     # https://docs.astral.sh/ruff/rules/bare-except
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM102",   # https://docs.astral.sh/ruff/rules/collapsible-if
+    "SIM103",   # https://docs.astral.sh/ruff/rules/needless-bool
+    "SIM118",   # https://docs.astral.sh/ruff/rules/in-dict-keys
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/ci/check_compliance.py" = [
+    "B904",     # https://docs.astral.sh/ruff/rules/raise-without-from-inside-except
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "E741",     # https://docs.astral.sh/ruff/rules/ambiguous-variable-name
+    "F401",     # https://docs.astral.sh/ruff/rules/unused-import
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM112",   # https://docs.astral.sh/ruff/rules/uncapitalized-environment-variables
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/ci/coverage/coverage_analysis.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/ci/errno.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/ci/guideline_check.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/ci/stats/merged_prs.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/ci/test_plan.py" = [
+    "B006",     # https://docs.astral.sh/ruff/rules/mutable-argument-default
+    "E401",     # https://docs.astral.sh/ruff/rules/multiple-imports-on-one-line
+    "E402",     # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM102",   # https://docs.astral.sh/ruff/rules/collapsible-if
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/ci/upload_test_results_es.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "E713",     # https://docs.astral.sh/ruff/rules/not-in-test
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/ci/version_mgr.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/coredump/coredump_gdbserver.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/coredump/coredump_parser/elf_parser.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+    "UP039",    # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/coredump/coredump_parser/log_parser.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP030",    # https://docs.astral.sh/ruff/rules/format-literals
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/coredump/coredump_serial_log_parser.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/coredump/gdbstubs/arch/arm64.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP039",    # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/coredump/gdbstubs/arch/arm_cortex_m.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP039",    # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/coredump/gdbstubs/arch/risc_v.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP039",    # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/coredump/gdbstubs/arch/x86.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP039",    # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/coredump/gdbstubs/arch/x86_64.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP039",    # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/coredump/gdbstubs/arch/xtensa.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM113",   # https://docs.astral.sh/ruff/rules/enumerate-for-loop
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/coredump/gdbstubs/gdbstub.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/dts/gen_defines.py" = [
+    "B007",     # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "E741",     # https://docs.astral.sh/ruff/rules/ambiguous-variable-name
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM102",   # https://docs.astral.sh/ruff/rules/collapsible-if
+    "UP007",    # https://docs.astral.sh/ruff/rules/non-pep604-annotation
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/dts/gen_driver_kconfig_dts.py" = [
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/dts/gen_dts_cmake.py" = [
+    "SIM118",   # https://docs.astral.sh/ruff/rules/in-dict-keys
+]
+"./scripts/dts/python-devicetree/src/devicetree/_private.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/dts/python-devicetree/src/devicetree/dtlib.py" = [
+    "E701",     # https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-colon
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM201",   # https://docs.astral.sh/ruff/rules/negate-equal-op
+    "UP007",    # https://docs.astral.sh/ruff/rules/non-pep604-annotation
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+    "UP037",    # https://docs.astral.sh/ruff/rules/quoted-annotation
+]
+"./scripts/dts/python-devicetree/src/devicetree/edtlib.py" = [
+    "B904",     # https://docs.astral.sh/ruff/rules/raise-without-from-inside-except
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "E713",     # https://docs.astral.sh/ruff/rules/not-in-test
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM102",   # https://docs.astral.sh/ruff/rules/collapsible-if
+    "SIM118",   # https://docs.astral.sh/ruff/rules/in-dict-keys
+    "UP007",    # https://docs.astral.sh/ruff/rules/non-pep604-annotation
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+    "UP037",    # https://docs.astral.sh/ruff/rules/quoted-annotation
+]
+"./scripts/dts/python-devicetree/src/devicetree/grutils.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/dts/python-devicetree/tests/test_dtlib.py" = [
+    "B011",     # https://docs.astral.sh/ruff/rules/assert-false
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "E101",     # https://docs.astral.sh/ruff/rules/mixed-spaces-and-tabs
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP007",    # https://docs.astral.sh/ruff/rules/non-pep604-annotation
+]
+"./scripts/dts/python-devicetree/tests/test_edtlib.py" = [
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "E701",     # https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-colon
+    "E731",     # https://docs.astral.sh/ruff/rules/lambda-assignment
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM117",   # https://docs.astral.sh/ruff/rules/multiple-with-statements
+]
+"./scripts/dump_bugs_pickle.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM110",   # https://docs.astral.sh/ruff/rules/reimplemented-builtin
+    "UP006",    # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/footprint/fpdiff.py" = [
+    "B023",     # https://docs.astral.sh/ruff/rules/function-uses-loop-variable
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM102",   # https://docs.astral.sh/ruff/rules/collapsible-if
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/footprint/pack_as_twister.py" = [
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM401",   # https://docs.astral.sh/ruff/rules/if-else-block-instead-of-dict-get
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/footprint/track.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/footprint/upload_data.py" = [
+    "E402",     # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM118",   # https://docs.astral.sh/ruff/rules/in-dict-keys
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/gen_gcov_files.py" = [
+    "SIM105",   # https://docs.astral.sh/ruff/rules/suppressible-exception
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/generate_usb_vif/generate_vif.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM103",   # https://docs.astral.sh/ruff/rules/needless-bool
+    "UP038",    # https://docs.astral.sh/ruff/rules/non-pep604-isinstance
+]
+"./scripts/get_maintainer.py" = [
+    "B904",     # https://docs.astral.sh/ruff/rules/raise-without-from-inside-except
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM102",   # https://docs.astral.sh/ruff/rules/collapsible-if
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/github_helpers.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP006",    # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/gitlint/zephyr_commit_rules.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP030",    # https://docs.astral.sh/ruff/rules/format-literals
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/kconfig/guiconfig.py" = [
+    "B006",     # https://docs.astral.sh/ruff/rules/mutable-argument-default
+    "E402",     # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "F403",     # https://docs.astral.sh/ruff/rules/undefined-local-with-import-star
+    "F405",     # https://docs.astral.sh/ruff/rules/undefined-local-with-import-star-usage
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP024",    # https://docs.astral.sh/ruff/rules/os-error-alias
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+    "UP038",    # https://docs.astral.sh/ruff/rules/non-pep604-isinstance
+]
+"./scripts/kconfig/hardenconfig.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/kconfig/kconfigfunctions.py" = [
+    "B011",     # https://docs.astral.sh/ruff/rules/assert-false
+    "SIM114",   # https://docs.astral.sh/ruff/rules/if-with-same-arms
+    "SIM118",   # https://docs.astral.sh/ruff/rules/in-dict-keys
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/kconfig/kconfiglib.py" = [
+    "B904",     # https://docs.astral.sh/ruff/rules/raise-without-from-inside-except
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "F841",     # https://docs.astral.sh/ruff/rules/unused-variable
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM102",   # https://docs.astral.sh/ruff/rules/collapsible-if
+    "SIM105",   # https://docs.astral.sh/ruff/rules/suppressible-exception
+    "SIM112",   # https://docs.astral.sh/ruff/rules/uncapitalized-environment-variables
+    "UP004",    # https://docs.astral.sh/ruff/rules/useless-object-inheritance
+    "UP008",    # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+    "UP024",    # https://docs.astral.sh/ruff/rules/os-error-alias
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/kconfig/lint.py" = [
+    "E402",     # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/kconfig/menuconfig.py" = [
+    "B006",     # https://docs.astral.sh/ruff/rules/mutable-argument-default
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "E402",     # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM105",   # https://docs.astral.sh/ruff/rules/suppressible-exception
+    "UP010",    # https://docs.astral.sh/ruff/rules/unnecessary-future-import
+    "UP024",    # https://docs.astral.sh/ruff/rules/os-error-alias
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+    "UP036",    # https://docs.astral.sh/ruff/rules/outdated-version-block
+    "UP038",    # https://docs.astral.sh/ruff/rules/non-pep604-isinstance
+]
+"./scripts/list_boards.py" = [
+    "E731",     # https://docs.astral.sh/ruff/rules/lambda-assignment
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM102",   # https://docs.astral.sh/ruff/rules/collapsible-if
+    "UP006",    # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+    "UP007",    # https://docs.astral.sh/ruff/rules/non-pep604-annotation
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/list_hardware.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP006",    # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/logging/dictionary/database_gen.py" = [
+    "E713",     # https://docs.astral.sh/ruff/rules/not-in-test
+    "E741",     # https://docs.astral.sh/ruff/rules/ambiguous-variable-name
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM102",   # https://docs.astral.sh/ruff/rules/collapsible-if
+    "SIM103",   # https://docs.astral.sh/ruff/rules/needless-bool
+    "SIM113",   # https://docs.astral.sh/ruff/rules/enumerate-for-loop
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+]
+"./scripts/logging/dictionary/dictionary_parser/data_types.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP039",    # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/logging/dictionary/dictionary_parser/log_database.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM103",   # https://docs.astral.sh/ruff/rules/needless-bool
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP039",    # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./scripts/logging/dictionary/dictionary_parser/log_parser.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/logging/dictionary/dictionary_parser/log_parser_v1.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP030",    # https://docs.astral.sh/ruff/rules/format-literals
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/logging/dictionary/dictionary_parser/log_parser_v3.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM401",   # https://docs.astral.sh/ruff/rules/if-else-block-instead-of-dict-get
+]
+"./scripts/logging/dictionary/dictionary_parser/mipi_syst.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/logging/dictionary/dictionary_parser/utils.py" = [
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/logging/dictionary/log_parser.py" = [
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/make_bugs_pickle.py" = [
+    "UP006",    # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/net/enumerate_http_status.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/profiling/stackcollapse.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP033",    # https://docs.astral.sh/ruff/rules/lru-cache-with-maxsize-none
+]
+"./scripts/pylib/build_helpers/domains.py" = [
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/device/binary_adapter.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "SIM103",   # https://docs.astral.sh/ruff/rules/needless-bool
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/device/device_adapter.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/device/factory.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP006",    # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/device/fifo_handler.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/device/hardware_adapter.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP024",    # https://docs.astral.sh/ruff/rules/os-error-alias
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/device/qemu_adapter.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/device/utils.py" = [
+    "SIM105",   # https://docs.astral.sh/ruff/rules/suppressible-exception
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/fixtures.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP006",    # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/helpers/domains_helper.py" = [
+    "E402",     # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/helpers/shell.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "E741",     # https://docs.astral.sh/ruff/rules/ambiguous-variable-name
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM102",   # https://docs.astral.sh/ruff/rules/collapsible-if
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/helpers/utils.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/pylib/pytest-twister-harness/src/twister_harness/twister_harness_config.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/pylib/pytest-twister-harness/tests/conftest.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/pylib/pytest-twister-harness/tests/device/binary_adapter_test.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/pylib/pytest-twister-harness/tests/device/hardware_adapter_test.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/pylib/pytest-twister-harness/tests/device/qemu_adapter_test.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/pylib/pytest-twister-harness/tests/helpers/shell_test.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+]
+"./scripts/pylib/pytest-twister-harness/tests/resources/fifo_mock.py" = [
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP012",    # https://docs.astral.sh/ruff/rules/unnecessary-encode-utf8
+]
+"./scripts/pylib/twister/expr_parser.py" = [
+    "SIM103",   # https://docs.astral.sh/ruff/rules/needless-bool
+    "SIM110",   # https://docs.astral.sh/ruff/rules/reimplemented-builtin
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/pylib/twister/scl.py" = [
+    "F401",     # https://docs.astral.sh/ruff/rules/unused-import
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/pylib/twister/twisterlib/testplan.py" = [
+    "E402",     # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+    "F401",     # https://docs.astral.sh/ruff/rules/unused-import
+]
+"./scripts/pylint/checkers/argparse-checker.py" = [
+    "F821",     # https://docs.astral.sh/ruff/rules/undefined-name
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/release/bug_bash.py" = [
+    "B010",     # https://docs.astral.sh/ruff/rules/set-attr-with-constant
+    "B904",     # https://docs.astral.sh/ruff/rules/raise-without-from-inside-except
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP004",    # https://docs.astral.sh/ruff/rules/useless-object-inheritance
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP030",    # https://docs.astral.sh/ruff/rules/format-literals
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/release/list_backports.py" = [
+    "B009",     # https://docs.astral.sh/ruff/rules/get-attr-with-constant
+    "B010",     # https://docs.astral.sh/ruff/rules/set-attr-with-constant
+    "B904",     # https://docs.astral.sh/ruff/rules/raise-without-from-inside-except
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP004",    # https://docs.astral.sh/ruff/rules/useless-object-inheritance
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP030",    # https://docs.astral.sh/ruff/rules/format-literals
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/release/list_devicetree_bindings_changes.py" = [
+    "E402",     # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM117",   # https://docs.astral.sh/ruff/rules/multiple-with-statements
+    "UP006",    # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+    "UP007",    # https://docs.astral.sh/ruff/rules/non-pep604-annotation
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/set_assignees.py" = [
+    "E402",     # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "E741",     # https://docs.astral.sh/ruff/rules/ambiguous-variable-name
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM113",   # https://docs.astral.sh/ruff/rules/enumerate-for-loop
+]
+"./scripts/snippets.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP006",    # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/support/quartus-flash.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+]
+"./scripts/tests/twister/conftest.py" = [
+    "E402",     # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/tests/twister/pytest_integration/test_harness_pytest.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/tests/twister/test_cmakecache.py" = [
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_config_parser.py" = [
+    "B017",     # https://docs.astral.sh/ruff/rules/assert-raises-exception
+    "B033",     # https://docs.astral.sh/ruff/rules/duplicate-value
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM117",   # https://docs.astral.sh/ruff/rules/multiple-with-statements
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_data/mixins/test_to_ignore.py" = [
+    "B011",     # https://docs.astral.sh/ruff/rules/assert-false
+]
+"./scripts/tests/twister/test_environment.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM117",   # https://docs.astral.sh/ruff/rules/multiple-with-statements
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_errors.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/tests/twister/test_handlers.py" = [
+    "B011",     # https://docs.astral.sh/ruff/rules/assert-false
+    "E402",     # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP012",    # https://docs.astral.sh/ruff/rules/unnecessary-encode-utf8
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_hardwaremap.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./scripts/tests/twister/test_harness.py" = [
+    "B017",     # https://docs.astral.sh/ruff/rules/assert-raises-exception
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "E713",     # https://docs.astral.sh/ruff/rules/not-in-test
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_jobserver.py" = [
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_log_helper.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_platform.py" = [
+    "B011",     # https://docs.astral.sh/ruff/rules/assert-false
+    "E402",     # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_quarantine.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_runner.py" = [
+    "E402",     # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP006",    # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/tests/twister/test_scl.py" = [
+    "E402",     # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM117",   # https://docs.astral.sh/ruff/rules/multiple-with-statements
+    "UP025",    # https://docs.astral.sh/ruff/rules/unicode-kind-prefix
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_testinstance.py" = [
+    "E402",     # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_testplan.py" = [
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "E101",     # https://docs.astral.sh/ruff/rules/mixed-spaces-and-tabs
+    "E402",     # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM118",   # https://docs.astral.sh/ruff/rules/in-dict-keys
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+    "W191",     # https://docs.astral.sh/ruff/rules/tab-indentation
+]
+"./scripts/tests/twister/test_testsuite.py" = [
+    "B011",     # https://docs.astral.sh/ruff/rules/assert-false
+    "E402",     # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister/test_twister.py" = [
+    "E402",     # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/conftest.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_addon.py" = [
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_config.py" = [
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_coverage.py" = [
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_data/tests/pytest/pytest/test_sample.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM112",   # https://docs.astral.sh/ruff/rules/uncapitalized-environment-variables
+]
+"./scripts/tests/twister_blackbox/test_device.py" = [
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/tests/twister_blackbox/test_disable.py" = [
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_error.py" = [
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "E721",     # https://docs.astral.sh/ruff/rules/type-comparison
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_filter.py" = [
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_footprint.py" = [
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_hardwaremap.py" = [
+    "B007",     # https://docs.astral.sh/ruff/rules/unused-loop-control-variable
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_outfile.py" = [
+    "B011",     # https://docs.astral.sh/ruff/rules/assert-false
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_output.py" = [
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_platform.py" = [
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_printouts.py" = [
+    "B011",     # https://docs.astral.sh/ruff/rules/assert-false
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_quarantine.py" = [
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_report.py" = [
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "E701",     # https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-colon
+    "E713",     # https://docs.astral.sh/ruff/rules/not-in-test
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_runner.py" = [
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_shuffle.py" = [
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_testlist.py" = [
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_testplan.py" = [
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "E721",     # https://docs.astral.sh/ruff/rules/type-comparison
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tests/twister_blackbox/test_tooling.py" = [
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP026",    # https://docs.astral.sh/ruff/rules/deprecated-mock-import
+]
+"./scripts/tracing/parse_ctf.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/tracing/trace_capture_uart.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP012",    # https://docs.astral.sh/ruff/rules/unnecessary-encode-utf8
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/tracing/trace_capture_usb.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/utils/board_v1_to_v2.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/utils/convert_guidelines.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/utils/gen_util_macros.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/utils/migrate_mcumgr_kconfigs.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/utils/ntc_thermistor_table.py" = [
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/utils/pinctrl_nrf_migrate.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP004",    # https://docs.astral.sh/ruff/rules/useless-object-inheritance
+    "UP006",    # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+    "UP007",    # https://docs.astral.sh/ruff/rules/non-pep604-annotation
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/west_commands/bindesc.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP038",    # https://docs.astral.sh/ruff/rules/non-pep604-isinstance
+]
+"./scripts/west_commands/blobs.py" = [
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/build.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM105",   # https://docs.astral.sh/ruff/rules/suppressible-exception
+    "UP008",    # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/build_helpers.py" = [
+    "E402",     # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/completion.py" = [
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/debug.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP008",    # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+]
+"./scripts/west_commands/export.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/fetchers/__init__.py" = [
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/fetchers/core.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP006",    # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./scripts/west_commands/fetchers/http.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+]
+"./scripts/west_commands/flash.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP008",    # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+]
+"./scripts/west_commands/robot.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP008",    # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+]
+"./scripts/west_commands/run_common.py" = [
+    "B904",     # https://docs.astral.sh/ruff/rules/raise-without-from-inside-except
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "E741",     # https://docs.astral.sh/ruff/rules/ambiguous-variable-name
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM102",   # https://docs.astral.sh/ruff/rules/collapsible-if
+    "SIM114",   # https://docs.astral.sh/ruff/rules/if-with-same-arms
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/sdk.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "E713",     # https://docs.astral.sh/ruff/rules/not-in-test
+    "E741",     # https://docs.astral.sh/ruff/rules/ambiguous-variable-name
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "SIM300",   # https://docs.astral.sh/ruff/rules/yoda-conditions
+]
+"./scripts/west_commands/sign.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP008",    # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/simulate.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP008",    # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+]
+"./scripts/west_commands/spdx.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/tests/conftest.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/tests/test_blackmagicprobe.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/tests/test_bossac.py" = [
+    "E101",     # https://docs.astral.sh/ruff/rules/mixed-spaces-and-tabs
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM117",   # https://docs.astral.sh/ruff/rules/multiple-with-statements
+    "W191",     # https://docs.astral.sh/ruff/rules/tab-indentation
+]
+"./scripts/west_commands/tests/test_build.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/tests/test_canopen_program.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/tests/test_dediprog.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/tests/test_dfu_util.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/tests/test_gd32isp.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/tests/test_mdb.py" = [
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/tests/test_nrf.py" = [
+    "B011",     # https://docs.astral.sh/ruff/rules/assert-false
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP007",    # https://docs.astral.sh/ruff/rules/non-pep604-annotation
+]
+"./scripts/west_commands/tests/test_nxp_s32dbg.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+]
+"./scripts/west_commands/tests/test_pyocd.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/tests/test_stm32cubeprogrammer.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/tests/test_stm32flash.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM117",   # https://docs.astral.sh/ruff/rules/multiple-with-statements
+]
+"./scripts/west_commands/tests/test_xsdb.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/west_commands/twister_cmd.py" = [
+    "E402",     # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP008",    # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/zcmake.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM102",   # https://docs.astral.sh/ruff/rules/collapsible-if
+    "SIM114",   # https://docs.astral.sh/ruff/rules/if-with-same-arms
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./scripts/west_commands/zspdx/cmakecache.py" = [
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/west_commands/zspdx/cmakefileapi.py" = [
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP008",    # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+]
+"./scripts/west_commands/zspdx/cmakefileapijson.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM116",   # https://docs.astral.sh/ruff/rules/if-else-block-instead-of-dict-lookup
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/west_commands/zspdx/datatypes.py" = [
+    "UP008",    # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+]
+"./scripts/west_commands/zspdx/getincludes.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP021",    # https://docs.astral.sh/ruff/rules/replace-universal-newlines
+    "UP022",    # https://docs.astral.sh/ruff/rules/replace-stdout-stderr
+]
+"./scripts/west_commands/zspdx/sbom.py" = [
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP008",    # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+]
+"./scripts/west_commands/zspdx/scanner.py" = [
+    "SIM113",   # https://docs.astral.sh/ruff/rules/enumerate-for-loop
+    "UP008",    # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./scripts/west_commands/zspdx/walker.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP008",    # https://docs.astral.sh/ruff/rules/super-call-with-parameters
+]
+"./scripts/west_commands/zspdx/writer.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./scripts/zephyr_module.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./soc/intel/intel_adsp/tools/cavstool.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "E701",     # https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-colon
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./soc/intel/intel_adsp/tools/cavstool_client.py" = [
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM115",   # https://docs.astral.sh/ruff/rules/open-file-with-context-handler
+    "SIM201",   # https://docs.astral.sh/ruff/rules/negate-equal-op
+    "UP039",    # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./soc/intel/intel_adsp/tools/remote-fw-service.py" = [
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP012",    # https://docs.astral.sh/ruff/rules/unnecessary-encode-utf8
+    "UP039",    # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./soc/intel/intel_ish/utils/build_ish_firmware.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP009",    # https://docs.astral.sh/ruff/rules/utf8-encoding-declaration
+]
+"./soc/microchip/mec/common/spigen/mec_spi_gen.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP030",    # https://docs.astral.sh/ruff/rules/format-literals
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./soc/nuvoton/npcm/common/esiost/esiost.py" = [
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./soc/nuvoton/npcm/common/esiost/esiost_args.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./soc/nuvoton/npcx/common/ecst/ecst.py" = [
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./soc/nuvoton/npcx/common/ecst/ecst_args.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM110",   # https://docs.astral.sh/ruff/rules/reimplemented-builtin
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./soc/silabs/silabs_sim3/sim3u/gen_crossbar_config.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+]
+"./tests/boot/with_mcumgr/pytest/west_sign_wrapper.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP031",    # https://docs.astral.sh/ruff/rules/printf-string-formatting
+]
+"./tests/drivers/can/host/pytest/can_shell.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM401",   # https://docs.astral.sh/ruff/rules/if-else-block-instead-of-dict-get
+    "UP006",    # https://docs.astral.sh/ruff/rules/non-pep585-annotation
+    "UP007",    # https://docs.astral.sh/ruff/rules/non-pep604-annotation
+    "UP035",    # https://docs.astral.sh/ruff/rules/deprecated-import
+]
+"./tests/drivers/can/host/pytest/test_can.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP039",    # https://docs.astral.sh/ruff/rules/unnecessary-class-parentheses
+]
+"./tests/kernel/timer/timer_behavior/pytest/saleae_logic2.py" = [
+    "B905",     # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./tests/kernel/timer/timer_behavior/pytest/test_timer.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./tests/misc/check_init_priorities/validate_check_init_priorities_output.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "UP015",    # https://docs.astral.sh/ruff/rules/redundant-open-modes
+]
+"./tests/net/lib/lwm2m/interop/pytest/conftest.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./tests/net/lib/lwm2m/interop/pytest/leshan.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./tests/net/lib/lwm2m/interop/pytest/test_bootstrap.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./tests/net/lib/lwm2m/interop/pytest/test_lwm2m.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM118",   # https://docs.astral.sh/ruff/rules/in-dict-keys
+    "UP018",    # https://docs.astral.sh/ruff/rules/native-literals
+]
+"./tests/net/lib/lwm2m/interop/pytest/test_nosec.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./tests/net/lib/lwm2m/interop/pytest/test_portfolio.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "SIM118",   # https://docs.astral.sh/ruff/rules/in-dict-keys
+]
+"./tests/net/socket/tls_configurations/pytest/test_app_vs_openssl.py" = [
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+    "UP032",    # https://docs.astral.sh/ruff/rules/f-string
+]
+"./tests/subsys/debug/gdbstub/pytest/test_gdbstub.py" = [
+    "E402",     # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "F541",     # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+"./tests/ztest/ztest_param/pytest/test_parameters.py" = [
+    "E501",     # https://docs.astral.sh/ruff/rules/line-too-long
+    "I001",     # https://docs.astral.sh/ruff/rules/unsorted-imports
+]
+
+[format]
+exclude = [
+    "./arch/x86/gen_gdt.py",
+    "./arch/x86/gen_idt.py",
+    "./arch/x86/gen_mmu.py",
+    "./arch/x86/zefi/zefi.py",
+    "./arch/xtensa/core/gen_vectors.py",
+    "./arch/xtensa/core/gen_zsr.py",
+    "./arch/xtensa/core/xtensa_intgen.py",
+    "./boards/microchip/mec172xevb_assy6906/support/mec172x_remote_flasher.py",
+    "./doc/_extensions/zephyr/api_overview.py",
+    "./doc/_extensions/zephyr/application.py",
+    "./doc/_extensions/zephyr/doxybridge.py",
+    "./doc/_extensions/zephyr/doxyrunner.py",
+    "./doc/_extensions/zephyr/doxytooltip/__init__.py",
+    "./doc/_extensions/zephyr/dtcompatible-role.py",
+    "./doc/_extensions/zephyr/external_content.py",
+    "./doc/_extensions/zephyr/gh_utils.py",
+    "./doc/_extensions/zephyr/html_redirects.py",
+    "./doc/_extensions/zephyr/kconfig/__init__.py",
+    "./doc/_extensions/zephyr/link-roles.py",
+    "./doc/_scripts/gen_boards_catalog.py",
+    "./doc/_scripts/gen_devicetree_rest.py",
+    "./doc/_scripts/redirects.py",
+    "./doc/conf.py",
+    "./doc/develop/test/twister/sample_blackbox_test.py",
+    "./modules/mbedtls/create_psa_files.py",
+    "./samples/boards/nordic/coresight_stm/pytest/test_stm.py",
+    "./samples/modules/tflite-micro/magic_wand/train/data_augmentation.py",
+    "./samples/modules/tflite-micro/magic_wand/train/data_augmentation_test.py",
+    "./samples/modules/tflite-micro/magic_wand/train/data_load.py",
+    "./samples/modules/tflite-micro/magic_wand/train/data_load_test.py",
+    "./samples/modules/tflite-micro/magic_wand/train/data_prepare.py",
+    "./samples/modules/tflite-micro/magic_wand/train/data_prepare_test.py",
+    "./samples/modules/tflite-micro/magic_wand/train/data_split.py",
+    "./samples/modules/tflite-micro/magic_wand/train/data_split_person.py",
+    "./samples/modules/tflite-micro/magic_wand/train/data_split_person_test.py",
+    "./samples/modules/tflite-micro/magic_wand/train/data_split_test.py",
+    "./samples/modules/tflite-micro/magic_wand/train/train.py",
+    "./samples/modules/tflite-micro/magic_wand/train/train_test.py",
+    "./samples/modules/thrift/hello/client/hello_client.py",
+    "./samples/net/cellular_modem/server/te_udp_echo.py",
+    "./samples/net/cellular_modem/server/te_udp_receive.py",
+    "./samples/net/cloud/aws_iot_mqtt/src/creds/convert_keys.py",
+    "./samples/sensor/sensor_shell/pytest/test_sensor_shell.py",
+    "./samples/subsys/profiling/perf/pytest/test_perf.py",
+    "./samples/subsys/testsuite/pytest/basic/pytest/conftest.py",
+    "./samples/subsys/testsuite/pytest/basic/pytest/test_sample.py",
+    "./samples/subsys/zbus/remote_mock/remote_mock.py",
+    "./scripts/build/check_init_priorities.py",
+    "./scripts/build/check_init_priorities_test.py",
+    "./scripts/build/elf_parser.py",
+    "./scripts/build/file2hex.py",
+    "./scripts/build/gen_app_partitions.py",
+    "./scripts/build/gen_cfb_font_header.py",
+    "./scripts/build/gen_device_deps.py",
+    "./scripts/build/gen_image_info.py",
+    "./scripts/build/gen_isr_tables.py",
+    "./scripts/build/gen_isr_tables_parser_carrays.py",
+    "./scripts/build/gen_isr_tables_parser_local.py",
+    "./scripts/build/gen_kobject_list.py",
+    "./scripts/build/gen_kobject_placeholders.py",
+    "./scripts/build/gen_offset_header.py",
+    "./scripts/build/gen_relocate_app.py",
+    "./scripts/build/gen_strerror_table.py",
+    "./scripts/build/gen_strsignal_table.py",
+    "./scripts/build/gen_symtab.py",
+    "./scripts/build/gen_syscalls.py",
+    "./scripts/build/llext_inject_slids.py",
+    "./scripts/build/llext_prepare_exptab.py",
+    "./scripts/build/mergehex.py",
+    "./scripts/build/parse_syscalls.py",
+    "./scripts/build/process_gperf.py",
+    "./scripts/build/subfolder_list.py",
+    "./scripts/build/uf2conv.py",
+    "./scripts/check_maintainers.py",
+    "./scripts/ci/check_compliance.py",
+    "./scripts/ci/coverage/coverage_analysis.py",
+    "./scripts/ci/errno.py",
+    "./scripts/ci/guideline_check.py",
+    "./scripts/ci/stats/merged_prs.py",
+    "./scripts/ci/test_plan.py",
+    "./scripts/ci/upload_test_results_es.py",
+    "./scripts/ci/version_mgr.py",
+    "./scripts/coredump/coredump_gdbserver.py",
+    "./scripts/coredump/coredump_parser/elf_parser.py",
+    "./scripts/coredump/coredump_parser/log_parser.py",
+    "./scripts/coredump/coredump_serial_log_parser.py",
+    "./scripts/coredump/gdbstubs/arch/arm64.py",
+    "./scripts/coredump/gdbstubs/arch/arm_cortex_m.py",
+    "./scripts/coredump/gdbstubs/arch/risc_v.py",
+    "./scripts/coredump/gdbstubs/arch/x86.py",
+    "./scripts/coredump/gdbstubs/arch/x86_64.py",
+    "./scripts/coredump/gdbstubs/arch/xtensa.py",
+    "./scripts/coredump/gdbstubs/gdbstub.py",
+    "./scripts/dts/gen_defines.py",
+    "./scripts/dts/gen_driver_kconfig_dts.py",
+    "./scripts/dts/gen_dts_cmake.py",
+    "./scripts/dts/gen_edt.py",
+    "./scripts/dts/python-devicetree/src/devicetree/_private.py",
+    "./scripts/dts/python-devicetree/src/devicetree/dtlib.py",
+    "./scripts/dts/python-devicetree/src/devicetree/edtlib.py",
+    "./scripts/dts/python-devicetree/src/devicetree/grutils.py",
+    "./scripts/dts/python-devicetree/tests/test_dtlib.py",
+    "./scripts/dts/python-devicetree/tests/test_edtlib.py",
+    "./scripts/dump_bugs_pickle.py",
+    "./scripts/footprint/fpdiff.py",
+    "./scripts/footprint/pack_as_twister.py",
+    "./scripts/footprint/track.py",
+    "./scripts/footprint/upload_data.py",
+    "./scripts/gen_gcov_files.py",
+    "./scripts/generate_usb_vif/constants/xml_constants.py",
+    "./scripts/generate_usb_vif/generate_vif.py",
+    "./scripts/get_maintainer.py",
+    "./scripts/github_helpers.py",
+    "./scripts/gitlint/zephyr_commit_rules.py",
+    "./scripts/kconfig/guiconfig.py",
+    "./scripts/kconfig/hardenconfig.py",
+    "./scripts/kconfig/kconfig.py",
+    "./scripts/kconfig/kconfigfunctions.py",
+    "./scripts/kconfig/kconfiglib.py",
+    "./scripts/kconfig/lint.py",
+    "./scripts/kconfig/menuconfig.py",
+    "./scripts/list_boards.py",
+    "./scripts/list_hardware.py",
+    "./scripts/list_shields.py",
+    "./scripts/logging/dictionary/database_gen.py",
+    "./scripts/logging/dictionary/dictionary_parser/data_types.py",
+    "./scripts/logging/dictionary/dictionary_parser/log_database.py",
+    "./scripts/logging/dictionary/dictionary_parser/log_parser.py",
+    "./scripts/logging/dictionary/dictionary_parser/log_parser_v1.py",
+    "./scripts/logging/dictionary/dictionary_parser/log_parser_v3.py",
+    "./scripts/logging/dictionary/dictionary_parser/utils.py",
+    "./scripts/logging/dictionary/log_parser.py",
+    "./scripts/logging/dictionary/log_parser_uart.py",
+    "./scripts/make_bugs_pickle.py",
+    "./scripts/net/enumerate_http_status.py",
+    "./scripts/profiling/stackcollapse.py",
+    "./scripts/pylib/build_helpers/domains.py",
+    "./scripts/pylib/pytest-twister-harness/src/twister_harness/device/binary_adapter.py",
+    "./scripts/pylib/pytest-twister-harness/src/twister_harness/device/device_adapter.py",
+    "./scripts/pylib/pytest-twister-harness/src/twister_harness/device/fifo_handler.py",
+    "./scripts/pylib/pytest-twister-harness/src/twister_harness/device/hardware_adapter.py",
+    "./scripts/pylib/pytest-twister-harness/src/twister_harness/device/qemu_adapter.py",
+    "./scripts/pylib/pytest-twister-harness/src/twister_harness/fixtures.py",
+    "./scripts/pylib/pytest-twister-harness/src/twister_harness/helpers/mcumgr.py",
+    "./scripts/pylib/pytest-twister-harness/src/twister_harness/helpers/shell.py",
+    "./scripts/pylib/pytest-twister-harness/src/twister_harness/plugin.py",
+    "./scripts/pylib/pytest-twister-harness/src/twister_harness/twister_harness_config.py",
+    "./scripts/pylib/pytest-twister-harness/tests/conftest.py",
+    "./scripts/pylib/pytest-twister-harness/tests/device/binary_adapter_test.py",
+    "./scripts/pylib/pytest-twister-harness/tests/device/hardware_adapter_test.py",
+    "./scripts/pylib/pytest-twister-harness/tests/device/qemu_adapter_test.py",
+    "./scripts/pylib/pytest-twister-harness/tests/helpers/shell_test.py",
+    "./scripts/pylib/pytest-twister-harness/tests/plugin_test.py",
+    "./scripts/pylib/twister/expr_parser.py",
+    "./scripts/pylib/twister/scl.py",
+    "./scripts/pylib/twister/twisterlib/cmakecache.py",
+    "./scripts/pylib/twister/twisterlib/config_parser.py",
+    "./scripts/pylib/twister/twisterlib/coverage.py",
+    "./scripts/pylib/twister/twisterlib/environment.py",
+    "./scripts/pylib/twister/twisterlib/error.py",
+    "./scripts/pylib/twister/twisterlib/handlers.py",
+    "./scripts/pylib/twister/twisterlib/hardwaremap.py",
+    "./scripts/pylib/twister/twisterlib/harness.py",
+    "./scripts/pylib/twister/twisterlib/jobserver.py",
+    "./scripts/pylib/twister/twisterlib/log_helper.py",
+    "./scripts/pylib/twister/twisterlib/package.py",
+    "./scripts/pylib/twister/twisterlib/platform.py",
+    "./scripts/pylib/twister/twisterlib/quarantine.py",
+    "./scripts/pylib/twister/twisterlib/reports.py",
+    "./scripts/pylib/twister/twisterlib/runner.py",
+    "./scripts/pylib/twister/twisterlib/size_calc.py",
+    "./scripts/pylib/twister/twisterlib/statuses.py",
+    "./scripts/pylib/twister/twisterlib/testinstance.py",
+    "./scripts/pylib/twister/twisterlib/testplan.py",
+    "./scripts/pylib/twister/twisterlib/testsuite.py",
+    "./scripts/pylib/twister/twisterlib/twister_main.py",
+    "./scripts/pylint/checkers/argparse-checker.py",
+    "./scripts/release/bug_bash.py",
+    "./scripts/release/list_backports.py",
+    "./scripts/release/list_devicetree_bindings_changes.py",
+    "./scripts/set_assignees.py",
+    "./scripts/snippets.py",
+    "./scripts/support/quartus-flash.py",
+    "./scripts/tests/twister/conftest.py",
+    "./scripts/tests/twister/pytest_integration/test_harness_pytest.py",
+    "./scripts/tests/twister/test_cmakecache.py",
+    "./scripts/tests/twister/test_config_parser.py",
+    "./scripts/tests/twister/test_environment.py",
+    "./scripts/tests/twister/test_errors.py",
+    "./scripts/tests/twister/test_handlers.py",
+    "./scripts/tests/twister/test_hardwaremap.py",
+    "./scripts/tests/twister/test_harness.py",
+    "./scripts/tests/twister/test_jobserver.py",
+    "./scripts/tests/twister/test_log_helper.py",
+    "./scripts/tests/twister/test_platform.py",
+    "./scripts/tests/twister/test_quarantine.py",
+    "./scripts/tests/twister/test_runner.py",
+    "./scripts/tests/twister/test_scl.py",
+    "./scripts/tests/twister/test_testinstance.py",
+    "./scripts/tests/twister/test_testplan.py",
+    "./scripts/tests/twister/test_testsuite.py",
+    "./scripts/tests/twister/test_twister.py",
+    "./scripts/tests/twister_blackbox/conftest.py",
+    "./scripts/tests/twister_blackbox/test_addon.py",
+    "./scripts/tests/twister_blackbox/test_config.py",
+    "./scripts/tests/twister_blackbox/test_coverage.py",
+    "./scripts/tests/twister_blackbox/test_data/tests/pytest/pytest/conftest.py",
+    "./scripts/tests/twister_blackbox/test_data/tests/pytest/pytest/test_sample.py",
+    "./scripts/tests/twister_blackbox/test_device.py",
+    "./scripts/tests/twister_blackbox/test_disable.py",
+    "./scripts/tests/twister_blackbox/test_error.py",
+    "./scripts/tests/twister_blackbox/test_filter.py",
+    "./scripts/tests/twister_blackbox/test_footprint.py",
+    "./scripts/tests/twister_blackbox/test_hardwaremap.py",
+    "./scripts/tests/twister_blackbox/test_outfile.py",
+    "./scripts/tests/twister_blackbox/test_output.py",
+    "./scripts/tests/twister_blackbox/test_platform.py",
+    "./scripts/tests/twister_blackbox/test_printouts.py",
+    "./scripts/tests/twister_blackbox/test_quarantine.py",
+    "./scripts/tests/twister_blackbox/test_report.py",
+    "./scripts/tests/twister_blackbox/test_runner.py",
+    "./scripts/tests/twister_blackbox/test_shuffle.py",
+    "./scripts/tests/twister_blackbox/test_testlist.py",
+    "./scripts/tests/twister_blackbox/test_testplan.py",
+    "./scripts/tests/twister_blackbox/test_tooling.py",
+    "./scripts/tracing/parse_ctf.py",
+    "./scripts/tracing/trace_capture_uart.py",
+    "./scripts/tracing/trace_capture_usb.py",
+    "./scripts/utils/board_v1_to_v2.py",
+    "./scripts/utils/convert_guidelines.py",
+    "./scripts/utils/gen_util_macros.py",
+    "./scripts/utils/migrate_includes.py",
+    "./scripts/utils/migrate_mcumgr_kconfigs.py",
+    "./scripts/utils/migrate_posix_kconfigs.py",
+    "./scripts/utils/ntc_thermistor_table.py",
+    "./scripts/utils/pinctrl_nrf_migrate.py",
+    "./scripts/utils/twister_to_list.py",
+    "./scripts/west_commands/bindesc.py",
+    "./scripts/west_commands/blobs.py",
+    "./scripts/west_commands/boards.py",
+    "./scripts/west_commands/build.py",
+    "./scripts/west_commands/build_helpers.py",
+    "./scripts/west_commands/completion.py",
+    "./scripts/west_commands/debug.py",
+    "./scripts/west_commands/export.py",
+    "./scripts/west_commands/fetchers/__init__.py",
+    "./scripts/west_commands/fetchers/core.py",
+    "./scripts/west_commands/fetchers/http.py",
+    "./scripts/west_commands/flash.py",
+    "./scripts/west_commands/robot.py",
+    "./scripts/west_commands/run_common.py",
+    "./scripts/west_commands/run_tests.py",
+    "./scripts/west_commands/runners/__init__.py",
+    "./scripts/west_commands/runners/blackmagicprobe.py",
+    "./scripts/west_commands/runners/bossac.py",
+    "./scripts/west_commands/runners/canopen_program.py",
+    "./scripts/west_commands/runners/core.py",
+    "./scripts/west_commands/runners/dediprog.py",
+    "./scripts/west_commands/runners/dfu.py",
+    "./scripts/west_commands/runners/esp32.py",
+    "./scripts/west_commands/runners/ezflashcli.py",
+    "./scripts/west_commands/runners/gd32isp.py",
+    "./scripts/west_commands/runners/hifive1.py",
+    "./scripts/west_commands/runners/intel_adsp.py",
+    "./scripts/west_commands/runners/intel_cyclonev.py",
+    "./scripts/west_commands/runners/jlink.py",
+    "./scripts/west_commands/runners/linkserver.py",
+    "./scripts/west_commands/runners/mdb.py",
+    "./scripts/west_commands/runners/misc.py",
+    "./scripts/west_commands/runners/native.py",
+    "./scripts/west_commands/runners/nios2.py",
+    "./scripts/west_commands/runners/nrf_common.py",
+    "./scripts/west_commands/runners/nrfjprog.py",
+    "./scripts/west_commands/runners/nrfutil.py",
+    "./scripts/west_commands/runners/nsim.py",
+    "./scripts/west_commands/runners/nxp_s32dbg.py",
+    "./scripts/west_commands/runners/openocd.py",
+    "./scripts/west_commands/runners/probe_rs.py",
+    "./scripts/west_commands/runners/pyocd.py",
+    "./scripts/west_commands/runners/qemu.py",
+    "./scripts/west_commands/runners/renode-robot.py",
+    "./scripts/west_commands/runners/renode.py",
+    "./scripts/west_commands/runners/silabs_commander.py",
+    "./scripts/west_commands/runners/spi_burn.py",
+    "./scripts/west_commands/runners/stm32cubeprogrammer.py",
+    "./scripts/west_commands/runners/stm32flash.py",
+    "./scripts/west_commands/runners/teensy.py",
+    "./scripts/west_commands/runners/trace32.py",
+    "./scripts/west_commands/runners/uf2.py",
+    "./scripts/west_commands/runners/xsdb.py",
+    "./scripts/west_commands/runners/xtensa.py",
+    "./scripts/west_commands/sdk.py",
+    "./scripts/west_commands/shields.py",
+    "./scripts/west_commands/sign.py",
+    "./scripts/west_commands/simulate.py",
+    "./scripts/west_commands/spdx.py",
+    "./scripts/west_commands/tests/conftest.py",
+    "./scripts/west_commands/tests/test_blackmagicprobe.py",
+    "./scripts/west_commands/tests/test_bossac.py",
+    "./scripts/west_commands/tests/test_build.py",
+    "./scripts/west_commands/tests/test_canopen_program.py",
+    "./scripts/west_commands/tests/test_dediprog.py",
+    "./scripts/west_commands/tests/test_dfu_util.py",
+    "./scripts/west_commands/tests/test_gd32isp.py",
+    "./scripts/west_commands/tests/test_imports.py",
+    "./scripts/west_commands/tests/test_mdb.py",
+    "./scripts/west_commands/tests/test_nrf.py",
+    "./scripts/west_commands/tests/test_nxp_s32dbg.py",
+    "./scripts/west_commands/tests/test_pyocd.py",
+    "./scripts/west_commands/tests/test_stm32cubeprogrammer.py",
+    "./scripts/west_commands/tests/test_stm32flash.py",
+    "./scripts/west_commands/tests/test_twister.py",
+    "./scripts/west_commands/twister_cmd.py",
+    "./scripts/west_commands/zcmake.py",
+    "./scripts/west_commands/zephyr_ext_common.py",
+    "./scripts/west_commands/zspdx/cmakefileapi.py",
+    "./scripts/west_commands/zspdx/cmakefileapijson.py",
+    "./scripts/west_commands/zspdx/licenses.py",
+    "./scripts/west_commands/zspdx/walker.py",
+    "./scripts/west_commands/zspdx/writer.py",
+    "./scripts/zephyr_module.py",
+    "./soc/aspeed/ast10x0/tools/gen_uart_booting_image.py",
+    "./soc/intel/intel_adsp/tools/cavstool.py",
+    "./soc/intel/intel_adsp/tools/cavstool_client.py",
+    "./soc/intel/intel_adsp/tools/remote-fw-service.py",
+    "./soc/intel/intel_ish/utils/build_ish_firmware.py",
+    "./soc/microchip/mec/common/spigen/mec_spi_gen.py",
+    "./soc/nuvoton/npcm/common/esiost/esiost.py",
+    "./soc/nuvoton/npcm/common/esiost/esiost_args.py",
+    "./soc/nuvoton/npcx/common/ecst/ecst.py",
+    "./soc/nuvoton/npcx/common/ecst/ecst_args.py",
+    "./soc/silabs/silabs_sim3/sim3u/gen_crossbar_config.py",
+    "./tests/boot/with_mcumgr/pytest/test_downgrade_prevention.py",
+    "./tests/boot/with_mcumgr/pytest/test_upgrade.py",
+    "./tests/boot/with_mcumgr/pytest/west_sign_wrapper.py",
+    "./tests/drivers/can/host/pytest/can_shell.py",
+    "./tests/drivers/can/host/pytest/conftest.py",
+    "./tests/drivers/can/host/pytest/test_can.py",
+    "./tests/kernel/timer/timer_behavior/pytest/saleae_logic2.py",
+    "./tests/kernel/timer/timer_behavior/pytest/test_timer.py",
+    "./tests/misc/check_init_priorities/validate_check_init_priorities_output.py",
+    "./tests/misc/llext-edk/pytest/test_edk.py",
+    "./tests/net/lib/lwm2m/interop/pytest/conftest.py",
+    "./tests/net/lib/lwm2m/interop/pytest/leshan.py",
+    "./tests/net/lib/lwm2m/interop/pytest/test_blockwise.py",
+    "./tests/net/lib/lwm2m/interop/pytest/test_bootstrap.py",
+    "./tests/net/lib/lwm2m/interop/pytest/test_lwm2m.py",
+    "./tests/net/lib/lwm2m/interop/pytest/test_nosec.py",
+    "./tests/net/lib/lwm2m/interop/pytest/test_portfolio.py",
+    "./tests/net/socket/tls_configurations/pytest/test_app_vs_openssl.py",
+    "./tests/net/socket/udp/generate-c-string.py",
+    "./tests/subsys/debug/gdbstub/pytest/test_gdbstub.py",
+    "./tests/subsys/logging/dictionary/pytest/test_logging_dictionary.py",
+    "./tests/ztest/ztest_param/pytest/test_parameters.py",
+]
diff --git a/.ruff.toml b/.ruff.toml
new file mode 100644
index 00000000000..c9be3b43104
--- /dev/null
+++ b/.ruff.toml
@@ -0,0 +1,30 @@
+# Copyright (c) 2024 Basalte bv
+# SPDX-License-Identifier: Apache-2.0
+
+extend = ".ruff-excludes.toml"
+
+line-length = 100
+target-version = "py310"
+
+[lint]
+select = [
+    # zephyr-keep-sorted-start
+    "B",      # flake8-bugbear
+    "E",      # pycodestyle
+    "F",      # pyflakes
+    "I",      # isort
+    "SIM",    # flake8-simplify
+    "UP",     # pyupgrade
+    "W",      # pycodestyle warnings
+    # zephyr-keep-sorted-stop
+]
+
+ignore = [
+    # zephyr-keep-sorted-start
+    "SIM108", # Allow if-else blocks instead of forcing ternary operator
+    # zephyr-keep-sorted-stop
+]
+
+[format]
+quote-style = "preserve"
+line-ending = "lf"
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 64c0f1f8ef5..5bd9348cb57 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -88,6 +88,7 @@ set(SYSCALL_LIST_H_TARGET      syscall_list_h_target)
 set(DRIVER_VALIDATION_H_TARGET driver_validation_h_target)
 set(KOBJ_TYPES_H_TARGET        kobj_types_h_target)
 set(PARSE_SYSCALLS_TARGET      parse_syscalls_target)
+set(DEVICE_API_LD_TARGET       device_api_ld_target)
 
 define_property(GLOBAL PROPERTY PROPERTY_OUTPUT_FORMAT BRIEF_DOCS " " FULL_DOCS " ")
 set_property(   GLOBAL PROPERTY PROPERTY_OUTPUT_FORMAT elf32-little${ARCH}) # BFD format
@@ -152,6 +153,7 @@ zephyr_compile_options($<$:$:$>)
+  zephyr_compile_options($<$:$>)
   zephyr_compile_options($<$:$>)
   zephyr_link_libraries($)
 endif()
@@ -173,6 +175,12 @@ endif()
 # @Intent: Set compiler flags to detect general stack overflows across all functions
 if(CONFIG_STACK_CANARIES)
   zephyr_compile_options($)
+elseif(CONFIG_STACK_CANARIES_STRONG)
+  zephyr_compile_options($)
+elseif(CONFIG_STACK_CANARIES_ALL)
+  zephyr_compile_options($)
+elseif(CONFIG_STACK_CANARIES_EXPLICIT)
+  zephyr_compile_options($)
 endif()
 
 # @Intent: Obtain compiler optimizations flags and store in variables
@@ -597,6 +605,8 @@ add_custom_command(
   COMMAND_EXPAND_LISTS
 )
 add_custom_target(version_h DEPENDS ${PROJECT_BINARY_DIR}/include/generated/zephyr/version.h)
+zephyr_get(KERNEL_VERSION_CUSTOMIZATION SYSBUILD LOCAL)
+set_property(TARGET version_h PROPERTY KERNEL_VERSION_CUSTOMIZATION ${KERNEL_VERSION_CUSTOMIZATION})
 
 if(EXISTS ${APPLICATION_SOURCE_DIR}/VERSION)
   add_custom_command(
@@ -615,6 +625,8 @@ if(EXISTS ${APPLICATION_SOURCE_DIR}/VERSION)
     app_version_h
     DEPENDS ${PROJECT_BINARY_DIR}/include/generated/zephyr/app_version.h)
   add_dependencies(zephyr_interface app_version_h)
+  zephyr_get(APP_VERSION_CUSTOMIZATION SYSBUILD LOCAL)
+  set_property(TARGET app_version_h PROPERTY APP_VERSION_CUSTOMIZATION ${APP_VERSION_CUSTOMIZATION})
 endif()
 
 # Unfortunately, the order in which CMakeLists.txt code is processed
@@ -836,7 +848,12 @@ if(CONFIG_LEGACY_GENERATED_INCLUDE_PATH)
     ${CMAKE_CURRENT_BINARY_DIR}/include/generated/syscall_list.h)
 endif()
 
-add_custom_command(OUTPUT include/generated/zephyr/syscall_dispatch.c ${syscall_list_h}
+add_custom_command(
+  OUTPUT
+  include/generated/zephyr/syscall_dispatch.c
+  include/generated/zephyr/syscall_exports_llext.c
+  syscall_weakdefs_llext.c
+  ${syscall_list_h}
   # Also, some files are written to include/generated/zephyr/syscalls/
   COMMAND
   ${PYTHON_EXECUTABLE}
@@ -844,7 +861,8 @@ add_custom_command(OUTPUT include/generated/zephyr/syscall_dispatch.c ${syscall_
   --json-file        ${syscalls_json}                     # Read this file
   --base-output      include/generated/zephyr/syscalls    # Write to this dir
   --syscall-dispatch include/generated/zephyr/syscall_dispatch.c # Write this file
-  --syscall-export-llext  include/generated/zephyr/syscall_export_llext.c
+  --syscall-exports-llext  include/generated/zephyr/syscall_exports_llext.c
+  --syscall-weakdefs-llext syscall_weakdefs_llext.c # compiled in CMake library 'syscall_weakdefs'
   --syscall-list     ${syscall_list_h}
   $<$:--gen-mrsh-files>
   ${SYSCALL_LONG_REGISTERS_ARG}
@@ -877,6 +895,37 @@ add_custom_target(${DRIVER_VALIDATION_H_TARGET} DEPENDS ${DRV_VALIDATION})
 include(${ZEPHYR_BASE}/cmake/kobj.cmake)
 gen_kobj(KOBJ_INCLUDE_PATH)
 
+# Generate sections for kernel device subsystems
+set(
+  DEVICE_API_LD_SECTIONS
+  ${CMAKE_CURRENT_BINARY_DIR}/include/generated/device-api-sections.ld
+  )
+
+set(DEVICE_API_LINKER_SECTIONS_CMAKE
+    ${CMAKE_CURRENT_BINARY_DIR}/include/generated/device-api-sections.cmake
+)
+
+add_custom_command(
+  OUTPUT ${DEVICE_API_LD_SECTIONS} ${DEVICE_API_LINKER_SECTIONS_CMAKE}
+  COMMAND
+    ${PYTHON_EXECUTABLE}
+    ${ZEPHYR_BASE}/scripts/build/gen_iter_sections.py
+    --alignment ${CONFIG_LINKER_ITERABLE_SUBALIGN}
+    --input ${struct_tags_json}
+    --tag __subsystem
+    --ld-output ${DEVICE_API_LD_SECTIONS}
+    --cmake-output ${DEVICE_API_LINKER_SECTIONS_CMAKE}
+  DEPENDS
+    ${ZEPHYR_BASE}/scripts/build/gen_iter_sections.py
+    ${struct_tags_json}
+  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+  )
+
+add_custom_target(${DEVICE_API_LD_TARGET}
+                  DEPENDS ${DEVICE_API_LD_SECTIONS}
+                          ${DEVICE_API_LINKER_SECTIONS_CMAKE}
+)
+
 # Add a pseudo-target that is up-to-date when all generated headers
 # are up-to-date.
 
@@ -907,6 +956,7 @@ add_dependencies(zephyr_interface
   ${SYSCALL_LIST_H_TARGET}
   ${DRIVER_VALIDATION_H_TARGET}
   ${KOBJ_TYPES_H_TARGET}
+  ${DEVICE_API_LD_TARGET}
   )
 
 add_custom_command(
@@ -971,6 +1021,16 @@ else()
   set(NO_WHOLE_ARCHIVE_LIBS kernel)
 endif()
 
+if(CONFIG_LLEXT)
+  # LLEXT exports symbols for all syscalls, including unimplemented ones.
+  # Weak definitions for these must be added at the end of the link order
+  # to avoid shadowing actual implementations.
+  add_library(syscall_weakdefs syscall_weakdefs_llext.c)
+  add_dependencies(syscall_weakdefs zephyr_generated_headers)
+  target_link_libraries(syscall_weakdefs zephyr_interface)
+  list(APPEND NO_WHOLE_ARCHIVE_LIBS syscall_weakdefs)
+endif()
+
 get_property(OUTPUT_FORMAT        GLOBAL PROPERTY PROPERTY_OUTPUT_FORMAT)
 
 if (CONFIG_CODE_DATA_RELOCATION)
@@ -1034,14 +1094,6 @@ if(CONFIG_USERSPACE)
   set(PROCESS_GPERF ${ZEPHYR_BASE}/scripts/build/process_gperf.py)
 endif()
 
-get_property(GLOBAL_CSTD GLOBAL PROPERTY CSTD)
-if(DEFINED GLOBAL_CSTD)
-  message(DEPRECATION
-    "Global CSTD property is deprecated, see Kconfig.zephyr for C Standard options.")
-  set(CSTD ${GLOBAL_CSTD})
-  list(APPEND CMAKE_C_COMPILE_FEATURES ${compile_features_${CSTD}})
-endif()
-
 # @Intent: Obtain compiler specific flag for specifying the c standard
 zephyr_compile_options(
   $<$:$${CSTD}>
diff --git a/CODEOWNERS b/CODEOWNERS
deleted file mode 100644
index 8ba6e3c5b78..00000000000
--- a/CODEOWNERS
+++ /dev/null
@@ -1,492 +0,0 @@
-# CODEOWNERS for autoreview assigning in github
-
-# https://help.github.com/en/articles/about-code-owners#codeowners-syntax
-
-# Order is important; for each modified file, the last matching
-# pattern takes the most precedence.
-# That is, with the last pattern being
-# *.rst                                     @nashif
-# if only .rst files are being modified, only nashif is
-# automatically requested for review, but you can manually
-# add others as needed.
-
-# Do not use wildcard on all source yet
-#
-# +++++++++++ NOTE ++++++++++++++++
-#
-# Please use the MAINTAINERS file to add yourself in an area or to add a new
-# component or code. This file is going to be deprecated and currently only had
-# entries that are not covered by the MAINTAINERS file.
-
-/.github/test-spec.yml                    @nrfconnect/ncs-test-leads
-/soc/arm/aspeed/                          @aspeeddylan
-/soc/atmel/                               @nandojve
-/soc/arm/bcm*/                            @sbranden
-/soc/arm/ene/                             @ene-steven
-/soc/arm/infineon_cat1/                   @ifyall @npal-cy
-/soc/arm/infineon_xmc/                    @parthitce
-/soc/arm/silabs_exx32/efm32pg1b/          @rdmeneze
-/soc/arm/silabs_exx32/efr32mg21/          @l-alfred
-/soc/arm/st_stm32/stm32mp1/               @arnopo
-/soc/arm/st_stm32/stm32h7/*stm32h735*     @benediktibk
-/soc/arm/st_stm32/stm32l4/*stm32l451*     @benediktibk
-/soc/arm/ti_simplelink/cc13x2_cc26x2/     @bwitherspoon
-/soc/arm/ti_simplelink/cc32xx/            @vanti
-/soc/arm/ti_simplelink/msp432p4xx/        @Mani-Sadhasivam
-/soc/arm/xilinx_zynq7000/                 @ibirnbaum
-/soc/arm/xilinx_zynqmp/                   @stephanosio
-/soc/arm/renesas_rcar/                    @aaillet
-/soc/riscv/openisa*/                      @dleach02
-/soc/riscv/riscv-privileged/andes_v5/      @cwshu @kevinwang821020 @jimmyzhe
-/soc/riscv/riscv-privileged/neorv32/       @henrikbrixandersen
-/soc/riscv/riscv-privileged/gd32vf103/     @soburi
-/soc/starfive/jh71xx/ 			  @pfarwsi
-/soc/riscv/riscv-privileged/niosv/         @sweeaun
-/boards/adafruit/feather_nrf52840/        @jacobw
-/boards/ene/                              @ene-steven
-/boards/arm/96b_argonkey/                 @avisconti
-/boards/arm/96b_avenger96/                @Mani-Sadhasivam
-/boards/arm/96b_carbon/                   @idlethread
-/boards/arm/96b_meerkat96/                @Mani-Sadhasivam
-/boards/arm/96b_nitrogen/                 @idlethread
-/boards/arm/96b_neonkey/                  @Mani-Sadhasivam
-/boards/arm/96b_stm32_sensor_mez/         @Mani-Sadhasivam
-/boards/arm/96b_wistrio/                  @Mani-Sadhasivam
-/boards/arm/acn52832/                     @sven-hm
-/boards/arm/arduino_mkrzero/              @soburi
-/boards/arm/bbc_microbit_v2/              @LingaoM
-/boards/arm/blackpill_f401ce/             @coderkalyan
-/boards/arm/blackpill_f411ce/             @coderkalyan
-/boards/arm/bt*10/                        @greg-leach
-/boards/arm/cc1352r1_launchxl/            @bwitherspoon
-/boards/arm/cc26x2r1_launchxl/            @bwitherspoon
-/boards/arm/cc3220sf_launchxl/            @vanti
-/boards/arm/cy8ckit_062_ble/              @ifyall @npal-cy
-/boards/arm/cy8ckit_062s4/                @DaWei8823
-/boards/arm/cy8ckit_062_wifi_bt/          @ifyall @npal-cy
-/boards/arm/cy8cproto_062_4343w/          @ifyall @npal-cy
-/boards/arm/efm32pg_stk3401a/             @rdmeneze
-/boards/arm/faze/                         @mbittan @simonguinot
-/boards/arm/frdm*/                        @mmahadevan108 @dleach02
-/boards/arm/gd32*/                        @nandojve
-/boards/arm/google_*/                     @jackrosenthal
-/boards/arm/hexiwear*/                    @mmahadevan108 @dleach02
-/boards/arm/ip_k66f/                      @parthitce @lmajewski
-/boards/arm/legend/                       @mbittan @simonguinot
-/boards/arm/lpcxpresso*/                  @mmahadevan108 @dleach02
-/boards/arm/mimx8mm_evk/                  @Mani-Sadhasivam
-/boards/arm/mimx8mm_phyboard_polis        @pefech
-/boards/arm/mimxrt*/                      @mmahadevan108 @dleach02
-/boards/arm/mps2_an385/                   @fvincenzo
-/boards/arm/msp_exp432p401r_launchxl/     @Mani-Sadhasivam
-/boards/arm/npcx7m6fb_evb/                @MulinChao @ChiHuaL
-/boards/arm/nrf*/                         @carlescufi @lemrey
-/boards/arm/nucleo_f401re/                @idlethread
-/boards/arm/nuvoton_pfm_m487/             @ssekar15
-/boards/arm/qemu_cortex_a9/               @ibirnbaum
-/boards/arm/qemu_cortex_r*/               @stephanosio
-/boards/arm/qemu_cortex_m*/               @ioannisg @stephanosio
-/boards/arm/quick_feather/                @fkokosinski @kgugala
-/boards/arm/rak4631_nrf52840/             @gpaquet85
-/boards/arm/rak5010_nrf52840/             @gpaquet85
-/boards/arm/rpi_pico/                     @yonsch
-/boards/arm/ronoth_lodev/                 @NorthernDean
-/boards/arm/xmc45_relax_kit/              @parthitce
-/boards/atmel/                            @nandojve
-/boards/arm/scobc_module1/                @yashi
-/boards/arm/v2m_beetle/                   @fvincenzo
-/boards/arm/olimexino_stm32/              @ydamigos
-/boards/arm/s32*/                         @manuargue
-/boards/arm/sensortile_box/               @avisconti
-/boards/arm/steval_fcu001v1/              @Navin-Sankar
-/boards/arm/stm32l1_disco/                @karlp
-/boards/arm/stm32h735g_disco/             @benediktibk
-/boards/arm/stm32f3_disco/                @ydamigos
-/boards/arm/rcar_*/                       @aaillet
-/boards/arm/ubx_bmd345eval_nrf52840/      @Navin-Sankar @brec-u-blox
-/boards/arm/nrf5340_audio_dk_nrf5340      @koffes @alexsven @erikrobstad @rick1082 @gWacey
-/boards/arm/stm32_min_dev/                @sidcha
-/boards/ezurio/*                          @rerickson1
-/boards/riscv/rv32m1_vega/                @dleach02
-/boards/riscv/adp_xc7k_ae350/             @cwshu @kevinwang821020 @jimmyzhe
-/boards/riscv/longan_nano/                @soburi
-/boards/riscv/neorv32/                    @henrikbrixandersen
-/boards/riscv/niosv*/                     @sweeaun
-/boards/riscv/sparkfun_red_v_things_plus/ @soburi
-/boards/riscv/stamp_c3/                   @soburi
-/boards/starfive/visionfive2/	 	  @kanakshilledar @pfarwsi
-/boards/shields/atmel_rf2xx/              @nandojve
-/boards/shields/esp_8266/                 @nandojve
-/boards/shields/inventek_eswifi/          @nandojve
-/boards/xtensa/odroid_go/                 @ydamigos
-/boards/xtensa/nxp_adsp_imx8/             @iuliana-prodan @dbaluta
-/boards/xtensa/kincony_kc868_a32/         @bbilas
-/boards/arm64/qemu_cortex_a53/            @carlocaione
-/boards/arm64/bcm958402m2_a72/            @abhishek-brcm
-/boards/arm64/mimx8mm_evk/                @MrVan @JiafeiPan
-/boards/arm64/mimx8mp_evk/                @MrVan @JiafeiPan
-/boards/arm64/mimx8mn_evk/                @JiafeiPan
-/boards/arm64/mimx93_evk/                 @JiafeiPan
-/boards/arm64/nxp_ls1046ardb/             @JiafeiPan
-/boards/arm64/xenvm/                      @lorc @firscity
-/boards/arm64/fvp_baser_aemv8r/           @povergoing
-/boards/arm64/fvp_base_revc_2xaemv8a/     @carlocaione
-/boards/arm64/intel_socfpga_agilex_socdk/ @siclim @ngboonkhai
-/boards/arm64/intel_socfpga_agilex5_socdk/ @teikheng @gdengi
-/boards/arm64/rcar_*/                     @lorc @xakep-amatop
-# All cmake related files
-/doc/develop/tools/coccinelle.rst                @himanshujha199640 @JuliaLawall
-/doc/services/device_mgmt/smp_protocol.rst  @de-nordic @nordicjm
-/doc/services/device_mgmt/smp_groups/       @de-nordic @nordicjm
-/doc/services/sensing/                      @lixuzha @ghu0510 @qianruh
-/doc/CMakeLists.txt                       @carlescufi
-/doc/_scripts/                            @carlescufi
-/drivers/*/*sam4l*                        @nandojve
-/drivers/*/*cc13xx_cc26xx*                @bwitherspoon
-/drivers/*/*gd32*                         @nandojve
-/drivers/*/*mcux*                         @mmahadevan108 @dleach02
-/drivers/*/*native_posix*                 @aescolar @daor-oti
-/drivers/*/*lpc11u6x*                     @mbittan @simonguinot
-/drivers/*/*npcx*                         @MulinChao @ChiHuaL
-/drivers/*/*andes*                        @cwshu @kevinwang821020 @jimmyzhe
-/drivers/*/*ifx_cat1*                     @ifyall @npal-cy
-/drivers/*/*neorv32*                      @henrikbrixandersen
-/drivers/*/*_s32*                         @manuargue
-/drivers/adc/adc_ads1x1x.c                @XenuIsWatching
-/drivers/adc/adc_stm32.c                  @cybertale
-/drivers/adc/adc_rpi_pico.c               @soburi
-/drivers/adc/*ads114s0x*                  @benediktibk
-/drivers/adc/*max11102_17*                @benediktibk
-/drivers/adc/*kb1200*                     @ene-steven
-/drivers/adc/adc_ad559x.c                 @bbilas
-/drivers/audio/*nrfx*                     @anangl
-/drivers/auxdisplay/*pt6314*              @xingrz
-/drivers/auxdisplay/*                      @thedjnK
-/drivers/bbram/*                          @yperess @sjg20 @jackrosenthal
-/drivers/bluetooth/                       @alwa-nordic @jhedberg @Vudentz
-/drivers/bluetooth/hci/hci_esp32.c        @sylvioalves
-/drivers/can/*mcp2515*                    @karstenkoenig
-/drivers/can/*rcar*                       @aaillet
-/drivers/clock_control/*agilex*           @siclim @gdengi
-/drivers/clock_control/*nrf*              @nordic-krch
-/drivers/clock_control/*esp32*            @extremegtx @sylvioalves
-/drivers/clock_control/*cpg_mssr*         @aaillet
-/drivers/console/ipm_console.c            @finikorg
-/drivers/console/semihost_console.c       @luozhongyao
-/drivers/console/jailhouse_debug_console.c @MrVan
-/drivers/counter/counter_cmos.c           @dcpleung
-/drivers/counter/counter_ll_stm32_timer.c @kentjhall
-/drivers/counter/*esp32*                  @sylvioalves
-/drivers/counter/dw_timer.c               @pbalsundar
-/drivers/counter/counter_timer_shell.c    @pbalsundar
-/drivers/crypto/*nrf_ecb*                 @maciekfabia @anangl
-/drivers/display/*rm68200*                @mmahadevan108
-/drivers/display/display_ili9342c.*       @extremegtx
-/drivers/dac/*ad56xx*                     @benediktibk
-/drivers/dac/dac_ad559x.c                 @bbilas
-/drivers/dai/                             @kv2019i @marcinszkudlinski @abonislawski
-/drivers/dai/intel/                       @kv2019i @marcinszkudlinski @abonislawski
-/drivers/dai/intel/ssp/                   @kv2019i @marcinszkudlinski @abonislawski
-/drivers/dai/intel/dmic/                  @marcinszkudlinski @abonislawski
-/drivers/dai/intel/alh/                   @abonislawski
-/drivers/dma/dma_dw_axi.c                 @pbalsundar
-/drivers/dma/*dw*                         @tbursztyka
-/drivers/dma/*dw_common*                  @abonislawski
-/drivers/dma/*sam0*                       @Sizurka
-/drivers/dma/dma_stm32*                   @cybertale @lowlander
-/drivers/dma/*pl330*                      @raveenp
-/drivers/dma/*iproc_pax*                  @raveenp
-/drivers/dma/*intel_adsp*                 @teburd @abonislawski
-/drivers/dma/*rpi_pico*                   @soburi
-/drivers/dma/*xmc4xxx*                    @talih0
-/drivers/eeprom/eeprom_stm32.c            @KwonTae-young
-/drivers/entropy/*b91*                    @andy-liu-telink
-/drivers/entropy/*bt_hci*                 @JordanYates
-/drivers/entropy/*rv32m1*                 @dleach02
-/drivers/ethernet/*dwmac*                 @npitre
-/drivers/ethernet/*stm32*                 @Nukersson @lochej
-/drivers/ethernet/*w5500*                 @parthitce
-/drivers/ethernet/*xlnx_gem*              @ibirnbaum
-/drivers/ethernet/*smsc91x*               @sgrrzhf
-/drivers/ethernet/*adin2111*              @GeorgeCGV
-/drivers/ethernet/*oa_tc6*                @lmajewski
-/drivers/ethernet/*lan865x*               @lmajewski
-/drivers/ethernet/dwc_xgmac               @Smale-12048867
-/drivers/ethernet/dwc_xgmac/dwc_xgmac     @Smale-12048867
-/drivers/ethernet/phy/                    @rlubos @tbursztyka @arvinf @jukkar
-/drivers/ethernet/phy/*adin2111*          @GeorgeCGV
-/drivers/mdio/*adin2111*                  @GeorgeCGV
-/drivers/flash/*stm32_qspi*               @lmajewski
-/drivers/flash/*b91*                      @andy-liu-telink
-/drivers/flash/*cadence*                  @ngboonkhai
-/drivers/flash/*cc13xx_cc26xx*            @pepe2k
-/drivers/flash/*nrf*                      @de-nordic
-/drivers/flash/*esp32*                    @sylvioalves
-/drivers/flash/flash_cadence_nand*        @nbalabak
-/drivers/gpio/*b91*                       @andy-liu-telink
-/drivers/gpio/*lmp90xxx*                  @henrikbrixandersen
-/drivers/gpio/*nct38xx*                   @MulinChao @ChiHuaL
-/drivers/gpio/*eos_s3*                    @fkokosinski @kgugala
-/drivers/gpio/*rcar*                      @aaillet
-/drivers/gpio/*esp32*                     @sylvioalves
-/drivers/gpio/*rpi_pico*                  @yonsch
-/drivers/gpio/*xlnx_ps*                   @ibirnbaum
-/drivers/gpio/*ads114s0x*                 @benediktibk
-/drivers/gpio/*bd8lb600fs*                @benediktibk
-/drivers/gpio/*pcal64xxa*                 @benediktibk
-/drivers/gpio/*kb1200*                    @ene-steven
-/drivers/gpio/gpio_altera_pio.c           @shilinte
-/drivers/gpio/gpio_ad559x.c               @bbilas
-/drivers/i2c/i2c_common.c                 @sjg20
-/drivers/i2c/i2c_emul.c                   @sjg20
-/drivers/i2c/i2c_ite_enhance.c            @GTLin08
-/drivers/i2c/i2c_ite_it8xxx2.c            @GTLin08
-/drivers/i2c/i2c_shell.c                  @nashif
-/drivers/i2c/Kconfig.i2c_emul             @sjg20
-/drivers/i2c/Kconfig.it8xxx2              @GTLin08
-/drivers/i2c/target/*eeprom*              @henrikbrixandersen
-/drivers/i2c/Kconfig.test                 @mbolivar-ampere
-/drivers/i2c/i2c_test.c                   @mbolivar-ampere
-/drivers/i2c/*rcar*                       @aaillet
-/drivers/i2c/*kb1200*                     @ene-steven
-/drivers/i2s/i2s_ll_stm32*                @avisconti
-/drivers/i2s/*nrfx*                       @anangl
-/drivers/i3c/i3c_cdns.c                   @XenuIsWatching
-/drivers/ieee802154/                      @rlubos @tbursztyka @jukkar @fgrandel
-/drivers/ieee802154/*b91*                 @andy-liu-telink
-/drivers/ieee802154/ieee802154_nrf5*      @ankuns
-/drivers/ieee802154/ieee802154_rf2xx*     @tbursztyka @nandojve
-/drivers/ieee802154/ieee802154_cc13xx*    @bwitherspoon @cfriedt @vaishnavachath
-/drivers/interrupt_controller/            @dcpleung @nashif
-/drivers/interrupt_controller/intc_gic.c  @stephanosio
-/drivers/interrupt_controller/*esp32*     @sylvioalves
-/drivers/interrupt_controller/intc_nuclei_eclic.c  @soburi
-/drivers/ipm/ipm_mhu*                     @karl-zh
-/drivers/ipm/Kconfig.nrfx                 @masz-nordic
-/drivers/ipm/Kconfig.nrfx_ipc_channel     @masz-nordic
-/drivers/ipm/ipm_cavs*                    @dcpleung @andyross
-/drivers/ipm/ipm_nrfx_ipc.c               @masz-nordic
-/drivers/ipm/ipm_nrfx_ipc.h               @masz-nordic
-/drivers/ipm/ipm_stm32_ipcc.c             @arnopo
-/drivers/ipm/ipm_stm32_hsem.c             @cameled
-/drivers/ipm/ipm_esp32.c                  @uLipe
-/drivers/ipm/ipm_ivshmem.c                @uLipe
-/drivers/kscan/*xec*                      @franciscomunoz @sjvasanth1
-/drivers/kscan/*ft5336*                   @MaureenHelm
-/drivers/kscan/*ht16k33*                  @henrikbrixandersen
-/drivers/led_strip/                       @mbolivar-ampere
-/drivers/mfd/mfd_ad559x.c                 @bbilas
-/drivers/mfd/mfd_max20335.c               @bbilas
-/drivers/misc/ft8xx/                      @hubertmis
-/drivers/modem/hl7800.c                   @rerickson1
-/drivers/modem/simcom-sim7080.c           @lgehreke
-/drivers/modem/simcom-sim7080.h           @lgehreke
-/drivers/modem/Kconfig.hl7800             @rerickson1
-/drivers/modem/Kconfig.simcom-sim7080     @lgehreke
-/drivers/pinctrl/*esp32*                  @sylvioalves
-/drivers/pinctrl/*it8xxx2*                @ite
-/drivers/pinctrl/*kb1200*                 @ene-steven
-/drivers/pm_cpu_ops/psci_shell.c          @nbalabak @gdengi
-/drivers/power_domain/                    @ceolin
-/drivers/ps2/*xec*                        @franciscomunoz @sjvasanth1
-/drivers/ps2/*npcx*                       @MulinChao @ChiHuaL
-/drivers/pwm/*b91*                        @andy-liu-telink
-/drivers/pwm/*pca9685*                    @nixward
-/drivers/pwm/*rpi_pico*                   @burumaj
-/drivers/pwm/*rv32m1*                     @henrikbrixandersen
-/drivers/pwm/*sam0*                       @nzmichaelh
-/drivers/pwm/*test*                       @JordanYates
-/drivers/pwm/*xlnx*                       @henrikbrixandersen
-/drivers/pwm/pwm_capture.c                @henrikbrixandersen
-/drivers/pwm/pwm_shell.c                  @henrikbrixandersen
-/drivers/pwm/*gecko*                      @sun681
-/drivers/pwm/*it8xxx2*                    @RuibinChang
-/drivers/pwm/*esp32*                      @LucasTambor
-/drivers/pwm/*rcar*                       @aaillet
-/drivers/pwm/*max31790*                   @benediktibk
-/drivers/pwm/*kb1200*                     @ene-steven
-/drivers/regulator/*                      @gmarull
-/drivers/regulator/regulator_max20335.c   @bbilas
-/drivers/regulator/regulator_pca9420.c    @danieldegrasse
-/drivers/regulator/regulator_rpi_pico.c   @soburi
-/drivers/regulator/regulator_shell.c      @danieldegrasse
-/drivers/reset/reset_intel_socfpga.c      @nbalabak
-/drivers/reset/Kconfig.intel_socfpga      @nbalabak
-/drivers/sensor/ams_iAQcore/              @alexanderwachter
-/drivers/sensor/ens210/                   @alexanderwachter
-/drivers/sensor/grow_r502a/               @DineshDK03
-/drivers/sensor/hts*/                     @avisconti
-/drivers/sensor/ina23*/                   @bbilas
-/drivers/sensor/lis*/                     @avisconti
-/drivers/sensor/lps*/                     @avisconti
-/drivers/sensor/lsm*/                     @avisconti
-/drivers/sensor/mpr/                      @sven-hm
-/drivers/sensor/qdec_stm32/               @valeriosetti
-/drivers/sensor/rpi_pico_temp/            @soburi
-/drivers/sensor/st*/                      @avisconti
-/drivers/sensor/veaa_x_3/                 @jeppenodgaard @MaureenHelm
-/drivers/sensor/ene_tack_kb1200/          @ene-steven
-/drivers/serial/*b91*                     @andy-liu-telink
-/drivers/serial/uart_altera_jtag.c        @nashif @gohshunjing
-/drivers/serial/uart_altera.c             @gohshunjing
-/drivers/serial/*ns16550*                 @dcpleung @nashif @gdengi
-/drivers/serial/*nrfx*                    @anangl
-/drivers/serial/Kconfig.mcux_iuart        @Mani-Sadhasivam
-/drivers/serial/uart_mcux_iuart.c         @Mani-Sadhasivam
-/drivers/serial/Kconfig.rtt               @carlescufi @pkral78
-/drivers/serial/uart_rtt.c                @carlescufi @pkral78
-/drivers/serial/*rpi_pico*                @yonsch
-/drivers/serial/Kconfig.xlnx              @wjliang
-/drivers/serial/uart_xlnx_ps.c            @wjliang
-/drivers/serial/uart_xlnx_uartlite.c      @henrikbrixandersen
-/drivers/serial/*xmc4xxx*                 @parthitce
-/drivers/serial/*numicro*                 @ssekar15
-/drivers/serial/*apbuart*                 @julius-barendt
-/drivers/serial/*rcar*                    @aaillet
-/drivers/serial/Kconfig.xen               @lorc @firscity
-/drivers/serial/uart_hvc_xen.c            @lorc @firscity
-/drivers/serial/uart_hvc_xen_consoleio.c  @lorc @firscity
-/drivers/serial/Kconfig.it8xxx2           @GTLin08
-/drivers/serial/uart_ite_it8xxx2.c        @GTLin08
-/drivers/serial/*intel_lw*                @shilinte
-/drivers/serial/*kb1200*                  @ene-steven
-/drivers/disk/sdmmc_stm32.c               @anthonybrandon
-/drivers/ptp_clock/                       @tbursztyka @jukkar
-/drivers/spi/*b91*                        @andy-liu-telink
-/drivers/spi/spi_rv32m1_lpspi*            @karstenkoenig
-/drivers/spi/*esp32*                      @sylvioalves
-/drivers/spi/*pl022*                      @soburi
-/drivers/sdhc/                            @danieldegrasse
-/drivers/sdhc/sdhc_cdns*                  @roymurlidhar @tanmaykathpalia
-/drivers/timer/*arm_arch*                 @carlocaione
-/drivers/timer/*cortex_m_systick*         @anangl
-/drivers/timer/*altera_avalon*            @nashif
-/drivers/timer/*riscv_machine*            @kgugala @pgielda
-/drivers/timer/*ite_it8xxx2*              @ite
-/drivers/timer/*xlnx_psttc*               @wjliang @stephanosio
-/drivers/timer/*cc13xx_cc26xx_rtc*        @vanti
-/drivers/timer/*cavs*                     @dcpleung
-/drivers/timer/*leon_gptimer*             @julius-barendt
-/drivers/timer/*mips_cp0*                 @frantony
-/drivers/timer/*rcar_cmt*                 @aaillet
-/drivers/timer/*esp32_sys*                @uLipe
-/drivers/timer/*sam0_rtc*                 @bendiscz
-/drivers/timer/*xtensa*                   @dcpleung
-/drivers/timer/*rv32m1_lptmr*             @mbolivar
-/drivers/timer/*nrf_rtc*                  @anangl
-/drivers/timer/*hpet*                     @dcpleung
-/drivers/usb/device/usb_dc_stm32.c        @ydamigos @loicpoulain
-/drivers/i2c/*b91*                        @andy-liu-telink
-/drivers/i2c/i2c_ll_stm32*                @ydamigos
-/drivers/i2c/i2c_rv32m1_lpi2c*            @henrikbrixandersen
-/drivers/i2c/*sam0*                       @Sizurka
-/drivers/i2c/i2c_dw*                      @dcpleung
-/drivers/i2c/*tca954x*                    @kurddt
-/drivers/*/*xec*                          @franciscomunoz @albertofloyd @sjvasanth1
-/drivers/watchdog/*gecko*                 @oanerer
-/drivers/watchdog/*sifive*                @katsuster
-/drivers/watchdog/wdt_handlers.c          @dcpleung @nashif
-/drivers/watchdog/*cc32xx*                @pavlohamov
-/drivers/watchdog/wdt_ite_it8xxx2.c       @RuibinChang
-/drivers/watchdog/Kconfig.it8xxx2         @RuibinChang
-/drivers/watchdog/wdt_counter.c           @nordic-krch
-/drivers/watchdog/*rpi_pico*              @thedjnK
-/drivers/watchdog/*dw*                    @softwarecki @pbalsundar
-/drivers/watchdog/*ifx*                   @sreeramIfx
-/drivers/watchdog/*kb1200*                @ene-steven
-/drivers/wifi/esp_at/                     @mniestroj
-/drivers/wifi/eswifi/                     @loicpoulain @nandojve
-/drivers/wifi/winc1500/                   @kludentwo
-/drivers/virtualization/		  @tbursztyka
-/dts/arm/acsip/                           @NorthernDean
-/dts/arm/aspeed/                          @aspeeddylan
-/dts/arm/atmel/                           @galak @nandojve
-/dts/arm/broadcom/                        @sbranden
-/dts/arm/cypress/                         @ifyall @npal-cy
-/dts/arm/ene/kb1200                       @ene-steven
-/dts/arm/gd/                              @nandojve
-/dts/arm/infineon/xmc4*                   @parthitce @ifyall @npal-cy
-/dts/arm/infineon/psoc6/                  @ifyall @npal-cy
-/dts/arm64/armv8-r.dtsi                   @povergoing
-/dts/arm64/intel/*intel_socfpga*          @siclim
-/dts/arm64/nxp/                           @JiafeiPan
-/dts/arm64/renesas/                       @lorc @xakep-amatop
-/dts/arm/quicklogic/                      @fkokosinski @kgugala
-/dts/arm/seeed_studio/                    @str4t0m
-/dts/arm/st/h7/*stm32h735*                @benediktibk
-/dts/arm/st/l4/*stm32l451*                @benediktibk
-/dts/arm/ti/cc13?2*                       @bwitherspoon
-/dts/arm/ti/cc26?2*                       @bwitherspoon
-/dts/arm/ti/cc3235*                       @vanti
-/dts/arm/nordic/                          @anangl @carlescufi
-/dts/arm/nuvoton/                         @ssekar15 @MulinChao @ChiHuaL
-/dts/arm/nxp/                             @mmahadevan108 @dleach02
-/dts/arm/nxp/nxp_s32*                     @manuargue
-/dts/arm/microchip/                       @franciscomunoz @albertofloyd @sjvasanth1
-/dts/arm/rpi_pico/                        @yonsch
-/dts/arm/silabs/efm32_pg_1b.dtsi          @rdmeneze
-/dts/arm/silabs/efm32gg11b*               @oanerer
-/dts/arm/silabs/efr32bg13p*               @mnkp
-/dts/arm/silabs/efr32bg22*                @kgugala @fkokosinski @pczarnecki
-/dts/arm/silabs/efr32xg13p*               @mnkp
-/dts/arm/silabs/efm32pg1b*                @rdmeneze
-/dts/arm/silabs/efr32mg21*                @l-alfred
-/dts/arm/silabs/efr32fg13*                @yonsch
-/dts/riscv/ite/                           @ite
-/dts/riscv/microchip/microchip-miv.dtsi   @galak
-/dts/riscv/openisa/rv32m1*                @dleach02
-/dts/riscv/starfive/                      @rajnesh-kanwal @pfarwsi
-/dts/riscv/andes/andes_v5*                @cwshu @kevinwang821020 @jimmyzhe
-/dts/riscv/niosv/                         @sweeaun
-/dts/arm/armv*m.dtsi                      @galak @ioannisg
-/dts/arm/armv7-a.dtsi                     @ibirnbaum
-/dts/arm/armv7-r.dtsi                     @bbolen @stephanosio
-/dts/arm/xilinx/                          @bbolen @stephanosio
-/dts/arm/renesas/rcar/                    @aaillet
-/dts/xtensa/xtensa.dtsi                   @ydamigos
-/dts/xtensa/intel/                        @dcpleung
-/dts/xtensa/espressif/                    @sylvioalves
-/dts/xtensa/nxp/                          @iuliana-prodan @dbaluta
-/dts/bindings/can/                        @alexanderwachter @henrikbrixandersen
-/dts/bindings/i2c/zephyr*i2c-emul*.yaml   @sjg20
-/dts/bindings/adc/st*stm32-adc.yaml       @cybertale
-/dts/bindings/adc/*ads114s08.yaml         @benediktibk
-/dts/bindings/adc/*max111*                @benediktibk
-/dts/bindings/modem/*hl7800.yaml          @rerickson1
-/dts/bindings/serial/ns16550.yaml         @dcpleung @nashif
-/dts/bindings/counter/snps,dw-timers.yaml @pbalsundar
-/dts/bindings/wifi/*esp-at.yaml           @mniestroj
-/dts/bindings/*/*gd32*                    @nandojve
-/dts/bindings/*/*sam*                     @nandojve
-/dts/bindings/*/*npcx*                    @MulinChao @ChiHuaL
-/dts/bindings/*/*psoc6*                   @ifyall @npal-cy
-/dts/bindings/*/*infineon*cat1*           @ifyall @npal-cy
-/dts/bindings/*/nordic*                   @anangl
-/dts/bindings/*/nxp*                      @mmahadevan108 @dleach02
-/dts/bindings/*/nxp*s32*                  @manuargue
-/dts/bindings/*/openisa*                  @dleach02
-/dts/bindings/*/raspberrypi*pico*         @yonsch
-/dts/bindings/sensor/ams*                 @alexanderwachter
-/dts/bindings/*/sifive*                   @mateusz-holenko @kgugala @pgielda
-/dts/bindings/*/andes*                    @cwshu @kevinwang821020 @jimmyzhe
-/dts/bindings/*/neorv32*                  @henrikbrixandersen
-/dts/bindings/*/*lan91c111*               @sgrrzhf
-/dts/bindings/i3c/                        @dcpleung
-/dts/bindings/pm_cpu_ops/*                @carlocaione
-/dts/bindings/ethernet/*gem.yaml          @ibirnbaum
-/dts/bindings/auxdisplay/*pt6314.yaml     @xingrz
-/dts/bindings/auxdisplay/*                 @thedjnK
-/dts/bindings/sensor/*bme680*             @BoschSensortec
-/dts/bindings/sensor/*ina23*              @bbilas
-/dts/bindings/sensor/st*                  @avisconti
-/dts/bindings/sensor/zephyr,sensing.yaml    @lixuzha @ghu0510 @qianruh
-/dts/bindings/sensor/zephyr,sensing*.yaml   @lixuzha @ghu0510 @qianruh
-/dts/bindings/smbus/                      @finikorg
-/dts/bindings/sip_svc/                    @maheshraotm
-/dts/bindings/cpu/intel,niosv.yaml        @sweeaun
-/dts/bindings/reset/intel,socfpga-reset.yaml    @nbalabak
-/dts/bindings/gpio/*pcal64*               @benediktibk
-/dts/bindings/gpio/*bd8lb600fs*           @benediktibk
-/dts/bindings/gpio/*ads114s0x*            @benediktibk
-/dts/bindings/pwm/*max31790*              @benediktibk
-/dts/bindings/dac/*ad56*                  @benediktibk
diff --git a/Kconfig.zephyr b/Kconfig.zephyr
index 510769d8aa7..2d8031260ce 100644
--- a/Kconfig.zephyr
+++ b/Kconfig.zephyr
@@ -448,6 +448,7 @@ config CODING_GUIDELINE_CHECK
 config NATIVE_LIBC
 	bool
 	select FULL_LIBC_SUPPORTED
+	select TC_PROVIDES_POSIX_C_LANG_SUPPORT_R
 	help
 	  Zephyr will use the host system C library.
 
@@ -470,9 +471,11 @@ config NATIVE_APPLICATION
 	default y if ARCH_POSIX
 	depends on !NATIVE_LIBRARY
 	select NATIVE_BUILD
+	select DEPRECATED
 	help
 	  Build as a native application that can run on the host and using
-	  resources and libraries provided by the host.
+	  resources and libraries provided by the host. This option is deprecated
+	  and will be removed in Zephyr v4.3
 
 config NATIVE_LIBRARY
 	bool
@@ -790,7 +793,8 @@ config BUILD_OUTPUT_UF2_FAMILY_ID
 	default "0xada52840" if SOC_NRF52840_QIAA
 	default "0x4fb2d5bd" if SOC_SERIES_IMXRT10XX || SOC_SERIES_IMXRT11XX
 	default "0x2abc77ec" if SOC_SERIES_LPC55XXX
-	default "0xe48bff56" if SOC_SERIES_RP2XXX
+	default "0xe48bff56" if SOC_SERIES_RP2040
+	default "0xe48bff57" if SOC_SERIES_RP2350
 	default "0x68ed2b88" if SOC_SERIES_SAMD21
 	default "0x55114460" if SOC_SERIES_SAMD51
 	default "0x647824b6" if SOC_SERIES_STM32F0X
@@ -1046,32 +1050,6 @@ config IS_BOOTLOADER
 	  This option indicates that Zephyr will act as a bootloader to execute
 	  a separate Zephyr image payload.
 
-config BOOTLOADER_SRAM_SIZE
-	int "SRAM reserved for bootloader [DEPRECATED]"
-	default 0
-	depends on !XIP || IS_BOOTLOADER
-	depends on ARM || XTENSA
-	help
-	  This option specifies the amount of SRAM (measure in kB) reserved for
-	  a bootloader image, when either:
-	  - the Zephyr image itself is to act as the bootloader, or
-	  - Zephyr is a !XIP image, which implicitly assumes existence of a
-	  bootloader that loads the Zephyr !XIP image onto SRAM.
-
-	  This option is deprecated, users should transition to using DTS to set this, if needed.
-	  To be removed after Zephyr 3.7 release.
-
-config BOOTLOADER_SRAM_SIZE_DEPRECATED
-	bool
-	default y
-	select DEPRECATED
-	depends on BOOTLOADER_SRAM_SIZE != 0
-	depends on !XIP || IS_BOOTLOADER
-	depends on ARM || XTENSA
-	help
-	  Non-prompt symbol to indicate that the deprecated BOOTLOADER_SRAM_SIZE Kconfig has a
-	  non-0 value. Please transition to using devicetree.
-
 config BOOTLOADER_BOSSA
 	bool "BOSSA bootloader support"
 	select USE_DT_CODE_PARTITION
diff --git a/MAINTAINERS.yml b/MAINTAINERS.yml
index fdc0a25a5f1..bd36809edf2 100644
--- a/MAINTAINERS.yml
+++ b/MAINTAINERS.yml
@@ -133,6 +133,7 @@ ARC arch:
     - evgeniy-paltsev
   collaborators:
     - abrodkin
+    - tagunil
   files:
     - arch/arc/
     - include/zephyr/arch/arc/
@@ -158,6 +159,7 @@ ARM arch:
     - MaureenHelm
     - stephanosio
     - bbolen
+    - wearyzen
   files:
     - arch/arm/
     - arch/arm/core/offsets/
@@ -194,6 +196,8 @@ ARM Platforms:
   status: maintained
   maintainers:
     - ithinuel
+  collaborators:
+    - wearyzen
   files:
     - boards/arm/mps*/
     - boards/arm/v2m_*/
@@ -305,34 +309,34 @@ Bluetooth HCI:
   status: maintained
   maintainers:
     - jhedberg
-    - jori-nordic
+    - alwa-nordic
   collaborators:
     - hermabe
-    - alwa-nordic
     - Thalley
     - sjanc
     - theob-pro
     - HoZHel
+    - cvinayak
   files:
     - include/zephyr/drivers/bluetooth/
+    - include/zephyr/drivers/bluetooth.h
     - drivers/bluetooth/
     - samples/bluetooth/hci_*/
     - tests/bsim/bluetooth/hci_uart/
     - dts/bindings/bluetooth/
   labels:
-    - "area: Bluetooth Host"
+    - "area: Bluetooth HCI"
     - "area: Bluetooth"
   tests:
     - bluetooth
 
-Bluetooth controller:
+Bluetooth Controller:
   status: maintained
   maintainers:
     - cvinayak
   collaborators:
     - carlescufi
     - thoh-ot
-    - kruithofa
     - ppryga
     - mtpr-ot
     - wopu-ot
@@ -345,9 +349,6 @@ Bluetooth controller:
     - subsys/bluetooth/common/
     - subsys/bluetooth/controller/
     - subsys/bluetooth/crypto/
-    - subsys/bluetooth/shell/ll.c
-    - subsys/bluetooth/shell/ll.h
-    - subsys/bluetooth/shell/ticker.c
     - tests/bluetooth/controller/
     - tests/bsim/bluetooth/ll/
   labels:
@@ -359,14 +360,15 @@ Bluetooth controller:
 Bluetooth Host:
   status: maintained
   maintainers:
-    - jori-nordic
     - jhedberg
+    - alwa-nordic
   collaborators:
     - hermabe
-    - alwa-nordic
-    - Thalley
+    - rugeGerritsen
     - sjanc
+    - Thalley
     - theob-pro
+    - cvinayak
   files:
     - doc/connectivity/bluetooth/
     - include/zephyr/bluetooth/
@@ -376,7 +378,6 @@ Bluetooth Host:
     - subsys/bluetooth/host/
     - subsys/bluetooth/lib/
     - subsys/bluetooth/services/
-    - subsys/bluetooth/shell/
     - subsys/bluetooth/CMakeLists.txt
     - subsys/bluetooth/Kconfig*
     - tests/bluetooth/
@@ -394,28 +395,29 @@ Bluetooth Host:
     - doc/connectivity/bluetooth/img/ctlr*
     - doc/connectivity/bluetooth/api/audio/
     - doc/connectivity/bluetooth/api/mesh/
-    - doc/connectivity/bluetooth/api/shell/iso.rst
     - doc/connectivity/bluetooth/api/controller.rst
+    - doc/connectivity/bluetooth/shell/classic/a2dp.rst
+    - doc/connectivity/bluetooth/shell/host/iso.rst
+    - doc/connectivity/bluetooth/shell/audio/
     - samples/bluetooth/bap*/
     - samples/bluetooth/cap*/
+    - samples/bluetooth/ccp*/
     - samples/bluetooth/hap*/
     - samples/bluetooth/hci_*/
     - samples/bluetooth/pbp*/
     - samples/bluetooth/tmap*/
     - samples/bluetooth/iso_*/
     - samples/bluetooth/mesh*/
-    - subsys/bluetooth/shell/bredr.c
-    - subsys/bluetooth/shell/iso.c
-    - subsys/bluetooth/shell/ll.c
-    - subsys/bluetooth/shell/ll.h
-    - subsys/bluetooth/shell/ticker.c
     - subsys/bluetooth/Kconfig.iso
     - subsys/bluetooth/host/iso.c
     - subsys/bluetooth/host/iso_internal.h
+    - subsys/bluetooth/host/shell/iso.c
     - tests/bluetooth/audio/
     - tests/bluetooth/controller/
     - tests/bluetooth/mesh*/
     - tests/bluetooth/qualification/
+    - tests/bluetooth/shell/audio.conf
+    - tests/bluetooth/shell/mesh.conf
     - tests/bluetooth/tester/
     - tests/bsim/bluetooth/audio/
     - tests/bsim/bluetooth/audio_samples/
@@ -446,6 +448,7 @@ Bluetooth Mesh:
     - samples/bluetooth/mesh*/
     - subsys/bluetooth/mesh/
     - tests/bluetooth/mesh*/
+    - tests/bluetooth/shell/mesh.conf
     - tests/bsim/bluetooth/mesh/
   labels:
     - "area: Bluetooth Mesh"
@@ -464,11 +467,11 @@ Bluetooth Audio:
     - sjanc
     - asbjornsabo
     - fredrikdanebjer
-    - kruithofa
     - larsgk
     - pin-zephyr
     - niym-ot
     - jthm-ot
+    - babrsn
   files:
     - subsys/bluetooth/audio/
     - include/zephyr/bluetooth/audio/
@@ -479,8 +482,10 @@ Bluetooth Audio:
     - tests/bluetooth/tester/overlay-le-audio.conf
     - tests/bluetooth/tester/src/audio/
     - doc/connectivity/bluetooth/api/audio/
+    - doc/connectivity/bluetooth/shell/audio/
     - samples/bluetooth/bap*/
     - samples/bluetooth/cap*/
+    - samples/bluetooth/ccp*/
     - samples/bluetooth/hap*/
     - samples/bluetooth/pbp*/
     - samples/bluetooth/tmap*/
@@ -496,11 +501,10 @@ Bluetooth Classic:
     - lylezhu2012
   collaborators:
     - jhedberg
-    - sjanc
   files:
+    - doc/connectivity/bluetooth/shell/classic/a2dp.rst
     - subsys/bluetooth/common/
     - subsys/bluetooth/host/classic/
-    - subsys/bluetooth/shell/bredr.c
     - include/zephyr/bluetooth/classic/
   labels:
     - "area: Bluetooth Classic"
@@ -514,14 +518,16 @@ Bluetooth ISO:
     - Thalley
   collaborators:
     - jhedberg
+    - rugeGerritsen
+    - cvinayak
   files:
     - include/zephyr/bluetooth/iso.h
-    - doc/connectivity/bluetooth/api/shell/iso.rst
+    - doc/connectivity/bluetooth/shell/host/iso.rst
     - samples/bluetooth/iso_*/
-    - subsys/bluetooth/shell/iso.c
     - subsys/bluetooth/Kconfig.iso
     - subsys/bluetooth/host/iso.c
     - subsys/bluetooth/host/iso_internal.h
+    - subsys/bluetooth/host/shell/iso.c
   labels:
     - "area: Bluetooth ISO"
     - "area: Bluetooth"
@@ -576,6 +582,9 @@ Build system:
     - misc/generated/
     - snippets/
     - modules/Kconfig.sysbuild
+    - scripts/list_boards.py
+    - scripts/list_hardware.py
+    - scripts/schemas/*-schema.yml
   labels:
     - "area: Build System"
   tests:
@@ -884,8 +893,10 @@ Devicetree:
   collaborators:
     - decsny
     - galak
+    - rruuaanng
   files-regex:
-    - dts/bindings/.*zephyr.*
+    - ^dts/bindings/.*zephyr.*
+    - ^dts/bindings/[^,]+$
   files:
     - scripts/dts/
     - dts/common/
@@ -920,6 +931,7 @@ Disk:
     - subsys/sd/
     - tests/subsys/sd/
     - tests/drivers/disk/
+    - tests/drivers/build_all/disk/
     - include/zephyr/sd/
     - dts/bindings/sd/
     - dts/bindings/mmc/
@@ -1005,8 +1017,8 @@ Documentation Infrastructure:
 Release Notes:
   status: maintained
   maintainers:
-    - dkalowsk
-    - mmahadevan108
+    - fabiobaltieri
+    - kartben
   collaborators:
     - kartben
   files:
@@ -1019,8 +1031,6 @@ Release Notes:
   status: maintained
   maintainers:
     - anangl
-  collaborators:
-    - decsny
   files:
     - drivers/adc/
     - include/zephyr/drivers/adc.h
@@ -1055,6 +1065,7 @@ Release Notes:
     - yperess
   files:
     - tests/drivers/bbram/
+    - tests/drivers/build_all/bbram/
     - drivers/bbram/
     - include/zephyr/drivers/bbram.h
     - doc/hardware/peripherals/bbram.rst
@@ -1227,6 +1238,7 @@ Release Notes:
     - samples/drivers/crypto/
     - tests/crypto/
     - doc/services/crypto/
+    - tests/drivers/build_all/crypto/
   labels:
     - "area: Crypto / RNG"
   tests:
@@ -1378,6 +1390,7 @@ Release Notes:
     - decsny
     - lmajewski
     - pdgendt
+    - maass-hamburg
   files:
     - drivers/ethernet/
     - include/zephyr/dt-bindings/ethernet/
@@ -1385,6 +1398,8 @@ Release Notes:
     - dts/bindings/ethernet/
     - tests/drivers/ethernet/
     - include/zephyr/drivers/ethernet/
+    - include/zephyr/net/phy.h
+    - include/zephyr/net/ethernet.h
   labels:
     - "area: Ethernet"
   tests:
@@ -1394,6 +1409,8 @@ Release Notes:
   status: maintained
   maintainers:
     - de-nordic
+  collaborators:
+    - rghaddab
   files:
     - drivers/flash/
     - dts/bindings/flash_controller/
@@ -1405,6 +1422,7 @@ Release Notes:
     - doc/hardware/peripherals/flash.rst
     - include/zephyr/drivers/flash/
     - tests/drivers/flash_simulator/
+    - tests/drivers/build_all/flash/
   labels:
     - "area: Flash"
   tests:
@@ -1580,9 +1598,7 @@ Release Notes:
     - drivers.i3c
 
 "Drivers: IEEE 802.15.4":
-  status: maintained
-  maintainers:
-    - fgrandel
+  status: odd fixes
   collaborators:
     - rlubos
     - ankuns
@@ -1631,10 +1647,12 @@ Release Notes:
   status: odd fixes
   collaborators:
     - decsny
+    - maass-hamburg
   files:
     - doc/hardware/peripherals/mdio.rst
     - drivers/mdio/
     - include/zephyr/drivers/mdio.h
+    - include/zephyr/net/mdio.h
     - tests/drivers/build_all/mdio/
     - dts/bindings/mdio/
   labels:
@@ -1767,7 +1785,6 @@ Release Notes:
   maintainers:
     - simonguinot
   collaborators:
-    - mbolivar-ampere
     - soburi
     - thedjnK
   files:
@@ -2017,6 +2034,7 @@ Release Notes:
     - tristan-google
     - ubieda
     - jeppenodgaard
+    - asemjonovs
   files:
     - drivers/sensor/
     - include/zephyr/drivers/sensor.h
@@ -2071,6 +2089,11 @@ Release Notes:
   status: maintained
   maintainers:
     - jilaypandya
+  collaborators:
+    - bjarki-andreasen
+    - dipakgmx
+    - fabiobaltieri
+    - faxe1008
   files:
     - drivers/stepper/
     - include/zephyr/drivers/stepper.h
@@ -2101,6 +2124,7 @@ Release Notes:
   collaborators:
     - loicpoulain
     - josuah
+    - ngphibang
   files:
     - drivers/video/
     - include/zephyr/drivers/video.h
@@ -2127,6 +2151,7 @@ Release Notes:
     - include/zephyr/drivers/w1.h
     - include/zephyr/drivers/sensor/w1_sensor.h
     - tests/drivers/w1/
+    - tests/drivers/build_all/w1/
     - samples/drivers/w1/
   labels:
     - "area: W1"
@@ -2159,6 +2184,7 @@ Release Notes:
     - rlubos
     - kludentwo
     - krish2718
+    - MaochenWang1
   files:
     - drivers/wifi/
     - dts/bindings/wifi/
@@ -2200,6 +2226,16 @@ Release Notes:
   labels:
     - "area: Wi-Fi"
 
+"Drivers: Wi-Fi NXP":
+  status: maintained
+  maintainers:
+    - dleach02
+    - MaochenWang1
+  files:
+    - drivers/wifi/nxp/
+  labels:
+    - "platform: NXP Drivers"
+
 "Drivers: Memory Management":
   status: maintained
   maintainers:
@@ -2293,18 +2329,6 @@ Filesystems:
   tests:
     - filesystem
 
-"Filesystems: FatFs reentrant support":
-  status: maintained
-  maintainers:
-    - ox11
-  files:
-    - modules/fatfs/zfs_ffsystem.c
-    - tests/subsys/fs/fat_fs_api/src/test_fat_file_reentrant.c
-  labels:
-    - "area: File System"
-  tests:
-    - filesystem.fat
-
 Formatted Output:
   status: maintained
   maintainers:
@@ -2380,6 +2404,8 @@ Input:
 IPC:
   status: maintained
   maintainers:
+    - doki-nordic
+  collaborators:
     - carlocaione
     - arnopo
   files:
@@ -2651,8 +2677,8 @@ MAINTAINERS file:
   status: maintained
   maintainers:
     - MaureenHelm
-  collaborators:
     - nashif
+  collaborators:
     - stephanosio
   files:
     - MAINTAINERS.yml
@@ -2734,6 +2760,7 @@ hawkBit:
     - maass-hamburg
   files:
     - subsys/mgmt/hawkbit/
+    - include/zephyr/mgmt/hawkbit/
     - include/zephyr/mgmt/hawkbit.h
     - samples/subsys/mgmt/hawkbit/
   labels:
@@ -2806,14 +2833,17 @@ Networking:
     - doc/connectivity/networking/api/ieee802154.rst
     - doc/connectivity/networking/api/ptp.rst
     - doc/connectivity/networking/api/wifi.rst
+    - doc/connectivity/networking/api/http*.rst
     - include/zephyr/net/gptp.h
     - include/zephyr/net/ieee802154*.h
     - include/zephyr/net/ptp.h
     - include/zephyr/net/wifi*.h
     - include/zephyr/net/buf.h
     - include/zephyr/net/dhcpv4*.h
+    - include/zephyr/net/http/
     - samples/net/gptp/
     - samples/net/sockets/coap_*/
+    - samples/net/sockets/*http*/
     - samples/net/lwm2m_client/
     - samples/net/wifi/
     - samples/net/dhcpv4_client/
@@ -2822,12 +2852,14 @@ Networking:
     - subsys/net/l2/wifi/
     - subsys/net/lib/coap/
     - subsys/net/lib/config/ieee802154*
+    - subsys/net/lib/http/
     - subsys/net/lib/lwm2m/
     - subsys/net/lib/ptp/
     - subsys/net/lib/tls_credentials/
     - subsys/net/lib/dhcpv4/
     - tests/net/dhcpv4/
     - tests/net/ieee802154/
+    - tests/net/lib/http*/
     - tests/net/wifi/
   labels:
     - "area: Networking"
@@ -2923,8 +2955,6 @@ Networking:
   status: maintained
   maintainers:
     - jukkar
-  collaborators:
-    - fgrandel
   files:
     - doc/connectivity/networking/api/gptp.rst
     - include/zephyr/net/gptp.h
@@ -2991,14 +3021,12 @@ Networking:
     - subsys/net/lib/ptp/
     - samples/net/ptp/
   labels:
-    - "area: Networking"
+    - "area: PTP"
   tests:
     - sample.net.ptp
 
 "Networking: Native IEEE 802.15.4":
-  status: maintained
-  maintainers:
-    - fgrandel
+  status: odd fixes
   collaborators:
     - rlubos
     - jukkar
@@ -3040,6 +3068,7 @@ Networking:
   collaborators:
     - rlubos
     - krish2718
+    - MaochenWang1
   files:
     - doc/connectivity/networking/api/wifi.rst
     - include/zephyr/net/wifi*.h
@@ -3052,6 +3081,25 @@ Networking:
   tests:
     - net.wifi
 
+"Networking: HTTP":
+  status: maintained
+  maintainers:
+    - jukkar
+    - rlubos
+  collaborators:
+    - mrodgers-witekio
+  files:
+    - doc/connectivity/networking/api/http*.rst
+    - include/zephyr/net/http/
+    - subsys/net/lib/http/
+    - samples/net/sockets/*http*/
+    - tests/net/lib/http*/
+  labels:
+    - "area: Networking"
+    - "area: HTTP"
+  tests:
+    - net.http
+
 NIOS-2 arch:
   status: maintained
   maintainers:
@@ -3103,6 +3151,18 @@ Open AMP:
   tests:
     - sample.ipc.openamp
 
+PHYTEC Platforms:
+  status: maintained
+  maintainers:
+    - dnltz
+  collaborators:
+    - jonas-rem
+    - pefech
+  files:
+    - boards/phytec/
+  labels:
+    - "platform: PHYTEC"
+
 POSIX API layer:
   status: maintained
   maintainers:
@@ -3126,6 +3186,7 @@ Power management:
   status: maintained
   maintainers:
     - ceolin
+    - bjarki-andreasen
   collaborators:
     - nashif
     - teburd
@@ -3318,7 +3379,7 @@ Shields:
 SPARC arch:
   status: odd fixes
   collaborators:
-    - julius-barendt
+    - tbr-tt
   files:
     - arch/sparc/
     - include/zephyr/arch/sparc/
@@ -3330,7 +3391,7 @@ SPARC arch:
 Gaisler Platforms:
   status: odd fixes
   collaborators:
-    - julius-barendt
+    - tbr-tt
   files:
     - dts/sparc/gaisler/
     - soc/gaisler/
@@ -3481,20 +3542,22 @@ Nuvoton NPCM Platforms:
     - soc/nuvoton/npcm/
     - boards/nuvoton/npcm*/
     - dts/arm/nuvoton/
+    - drivers/*/*_npcm*
+    - include/zephyr/dt-bindings/*/npcm_*
   labels:
     - "platform: Nuvoton NPCM"
 
 Raspberry Pi Pico Platforms:
   status: maintained
   maintainers:
-    - yonsch
-  collaborators:
     - soburi
+  collaborators:
+    - yonsch
   files:
     - boards/raspberrypi/
     - boards/adafruit/kb2040/
     - boards/sparkfun/pro_micro_rp2040/
-    - dts/arm/rpi_pico/
+    - dts/arm/raspberrypi/rpi_pico/
     - dts/bindings/*/raspberrypi,pico*
     - drivers/*/*rpi_pico
     - drivers/*/*rpi_pico*/
@@ -3515,7 +3578,9 @@ Silabs Platforms:
     - boards/silabs/
     - dts/arm/silabs/
     - dts/bindings/*/silabs*
-    - drivers/*/*_gecko*
+    - drivers/*/*gecko*
+    - drivers/bluetooth/hci/hci_silabs_*
+    - drivers/*/*silabs*
   labels:
     - "platform: Silabs"
 
@@ -3534,12 +3599,26 @@ Silabs SiM3U Platforms:
     - drivers/*/Kconfig.si32
     - dts/arm/silabs/sim3u*
     - dts/bindings/*/*silabs,si32*
+    - include/zephyr/dt-bindings/pinctrl/*si32*
     - soc/silabs/silabs_sim3/
   labels:
     - "platform: Silabs SiM3U"
   description: >-
     SiM3U SoCs, dts files, and related drivers. Boards based on SiM3U SoCs.
 
+Gardena Platforms:
+  status: maintained
+  maintainers:
+    - rettichschnidi
+  collaborators:
+    - M1cha
+  files:
+    - boards/gardena/
+  labels:
+    - "platform: Gardena"
+  description: >-
+    Gardena board(s).
+
 Intel Platforms (X86):
   status: maintained
   maintainers:
@@ -3628,11 +3707,9 @@ NXP Drivers:
     - dleach02
     - mmahadevan108
   collaborators:
-    - danieldegrasse
     - decsny
     - manuargue
     - dbaluta
-    - MarkWangChinese
   files-regex:
     - ^drivers/.*nxp.*
     - ^drivers/.*mcux.*
@@ -3643,7 +3720,7 @@ NXP Drivers:
     - drivers/*/*.mcux
     - drivers/*/*.nxp
     - drivers/*/*nxp*
-    - drivers/*/*kinetis*
+    - drivers/*/*/*kinetis*
     - drivers/misc/*/nxp*
     - include/zephyr/dt-bindings/*/*nxp*
     - include/zephyr/dt-bindings/*/*mcux*
@@ -3653,19 +3730,32 @@ NXP Drivers:
     - include/zephyr/drivers/*/*mcux*
     - arch/arm/core/mpu/nxp_mpu.c
     - dts/bindings/*/nxp*
+  files-exclude:
+    - drivers/wifi/nxp/
+    - drivers/usb/*/*mcux*
   files-regex-exclude:
     - .*s32.*
   labels:
     - "platform: NXP Drivers"
   description: NXP Drivers
 
+NXP MCUX USB:
+  status: maintained
+  maintainers:
+    - mmahadevan108
+    - MarkWangChinese
+  files:
+    - drivers/usb/*/*mcux*
+  labels:
+    - "platform: NXP Drivers"
+  description: NXP MCUX USB shim drivers
+
 NXP Platforms (MCU):
   status: maintained
   maintainers:
     - dleach02
     - mmahadevan108
   collaborators:
-    - danieldegrasse
     - DerekSnell
     - yvanderv
     - EmilioCBen
@@ -3685,6 +3775,8 @@ NXP Platforms (MCU):
     - soc/nxp/mcx/
     - dts/arm/nxp/
     - samples/boards/nxp*/
+  files-exclude:
+    - dts/arm/nxp/nxp_imx*
   files-regex-exclude:
     - .*s32.*
   labels:
@@ -3725,11 +3817,10 @@ NXP Platforms (MPU):
     - dleach02
     - dbaluta
     - iuliana-prodan
-    - danieldegrasse
-    - decsny
     - yvanderv
   files:
     - dts/arm64/nxp/
+    - dts/arm/nxp/nxp_imx*
     - soc/nxp/imx/
     - soc/nxp/layerscape/
   files-regex:
@@ -3765,7 +3856,8 @@ Microchip MEC Platforms:
     - drivers/*/*mchp*.c
     - tests/boards/mec15xxevb_assy6853/
     - tests/boards/mec172xevb_assy6906/
-    - dts/bindings/*/microchip,*
+    - dts/bindings/*/microchip,mec*
+    - dts/bindings/*/microchip,xec*
   labels:
     - "platform: Microchip MEC"
 
@@ -3932,6 +4024,7 @@ STM32 Platforms:
     - GeorgeCGV
     - marwaiehm-st
     - mathieuchopstm
+    - djiatsaf-st
   files:
     - boards/st/
     - drivers/*/*stm32*.c
@@ -3942,11 +4035,37 @@ STM32 Platforms:
     - dts/bindings/*/*stm32*
     - soc/st/stm32/
     - samples/boards/st/
+  files-exclude:
+    - boards/st/*wb*/
+    - drivers/bluetooth/hci/*stm32*.c
+    - soc/st/stm32/stm32wb*/
   labels:
     - "platform: STM32"
   description: >-
-    STM32 SOCs, dts files and related drivers. ST nucleo, disco and eval
-    boards.
+    STM32 SOCs, dts files and related drivers. ST development boards.
+
+STM32 Wireless Platforms:
+  status: maintained
+  maintainers:
+    - erwango
+  collaborators:
+    - asm5878
+    - HoZHel
+    - benothmn-st
+    - mathieuchopstm
+  files:
+    - boards/shields/x_nucleo_bnrg2a1/
+    - boards/shields/x_nucleo_idb05a1/
+    - boards/shields/x_nucleo_wb05kn1/
+    - boards/st/*wb*/
+    - drivers/bluetooth/hci/*stm32*.c
+    - drivers/bluetooth/hci/hci_spi_st.c
+    - soc/st/stm32/stm32wb*/
+  labels:
+    - "platform: STM32"
+  description: >-
+    STM32WB SOCs, dts files and related drivers. STM32WB development boards
+    and ST bluetooth shields.
 
 Espressif Platforms:
   status: maintained
@@ -3966,7 +4085,7 @@ Espressif Platforms:
     - dts/riscv/espressif/
     - dts/bindings/*/*esp32*
     - samples/boards/espressif/
-    - tests/boards/espressif_esp32/
+    - tests/boards/espressif/
     - drivers/*/*esp32*/
   labels:
     - "platform: ESP32"
@@ -4022,8 +4141,6 @@ TI K3 Platforms:
     - gramsay0
     - dnltz
   files:
-    - boards/phytec/phyboard_lyra/
-    - boards/phytec/phyboard_electra/
     - boards/ti/*am62*/
     - drivers/*/*ti_k3*
     - dts/bindings/*/ti,k3*
@@ -4044,8 +4161,12 @@ Xilinx Platforms:
   collaborators:
     - henrikbrixandersen
     - ibirnbaum
+    - michalsimek
   files:
+    - boards/amd/
+    - drivers/*/*xilinx*
     - drivers/*/*xlnx*
+    - drivers/*/*zynq*
     - dts/*/xilinx/
     - dts/bindings/*/*xlnx*
     - include/zephyr/*/*/*xlnx*
@@ -4124,6 +4245,20 @@ RTIO:
   tests:
     - rtio
 
+Secure storage:
+  status: maintained
+  maintainers:
+    - tomi-font
+  files:
+    - subsys/secure_storage/
+    - samples/psa/
+    - doc/services/secure_storage.rst
+    - tests/subsys/secure_storage/
+  labels:
+    - "area: Secure storage"
+  tests:
+    - psa.secure_storage
+
 Storage:
   status: odd fixes
   files:
@@ -4136,6 +4271,17 @@ Storage:
   tests:
     - storage
 
+Storage ZMS:
+  status: maintained
+  maintainers:
+    - rghaddab
+  files:
+    - subsys/fs/zms/
+    - include/zephyr/fs/zms.h
+    - samples/subsys/fs/zms/
+    - tests/subsys/fs/zms/
+    - doc/services/storage/zms/zms.rst
+
 Sysbuild:
   status: maintained
   maintainers:
@@ -4288,6 +4434,7 @@ USB:
     - samples/subsys/usb/
     - subsys/usb/
     - tests/subsys/usb/
+    - tests/drivers/build_all/usb/
     - tests/drivers/usb/
     - tests/drivers/udc/
     - doc/connectivity/usb/
@@ -4365,12 +4512,13 @@ VFS:
     - filesystem
 
 West:
-  status: odd fixes
+  status: maintained
+  maintainers:
+    - pdgendt
   collaborators:
-    - mbolivar-ampere
+    - mbolivar
     - carlescufi
     - swinslow
-    - pdgendt
   files:
     - scripts/west-commands.yml
     - scripts/west_commands/
@@ -4537,6 +4685,17 @@ West:
   labels:
     - "area: CMSIS-NN"
 
+"West project: cmsis_6":
+  status: maintained
+  maintainers:
+    - ithinuel
+  collaborators:
+    - tomi-font
+    - wearyzen
+  files: []
+  labels:
+    - "area: CMSIS_6"
+
 "West project: edtt":
   status: maintained
   maintainers:
@@ -4627,6 +4786,9 @@ West:
   status: maintained
   maintainers:
     - kristofer-jonsson-arm
+    - ithinuel
+  collaborators:
+    - wearyzen
   files:
     - drivers/misc/ethos_u/
     - modules/hal_ethos_u/
@@ -4679,11 +4841,6 @@ West:
   collaborators:
     - hubertmis
     - nordic-krch
-    - krish2718
-    - sachinthegreen
-    - udaynordic
-    - rajb9
-    - srkanordic
   files:
     - modules/hal_nordic/
   labels:
@@ -4704,7 +4861,7 @@ West:
     - dleach02
     - mmahadevan108
   collaborators:
-    - danieldegrasse
+    - decsny
     - manuargue
     - PetervdPerk-NXP
     - bperseghetti
@@ -4752,6 +4909,8 @@ West:
 "West project: hal_rpi_pico":
   status: maintained
   maintainers:
+    - soburi
+  collaborators:
     - yonsch
   files:
     - modules/hal_rpi_pico/
@@ -4770,7 +4929,7 @@ West:
     - mnkp
     - rettichschnidi
   files:
-    - modules/Kconfig.silabs
+    - modules/hal_silabs/
   labels:
     - "platform: Silabs"
 
@@ -4791,11 +4950,25 @@ West:
     - FRASTM
     - gautierg-st
     - marwaiehm-st
+    - asm5878
+    - HoZHel
+    - benothmn-st
   files:
     - modules/Kconfig.stm32
   labels:
     - "platform: STM32"
 
+"West project: hal_tdk":
+  status: maintained
+  maintainers:
+    - afontaine-invn
+  collaborators:
+    - rbuisson-invn
+    - gjabouley-invn
+    - sriccardi-invn
+  files:
+    - modules/hal_tdk/Kconfig
+
 "West project: hal_telink":
   status: maintained
   maintainers:
@@ -4813,6 +4986,14 @@ West:
   labels:
     - "platform: TI"
 
+"West project: hal_wch":
+  status: maintained
+  maintainers:
+    - nzmichaelh
+    - kholia
+  files:
+    - modules/hal_wch/
+
 "West project: hal_wurthelektronik":
   status: maintained
   maintainers:
@@ -4844,6 +5025,14 @@ West:
   labels:
     - "platform: Intel"
 
+"West project: zephyr-lang-rust":
+  status: maintained
+  maintainers:
+    - d3zd3z
+  files: []
+  labels:
+    - "area: Rust"
+
 "West project: libmetal":
   status: odd fixes
   collaborators:
@@ -4890,6 +5079,7 @@ West:
   collaborators:
     - brgl
     - pdgendt
+    - uLipe
   files:
     - modules/lvgl/
     - tests/lib/gui/lvgl/
@@ -4914,6 +5104,7 @@ West:
     - ceolin
   collaborators:
     - ithinuel
+    - wearyzen
     - valeriosetti
     - tomi-font
   files:
@@ -4925,6 +5116,7 @@ West:
   tests:
     - benchmark.crypto.mbedtls
     - crypto.mbedtls
+    - psa.secure_storage
 
 "West project: mcuboot":
   status: maintained
@@ -4985,6 +5177,10 @@ West:
   maintainers:
     - krish2718
     - sachinthegreen
+  collaborators:
+    - udaynordic
+    - rajb9
+    - srkanordic
   files:
     - modules/nrf_wifi/
   labels:
@@ -5097,6 +5293,7 @@ West:
   collaborators:
     - Vge0rge
     - ithinuel
+    - wearyzen
     - valeriosetti
     - tomi-font
   files:
@@ -5107,6 +5304,7 @@ West:
     - "area: TF-M"
   tests:
     - trusted-firmware-m
+    - psa.secure_storage
 
 "West project: tf-m-tests":
   status: maintained
@@ -5115,6 +5313,7 @@ West:
   collaborators:
     - Vge0rge
     - ithinuel
+    - wearyzen
   files: []
   labels:
     - "area: TF-M"
@@ -5127,6 +5326,7 @@ West:
   collaborators:
     - carlocaione
     - ithinuel
+    - wearyzen
   files:
     - modules/trusted-firmware-a/
   labels:
@@ -5139,6 +5339,7 @@ West:
   collaborators:
     - Vge0rge
     - ithinuel
+    - wearyzen
   files: []
   labels:
     - "area: TF-M"
@@ -5175,10 +5376,14 @@ West:
   maintainers:
     - krish2718
     - jukkar
+  collaborators:
+    - MaochenWang1
   files:
     - modules/hostap/
   labels:
     - "area: Wi-Fi"
+  tests:
+    - net.wifi
 
 Xtensa arch:
   status: maintained
@@ -5195,7 +5400,6 @@ Xtensa arch:
     - boards/qemu/xtensa/
     - boards/cdns/xt-sim/
     - soc/cdns/dc233c/
-    - soc/cdns/dc233c/
     - soc/cdns/xtensa_sample_controller/
     - tests/arch/xtensa/
   labels:
@@ -5306,6 +5510,8 @@ Testing with Renode:
     - fkokosinski
   files:
     - cmake/emu/renode.cmake
+    - soc/renode/
+    - boards/renode/
     - boards/**/*/support/*.repl
     - boards/**/*/support/*.resc
   labels:
@@ -5334,6 +5540,7 @@ zbus:
     - lyakh
     - pillo79
   files:
+    - cmake/llext-edk.cmake
     - samples/subsys/llext/
     - include/zephyr/llext/
     - tests/subsys/llext/
diff --git a/README.rst b/README.rst
index 2b44d5ed4a5..9472db6d5ee 100644
--- a/README.rst
+++ b/README.rst
@@ -10,15 +10,9 @@
      
    
 
-   
-     
-   
-   
-     
-   
-   
-     
-   
+   
+   
+   
 
 
 The Zephyr Project is a scalable real-time operating system (RTOS) supporting
diff --git a/SDK_VERSION b/SDK_VERSION
index 74aaa3f38cf..c5523bd09b1 100644
--- a/SDK_VERSION
+++ b/SDK_VERSION
@@ -1 +1 @@
-0.16.8
+0.17.0
diff --git a/VERSION b/VERSION
index 83bbbb1d942..b170abf44be 100644
--- a/VERSION
+++ b/VERSION
@@ -1,5 +1,5 @@
-VERSION_MAJOR = 3
-VERSION_MINOR = 7
+VERSION_MAJOR = 4
+VERSION_MINOR = 0
 PATCHLEVEL = 99
 VERSION_TWEAK = 0
 EXTRAVERSION =
diff --git a/arch/Kconfig b/arch/Kconfig
index da35a1b2751..94e9a540a08 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -50,11 +50,12 @@ config ARM64
 	select ARCH_HAS_THREAD_LOCAL_STORAGE
 	select USE_SWITCH
 	select USE_SWITCH_SUPPORTED
-	select IRQ_OFFLOAD_NESTED if IRQ_OFFLOAD
 	select BARRIER_OPERATIONS_ARCH
 	select ARCH_HAS_DIRECTED_IPIS
 	select ARCH_HAS_DEMAND_PAGING
 	select ARCH_HAS_DEMAND_MAPPING
+	select ARCH_SUPPORTS_EVICTION_TRACKING
+	select EVICTION_TRACKING if DEMAND_PAGING
 	help
 	  ARM64 (AArch64) architecture
 
@@ -83,6 +84,7 @@ config X86
 	select ARCH_IS_SET
 	select ATOMIC_OPERATIONS_BUILTIN
 	select ARCH_SUPPORTS_COREDUMP
+	select ARCH_SUPPORTS_COREDUMP_PRIV_STACKS
 	select ARCH_SUPPORTS_ROM_START if !X86_64
 	select CPU_HAS_MMU
 	select ARCH_MEM_DOMAIN_DATA if USERSPACE && !X86_COMMON_PAGE_TABLE
@@ -91,7 +93,7 @@ config X86
 	select ARCH_HAS_TIMING_FUNCTIONS
 	select ARCH_HAS_THREAD_LOCAL_STORAGE
 	select ARCH_HAS_DEMAND_PAGING if !X86_64
-	select IRQ_OFFLOAD_NESTED if IRQ_OFFLOAD
+	select ARCH_HAS_DEMAND_MAPPING if ARCH_HAS_DEMAND_PAGING
 	select NEED_LIBC_MEM_PARTITION if USERSPACE && TIMING_FUNCTIONS \
 					  && !BOARD_HAS_TIMING_FUNCTIONS \
 					  && !SOC_HAS_TIMING_FUNCTIONS
@@ -114,11 +116,11 @@ config RISCV
 	bool
 	select ARCH_IS_SET
 	select ARCH_SUPPORTS_COREDUMP
+	select ARCH_SUPPORTS_COREDUMP_PRIV_STACKS
 	select ARCH_SUPPORTS_ROM_START if !SOC_FAMILY_ESPRESSIF_ESP32
 	select ARCH_SUPPORTS_EMPTY_IRQ_SPURIOUS
 	select ARCH_HAS_CODE_DATA_RELOCATION
 	select ARCH_HAS_THREAD_LOCAL_STORAGE
-	select IRQ_OFFLOAD_NESTED if IRQ_OFFLOAD
 	select USE_SWITCH_SUPPORTED
 	select USE_SWITCH
 	select SCHED_IPI_SUPPORTED if SMP
@@ -133,7 +135,6 @@ config XTENSA
 	select ARCH_IS_SET
 	select USE_SWITCH
 	select USE_SWITCH_SUPPORTED
-	select IRQ_OFFLOAD_NESTED if IRQ_OFFLOAD
 	select ARCH_HAS_CODE_DATA_RELOCATION
 	select ARCH_HAS_TIMING_FUNCTIONS
 	select ARCH_MEM_DOMAIN_DATA if USERSPACE
@@ -448,9 +449,8 @@ config ISR_TABLES_LOCAL_DECLARATION_SUPPORTED
 	depends on "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "zephyr" || "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "gnuarmemb"
 
 config ISR_TABLES_LOCAL_DECLARATION
-	bool "ISR tables created locally and placed by linker [EXPERIMENTAL]"
+	bool "ISR tables created locally and placed by linker"
 	depends on ISR_TABLES_LOCAL_DECLARATION_SUPPORTED
-	select EXPERIMENTAL
 	help
 	  Enable new scheme of interrupt tables generation.
 	  This is totally different generator that would create tables entries locally
@@ -576,11 +576,12 @@ config IRQ_OFFLOAD
 config IRQ_OFFLOAD_NESTED
 	bool "irq_offload() supports nested IRQs"
 	depends on IRQ_OFFLOAD
+	default y if ARM64 || X86 || RISCV || XTENSA
 	help
-	  When set by the arch layer, indicates that irq_offload() may
-	  legally be called in interrupt context to cause a
-	  synchronous nested interrupt on the current CPU.  Not all
-	  hardware is capable.
+	  When set by the platform layers, indicates that
+	  irq_offload() may legally be called in interrupt context to
+	  cause a synchronous nested interrupt on the current CPU.
+	  Not all hardware is capable.
 
 config EXCEPTION_DEBUG
 	bool "Unhandled exception debugging"
@@ -679,6 +680,9 @@ config ARCH_SUPPORTS_COREDUMP
 config ARCH_SUPPORTS_COREDUMP_THREADS
 	bool
 
+config ARCH_SUPPORTS_COREDUMP_PRIV_STACKS
+	bool
+
 config ARCH_SUPPORTS_ARCH_HW_INIT
 	bool
 
@@ -688,6 +692,12 @@ config ARCH_SUPPORTS_ROM_START
 config ARCH_SUPPORTS_EMPTY_IRQ_SPURIOUS
 	bool
 
+config ARCH_SUPPORTS_EVICTION_TRACKING
+	bool
+	help
+	  Architecture code supports page tracking for eviction algorithms
+	  when demand paging is enabled.
+
 config ARCH_HAS_EXTRA_EXCEPTION_INFO
 	bool
 
@@ -819,7 +829,7 @@ config CPU_CACHE_INCOHERENT
 	help
 	  This hidden configuration should be selected when the CPU has
 	  incoherent cache. This applies to intra-CPU multiprocessing
-	  incoherence and makes only sense when MP_NUM_CPUS > 1.
+	  incoherence and makes only sense when MP_MAX_NUM_CPUS > 1.
 
 config CPU_HAS_ICACHE
 	bool
@@ -1025,7 +1035,7 @@ config CACHE_DOUBLEMAP
 	  point to the same cached/uncached memory at different locations.
 
 	  This applies to intra-CPU multiprocessing incoherence and makes only
-	  sense when MP_NUM_CPUS > 1.
+	  sense when MP_MAX_NUM_CPUS > 1.
 
 config CACHE_MANAGEMENT
 	bool "Cache management features"
@@ -1134,3 +1144,9 @@ config ARCH_HAS_CUSTOM_BUSY_WAIT
 	  It's possible that an architecture port cannot or does not want to use
 	  the provided k_busy_wait(), but instead must do something custom. It must
 	  enable this option in that case.
+
+config ARCH_HAS_CUSTOM_CURRENT_IMPL
+	bool
+	help
+	  Select when architecture implements arch_current_thread() &
+	  arch_current_thread_set().
diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig
index a27b09659ac..d44ca272b11 100644
--- a/arch/arc/Kconfig
+++ b/arch/arc/Kconfig
@@ -262,7 +262,7 @@ config ARC_CURRENT_THREAD_USE_NO_TLS
 	  RGF_NUM_BANKS the parameter is disabled by-default because banks syncronization
 	  requires significant time, and it slows down performance.
 	  ARCMWDT works with tls pointer in different way then GCC. Optimized access to
-	  TLS pointer via _current variable does not provide significant advantages
+	  TLS pointer via the _current symbol does not provide significant advantages
 	  in case of MetaWare.
 
 config GEN_ISR_TABLES
@@ -343,6 +343,15 @@ config ARC_NORMAL_FIRMWARE
 	  resources of the ARC processors, and, therefore, it shall avoid
 	  accessing them.
 
+config ARC_VPX_COOPERATIVE_SHARING
+	bool "Cooperative sharing of ARC VPX vector registers"
+	select SCHED_CPU_MASK if MP_MAX_NUM_CPUS > 1
+	help
+	  This option enables the cooperative sharing of the ARC VPX vector
+	  registers. Threads that want to use those registers must successfully
+	  call arc_vpx_lock() before using them, and call arc_vpx_unlock()
+	  when done using them.
+
 source "arch/arc/core/dsp/Kconfig"
 
 menu "ARC MPU Options"
@@ -374,9 +383,7 @@ config ARC_EXCEPTION_STACK_SIZE
 endmenu
 
 config ARC_EARLY_SOC_INIT
-	bool "Make early stage SoC-specific initialization [DEPRECATED]"
-	select SOC_RESET_HOOK
-	select DEPRECATED
+	bool "Make early stage SoC-specific initialization"
 	help
 	  Call SoC per-core setup code on early stage initialization
 	  (before C runtime initialization). Setup code is called in form of
diff --git a/arch/arc/core/CMakeLists.txt b/arch/arc/core/CMakeLists.txt
index 00c9f775038..5b81f527480 100644
--- a/arch/arc/core/CMakeLists.txt
+++ b/arch/arc/core/CMakeLists.txt
@@ -34,3 +34,5 @@ add_subdirectory_ifdef(CONFIG_ARC_CORE_MPU mpu)
 add_subdirectory_ifdef(CONFIG_ARC_SECURE_FIRMWARE secureshield)
 
 zephyr_linker_sources(ROM_START SORT_KEY 0x0vectors vector_table.ld)
+
+zephyr_library_sources_ifdef(CONFIG_LLEXT elf.c)
diff --git a/arch/arc/core/elf.c b/arch/arc/core/elf.c
new file mode 100644
index 00000000000..9f9f1073431
--- /dev/null
+++ b/arch/arc/core/elf.c
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2024 Intel Corporation
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+
+LOG_MODULE_REGISTER(elf, CONFIG_LLEXT_LOG_LEVEL);
+
+#define R_ARC_32            4
+#define R_ARC_B26           5 /* AKA R_ARC_64 */
+#define R_ARC_S25W_PCREL    17
+#define R_ARC_32_ME         27
+
+/* ARCompact insns packed in memory have Middle Endian encoding */
+#define ME(x) (((x & 0xffff0000) >> 16) | ((x & 0xffff) << 16))
+
+/**
+ * @brief Architecture specific function for relocating shared elf
+ *
+ * Elf files contain a series of relocations described in multiple sections.
+ * These relocation instructions are architecture specific and each architecture
+ * supporting modules must implement this.
+ *
+ * The relocation codes are well documented:
+ * https://github.com/foss-for-synopsys-dwc-arc-processors/arc-ABI-manual/blob/master/ARCv2_ABI.pdf
+ * https://github.com/zephyrproject-rtos/binutils-gdb
+ */
+int arch_elf_relocate(elf_rela_t *rel, uintptr_t loc, uintptr_t sym_base_addr, const char *sym_name,
+		      uintptr_t load_bias)
+{
+	int ret = 0;
+	uint32_t insn = UNALIGNED_GET((uint32_t *)loc);
+	uint32_t value;
+
+	sym_base_addr += rel->r_addend;
+
+	int reloc_type = ELF32_R_TYPE(rel->r_info);
+
+	switch (reloc_type) {
+	case R_ARC_32:
+	case R_ARC_B26:
+		UNALIGNED_PUT(sym_base_addr, (uint32_t *)loc);
+		break;
+	case R_ARC_S25W_PCREL:
+		/* ((S + A) - P) >> 2
+		 * S = symbol address
+		 * A = addend
+		 * P = relative offset to PCL
+		 */
+		value = (sym_base_addr + rel->r_addend - (loc & ~0x3)) >> 2;
+
+		insn = ME(insn);
+
+		/* disp25w */
+		insn = insn & ~0x7fcffcf;
+		insn |= ((value >> 0) & 0x01ff) << 18;
+		insn |= ((value >> 9) & 0x03ff) << 6;
+		insn |= ((value >> 19) & 0x000f) << 0;
+
+		insn = ME(insn);
+
+		UNALIGNED_PUT(insn, (uint32_t *)loc);
+		break;
+	case R_ARC_32_ME:
+		UNALIGNED_PUT(ME(sym_base_addr), (uint32_t *)loc);
+		break;
+	default:
+		LOG_ERR("unknown relocation: %u\n", reloc_type);
+		ret = -ENOEXEC;
+		break;
+	}
+
+	return ret;
+}
diff --git a/arch/arc/core/reset.S b/arch/arc/core/reset.S
index 63fa6438ce4..a2b038d387e 100644
--- a/arch/arc/core/reset.S
+++ b/arch/arc/core/reset.S
@@ -16,9 +16,8 @@
 #include 
 #include 
 #include 
-
-#if defined(CONFIG_SOC_RESET_HOOK)
-GTEXT(soc_reset_hook)
+#ifdef CONFIG_ARC_EARLY_SOC_INIT
+  #include 
 #endif
 
 GDATA(z_interrupt_stacks)
@@ -113,8 +112,8 @@ done_icache_invalidate:
 
 done_dcache_invalidate:
 
-#ifdef CONFIG_SOC_RESET_HOOK
-	bl soc_reset_hook
+#ifdef CONFIG_ARC_EARLY_SOC_INIT
+	soc_early_asm_init_percpu
 #endif
 
 	_dsp_extension_probe
diff --git a/arch/arc/core/smp.c b/arch/arc/core/smp.c
index e8463b7b53b..1b06c2ac7d1 100644
--- a/arch/arc/core/smp.c
+++ b/arch/arc/core/smp.c
@@ -16,6 +16,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 
 volatile struct {
@@ -115,6 +116,11 @@ void arch_secondary_cpu_init(int cpu_num)
 			   DT_IRQ(DT_NODELABEL(ici), priority), 0);
 	irq_enable(DT_IRQN(DT_NODELABEL(ici)));
 #endif
+
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+	soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
+
 	/* call the function set by arch_cpu_start */
 	fn = arc_cpu_init[cpu_num].fn;
 
diff --git a/arch/arc/core/thread.c b/arch/arc/core/thread.c
index 1c85a416ca6..4b1d836103e 100644
--- a/arch/arc/core/thread.c
+++ b/arch/arc/core/thread.c
@@ -19,10 +19,15 @@
 #include 
 #endif
 
-#if defined(CONFIG_ARC_DSP) && defined(CONFIG_DSP_SHARING)
+#if defined(CONFIG_ARC_VPX_COOPERATIVE_SHARING) || defined(CONFIG_DSP_SHARING)
 #include 
 static struct k_spinlock lock;
 #endif
+
+#if defined(CONFIG_ARC_VPX_COOPERATIVE_SHARING)
+static struct k_sem vpx_sem[CONFIG_MP_MAX_NUM_CPUS];
+#endif
+
 /*  initial stack frame */
 struct init_stack_frame {
 	uintptr_t pc;
@@ -320,3 +325,65 @@ void arc_dsp_enable(struct k_thread *thread, unsigned int options)
 	k_spin_unlock(&lock, key);
 }
 #endif /* CONFIG_ARC_DSP && CONFIG_DSP_SHARING */
+
+#if defined(CONFIG_ARC_VPX_COOPERATIVE_SHARING)
+int arc_vpx_lock(k_timeout_t timeout)
+{
+	k_spinlock_key_t key;
+	unsigned int id;
+
+	key = k_spin_lock(&lock);
+
+	id = _current_cpu->id;
+#if (CONFIG_MP_MAX_NUM_CPUS > 1) && defined(CONFIG_SCHED_CPU_MASK)
+	__ASSERT(!arch_is_in_isr() && (_current->base.cpu_mask == BIT(id)), "");
+#endif
+	k_spin_unlock(&lock, key);
+
+	/*
+	 * It is assumed that the thread is (still) pinned to
+	 * the same CPU identified by .
+	 */
+
+	return k_sem_take(&vpx_sem[id], timeout);
+}
+
+void arc_vpx_unlock(void)
+{
+	k_spinlock_key_t key;
+	unsigned int id;
+
+	key = k_spin_lock(&lock);
+#if (CONFIG_MP_MAX_NUM_CPUS > 1) && defined(CONFIG_SCHED_CPU_MASK)
+	__ASSERT(!arch_is_in_isr() && (_current->base.cpu_mask == BIT(id)), "");
+#endif
+	id = _current_cpu->id;
+	k_spin_unlock(&lock, key);
+
+	/*
+	 * It is assumed that this thread is (still) pinned to
+	 * the CPU identified by , and that it is the same CPU
+	 * used by arc_vpx_lock().
+	 */
+
+	k_sem_give(&vpx_sem[id]);
+}
+
+void arc_vpx_unlock_force(unsigned int id)
+{
+	__ASSERT(id < CONFIG_MP_MAX_NUM_CPUS, "");
+
+	k_sem_give(&vpx_sem[id]);
+}
+
+static int arc_vpx_sem_init(void)
+{
+	for (unsigned int i = 0; i < CONFIG_MP_MAX_NUM_CPUS; i++) {
+		k_sem_init(vpx_sem, 1, 1);
+	}
+
+	return 0;
+}
+
+SYS_INIT(arc_vpx_sem_init, PRE_KERNEL_2, CONFIG_KERNEL_INIT_PRIORITY_OBJECTS);
+#endif
diff --git a/arch/arc/include/kernel_arch_func.h b/arch/arc/include/kernel_arch_func.h
index ca382a274f4..73bd352a249 100644
--- a/arch/arc/include/kernel_arch_func.h
+++ b/arch/arc/include/kernel_arch_func.h
@@ -26,6 +26,8 @@
 
 #include 
 
+#include 
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -33,6 +35,10 @@ extern "C" {
 static ALWAYS_INLINE void arch_kernel_init(void)
 {
 	z_irq_setup();
+
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+	soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
 }
 
 
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index c28cf8d29f9..3ce78334cb6 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -155,12 +155,12 @@ config CPU_HAS_ARM_MPU
 	  This option is enabled when the CPU has a Memory Protection Unit (MPU)
 	  in ARM flavor.
 
-config CPU_HAS_NXP_MPU
+config CPU_HAS_NXP_SYSMPU
 	bool
 	select CPU_HAS_MPU
 	help
-	  This option is enabled when the CPU has a Memory Protection Unit (MPU)
-	  in NXP flavor.
+	  This option is enabled when the CPU has an NXP System Memory Protection
+	  Unit (SYSMPU).
 
 config CPU_HAS_CUSTOM_FIXED_SOC_MPU_REGIONS
 	bool "Custom fixed SoC MPU region definition"
diff --git a/arch/arm/core/cortex_a_r/CMakeLists.txt b/arch/arm/core/cortex_a_r/CMakeLists.txt
index d4e18a614f0..7d18e0e610d 100644
--- a/arch/arm/core/cortex_a_r/CMakeLists.txt
+++ b/arch/arm/core/cortex_a_r/CMakeLists.txt
@@ -24,4 +24,4 @@ zephyr_library_sources_ifdef(CONFIG_SEMIHOST semihost.c)
 zephyr_library_sources_ifdef(CONFIG_THREAD_LOCAL_STORAGE __aeabi_read_tp.S)
 zephyr_library_sources_ifdef(CONFIG_ARCH_CACHE cache.c)
 zephyr_library_sources_ifdef(CONFIG_USE_SWITCH switch.S)
-zephyr_library_sources_ifndef(CONFIG_USE_SWITCH swap.c swap_helper.S exc_exit.S)
+zephyr_library_sources_ifndef(CONFIG_USE_SWITCH swap_helper.S exc_exit.S)
diff --git a/arch/arm/core/cortex_a_r/Kconfig b/arch/arm/core/cortex_a_r/Kconfig
index 2ee3c945644..409968ca6c7 100644
--- a/arch/arm/core/cortex_a_r/Kconfig
+++ b/arch/arm/core/cortex_a_r/Kconfig
@@ -111,6 +111,32 @@ config CPU_CORTEX_R52
 	help
 	  This option signifies the use of a Cortex-R52 CPU
 
+config CPU_CORTEX_R52_CACHE_SEGREGATION
+	bool "Control segregation of L1 I/D-Cache ways between Flash and AXIM"
+	depends on CPU_CORTEX_R52
+	help
+	  Control segregation of L1 I/D-Cache ways between Flash and AXIM.
+	  Updates to the cache segregation controls are only permitted before the caches
+	  have ever been enabled, following a system reset, otherwise the update is ignored.
+
+config CPU_CORTEX_R52_ICACHE_FLASH_WAY
+	int "L1 I-Cache Flash way"
+	depends on CPU_CORTEX_R52_CACHE_SEGREGATION
+	range 0 4
+	default 0
+	help
+	  Configure L1 I-Cache ways for Flash interface. Default is reset value, all
+	  I-Cache ways are allocated for AXIM interface.
+
+config CPU_CORTEX_R52_DCACHE_FLASH_WAY
+	int "L1 D-Cache Flash way"
+	depends on CPU_CORTEX_R52_CACHE_SEGREGATION
+	range 0 4
+	default 0
+	help
+	  Configure L1 D-Cache ways for Flash interface. Default is reset value,
+	  all D-Cache ways are allocated for AXIM interface.
+
 if CPU_AARCH32_CORTEX_R
 
 config ARMV7_R
diff --git a/arch/arm/core/cortex_a_r/__aeabi_read_tp.S b/arch/arm/core/cortex_a_r/__aeabi_read_tp.S
index 40874c4a1fa..bafd7e8e3ec 100644
--- a/arch/arm/core/cortex_a_r/__aeabi_read_tp.S
+++ b/arch/arm/core/cortex_a_r/__aeabi_read_tp.S
@@ -14,5 +14,5 @@ SECTION_FUNC(text, __aeabi_read_tp)
 	/*
 	 * TPIDRURW will be used as a base pointer point to TLS aera.
 	 */
-	mrc 15, 0, r0, c13, c0, 2
+	mrc p15, 0, r0, c13, c0, 2
 	bx lr
diff --git a/arch/arm/core/cortex_a_r/prep_c.c b/arch/arm/core/cortex_a_r/prep_c.c
index 74d0855a620..a10588a4927 100644
--- a/arch/arm/core/cortex_a_r/prep_c.c
+++ b/arch/arm/core/cortex_a_r/prep_c.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2013-2014 Wind River Systems, Inc.
+ * Copyright 2024 Arm Limited and/or its affiliates 
  *
  * SPDX-License-Identifier: Apache-2.0
  */
@@ -28,24 +29,6 @@
 #include 
 #endif
 
-#if defined(__GNUC__)
-/*
- * GCC can detect if memcpy is passed a NULL argument, however one of
- * the cases of relocate_vector_table() it is valid to pass NULL, so we
- * suppress the warning for this case.  We need to do this before
- * string.h is included to get the declaration of memcpy.
- */
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wnonnull"
-#endif
-
-#include 
-
-#if defined(CONFIG_SW_VECTOR_RELAY) || defined(CONFIG_SW_VECTOR_RELAY_CLIENT)
-Z_GENERIC_SECTION(.vt_pointer_section) __attribute__((used))
-void *_vector_table_pointer;
-#endif
-
 #ifdef CONFIG_ARM_MPU
 extern void z_arm_mpu_init(void);
 extern void z_arm_configure_static_mpu_regions(void);
@@ -53,38 +36,6 @@ extern void z_arm_configure_static_mpu_regions(void);
 extern int z_arm_mmu_init(void);
 #endif
 
-#if defined(CONFIG_AARCH32_ARMV8_R)
-
-#define VECTOR_ADDRESS ((uintptr_t)_vector_start)
-
-static inline void relocate_vector_table(void)
-{
-	write_sctlr(read_sctlr() & ~HIVECS);
-	write_vbar(VECTOR_ADDRESS & VBAR_MASK);
-	barrier_isync_fence_full();
-}
-
-#else
-#define VECTOR_ADDRESS 0
-
-void __weak relocate_vector_table(void)
-{
-#if defined(CONFIG_XIP) && (CONFIG_FLASH_BASE_ADDRESS != 0) || \
-	!defined(CONFIG_XIP) && (CONFIG_SRAM_BASE_ADDRESS != 0)
-	write_sctlr(read_sctlr() & ~HIVECS);
-	size_t vector_size = (size_t)_vector_end - (size_t)_vector_start;
-	(void)memcpy(VECTOR_ADDRESS, _vector_start, vector_size);
-#elif defined(CONFIG_SW_VECTOR_RELAY) || defined(CONFIG_SW_VECTOR_RELAY_CLIENT)
-	_vector_table_pointer = _vector_start;
-#endif
-}
-
-#if defined(__GNUC__)
-#pragma GCC diagnostic pop
-#endif
-
-#endif /* CONFIG_AARCH32_ARMV8_R */
-
 #if defined(CONFIG_CPU_HAS_FPU)
 
 static inline void z_arm_floating_point_init(void)
@@ -111,7 +62,6 @@ static inline void z_arm_floating_point_init(void)
 	__set_CPACR(reg_val);
 	barrier_isync_fence_full();
 
-#if !defined(CONFIG_FPU_SHARING)
 	/*
 	 * FPEXC: Floating-Point Exception Control register
 	 * comp. ARM Architecture Reference Manual, ARMv7-A and ARMv7-R edition,
@@ -133,7 +83,6 @@ static inline void z_arm_floating_point_init(void)
 	 */
 	__set_FPEXC(FPEXC_EN);
 #endif
-#endif
 }
 
 #endif /* CONFIG_CPU_HAS_FPU */
@@ -155,7 +104,6 @@ void z_prep_c(void)
 	/* Initialize tpidruro with our struct _cpu instance address */
 	write_tpidruro((uintptr_t)&_kernel.cpus[0]);
 
-	relocate_vector_table();
 #if defined(CONFIG_CPU_HAS_FPU)
 	z_arm_floating_point_init();
 #endif
diff --git a/arch/arm/core/cortex_a_r/reboot.c b/arch/arm/core/cortex_a_r/reboot.c
index dac892cf518..b5cea619f09 100644
--- a/arch/arm/core/cortex_a_r/reboot.c
+++ b/arch/arm/core/cortex_a_r/reboot.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2013-2014 Wind River Systems, Inc.
+ * Copyright 2024 Arm Limited and/or its affiliates 
  *
  * SPDX-License-Identifier: Apache-2.0
  */
@@ -12,6 +13,56 @@
 #include 
 #include 
 #include 
+#include 
+
+#if defined(CONFIG_AARCH32_ARMV8_R)
+
+#define VECTOR_ADDRESS ((uintptr_t)_vector_start)
+
+static inline void relocate_vector_table(void)
+{
+	write_sctlr(read_sctlr() & ~HIVECS);
+	write_vbar(VECTOR_ADDRESS & VBAR_MASK);
+	barrier_isync_fence_full();
+}
+
+#else
+
+#if defined(__GNUC__)
+/*
+ * GCC can detect if memcpy is passed a NULL argument, however one of
+ * the cases of relocate_vector_table() it is valid to pass NULL, so we
+ * suppress the warning for this case.  We need to do this before
+ * string.h is included to get the declaration of memcpy.
+ */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wnonnull"
+#endif /* __GNUC__ */
+
+#include 
+
+#define VECTOR_ADDRESS 0
+
+void __weak relocate_vector_table(void)
+{
+#if defined(CONFIG_XIP) && (CONFIG_FLASH_BASE_ADDRESS != 0) ||                                     \
+	!defined(CONFIG_XIP) && (CONFIG_SRAM_BASE_ADDRESS != 0)
+	write_sctlr(read_sctlr() & ~HIVECS);
+	size_t vector_size = (size_t)_vector_end - (size_t)_vector_start;
+	(void)memcpy(VECTOR_ADDRESS, _vector_start, vector_size);
+#endif
+}
+
+#if defined(__GNUC__)
+#pragma GCC diagnostic pop
+#endif
+
+#endif /* !CONFIG_AARCH32_ARMV8_R */
+
+void z_arm_relocate_vector_table(void)
+{
+	relocate_vector_table();
+}
 
 /**
  *
diff --git a/arch/arm/core/cortex_a_r/reset.S b/arch/arm/core/cortex_a_r/reset.S
index efb04d249ec..b5b899194e0 100644
--- a/arch/arm/core/cortex_a_r/reset.S
+++ b/arch/arm/core/cortex_a_r/reset.S
@@ -1,6 +1,7 @@
 /*
  * Copyright (c) 2013-2014 Wind River Systems, Inc.
  * Copyright (c) 2019 Stephanos Ioannidis 
+ * Copyright 2024 Arm Limited and/or its affiliates 
  *
  * SPDX-License-Identifier: Apache-2.0
  */
@@ -55,9 +56,12 @@ SECTION_SUBSEC_FUNC(TEXT, _reset_section, __start)
     cmp r0, #MODE_HYP
     bne EL1_Reset_Handler
 
-    /* Init HSCTLR see Armv8-R AArch32 architecture profile */
-    ldr r0, =(HSCTLR_RES1 | SCTLR_I_BIT | SCTLR_C_BIT)
-    mcr p15, 4, r0, c1, c0, 0
+    /*
+     * The HSCTLR register provides top-level control of system operation in Hyp mode.
+     * Since the OS is not running in Hyp mode, and considering the Armv8-R AArch32
+     * architecture profile, there's no need to modify HSCTLR configuration unless
+     * Fast Interrupts need to be enabled.
+     */
 
     /* Init HACTLR: Enable EL1 access to all IMP DEF registers */
     ldr r0, =HACTLR_INIT
@@ -199,6 +203,12 @@ EL1_Reset_Handler:
 
 #endif /* CONFIG_DCLS */
 
+#if defined(CONFIG_CPU_CORTEX_R52_CACHE_SEGREGATION)
+    ldr r0, =IMP_CSCTLR(CONFIG_CPU_CORTEX_R52_ICACHE_FLASH_WAY,
+                        CONFIG_CPU_CORTEX_R52_DCACHE_FLASH_WAY)
+    mcr p15, 1, r0, c9, c1, 0
+#endif
+
     ldr r0, =arm_cpu_boot_params
 
 #if CONFIG_MP_MAX_NUM_CPUS > 1
@@ -319,4 +329,6 @@ _primary_core:
     bl z_arm_tcm_disable_ecc
 #endif
 
+    bl z_arm_relocate_vector_table
+
     bx r4
diff --git a/arch/arm/core/cortex_a_r/smp.c b/arch/arm/core/cortex_a_r/smp.c
index 6579cb4adde..d0e31acb1ed 100644
--- a/arch/arm/core/cortex_a_r/smp.c
+++ b/arch/arm/core/cortex_a_r/smp.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2023 Arm Limited (or its affiliates). All rights reserved.
+ * Copyright (c) 2023, 2024 Arm Limited (or its affiliates).
  * SPDX-License-Identifier: Apache-2.0
  */
 
@@ -12,6 +12,7 @@
 #include "zephyr/cache.h"
 #include "zephyr/kernel/thread_stack.h"
 #include "zephyr/toolchain/gcc.h"
+#include 
 
 #define INV_MPID	UINT32_MAX
 
@@ -139,10 +140,14 @@ void arch_cpu_start(int cpu_num, k_thread_stack_t *stack, int sz, arch_cpustart_
 	arm_cpu_boot_params.arg = arg;
 	arm_cpu_boot_params.cpu_num = cpu_num;
 
+	/* we need the barrier here to make sure the above changes to
+	 * arm_cpu_boot_params are completed before we set the mpid
+	 */
+	barrier_dsync_fence_full();
+
 	/* store mpid last as this is our synchronization point */
 	arm_cpu_boot_params.mpid = cpu_mpid;
 
-	barrier_dsync_fence_full();
 	sys_cache_data_invd_range(
 			(void *)&arm_cpu_boot_params,
 			sizeof(arm_cpu_boot_params));
@@ -194,6 +199,10 @@ void arch_secondary_cpu_init(void)
 	 */
 #endif
 
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+	soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
+
 	fn = arm_cpu_boot_params.fn;
 	arg = arm_cpu_boot_params.arg;
 	barrier_dsync_fence_full();
diff --git a/arch/arm/core/cortex_a_r/swap.c b/arch/arm/core/cortex_a_r/swap.c
deleted file mode 100644
index 2f7faba741a..00000000000
--- a/arch/arm/core/cortex_a_r/swap.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2018 Linaro, Limited
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-
-#include 
-#include 
-
-#include 
-
-/* The 'key' actually represents the BASEPRI register
- * prior to disabling interrupts via the BASEPRI mechanism.
- *
- * arch_swap() itself does not do much.
- */
-int arch_swap(unsigned int key)
-{
-	/* store off key and return value */
-	_current->arch.basepri = key;
-	_current->arch.swap_return_value = -EAGAIN;
-
-	z_arm_cortex_r_svc();
-	irq_unlock(key);
-
-	/* Context switch is performed here. Returning implies the
-	 * thread has been context-switched-in again.
-	 */
-	return _current->arch.swap_return_value;
-}
diff --git a/arch/arm/core/cortex_a_r/swap_helper.S b/arch/arm/core/cortex_a_r/swap_helper.S
index 548bb446aa3..a41e1ab5942 100644
--- a/arch/arm/core/cortex_a_r/swap_helper.S
+++ b/arch/arm/core/cortex_a_r/swap_helper.S
@@ -126,7 +126,7 @@ out_fp_inactive:
      * TPIDRURW is used as a base pointer to all
      * thread variables with offsets added by toolchain.
      */
-    mcr 15, 0, r0, c13, c0, 2
+    mcr p15, 0, r0, c13, c0, 2
 #endif
 
 #if defined(CONFIG_ARM_STORE_EXC_RETURN)
@@ -336,12 +336,14 @@ _context_switch:
 
 _oops:
     /*
-     * Pass the exception frame to z_do_kernel_oops.  r0 contains the
-     * exception reason.
+     * Pass the exception frame to z_do_kernel_oops.
      */
     cps #MODE_SYS
     mov r0, sp
     cps #MODE_SVC
+    /* Zero callee_regs and exc_return (only used on Cortex-M) */
+    mov r1, #0
+    mov r2, #0
     bl z_do_kernel_oops
     b z_arm_int_exit
 
diff --git a/arch/arm/core/cortex_a_r/switch.S b/arch/arm/core/cortex_a_r/switch.S
index 800d46bbf94..4d5a6a627b1 100644
--- a/arch/arm/core/cortex_a_r/switch.S
+++ b/arch/arm/core/cortex_a_r/switch.S
@@ -150,10 +150,12 @@ offload:
 
 _oops:
     /*
-     * Pass the exception frame to z_do_kernel_oops.  r0 contains the
-     * exception reason.
+     * Pass the exception frame to z_do_kernel_oops.
      */
     mov r0, sp
+    /* Zero callee_regs and exc_return (only used on Cortex-M) */
+    mov r1, #0
+    mov r2, #0
     bl z_do_kernel_oops
 
 inv:
diff --git a/arch/arm/core/cortex_m/CMakeLists.txt b/arch/arm/core/cortex_m/CMakeLists.txt
index b220e6c81e8..05723811929 100644
--- a/arch/arm/core/cortex_m/CMakeLists.txt
+++ b/arch/arm/core/cortex_m/CMakeLists.txt
@@ -11,7 +11,6 @@ zephyr_library_sources(
   scb.c
   thread_abort.c
   vector_table.S
-  swap.c
   swap_helper.S
   irq_manage.c
   prep_c.c
diff --git a/arch/arm/core/cortex_m/fault.c b/arch/arm/core/cortex_m/fault.c
index 4e604ba8033..56d5be60f4c 100644
--- a/arch/arm/core/cortex_m/fault.c
+++ b/arch/arm/core/cortex_m/fault.c
@@ -35,59 +35,11 @@ LOG_MODULE_DECLARE(os, CONFIG_KERNEL_LOG_LEVEL);
 #define PR_FAULT_INFO(...)
 #endif
 
-#if defined(CONFIG_ARM_MPU) && defined(CONFIG_CPU_HAS_NXP_MPU)
+#if defined(CONFIG_ARM_MPU) && defined(CONFIG_CPU_HAS_NXP_SYSMPU)
 #define EMN(edr)   (((edr) & SYSMPU_EDR_EMN_MASK) >> SYSMPU_EDR_EMN_SHIFT)
 #define EACD(edr)  (((edr) & SYSMPU_EDR_EACD_MASK) >> SYSMPU_EDR_EACD_SHIFT)
 #endif
 
-/* Exception Return (EXC_RETURN) is provided in LR upon exception entry.
- * It is used to perform an exception return and to detect possible state
- * transition upon exception.
- */
-
-/* Prefix. Indicates that this is an EXC_RETURN value.
- * This field reads as 0b11111111.
- */
-#define EXC_RETURN_INDICATOR_PREFIX     (0xFF << 24)
-/* bit[0]: Exception Secure. The security domain the exception was taken to. */
-#define EXC_RETURN_EXCEPTION_SECURE_Pos 0
-#define EXC_RETURN_EXCEPTION_SECURE_Msk \
-		BIT(EXC_RETURN_EXCEPTION_SECURE_Pos)
-#define EXC_RETURN_EXCEPTION_SECURE_Non_Secure 0
-#define EXC_RETURN_EXCEPTION_SECURE_Secure EXC_RETURN_EXCEPTION_SECURE_Msk
-/* bit[2]: Stack Pointer selection. */
-#define EXC_RETURN_SPSEL_Pos 2
-#define EXC_RETURN_SPSEL_Msk BIT(EXC_RETURN_SPSEL_Pos)
-#define EXC_RETURN_SPSEL_MAIN 0
-#define EXC_RETURN_SPSEL_PROCESS EXC_RETURN_SPSEL_Msk
-/* bit[3]: Mode. Indicates the Mode that was stacked from. */
-#define EXC_RETURN_MODE_Pos 3
-#define EXC_RETURN_MODE_Msk BIT(EXC_RETURN_MODE_Pos)
-#define EXC_RETURN_MODE_HANDLER 0
-#define EXC_RETURN_MODE_THREAD EXC_RETURN_MODE_Msk
-/* bit[4]: Stack frame type. Indicates whether the stack frame is a standard
- * integer only stack frame or an extended floating-point stack frame.
- */
-#define EXC_RETURN_STACK_FRAME_TYPE_Pos 4
-#define EXC_RETURN_STACK_FRAME_TYPE_Msk BIT(EXC_RETURN_STACK_FRAME_TYPE_Pos)
-#define EXC_RETURN_STACK_FRAME_TYPE_EXTENDED 0
-#define EXC_RETURN_STACK_FRAME_TYPE_STANDARD EXC_RETURN_STACK_FRAME_TYPE_Msk
-/* bit[5]: Default callee register stacking. Indicates whether the default
- * stacking rules apply, or whether the callee registers are already on the
- * stack.
- */
-#define EXC_RETURN_CALLEE_STACK_Pos 5
-#define EXC_RETURN_CALLEE_STACK_Msk BIT(EXC_RETURN_CALLEE_STACK_Pos)
-#define EXC_RETURN_CALLEE_STACK_SKIPPED 0
-#define EXC_RETURN_CALLEE_STACK_DEFAULT EXC_RETURN_CALLEE_STACK_Msk
-/* bit[6]: Secure or Non-secure stack. Indicates whether a Secure or
- * Non-secure stack is used to restore stack frame on exception return.
- */
-#define EXC_RETURN_RETURN_STACK_Pos 6
-#define EXC_RETURN_RETURN_STACK_Msk BIT(EXC_RETURN_RETURN_STACK_Pos)
-#define EXC_RETURN_RETURN_STACK_Non_Secure 0
-#define EXC_RETURN_RETURN_STACK_Secure EXC_RETURN_RETURN_STACK_Msk
-
 /* Integrity signature for an ARMv8-M implementation */
 #if defined(CONFIG_ARMV7_M_ARMV8_M_FP)
 #define INTEGRITY_SIGNATURE_STD 0xFEFA125BUL
@@ -440,7 +392,7 @@ static int bus_fault(struct arch_esf *esf, int from_hard_fault, bool *recoverabl
 	}
 #endif /* !defined(CONFIG_ARMV7_M_ARMV8_M_FP) */
 
-#if defined(CONFIG_ARM_MPU) && defined(CONFIG_CPU_HAS_NXP_MPU)
+#if defined(CONFIG_ARM_MPU) && defined(CONFIG_CPU_HAS_NXP_SYSMPU)
 	uint32_t sperr = SYSMPU->CESR & SYSMPU_CESR_SPERR_MASK;
 	uint32_t mask = BIT(31);
 	int i;
@@ -475,7 +427,7 @@ static int bus_fault(struct arch_esf *esf, int from_hard_fault, bool *recoverabl
 				/* Note: we can assume the fault originated
 				 * from the same security state for ARM
 				 * platforms implementing the NXP MPU
-				 * (CONFIG_CPU_HAS_NXP_MPU=y).
+				 * (CONFIG_CPU_HAS_NXP_SYSMPU=y).
 				 *
 				 * As we only assess thread stack corruption,
 				 * we only process the error further, if the
@@ -531,7 +483,7 @@ static int bus_fault(struct arch_esf *esf, int from_hard_fault, bool *recoverabl
 		}
 		SYSMPU->CESR &= ~sperr;
 	}
-#endif /* defined(CONFIG_ARM_MPU) && defined(CONFIG_CPU_HAS_NXP_MPU) */
+#endif /* defined(CONFIG_ARM_MPU) && defined(CONFIG_CPU_HAS_NXP_SYSMPU) */
 
 	/* clear BFSR sticky bits */
 	SCB->CFSR |= SCB_CFSR_BUSFAULTSR_Msk;
@@ -1112,9 +1064,7 @@ void z_arm_fault(uint32_t msp, uint32_t psp, uint32_t exc_return,
 	__ASSERT(esf != NULL,
 		"ESF could not be retrieved successfully. Shall never occur.");
 
-#ifdef CONFIG_DEBUG_COREDUMP
-	z_arm_coredump_fault_sp = POINTER_TO_UINT(esf);
-#endif
+	z_arm_set_fault_sp(esf, exc_return);
 
 	reason = fault_handle(esf, fault, &recoverable);
 	if (recoverable) {
diff --git a/arch/arm/core/cortex_m/pm_s2ram.S b/arch/arm/core/cortex_m/pm_s2ram.S
index aed8cf5b692..d15bfea0432 100644
--- a/arch/arm/core/cortex_m/pm_s2ram.S
+++ b/arch/arm/core/cortex_m/pm_s2ram.S
@@ -14,6 +14,145 @@
 #include 
 #include 
 
+/**
+ * Macro expanding to an integer literal equal to the offset of
+ * field `sr_name` in `struct __cpu_context`. This macro has to
+ * be implemented in C, because GEN_OFFSET_SYM provides offsets
+ * as C preprocessor definitions - there are not visible to the
+ * assembler.
+ *
+ * See also: `arch/arm/core/offsets/offsets_aarch32.c`
+ */
+#define CPU_CTX_SR_OFFSET(sr_name) \
+	___cpu_context_t_ ## sr_name ## _OFFSET
+
+/**
+ * Macros used to save / load a special register in __cpu_context.
+ * These also have to be implemented in C due to CPU_CTX_SR_OFFSET.
+ */
+#define SAVE_SPECIAL_REG(sr_name, cpu_ctx_reg, tmp_reg)	\
+	mrs	tmp_reg, sr_name;			\
+	str	tmp_reg, [cpu_ctx_reg, # CPU_CTX_SR_OFFSET(sr_name)];
+
+#define RESTORE_SPECIAL_REG(sr_name, cpu_ctx_reg, tmp_reg)		\
+	ldr	tmp_reg, [cpu_ctx_reg, # CPU_CTX_SR_OFFSET(sr_name)];	\
+	msr	sr_name, tmp_reg;
+
+/*
+ * The following macros could be written as assembler macros, but C is used
+ * for portability (assembler macro syntax may differ between toolchains).
+ */
+
+/*
+ * Pushes registers r4~r12 and lr on the stack.
+ * r0 is unmodified but other GPRs may be overwritten.
+ */
+#if !defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
+/* `push` on ARMv6-M / ARMv8-M Baseline:
+ * only r0~r7 and lr may be pushed
+ */
+#define PUSH_GPRS							\
+	push	{r4-r7};						\
+	mov	r1, r8;							\
+	mov	r2, r9;							\
+	mov	r3, r10;						\
+	mov	r4, r11;						\
+	mov	r5, r12;						\
+	push	{r1-r5, lr}
+#else
+/* `push` on ARMv7-M and ARMv8-M Mainline: no limitation */
+#define PUSH_GPRS							\
+	push	{r4-r12, lr}
+#endif /* !CONFIG_ARMV7_M_ARMV8_M_MAINLINE */
+
+/*
+ * Pops registers r4~r12 and lr from the stack
+ * r0 is unmodified but other GPRs may be overwritten.
+ */
+#if !defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
+/* `pop` on ARMv6-M / ARMv8-M Baseline:
+ * can only pop to r0~r7 and pc (not lr!)
+ */
+#define POP_GPRS							\
+	pop	{r1-r6};						\
+	mov 	lr, r6;							\
+	mov 	r12, r5;						\
+	mov 	r11, r4;						\
+	mov 	r10, r3;						\
+	mov 	r9, r2;							\
+	mov 	r8, r1;							\
+	pop	{r4-r7}
+#else
+/* `pop` on ARMv7-M and ARMv8-M Mainline: no limitation */
+#define POP_GPRS							\
+	pop	{r4-r12, lr}
+#endif /* !CONFIG_ARMV7_M_ARMV8_M_MAINLINE */
+
+
+#if defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
+/* Registers present only on ARMv7-M and ARMv8-M Mainline */
+#define SAVE_FM_BP_REGS(cpu_ctx, tmp_reg)				\
+	SAVE_SPECIAL_REG(faultmask,	cpu_ctx, tmp_reg)		\
+	SAVE_SPECIAL_REG(basepri,	cpu_ctx, tmp_reg)
+
+#define RESTORE_FM_BP_REGS(cpu_ctx, tmp_reg)				\
+	RESTORE_SPECIAL_REG(faultmask,	cpu_ctx, tmp_reg)		\
+	RESTORE_SPECIAL_REG(basepri,	cpu_ctx, tmp_reg)
+#else
+/* Registers not present: do nothing */
+#define SAVE_FM_BP_REGS(cpu_ctx, tmp_reg)
+#define RESTORE_FM_BP_REGS(cpu_ctx, tmp_reg)
+#endif /* CONFIG_ARMV7_M_ARMV8_M_MAINLINE */
+
+#if defined(CONFIG_CPU_CORTEX_M_HAS_SPLIM)
+/* Registers present only on certain ARMv8-M implementations */
+#define SAVE_SPLIM_REGS(cpu_ctx, tmp_reg)				\
+	SAVE_SPECIAL_REG(msplim,	cpu_ctx, tmp_reg)		\
+	SAVE_SPECIAL_REG(psplim,	cpu_ctx, tmp_reg)
+
+#define RESTORE_SPLIM_REGS(cpu_ctx, tmp_reg)				\
+	RESTORE_SPECIAL_REG(msplim,	cpu_ctx, tmp_reg)		\
+	RESTORE_SPECIAL_REG(psplim,	cpu_ctx, tmp_reg)
+#else
+/* Registers not present: do nothing */
+#define SAVE_SPLIM_REGS(cpu_ctx, tmp_reg)
+#define RESTORE_SPLIM_REGS(cpu_ctx, tmp_reg)
+#endif /* CONFIG_CPU_CORTEX_M_HAS_SPLIM */
+
+/*
+ * Saves the CPU's special registers in the `struct __cpu_context`
+ * pointed to by the `cpu_ctx` register.
+ * The `tmp_reg` register is overwritten as part of this process.
+ */
+#define SAVE_SPECIAL_REGISTERS(cpu_ctx, tmp_reg)			\
+	SAVE_SPECIAL_REG(msp,		cpu_ctx, tmp_reg)		\
+	SAVE_SPECIAL_REG(psp,		cpu_ctx, tmp_reg)		\
+	SAVE_SPECIAL_REG(primask,	cpu_ctx, tmp_reg)		\
+	SAVE_SPLIM_REGS(		cpu_ctx, tmp_reg)		\
+	SAVE_FM_BP_REGS(		cpu_ctx, tmp_reg)		\
+	SAVE_SPECIAL_REG(control,	cpu_ctx, tmp_reg)
+
+/*
+ * Restores the CPU's special registers from the `struct __cpu_context`
+ * pointed to by the `cpu_ctx` register.
+ * The `tmp_reg` register is overwritten as part of this process.
+ *
+ * N.B.: ISB at the end is required because "Software must use an ISB
+ * barrier instruction to ensure a write to the CONTROL register takes
+ * effect before the next instruction is executed."
+ *
+ * If this macro is modified, make sure CONTROL is always the last
+ * restored register, and that an ISB follows the MSR instruction.
+ */
+#define RESTORE_SPECIAL_REGISTERS(cpu_ctx, tmp_reg)			\
+	RESTORE_SPECIAL_REG(msp,	cpu_ctx, tmp_reg)		\
+	RESTORE_SPECIAL_REG(psp,	cpu_ctx, tmp_reg)		\
+	RESTORE_SPECIAL_REG(primask,	cpu_ctx, tmp_reg)		\
+	RESTORE_SPLIM_REGS(		cpu_ctx, tmp_reg)		\
+	RESTORE_FM_BP_REGS(		cpu_ctx, tmp_reg)		\
+	RESTORE_SPECIAL_REG(control,	cpu_ctx, tmp_reg)		\
+	isb
+
 _ASM_FILE_PROLOGUE
 
 GTEXT(pm_s2ram_mark_set)
@@ -26,7 +165,7 @@ SECTION_FUNC(TEXT, arch_pm_s2ram_suspend)
 	 *
 	 * r0: address of the system_off function
 	 */
-	push	{r4-r12, lr}
+	PUSH_GPRS
 
 	/* Move system_off to protected register. */
 	mov 	r4, r0
@@ -34,38 +173,7 @@ SECTION_FUNC(TEXT, arch_pm_s2ram_suspend)
 	/* Store CPU context */
 	ldr	r1, =_cpu_context
 
-	mrs	r2, msp
-	str	r2, [r1, #___cpu_context_t_msp_OFFSET]
-
-	mrs	r2, msplim
-	str	r2, [r1, #___cpu_context_t_msplim_OFFSET]
-
-	mrs	r2, psp
-	str	r2, [r1, #___cpu_context_t_psp_OFFSET]
-
-	mrs	r2, psplim
-	str	r2, [r1, #___cpu_context_t_psplim_OFFSET]
-
-	mrs	r2, apsr
-	str	r2, [r1, #___cpu_context_t_apsr_OFFSET]
-
-	mrs	r2, ipsr
-	str	r2, [r1, #___cpu_context_t_ipsr_OFFSET]
-
-	mrs	r2, epsr
-	str	r2, [r1, #___cpu_context_t_epsr_OFFSET]
-
-	mrs	r2, primask
-	str	r2, [r1, #___cpu_context_t_primask_OFFSET]
-
-	mrs	r2, faultmask
-	str	r2, [r1, #___cpu_context_t_faultmask_OFFSET]
-
-	mrs	r2, basepri
-	str	r2, [r1, #___cpu_context_t_basepri_OFFSET]
-
-	mrs	r2, control
-	str	r2, [r1, #___cpu_context_t_control_OFFSET]
+	SAVE_SPECIAL_REGISTERS(/* ctx: */ r1, /* tmp: */ r2)
 
 	/*
 	 * Mark entering suspend to RAM.
@@ -100,7 +208,7 @@ SECTION_FUNC(TEXT, arch_pm_s2ram_suspend)
 	 */
 	mov	r0, r4
 
-	pop	{r4-r12, lr}
+	POP_GPRS
 	bx	lr
 
 
@@ -122,44 +230,12 @@ resume:
 	 */
 	ldr	r0, =_cpu_context
 
-	ldr	r1, [r0, #___cpu_context_t_msp_OFFSET]
-	msr	msp, r1
-
-	ldr	r1, [r0, #___cpu_context_t_msplim_OFFSET]
-	msr	msplim, r1
-
-	ldr	r1, [r0, #___cpu_context_t_psp_OFFSET]
-	msr	psp, r1
-
-	ldr	r1, [r0, #___cpu_context_t_psplim_OFFSET]
-	msr	psplim, r1
-
-	ldr	r1, [r0, #___cpu_context_t_apsr_OFFSET]
-	msr	apsr_nzcvq, r1
-
-	ldr	r1, [r0, #___cpu_context_t_ipsr_OFFSET]
-	msr	ipsr, r1
-
-	ldr	r1, [r0, #___cpu_context_t_epsr_OFFSET]
-	msr	epsr, r1
+	RESTORE_SPECIAL_REGISTERS(/* ctx: */ r0, /* tmp: */ r1)
 
-	ldr	r1, [r0, #___cpu_context_t_primask_OFFSET]
-	msr	primask, r1
-
-	ldr	r1, [r0, #___cpu_context_t_faultmask_OFFSET]
-	msr	faultmask, r1
-
-	ldr	r1, [r0, #___cpu_context_t_basepri_OFFSET]
-	msr	basepri, r1
-
-	ldr	r1, [r0, #___cpu_context_t_control_OFFSET]
-	msr	control, r1
-	isb
-
-	pop	{r4-r12, lr}
+	POP_GPRS
 
 	/*
 	 * Set the return value and return
 	 */
-	mov	r0, #0
+	movs	r0, #0
 	bx	lr
diff --git a/arch/arm/core/cortex_m/prep_c.c b/arch/arm/core/cortex_m/prep_c.c
index 10f78c44a25..ae59960584c 100644
--- a/arch/arm/core/cortex_m/prep_c.c
+++ b/arch/arm/core/cortex_m/prep_c.c
@@ -45,9 +45,16 @@ void *_vector_table_pointer;
 
 #define VECTOR_ADDRESS ((uintptr_t)_vector_start)
 
+/* In some Cortex-M3 implementations SCB_VTOR bit[29] is called the TBLBASE bit */
+#ifdef SCB_VTOR_TBLBASE_Msk
+#define VTOR_MASK (SCB_VTOR_TBLBASE_Msk | SCB_VTOR_TBLOFF_Msk)
+#else
+#define VTOR_MASK SCB_VTOR_TBLOFF_Msk
+#endif
+
 static inline void relocate_vector_table(void)
 {
-	SCB->VTOR = VECTOR_ADDRESS & SCB_VTOR_TBLOFF_Msk;
+	SCB->VTOR = VECTOR_ADDRESS & VTOR_MASK;
 	barrier_dsync_fence_full();
 	barrier_isync_fence_full();
 }
diff --git a/arch/arm/core/cortex_m/scb.c b/arch/arm/core/cortex_m/scb.c
index e3c35073ea3..a511a8de9b1 100644
--- a/arch/arm/core/cortex_m/scb.c
+++ b/arch/arm/core/cortex_m/scb.c
@@ -23,7 +23,7 @@
 #include 
 #include 
 
-#if defined(CONFIG_CPU_HAS_NXP_MPU)
+#if defined(CONFIG_CPU_HAS_NXP_SYSMPU)
 #include 
 #endif
 
@@ -62,7 +62,7 @@ void z_arm_clear_arm_mpu_config(void)
 		ARM_MPU_ClrRegion(i);
 	}
 }
-#elif CONFIG_CPU_HAS_NXP_MPU
+#elif CONFIG_CPU_HAS_NXP_SYSMPU
 void z_arm_clear_arm_mpu_config(void)
 {
 	int i;
@@ -76,7 +76,7 @@ void z_arm_clear_arm_mpu_config(void)
 		SYSMPU_RegionEnable(SYSMPU, i, false);
 	}
 }
-#endif /* CONFIG_CPU_HAS_NXP_MPU */
+#endif /* CONFIG_CPU_HAS_NXP_SYSMPU */
 #endif /* CONFIG_ARM_MPU */
 
 #if defined(CONFIG_INIT_ARCH_HW_AT_BOOT)
diff --git a/arch/arm/core/cortex_m/swap.c b/arch/arm/core/cortex_m/swap.c
deleted file mode 100644
index 027fb47a01f..00000000000
--- a/arch/arm/core/cortex_m/swap.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (c) 2018 Linaro, Limited
- * Copyright (c) 2023 Arm Limited
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-
-#include 
-#include 
-
-#include 
-
-/* The 'key' actually represents the BASEPRI register
- * prior to disabling interrupts via the BASEPRI mechanism.
- *
- * arch_swap() itself does not do much.
- *
- * It simply stores the intlock key (the BASEPRI value) parameter into
- * current->basepri, and then triggers a PendSV exception, which does
- * the heavy lifting of context switching.
-
- * This is the only place we have to save BASEPRI since the other paths to
- * z_arm_pendsv all come from handling an interrupt, which means we know the
- * interrupts were not locked: in that case the BASEPRI value is 0.
- *
- * Given that arch_swap() is called to effect a cooperative context switch,
- * only the caller-saved integer registers need to be saved in the thread of the
- * outgoing thread. This is all performed by the hardware, which stores it in
- * its exception stack frame, created when handling the z_arm_pendsv exception.
- *
- * On ARMv6-M, the intlock key is represented by the PRIMASK register,
- * as BASEPRI is not available.
- */
-int arch_swap(unsigned int key)
-{
-	/* store off key and return value */
-	_current->arch.basepri = key;
-	_current->arch.swap_return_value = -EAGAIN;
-
-	/* set pending bit to make sure we will take a PendSV exception */
-	SCB->ICSR |= SCB_ICSR_PENDSVSET_Msk;
-
-	/* clear mask or enable all irqs to take a pendsv */
-	irq_unlock(0);
-
-	/* Context switch is performed here. Returning implies the
-	 * thread has been context-switched-in again.
-	 */
-	return _current->arch.swap_return_value;
-}
-
-uintptr_t z_arm_pendsv_c(uintptr_t exc_ret)
-{
-	/* Store LSB of LR (EXC_RETURN) to the thread's 'mode' word. */
-	IF_ENABLED(CONFIG_ARM_STORE_EXC_RETURN,
-		   (_kernel.cpus[0].current->arch.mode_exc_return = (uint8_t)exc_ret;));
-
-	/* Protect the kernel state while we play with the thread lists */
-	uint32_t basepri = arch_irq_lock();
-
-	/* fetch the thread to run from the ready queue cache */
-	struct k_thread *current = _kernel.cpus[0].current = _kernel.ready_q.cache;
-
-	/*
-	 * Clear PendSV so that if another interrupt comes in and
-	 * decides, with the new kernel state based on the new thread
-	 * being context-switched in, that it needs to reschedule, it
-	 * will take, but that previously pended PendSVs do not take,
-	 * since they were based on the previous kernel state and this
-	 * has been handled.
-	 */
-	SCB->ICSR = SCB_ICSR_PENDSVCLR_Msk;
-
-	/* For Cortex-M, store TLS pointer in a global variable,
-	 * as it lacks the process ID or thread ID register
-	 * to be used by toolchain to access thread data.
-	 */
-	IF_ENABLED(CONFIG_THREAD_LOCAL_STORAGE,
-		   (extern uintptr_t z_arm_tls_ptr; z_arm_tls_ptr = current->tls));
-
-	IF_ENABLED(CONFIG_ARM_STORE_EXC_RETURN,
-		   (exc_ret = (exc_ret & 0xFFFFFF00) | current->arch.mode_exc_return));
-
-	/* Restore previous interrupt disable state (irq_lock key)
-	 * (We clear the arch.basepri field after restoring state)
-	 */
-	basepri = current->arch.basepri;
-	current->arch.basepri = 0;
-
-	arch_irq_unlock(basepri);
-
-#if defined(CONFIG_MPU_STACK_GUARD) || defined(CONFIG_USERSPACE)
-	/* Re-program dynamic memory map */
-	z_arm_configure_dynamic_mpu_regions(current);
-#endif
-
-	/* restore mode */
-	IF_ENABLED(CONFIG_USERSPACE, ({
-			CONTROL_Type ctrl = {.w = __get_CONTROL()};
-			/* exit privileged state when returning to thread mode. */
-			ctrl.b.nPRIV = 0;
-			/* __set_CONTROL inserts an ISB which is may not be necessary here
-			 * (stack pointer may not be touched), but it's recommended to avoid
-			 * executing pre-fetched instructions with the previous privilege.
-			 */
-			__set_CONTROL(ctrl.w | current->arch.mode);
-		}));
-
-	return exc_ret;
-}
diff --git a/arch/arm/core/cortex_m/swap_helper.S b/arch/arm/core/cortex_m/swap_helper.S
index c2cb3ef7f2f..c6207084b5e 100644
--- a/arch/arm/core/cortex_m/swap_helper.S
+++ b/arch/arm/core/cortex_m/swap_helper.S
@@ -27,7 +27,6 @@ _ASM_FILE_PROLOGUE
 GTEXT(z_arm_svc)
 GTEXT(z_arm_pendsv)
 GTEXT(z_do_kernel_oops)
-GTEXT(z_arm_pendsv_c)
 #if defined(CONFIG_USERSPACE)
 GTEXT(z_arm_do_syscall)
 #endif
@@ -118,20 +117,125 @@ out_fp_endif:
 #error Unknown ARM architecture
 #endif /* CONFIG_ARMV6_M_ARMV8_M_BASELINE */
 
-    mov r4, lr
-    mov r0, lr
-    bl z_arm_pendsv_c
-    mov lr, r4
+    /* Protect the kernel state while we play with the thread lists */
+#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
+    cpsid i
+#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
+    movs.n r0, #_EXC_IRQ_DEFAULT_PRIO
+    msr BASEPRI_MAX, r0
+    isb /* Make the effect of disabling interrupts be realized immediately */
+#else
+#error Unknown ARM architecture
+#endif /* CONFIG_ARMV6_M_ARMV8_M_BASELINE */
 
-    ldr r1, =_kernel
-    ldr r2, [r1, #_kernel_offset_to_current]
+    /*
+     * Prepare to clear PendSV with interrupts unlocked, but
+     * don't clear it yet. PendSV must not be cleared until
+     * the new thread is context-switched in since all decisions
+     * to pend PendSV have been taken with the current kernel
+     * state and this is what we're handling currently.
+     */
+    ldr r7, =_SCS_ICSR
+    ldr r6, =_SCS_ICSR_UNPENDSV
+
+    /* _kernel is still in r1 */
+
+    /* fetch the thread to run from the ready queue cache */
+    ldr r2, [r1, #_kernel_offset_to_ready_q_cache]
+
+    str r2, [r1, #_kernel_offset_to_current]
+
+    /*
+     * Clear PendSV so that if another interrupt comes in and
+     * decides, with the new kernel state based on the new thread
+     * being context-switched in, that it needs to reschedule, it
+     * will take, but that previously pended PendSVs do not take,
+     * since they were based on the previous kernel state and this
+     * has been handled.
+     */
+
+    /* _SCS_ICSR is still in r7 and _SCS_ICSR_UNPENDSV in r6 */
+    str r6, [r7, #0]
+
+#if defined(CONFIG_THREAD_LOCAL_STORAGE)
+    /* Grab the TLS pointer */
+    ldr r4, =_thread_offset_to_tls
+    adds r4, r2, r4
+    ldr r0, [r4]
+
+    /* For Cortex-M, store TLS pointer in a global variable,
+     * as it lacks the process ID or thread ID register
+     * to be used by toolchain to access thread data.
+     */
+    ldr r4, =z_arm_tls_ptr
+    str r0, [r4]
+#endif
 
 #if defined(CONFIG_ARM_STORE_EXC_RETURN)
     /* Restore EXC_RETURN value. */
-    mov lr, r0
+    ldrsb lr, [r2, #_thread_offset_to_mode_exc_return]
+#endif
+
+    /* Restore previous interrupt disable state (irq_lock key)
+     * (We clear the arch.basepri field after restoring state)
+     */
+#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE) && (_thread_offset_to_basepri > 124)
+    /* Doing it this way since the offset to thread->arch.basepri can in
+     * some configurations be larger than the maximum of 124 for ldr/str
+     * immediate offsets.
+     */
+    ldr r4, =_thread_offset_to_basepri
+    adds r4, r2, r4
+
+    ldr r0, [r4]
+    movs.n r3, #0
+    str r3, [r4]
+#else
+    ldr r0, [r2, #_thread_offset_to_basepri]
+    movs r3, #0
+    str r3, [r2, #_thread_offset_to_basepri]
 #endif
 
 #if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
+    /* BASEPRI not available, previous interrupt disable state
+     * maps to PRIMASK.
+     *
+     * Only enable interrupts if value is 0, meaning interrupts
+     * were enabled before irq_lock was called.
+     */
+    cmp r0, #0
+    bne _thread_irq_disabled
+    cpsie i
+_thread_irq_disabled:
+
+#if defined(CONFIG_MPU_STACK_GUARD) || defined(CONFIG_USERSPACE)
+    /* Re-program dynamic memory map */
+    push {r2,lr}
+    mov r0, r2
+    bl z_arm_configure_dynamic_mpu_regions
+    pop {r2,r3}
+    mov lr, r3
+#endif
+
+#ifdef CONFIG_USERSPACE
+    /* restore mode */
+    ldr r3, =_thread_offset_to_mode
+    adds r3, r2, r3
+    ldr r0, [r3]
+    mrs r3, CONTROL
+    movs.n r1, #1
+    bics r3, r1
+    orrs r3, r0
+    msr CONTROL, r3
+
+    /* ISB is not strictly necessary here (stack pointer is not being
+     * touched), but it's recommended to avoid executing pre-fetched
+     * instructions with the previous privilege.
+     */
+    isb
+
+#endif
+
     ldr r4, =_thread_offset_to_callee_saved
     adds r0, r2, r4
 
@@ -149,6 +253,9 @@ out_fp_endif:
     subs r0, #36
     ldmia r0!, {r4-r7}
 #elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
+    /* restore BASEPRI for the incoming thread */
+    msr BASEPRI, r0
+
 #ifdef CONFIG_FPU_SHARING
     /* Assess whether switched-in thread had been using the FP registers. */
     tst lr, #_EXC_RETURN_FTYPE_Msk
@@ -178,6 +285,30 @@ in_fp_endif:
     isb
 #endif
 
+#if defined(CONFIG_MPU_STACK_GUARD) || defined(CONFIG_USERSPACE)
+    /* Re-program dynamic memory map */
+    push {r2,lr}
+    mov r0, r2 /* _current thread */
+    bl z_arm_configure_dynamic_mpu_regions
+    pop {r2,lr}
+#endif
+
+#ifdef CONFIG_USERSPACE
+    /* restore mode */
+    ldr r0, [r2, #_thread_offset_to_mode]
+    mrs r3, CONTROL
+    bic r3, #1
+    orr r3, r0
+    msr CONTROL, r3
+
+    /* ISB is not strictly necessary here (stack pointer is not being
+     * touched), but it's recommended to avoid executing pre-fetched
+     * instructions with the previous privilege.
+     */
+    isb
+
+#endif
+
     /* load callee-saved + psp from thread */
     add r0, r2, #_thread_offset_to_callee_saved
     ldmia r0, {r4-r11, ip}
@@ -300,6 +431,7 @@ _stack_frame_endif:
     /* exception return is done in z_arm_int_exit() */
     ldr r0, =z_arm_int_exit
     bx r0
+
 #endif
 
 _oops:
@@ -315,6 +447,7 @@ _oops:
     mov  r1, sp /* pointer to _callee_saved_t */
 #endif /* CONFIG_ARMV7_M_ARMV8_M_MAINLINE */
 #endif /* CONFIG_EXTRA_EXCEPTION_INFO */
+    mov r2, lr /* EXC_RETURN */
     bl z_do_kernel_oops
     /* return from SVC exception is done here */
 #if defined(CONFIG_EXTRA_EXCEPTION_INFO)
diff --git a/arch/arm/core/cortex_m/thread.c b/arch/arm/core/cortex_m/thread.c
index fa500032d3c..c88fd8e41a0 100644
--- a/arch/arm/core/cortex_m/thread.c
+++ b/arch/arm/core/cortex_m/thread.c
@@ -522,7 +522,7 @@ void arch_switch_to_main_thread(struct k_thread *main_thread, char *stack_ptr,
 {
 	z_arm_prepare_switch_to_main();
 
-	_current = main_thread;
+	z_current_thread_set(main_thread);
 
 #if defined(CONFIG_THREAD_LOCAL_STORAGE)
 	/* On Cortex-M, TLS uses a global variable as pointer to
@@ -576,19 +576,19 @@ void arch_switch_to_main_thread(struct k_thread *main_thread, char *stack_ptr,
 	"mov   r4,  %0\n"	/* force _main to be stored in a register */
 	"msr   PSP, %1\n"	/* __set_PSP(stack_ptr) */
 
-	"mov   r0,  #0\n"	/* arch_irq_unlock(0) */
+	"movs  r0,  #0\n"	/* arch_irq_unlock(0) */
 	"ldr   r3, =arch_irq_unlock_outlined\n"
 	"blx   r3\n"
 
 	"mov   r0, r4\n"	/* z_thread_entry(_main, NULL, NULL, NULL) */
-	"mov   r1, #0\n"
-	"mov   r2, #0\n"
-	"mov   r3, #0\n"
+	"movs  r1, #0\n"
+	"movs  r2, #0\n"
+	"movs  r3, #0\n"
 	"ldr   r4, =z_thread_entry\n"
 	"bx    r4\n"		/* We don’t intend to return, so there is no need to link. */
-	: "+r" (_main)
-	: "r" (stack_ptr)
-	: "r0", "r1", "r2", "r3", "r4", "ip", "lr");
+	:
+	: "r" (_main), "r" (stack_ptr)
+	: "r0", "r1", "r2", "r3", "r4", "ip", "lr", "memory");
 
 	CODE_UNREACHABLE;
 }
diff --git a/arch/arm/core/cortex_m/timing.c b/arch/arm/core/cortex_m/timing.c
index 3b847af02ac..6cb157552ac 100644
--- a/arch/arm/core/cortex_m/timing.c
+++ b/arch/arm/core/cortex_m/timing.c
@@ -28,8 +28,7 @@
  */
 static inline uint64_t z_arm_dwt_freq_get(void)
 {
-#if defined(CONFIG_SOC_FAMILY_NORDIC_NRF) || \
-	defined(CONFIG_SOC_SERIES_IMXRT6XX)
+#if defined(CONFIG_CMSIS_CORE_HAS_SYSTEM_CORE_CLOCK)
 	/*
 	 * DWT frequency is taken directly from the
 	 * System Core clock (CPU) frequency, if the
@@ -104,7 +103,7 @@ timing_t arch_timing_counter_get(void)
 uint64_t arch_timing_cycles_get(volatile timing_t *const start,
 				volatile timing_t *const end)
 {
-	return (*end - *start);
+	return ((uint32_t)*end - (uint32_t)*start);
 }
 
 uint64_t arch_timing_freq_get(void)
diff --git a/arch/arm/core/fatal.c b/arch/arm/core/fatal.c
index 4532e238f05..d64855b6b8e 100644
--- a/arch/arm/core/fatal.c
+++ b/arch/arm/core/fatal.c
@@ -101,8 +101,9 @@ void z_arm_fatal_error(unsigned int reason, const struct arch_esf *esf)
  *
  * @param esf exception frame
  * @param callee_regs Callee-saved registers (R4-R11)
+ * @param exc_return EXC_RETURN value present in LR after exception entry.
  */
-void z_do_kernel_oops(const struct arch_esf *esf, _callee_saved_t *callee_regs)
+void z_do_kernel_oops(const struct arch_esf *esf, _callee_saved_t *callee_regs, uint32_t exc_return)
 {
 #if !(defined(CONFIG_EXTRA_EXCEPTION_INFO) && defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE))
 	ARG_UNUSED(callee_regs);
@@ -110,6 +111,8 @@ void z_do_kernel_oops(const struct arch_esf *esf, _callee_saved_t *callee_regs)
 	/* Stacked R0 holds the exception reason. */
 	unsigned int reason = esf->basic.r0;
 
+	z_arm_set_fault_sp(esf, exc_return);
+
 #if defined(CONFIG_USERSPACE)
 	if (z_arm_preempted_thread_in_user_mode(esf)) {
 		/*
diff --git a/arch/arm/core/mpu/CMakeLists.txt b/arch/arm/core/mpu/CMakeLists.txt
index 1df6561ee52..69f23e5be88 100644
--- a/arch/arm/core/mpu/CMakeLists.txt
+++ b/arch/arm/core/mpu/CMakeLists.txt
@@ -4,11 +4,11 @@ zephyr_library()
 
 zephyr_library_sources(                             arm_core_mpu.c)
 zephyr_library_sources_ifdef(CONFIG_CPU_HAS_ARM_MPU arm_mpu.c)
-zephyr_library_sources_ifdef(CONFIG_CPU_HAS_NXP_MPU nxp_mpu.c)
+zephyr_library_sources_ifdef(CONFIG_CPU_HAS_NXP_SYSMPU nxp_mpu.c)
 
 if(CONFIG_CPU_CORTEX_M AND NOT CONFIG_CPU_HAS_CUSTOM_FIXED_SOC_MPU_REGIONS)
   zephyr_library_sources_ifdef(CONFIG_CPU_HAS_ARM_MPU arm_mpu_regions.c)
-  zephyr_library_sources_ifdef(CONFIG_CPU_HAS_NXP_MPU nxp_mpu_regions.c)
+  zephyr_library_sources_ifdef(CONFIG_CPU_HAS_NXP_SYSMPU nxp_mpu_regions.c)
 endif()
 
 if (CONFIG_CPU_AARCH32_CORTEX_R)
diff --git a/arch/arm/core/mpu/Kconfig b/arch/arm/core/mpu/Kconfig
index c6d1bdc7da0..0c1fbbf4c0f 100644
--- a/arch/arm/core/mpu/Kconfig
+++ b/arch/arm/core/mpu/Kconfig
@@ -11,7 +11,7 @@ config ARM_MPU
 	select SRAM_REGION_PERMISSIONS
 	select THREAD_STACK_INFO
 	select ARCH_HAS_EXECUTABLE_PAGE_BIT
-	select MPU_REQUIRES_POWER_OF_TWO_ALIGNMENT if !(CPU_HAS_NXP_MPU || ARMV8_M_BASELINE || ARMV8_M_MAINLINE || AARCH32_ARMV8_R)
+	select MPU_REQUIRES_POWER_OF_TWO_ALIGNMENT if !(CPU_HAS_NXP_SYSMPU || ARMV8_M_BASELINE || ARMV8_M_MAINLINE || AARCH32_ARMV8_R)
 	select MPU_REQUIRES_NON_OVERLAPPING_REGIONS if CPU_HAS_ARM_MPU && (ARMV8_M_BASELINE || ARMV8_M_MAINLINE || AARCH32_ARMV8_R)
 	select MPU_GAP_FILLING if AARCH32_ARMV8_R
 	select ARCH_MEM_DOMAIN_SUPPORTS_ISOLATED_STACKS
diff --git a/arch/arm/core/mpu/arm_core_mpu_dev.h b/arch/arm/core/mpu/arm_core_mpu_dev.h
index 254d6d9dda3..4e8fa648ad3 100644
--- a/arch/arm/core/mpu/arm_core_mpu_dev.h
+++ b/arch/arm/core/mpu/arm_core_mpu_dev.h
@@ -76,7 +76,7 @@ struct k_thread;
  */
 #if (defined(CONFIG_MPU_REQUIRES_NON_OVERLAPPING_REGIONS) && \
 		defined(CONFIG_MPU_GAP_FILLING)) \
-	|| defined(CONFIG_CPU_HAS_NXP_MPU)
+	|| defined(CONFIG_CPU_HAS_NXP_SYSMPU)
 /*
  * When dynamic regions may not be defined on top of statically
  * allocated memory regions, defining a region for a supervisor
@@ -96,7 +96,7 @@ struct k_thread;
  * using a single MPU region.
  */
 #define ARM_CORE_MPU_NUM_MPU_REGIONS_FOR_MPU_STACK_GUARD 1
-#endif /* CONFIG_MPU_REQUIRES_NON_OVERLAPPING_REGIONS || CPU_HAS_NXP_MPU */
+#endif /* CONFIG_MPU_REQUIRES_NON_OVERLAPPING_REGIONS || CPU_HAS_NXP_SYSMPU */
 
 #endif /* CONFIG_USERSPACE */
 
diff --git a/arch/arm/core/mpu/arm_mpu.c b/arch/arm/core/mpu/arm_mpu.c
index 3f9cf095754..f121e57e392 100644
--- a/arch/arm/core/mpu/arm_mpu.c
+++ b/arch/arm/core/mpu/arm_mpu.c
@@ -37,6 +37,13 @@ BUILD_ASSERT((DT_FOREACH_STATUS_OKAY_NODE_VARGS(
 	      NODE_HAS_PROP_AND_OR, zephyr_memory_region_mpu) false) == false,
 	      "`zephyr,memory-region-mpu` was deprecated in favor of `zephyr,memory-attr`");
 
+#define NULL_PAGE_DETECT_NODE_FINDER(node_id, prop)                                                \
+	(DT_NODE_HAS_PROP(node_id, prop) && (DT_REG_ADDR(node_id) == 0) &&                         \
+	 (DT_REG_SIZE(node_id) >= CONFIG_CORTEX_M_NULL_POINTER_EXCEPTION_PAGE_SIZE)) ||
+
+#define DT_NULL_PAGE_DETECT_NODE_EXIST                                                             \
+	(DT_FOREACH_STATUS_OKAY_NODE_VARGS(NULL_PAGE_DETECT_NODE_FINDER, zephyr_memory_attr) false)
+
 /*
  * Global status variable holding the number of HW MPU region indices, which
  * have been reserved by the MPU driver to program the static (fixed) memory
@@ -470,7 +477,9 @@ int z_arm_mpu_init(void)
 	 */
 #if defined(CONFIG_NULL_POINTER_EXCEPTION_DETECTION_MPU)
 #if (defined(CONFIG_ARMV8_M_BASELINE) || defined(CONFIG_ARMV8_M_MAINLINE)) && \
-	(CONFIG_FLASH_BASE_ADDRESS > CONFIG_CORTEX_M_NULL_POINTER_EXCEPTION_PAGE_SIZE)
+	(CONFIG_FLASH_BASE_ADDRESS > CONFIG_CORTEX_M_NULL_POINTER_EXCEPTION_PAGE_SIZE) && \
+	(!DT_NULL_PAGE_DETECT_NODE_EXIST)
+
 #pragma message "Null-Pointer exception detection cannot be configured on un-mapped flash areas"
 #else
 	const struct z_arm_mpu_partition unmap_region =	{
diff --git a/arch/arm/core/mpu/arm_mpu_regions.c b/arch/arm/core/mpu/arm_mpu_regions.c
index cfe1230c907..383fd573513 100644
--- a/arch/arm/core/mpu/arm_mpu_regions.c
+++ b/arch/arm/core/mpu/arm_mpu_regions.c
@@ -13,6 +13,7 @@
 #endif
 
 static const struct arm_mpu_region mpu_regions[] = {
+#ifdef CONFIG_XIP
 	/* Region 0 */
 	MPU_REGION_ENTRY("FLASH_0",
 			 CONFIG_FLASH_BASE_ADDRESS,
@@ -22,6 +23,8 @@ static const struct arm_mpu_region mpu_regions[] = {
 #else
 			 REGION_FLASH_ATTR(REGION_FLASH_SIZE)),
 #endif
+#endif
+
 	/* Region 1 */
 	MPU_REGION_ENTRY("SRAM_0",
 #if USE_PARTITION_MANAGER
diff --git a/arch/arm/core/offsets/offsets_aarch32.c b/arch/arm/core/offsets/offsets_aarch32.c
index 4399377134d..693546630b0 100644
--- a/arch/arm/core/offsets/offsets_aarch32.c
+++ b/arch/arm/core/offsets/offsets_aarch32.c
@@ -83,17 +83,21 @@ GEN_OFFSET_SYM(_thread_stack_info_t, start);
  */
 #if defined(CONFIG_PM_S2RAM)
 GEN_OFFSET_SYM(_cpu_context_t, msp);
-GEN_OFFSET_SYM(_cpu_context_t, msplim);
 GEN_OFFSET_SYM(_cpu_context_t, psp);
-GEN_OFFSET_SYM(_cpu_context_t, psplim);
-GEN_OFFSET_SYM(_cpu_context_t, apsr);
-GEN_OFFSET_SYM(_cpu_context_t, ipsr);
-GEN_OFFSET_SYM(_cpu_context_t, epsr);
-
 GEN_OFFSET_SYM(_cpu_context_t, primask);
+GEN_OFFSET_SYM(_cpu_context_t, control);
+
+#if defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
+/* Registers present only on ARMv7-M and ARMv8-M Mainline */
 GEN_OFFSET_SYM(_cpu_context_t, faultmask);
 GEN_OFFSET_SYM(_cpu_context_t, basepri);
-GEN_OFFSET_SYM(_cpu_context_t, control);
+#endif /* CONFIG_ARMV7_M_ARMV8_M_MAINLINE */
+
+#if defined(CONFIG_CPU_CORTEX_M_HAS_SPLIM)
+/* Registers present only on certain ARMv8-M implementations */
+GEN_OFFSET_SYM(_cpu_context_t, msplim);
+GEN_OFFSET_SYM(_cpu_context_t, psplim);
+#endif /* CONFIG_CPU_CORTEX_M_HAS_SPLIM */
 #endif /* CONFIG_PM_S2RAM */
 
 #endif /* _ARM_OFFSETS_INC_ */
diff --git a/arch/arm/include/cortex_a_r/exception.h b/arch/arm/include/cortex_a_r/exception.h
index 6daa9c106ee..4326444f112 100644
--- a/arch/arm/include/cortex_a_r/exception.h
+++ b/arch/arm/include/cortex_a_r/exception.h
@@ -43,6 +43,15 @@ static ALWAYS_INLINE bool arch_is_in_nested_exception(const struct arch_esf *esf
 	return (arch_curr_cpu()->arch.exc_depth > 1U) ? (true) : (false);
 }
 
+/**
+ * @brief No current implementation where core dump is not supported
+ *
+ * @param esf exception frame
+ * @param exc_return EXC_RETURN value present in LR after exception entry.
+ */
+static ALWAYS_INLINE void z_arm_set_fault_sp(const struct arch_esf *esf, uint32_t exc_return)
+{}
+
 #if defined(CONFIG_USERSPACE)
 /*
  * This function is used by privileged code to determine if the thread
diff --git a/arch/arm/include/cortex_a_r/kernel_arch_func.h b/arch/arm/include/cortex_a_r/kernel_arch_func.h
index 3486d7d4d4e..7a100db07dd 100644
--- a/arch/arm/include/cortex_a_r/kernel_arch_func.h
+++ b/arch/arm/include/cortex_a_r/kernel_arch_func.h
@@ -20,6 +20,8 @@
 #ifndef ZEPHYR_ARCH_ARM_INCLUDE_CORTEX_A_R_KERNEL_ARCH_FUNC_H_
 #define ZEPHYR_ARCH_ARM_INCLUDE_CORTEX_A_R_KERNEL_ARCH_FUNC_H_
 
+#include 
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -28,10 +30,28 @@ extern "C" {
 
 static ALWAYS_INLINE void arch_kernel_init(void)
 {
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+	soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
 }
 
 #ifndef CONFIG_USE_SWITCH
 
+static ALWAYS_INLINE int arch_swap(unsigned int key)
+{
+	/* store off key and return value */
+	_current->arch.basepri = key;
+	_current->arch.swap_return_value = -EAGAIN;
+
+	z_arm_cortex_r_svc();
+	irq_unlock(key);
+
+	/* Context switch is performed here. Returning implies the
+	 * thread has been context-switched-in again.
+	 */
+	return _current->arch.swap_return_value;
+}
+
 static ALWAYS_INLINE void
 arch_thread_return_value_set(struct k_thread *thread, unsigned int value)
 {
diff --git a/arch/arm/include/cortex_m/exception.h b/arch/arm/include/cortex_m/exception.h
index 89bdd4b83e9..c021d59d764 100644
--- a/arch/arm/include/cortex_m/exception.h
+++ b/arch/arm/include/cortex_m/exception.h
@@ -39,6 +39,54 @@ extern volatile irq_offload_routine_t offload_routine;
  */
 #define AIRCR_VECT_KEY_PERMIT_WRITE 0x05FAUL
 
+/* Exception Return (EXC_RETURN) is provided in LR upon exception entry.
+ * It is used to perform an exception return and to detect possible state
+ * transition upon exception.
+ */
+
+/* Prefix. Indicates that this is an EXC_RETURN value.
+ * This field reads as 0b11111111.
+ */
+#define EXC_RETURN_INDICATOR_PREFIX     (0xFF << 24)
+/* bit[0]: Exception Secure. The security domain the exception was taken to. */
+#define EXC_RETURN_EXCEPTION_SECURE_Pos 0
+#define EXC_RETURN_EXCEPTION_SECURE_Msk \
+		BIT(EXC_RETURN_EXCEPTION_SECURE_Pos)
+#define EXC_RETURN_EXCEPTION_SECURE_Non_Secure 0
+#define EXC_RETURN_EXCEPTION_SECURE_Secure EXC_RETURN_EXCEPTION_SECURE_Msk
+/* bit[2]: Stack Pointer selection. */
+#define EXC_RETURN_SPSEL_Pos 2
+#define EXC_RETURN_SPSEL_Msk BIT(EXC_RETURN_SPSEL_Pos)
+#define EXC_RETURN_SPSEL_MAIN 0
+#define EXC_RETURN_SPSEL_PROCESS EXC_RETURN_SPSEL_Msk
+/* bit[3]: Mode. Indicates the Mode that was stacked from. */
+#define EXC_RETURN_MODE_Pos 3
+#define EXC_RETURN_MODE_Msk BIT(EXC_RETURN_MODE_Pos)
+#define EXC_RETURN_MODE_HANDLER 0
+#define EXC_RETURN_MODE_THREAD EXC_RETURN_MODE_Msk
+/* bit[4]: Stack frame type. Indicates whether the stack frame is a standard
+ * integer only stack frame or an extended floating-point stack frame.
+ */
+#define EXC_RETURN_STACK_FRAME_TYPE_Pos 4
+#define EXC_RETURN_STACK_FRAME_TYPE_Msk BIT(EXC_RETURN_STACK_FRAME_TYPE_Pos)
+#define EXC_RETURN_STACK_FRAME_TYPE_EXTENDED 0
+#define EXC_RETURN_STACK_FRAME_TYPE_STANDARD EXC_RETURN_STACK_FRAME_TYPE_Msk
+/* bit[5]: Default callee register stacking. Indicates whether the default
+ * stacking rules apply, or whether the callee registers are already on the
+ * stack.
+ */
+#define EXC_RETURN_CALLEE_STACK_Pos 5
+#define EXC_RETURN_CALLEE_STACK_Msk BIT(EXC_RETURN_CALLEE_STACK_Pos)
+#define EXC_RETURN_CALLEE_STACK_SKIPPED 0
+#define EXC_RETURN_CALLEE_STACK_DEFAULT EXC_RETURN_CALLEE_STACK_Msk
+/* bit[6]: Secure or Non-secure stack. Indicates whether a Secure or
+ * Non-secure stack is used to restore stack frame on exception return.
+ */
+#define EXC_RETURN_RETURN_STACK_Pos 6
+#define EXC_RETURN_RETURN_STACK_Msk BIT(EXC_RETURN_RETURN_STACK_Pos)
+#define EXC_RETURN_RETURN_STACK_Non_Secure 0
+#define EXC_RETURN_RETURN_STACK_Secure EXC_RETURN_RETURN_STACK_Msk
+
 /*
  * The current executing vector is found in the IPSR register. All
  * IRQs and system exceptions are considered as interrupt context.
@@ -184,6 +232,43 @@ static ALWAYS_INLINE void z_arm_clear_faults(void)
 #endif /* CONFIG_ARMV6_M_ARMV8_M_BASELINE */
 }
 
+/**
+ * @brief Set z_arm_coredump_fault_sp to stack pointer value expected by GDB
+ *
+ * @param esf exception frame
+ * @param exc_return EXC_RETURN value present in LR after exception entry.
+ */
+static ALWAYS_INLINE void z_arm_set_fault_sp(const struct arch_esf *esf, uint32_t exc_return)
+{
+#ifdef CONFIG_DEBUG_COREDUMP
+	z_arm_coredump_fault_sp = POINTER_TO_UINT(esf);
+#if defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE) || defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
+	/* Gdb expects a stack pointer that does not include the exception stack frame in order to
+	 * unwind. So adjust the stack pointer accordingly.
+	 */
+	z_arm_coredump_fault_sp += sizeof(esf->basic);
+
+#if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING)
+	/* Assess whether thread had been using the FP registers and add size of additional
+	 * registers if necessary
+	 */
+	if ((exc_return & EXC_RETURN_STACK_FRAME_TYPE_STANDARD) ==
+			EXC_RETURN_STACK_FRAME_TYPE_EXTENDED) {
+		z_arm_coredump_fault_sp += sizeof(esf->fpu);
+	}
+#endif /* CONFIG_FPU && CONFIG_FPU_SHARING */
+
+#if !(defined(CONFIG_ARMV8_M_MAINLINE) || defined(CONFIG_ARMV8_M_BASELINE))
+	if ((esf->basic.xpsr & SCB_CCR_STKALIGN_Msk) == SCB_CCR_STKALIGN_Msk) {
+		/* Adjust stack alignment after PSR bit[9] detected */
+		z_arm_coredump_fault_sp |= 0x4;
+	}
+#endif /* !CONFIG_ARMV8_M_MAINLINE */
+
+#endif /* CONFIG_ARMV7_M_ARMV8_M_MAINLINE || CONFIG_ARMV6_M_ARMV8_M_BASELINE */
+#endif /* CONFIG_DEBUG_COREDUMP */
+}
+
 /**
  * @brief Assess whether a debug monitor event should be treated as an error
  *
diff --git a/arch/arm/include/cortex_m/kernel_arch_func.h b/arch/arm/include/cortex_m/kernel_arch_func.h
index 132c056c910..2a24103a32d 100644
--- a/arch/arm/include/cortex_m/kernel_arch_func.h
+++ b/arch/arm/include/cortex_m/kernel_arch_func.h
@@ -20,6 +20,8 @@
 #ifndef ZEPHYR_ARCH_ARM_INCLUDE_CORTEX_M_KERNEL_ARCH_FUNC_H_
 #define ZEPHYR_ARCH_ARM_INCLUDE_CORTEX_M_KERNEL_ARCH_FUNC_H_
 
+#include 
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -53,6 +55,10 @@ static ALWAYS_INLINE void arch_kernel_init(void)
 	 */
 	z_arm_configure_static_mpu_regions();
 #endif /* CONFIG_ARM_MPU */
+
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+	soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
 }
 
 static ALWAYS_INLINE void
@@ -78,6 +84,25 @@ extern FUNC_NORETURN void z_arm_userspace_enter(k_thread_entry_t user_entry,
 
 extern void z_arm_fatal_error(unsigned int reason, const struct arch_esf *esf);
 
+static ALWAYS_INLINE int arch_swap(unsigned int key)
+{
+	/* store off key and return value */
+	_current->arch.basepri = key;
+	_current->arch.swap_return_value = -EAGAIN;
+
+	/* set pending bit to make sure we will take a PendSV exception */
+	SCB->ICSR |= SCB_ICSR_PENDSVSET_Msk;
+
+	/* clear mask or enable all irqs to take a pendsv */
+	irq_unlock(0);
+
+	/* Context switch is performed here. Returning implies the
+	 * thread has been context-switched-in again.
+	 */
+	return _current->arch.swap_return_value;
+}
+
+
 #endif /* _ASMLANGUAGE */
 
 #ifdef __cplusplus
diff --git a/arch/arm64/core/smp.c b/arch/arm64/core/smp.c
index bbb7f963431..fd9d457ea7d 100644
--- a/arch/arm64/core/smp.c
+++ b/arch/arm64/core/smp.c
@@ -23,6 +23,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include "boot.h"
@@ -163,6 +164,10 @@ void arch_secondary_cpu_init(int cpu_num)
 #endif
 #endif
 
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+	soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
+
 	fn = arm64_cpu_boot_params.fn;
 	arg = arm64_cpu_boot_params.arg;
 	barrier_dsync_fence_full();
diff --git a/arch/arm64/core/xen/enlighten.c b/arch/arm64/core/xen/enlighten.c
index 91bf014b762..164947a09ff 100644
--- a/arch/arm64/core/xen/enlighten.c
+++ b/arch/arm64/core/xen/enlighten.c
@@ -42,7 +42,7 @@ static int xen_map_shared_info(const shared_info_t *shared_page)
 	return HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp);
 }
 
-int xen_enlighten_init(void)
+static int xen_enlighten_init(void)
 {
 	int ret = 0;
 	shared_info_t *info = (shared_info_t *) shared_info_buf;
@@ -66,3 +66,5 @@ int xen_enlighten_init(void)
 
 	return 0;
 }
+
+SYS_INIT(xen_enlighten_init, PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEVICE);
diff --git a/arch/arm64/include/kernel_arch_func.h b/arch/arm64/include/kernel_arch_func.h
index d2c346be1f0..f9a2ffb9821 100644
--- a/arch/arm64/include/kernel_arch_func.h
+++ b/arch/arm64/include/kernel_arch_func.h
@@ -22,19 +22,20 @@
 
 #include 
 
+#include 
+
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 #ifndef _ASMLANGUAGE
 
-extern void xen_enlighten_init(void);
-
 static ALWAYS_INLINE void arch_kernel_init(void)
 {
-#ifdef CONFIG_XEN
-	xen_enlighten_init();
-#endif
+
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+	soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
 }
 
 static inline void arch_switch(void *switch_to, void **switched_from)
diff --git a/arch/common/nocache.ld b/arch/common/nocache.ld
index 24e81cdefcf..a4e500e8b17 100644
--- a/arch/common/nocache.ld
+++ b/arch/common/nocache.ld
@@ -7,12 +7,6 @@
 
 /* Copied from linker.ld */
 
-#if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_nocache_ram), okay)
-#define NOCACHE_REGION LINKER_DT_NODE_REGION_NAME_TOKEN(DT_CHOSEN(zephyr_nocache_ram))
-#else
-#define NOCACHE_REGION RAMABLE_REGION
-#endif
-
 /* Non-cached region of RAM */
 SECTION_DATA_PROLOGUE(_NOCACHE_SECTION_NAME,(NOLOAD),)
 {
@@ -33,5 +27,5 @@ SECTION_DATA_PROLOGUE(_NOCACHE_SECTION_NAME,(NOLOAD),)
 	MPU_ALIGN(_nocache_ram_size);
 #endif
 	_nocache_ram_end = .;
-} GROUP_DATA_LINK_IN(NOCACHE_REGION, NOCACHE_REGION)
+} GROUP_DATA_LINK_IN(RAMABLE_REGION, RAMABLE_REGION)
 _nocache_ram_size = _nocache_ram_end - _nocache_ram_start;
diff --git a/arch/common/ramfunc.ld b/arch/common/ramfunc.ld
index 3894dbfef43..45dea79d6b6 100644
--- a/arch/common/ramfunc.ld
+++ b/arch/common/ramfunc.ld
@@ -9,6 +9,7 @@
 
 SECTION_DATA_PROLOGUE(.ramfunc,,)
 {
+	__ramfunc_region_start = .;
 	MPU_ALIGN(__ramfunc_size);
 	__ramfunc_start = .;
 	*(.ramfunc)
diff --git a/arch/mips/core/isr.S b/arch/mips/core/isr.S
index 86d05d19833..f2f2f342053 100644
--- a/arch/mips/core/isr.S
+++ b/arch/mips/core/isr.S
@@ -70,6 +70,7 @@ GTEXT(_Fault)
 
 GTEXT(_k_neg_eagain)
 GTEXT(z_thread_mark_switched_in)
+GTEXT(z_thread_mark_switched_out)
 
 /* exports */
 GTEXT(__isr_vec)
@@ -209,6 +210,9 @@ on_thread_stack:
 #endif /* CONFIG_PREEMPT_ENABLED */
 
 reschedule:
+#ifdef CONFIG_INSTRUMENT_THREAD_SWITCHING
+	jal z_thread_mark_switched_out
+#endif
 	/*
 	 * Check if the current thread is the same as the thread on the ready Q. If
 	 * so, do not reschedule.
diff --git a/arch/mips/include/kernel_arch_func.h b/arch/mips/include/kernel_arch_func.h
index b01cc1a4c65..63ed7a65cf2 100644
--- a/arch/mips/include/kernel_arch_func.h
+++ b/arch/mips/include/kernel_arch_func.h
@@ -19,6 +19,8 @@
 
 #include 
 
+#include 
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -26,6 +28,9 @@ extern "C" {
 #ifndef _ASMLANGUAGE
 static ALWAYS_INLINE void arch_kernel_init(void)
 {
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+	soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
 }
 
 static ALWAYS_INLINE void
@@ -42,6 +47,8 @@ static inline bool arch_is_in_isr(void)
 	return _current_cpu->nested != 0U;
 }
 
+int arch_swap(unsigned int key);
+
 #ifdef CONFIG_IRQ_OFFLOAD
 void z_irq_do_offload(void);
 #endif
diff --git a/arch/nios2/core/timing.c b/arch/nios2/core/timing.c
index 9deb469a07f..80ee73c6f06 100644
--- a/arch/nios2/core/timing.c
+++ b/arch/nios2/core/timing.c
@@ -41,7 +41,13 @@ timing_t arch_timing_counter_get(void)
 uint64_t arch_timing_cycles_get(volatile timing_t *const start,
 				volatile timing_t *const end)
 {
-	return (*end - *start);
+	timing_t start_ = *start;
+	timing_t end_ = *end;
+
+	if (end_ >= start_) {
+		return (end_ - start_);
+	}
+	return (end_ + NIOS2_SUBTRACT_CLOCK_CYCLES(start_));
 }
 
 uint64_t arch_timing_freq_get(void)
diff --git a/arch/nios2/include/kernel_arch_func.h b/arch/nios2/include/kernel_arch_func.h
index 2df268a1c62..c325ea49b49 100644
--- a/arch/nios2/include/kernel_arch_func.h
+++ b/arch/nios2/include/kernel_arch_func.h
@@ -22,6 +22,8 @@
 
 #include 
 
+#include 
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -30,6 +32,9 @@ extern "C" {
 
 static ALWAYS_INLINE void arch_kernel_init(void)
 {
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+	soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
 }
 
 static ALWAYS_INLINE void
@@ -46,6 +51,8 @@ static inline bool arch_is_in_isr(void)
 	return _kernel.cpus[0].nested != 0U;
 }
 
+int arch_swap(unsigned int key);
+
 #ifdef CONFIG_IRQ_OFFLOAD
 void z_irq_do_offload(void);
 #endif
diff --git a/arch/posix/core/swap.c b/arch/posix/core/swap.c
index d4ec5e50b5e..cf13ab4d4d3 100644
--- a/arch/posix/core/swap.c
+++ b/arch/posix/core/swap.c
@@ -50,7 +50,7 @@ int arch_swap(unsigned int key)
 		_current->callee_saved.thread_status;
 
 
-	_current = _kernel.ready_q.cache;
+	z_current_thread_set(_kernel.ready_q.cache);
 #if CONFIG_INSTRUMENT_THREAD_SWITCHING
 	z_thread_mark_switched_in();
 #endif
@@ -94,7 +94,7 @@ void arch_switch_to_main_thread(struct k_thread *main_thread, char *stack_ptr,
 	z_thread_mark_switched_out();
 #endif
 
-	_current = _kernel.ready_q.cache;
+	z_current_thread_set(_kernel.ready_q.cache);
 
 #ifdef CONFIG_INSTRUMENT_THREAD_SWITCHING
 	z_thread_mark_switched_in();
diff --git a/arch/posix/core/thread.c b/arch/posix/core/thread.c
index 4e443e2283b..050d075fe57 100644
--- a/arch/posix/core/thread.c
+++ b/arch/posix/core/thread.c
@@ -96,6 +96,25 @@ void posix_arch_thread_entry(void *pa_thread_status)
 	z_thread_entry(ptr->entry_point, ptr->arg1, ptr->arg2, ptr->arg3);
 }
 
+#if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING)
+int arch_float_disable(struct k_thread *thread)
+{
+	ARG_UNUSED(thread);
+
+	/* Posix always has FPU enabled so cannot be disabled */
+	return -ENOTSUP;
+}
+
+int arch_float_enable(struct k_thread *thread, unsigned int options)
+{
+	ARG_UNUSED(thread);
+	ARG_UNUSED(options);
+
+	/* Posix always has FPU enabled so nothing to do here */
+	return 0;
+}
+#endif /* CONFIG_FPU && CONFIG_FPU_SHARING */
+
 #if defined(CONFIG_ARCH_HAS_THREAD_ABORT)
 void z_impl_k_thread_abort(k_tid_t thread)
 {
diff --git a/arch/posix/include/kernel_arch_func.h b/arch/posix/include/kernel_arch_func.h
index bb8d36a089c..ceba8a85093 100644
--- a/arch/posix/include/kernel_arch_func.h
+++ b/arch/posix/include/kernel_arch_func.h
@@ -12,6 +12,8 @@
 
 #include 
 
+#include 
+
 #ifndef _ASMLANGUAGE
 
 #ifdef __cplusplus
@@ -20,7 +22,9 @@ extern "C" {
 
 static inline void arch_kernel_init(void)
 {
-	/* Nothing to be done */
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+	soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
 }
 
 static ALWAYS_INLINE void
@@ -38,6 +42,8 @@ static inline bool arch_is_in_isr(void)
 	return _kernel.cpus[0].nested != 0U;
 }
 
+int arch_swap(unsigned int key);
+
 #endif /* _ASMLANGUAGE */
 
 #endif /* ZEPHYR_ARCH_POSIX_INCLUDE_KERNEL_ARCH_FUNC_H_ */
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
index 8f524c23fc1..83e3ef86d07 100644
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -1,4 +1,5 @@
 # Copyright (c) 2016 Jean-Paul Etienne 
+# Copyright (c) 2024 Antmicro 
 # SPDX-License-Identifier: Apache-2.0
 
 menu "RISCV Options"
@@ -15,9 +16,13 @@ config FLOAT_HARD
 	help
 	  This option enables the hard-float calling convention.
 
+choice RISCV_GP_PURPOSE
+	prompt "Purpose of the global pointer (GP) register"
+	default RISCV_GP if RISCV_SOC_HAS_GP_RELATIVE_ADDRESSING
+
 config RISCV_GP
 	bool "RISC-V global pointer relative addressing"
-	default n
+	depends on RISCV_SOC_HAS_GP_RELATIVE_ADDRESSING
 	help
 	  Use global pointer relative addressing for small globals declared
 	  anywhere in the executable. It can benefit performance and reduce
@@ -27,6 +32,17 @@ config RISCV_GP
 	  global pointer at program start or earlier than any instruction
 	  using GP relative addressing.
 
+config RISCV_CURRENT_VIA_GP
+	bool "Store current thread into the global pointer (GP) register"
+	depends on MP_MAX_NUM_CPUS > 1
+	select ARCH_HAS_CUSTOM_CURRENT_IMPL
+	help
+	  Store the current thread's pointer into the global pointer (GP) register.
+	  When is enabled, calls to `_current` & `k_sched_current_thread_query()` will
+	  be reduced to a single register read.
+
+endchoice # RISCV_GP_PURPOSE
+
 config RISCV_ALWAYS_SWITCH_THROUGH_ECALL
 	bool "Do not use mret outside a trap handler context"
 	depends on MULTITHREADING
@@ -37,6 +53,31 @@ config RISCV_ALWAYS_SWITCH_THROUGH_ECALL
 	  and most people should say n here to minimize context switching
 	  overhead.
 
+choice RISCV_SMP_IPI_IMPL
+	prompt "RISC-V SMP IPI implementation"
+	depends on SMP
+	default RISCV_SMP_IPI_CLINT if DT_HAS_SIFIVE_CLINT0_ENABLED
+	default RISCV_SMP_IPI_CUSTOM
+
+config RISCV_SMP_IPI_CLINT
+	bool "CLINT-based IPI"
+	depends on DT_HAS_SIFIVE_CLINT0_ENABLED
+	help
+	  Use CLINT-based IPI implementation.
+
+config RISCV_SMP_IPI_CUSTOM
+	bool "Custom IPI implementation"
+	help
+	  Allow custom IPI implementation.
+
+	  When this is selected, the following functions must be provided:
+	   - arch_sched_directed_ipi()
+	   - arch_flush_fpu_ipi() if CONFIG_FPU_SHARING
+	   - arch_spin_relax() if CONFIG_FPU_SHARING
+	   - arch_smp_init()
+
+endchoice # RISCV_SMP_IPI_IMPL
+
 menu "RISCV Processor Options"
 
 config INCLUDE_RESET_VECTOR
@@ -117,6 +158,12 @@ config RISCV_SOC_HAS_CUSTOM_SYS_IO
 	  the RISC-V SoC needs to do something different and more than reading and
 	  writing the registers.
 
+config RISCV_SOC_HAS_GP_RELATIVE_ADDRESSING
+	bool
+	help
+	  Selected when SoC has implemented the initialization of global pointer (GP)
+	  at program start, or earlier than any instruction using GP relative addressing.
+
 config RISCV_SOC_CONTEXT_SAVE
 	bool "SOC-based context saving in IRQ handlers"
 	select RISCV_SOC_OFFSETS
@@ -316,7 +363,6 @@ endif #RISCV_PMP
 
 config PMP_STACK_GUARD
 	def_bool y
-	depends on MULTITHREADING
 	depends on HW_STACK_PROTECTION
 
 config PMP_STACK_GUARD_MIN_SIZE
@@ -355,6 +401,15 @@ config NULL_POINTER_EXCEPTION_REGION_SIZE
 
 endif # NULL_POINTER_EXCEPTION_DETECTION_PMP
 
+config RISCV_IMPRECISE_FPU_STATE_TRACKING
+	bool "Imprecise implementation of FPU state tracking"
+	depends on FPU
+	help
+	  According to the RISC-V Instruction Set Manual: Volume II, Version 20240411
+	  (Section 3.1.6.6), some implementations may choose to track the dirtiness of
+	  the floating-point register state imprecisely by reporting the state to be
+	  dirty even when it has not been modified. This option reflects that.
+
 endmenu
 
 config MAIN_STACK_SIZE
diff --git a/arch/riscv/core/CMakeLists.txt b/arch/riscv/core/CMakeLists.txt
index 3e97d36d7f8..52a748c3247 100644
--- a/arch/riscv/core/CMakeLists.txt
+++ b/arch/riscv/core/CMakeLists.txt
@@ -17,6 +17,12 @@ if ((CONFIG_MP_MAX_NUM_CPUS GREATER 1) OR (CONFIG_SMP))
   zephyr_library_sources(smp.c)
 endif ()
 
+if (CONFIG_SMP)
+  zephyr_library_sources(ipi.c)
+
+  zephyr_library_sources_ifdef(CONFIG_RISCV_SMP_IPI_CLINT ipi_clint.c)
+endif()
+
 zephyr_library_sources_ifdef(CONFIG_FPU_SHARING fpu.c fpu.S)
 zephyr_library_sources_ifdef(CONFIG_DEBUG_COREDUMP coredump.c)
 zephyr_library_sources_ifdef(CONFIG_IRQ_OFFLOAD irq_offload.c)
@@ -27,3 +33,4 @@ zephyr_library_sources_ifdef(CONFIG_USERSPACE userspace.S)
 zephyr_library_sources_ifdef(CONFIG_SEMIHOST semihost.c)
 zephyr_library_sources_ifdef(CONFIG_ARCH_STACKWALK stacktrace.c)
 zephyr_linker_sources(ROM_START SORT_KEY 0x0vectors vector_table.ld)
+zephyr_library_sources_ifdef(CONFIG_LLEXT elf.c)
diff --git a/arch/riscv/core/coredump.c b/arch/riscv/core/coredump.c
index 70d7a9976d4..003c7b9fce9 100644
--- a/arch/riscv/core/coredump.c
+++ b/arch/riscv/core/coredump.c
@@ -5,6 +5,7 @@
  */
 
 #include 
+#include 
 #include 
 
 #ifndef CONFIG_64BIT
@@ -116,3 +117,21 @@ uint16_t arch_coredump_tgt_code_get(void)
 {
 	return COREDUMP_TGT_RISC_V;
 }
+
+#if defined(CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK)
+void arch_coredump_priv_stack_dump(struct k_thread *thread)
+{
+	uintptr_t start_addr, end_addr;
+
+	/* See: zephyr/include/zephyr/arch/riscv/arch.h */
+	if (IS_ENABLED(CONFIG_PMP_POWER_OF_TWO_ALIGNMENT)) {
+		start_addr = thread->arch.priv_stack_start + Z_RISCV_STACK_GUARD_SIZE;
+	} else {
+		start_addr = thread->stack_info.start - CONFIG_PRIVILEGED_STACK_SIZE;
+	}
+	end_addr = Z_STACK_PTR_ALIGN(thread->arch.priv_stack_start + K_KERNEL_STACK_RESERVED +
+				     CONFIG_PRIVILEGED_STACK_SIZE);
+
+	coredump_memory_dump(start_addr, end_addr);
+}
+#endif /* CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK */
diff --git a/arch/riscv/core/elf.c b/arch/riscv/core/elf.c
new file mode 100644
index 00000000000..4f981083b94
--- /dev/null
+++ b/arch/riscv/core/elf.c
@@ -0,0 +1,373 @@
+/** @file
+ * @brief Architecture-specific relocations for RISC-V instruction sets.
+ */
+/*
+ * Copyright (c) 2024 CISPA Helmholtz Center for Information Security gGmbH
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+#include 
+#include 
+#include 
+#include 
+
+#include 
+
+#include 
+
+LOG_MODULE_REGISTER(elf, CONFIG_LLEXT_LOG_LEVEL);
+
+/*
+ * RISC-V relocations commonly use pairs of U-type and I-type instructions.
+ * U-type instructions have 20-bit immediates, I-type instructions have 12-bit immediates.
+ * Immediates in RISC-V are always sign-extended.
+ * Thereby, this type of relocation can reach any address within a 2^31-1 byte range.
+ */
+#define RISCV_MAX_JUMP_DISTANCE_U_PLUS_I_TYPE INT32_MAX
+
+/* S-type has 12-bit signed immediate */
+#define RISCV_MAX_JUMP_DISTANCE_S_TYPE ((1 << 11) - 1)
+
+/* I-type has 12-bit signed immediate also */
+#define RISCV_MAX_JUMP_DISTANCE_I_TYPE ((1 << 11) - 1)
+
+/* B-type has 13-bit signed immediate */
+#define RISCV_MAX_JUMP_DISTANCE_B_TYPE ((1 << 12) - 1)
+
+/* CB-type has 9-bit signed immediate */
+#define RISCV_MAX_JUMP_DISTANCE_CB_TYPE ((1 << 8) - 1)
+
+/* CJ-type has 12-bit signed immediate (last bit implicit 0) */
+#define RISCV_MAX_JUMP_DISTANCE_CJ_TYPE ((1 << 11) - 1)
+
+static inline int riscv_relocation_fits(long long jump_target, long long max_distance,
+					elf_word reloc_type)
+{
+	if (llabs(jump_target) > max_distance) {
+		LOG_ERR("%lld byte relocation is not possible for type %" PRIu64 " (max %lld)!",
+			jump_target, (uint64_t)reloc_type, max_distance);
+		return -ENOEXEC; /* jump too far */
+	}
+
+	return 0;
+}
+
+static long long last_u_type_jump_target;
+
+/**
+ * @brief RISC-V specific function for relocating partially linked ELF binaries
+ *
+ * This implementation follows the official RISC-V specification:
+ * https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-elf.adoc
+ *
+ */
+int arch_elf_relocate(elf_rela_t *rel, uintptr_t loc_unsigned, uintptr_t sym_base_addr_unsigned,
+		      const char *sym_name, uintptr_t load_bias)
+{
+	/* FIXME currently, RISC-V relocations all fit in ELF_32_R_TYPE */
+	elf_word reloc_type = ELF32_R_TYPE(rel->r_info);
+	/*
+	 * The RISC-V specification uses the following symbolic names for the relocations:
+	 *
+	 * A - addend (rel->r_addend)
+	 * B - base address (load_bias)
+	 * G - global offset table (not supported yet)
+	 * P - position of the relocation (loc)
+	 * S - symbol value (sym_base_addr)
+	 * V - value at the relocation position (*loc)
+	 * GP - value of __global_pointer$ (not supported yet)
+	 * TLSMODULE - TLS module for the object (not supported yet)
+	 * TLSOFFSET - TLS static block for the object (not supported yet)
+	 */
+	intptr_t loc = (intptr_t)loc_unsigned;
+	uint8_t *loc8 = (uint8_t *)loc, tmp8;
+	uint16_t *loc16 = (uint16_t *)loc, tmp16;
+	uint32_t *loc32 = (uint32_t *)loc, tmp32;
+	uint64_t *loc64 = (uint64_t *)loc, tmp64;
+	/* uint32_t or uint64_t */
+	r_riscv_wordclass_t *loc_word = (r_riscv_wordclass_t *)loc;
+	uint32_t modified_operand;
+	uint16_t modified_compressed_operand;
+	int32_t imm8;
+	long long original_imm8, jump_target;
+	int16_t compressed_imm8;
+	__typeof__(rel->r_addend) target_alignment = 1;
+	const intptr_t sym_base_addr = (intptr_t)sym_base_addr_unsigned;
+
+	LOG_DBG("Relocating symbol %s at %p with base address %p load address %p type %" PRIu64,
+		sym_name, (void *)loc, (void *)sym_base_addr, (void *)load_bias,
+		(uint64_t)reloc_type);
+
+	/* FIXME not all types of relocations currently supported, especially TLS */
+
+	switch (reloc_type) {
+	case R_RISCV_NONE:
+		break;
+	case R_RISCV_32:
+		jump_target = sym_base_addr + rel->r_addend; /* S + A */
+		UNALIGNED_PUT((uint32_t)jump_target, loc32);
+		return riscv_relocation_fits(jump_target, INT32_MAX, reloc_type);
+	case R_RISCV_64:
+		/* full 64-bit range, need no range check */
+		UNALIGNED_PUT(sym_base_addr + rel->r_addend, loc64); /* S + A */
+		break;
+	case R_RISCV_RELATIVE:
+		/* either full 32-bit or 64-bit range, need no range check */
+		UNALIGNED_PUT(load_bias + rel->r_addend, loc_word); /* B + A */
+		break;
+	case R_RISCV_JUMP_SLOT:
+		/* either full 32-bit or 64-bit range, need no range check */
+		UNALIGNED_PUT(sym_base_addr, loc_word); /* S */
+		break;
+	case R_RISCV_BRANCH:
+		jump_target = sym_base_addr + rel->r_addend - loc; /* S + A - P */
+		modified_operand = UNALIGNED_GET(loc32);
+		imm8 = jump_target;
+		modified_operand = R_RISCV_CLEAR_BTYPE_IMM8(modified_operand);
+		modified_operand = R_RISCV_SET_BTYPE_IMM8(modified_operand, imm8);
+		UNALIGNED_PUT(modified_operand, loc32);
+		return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_B_TYPE,
+					     reloc_type);
+	case R_RISCV_JAL:
+		jump_target = sym_base_addr + rel->r_addend - loc; /* S + A - P */
+		modified_operand = UNALIGNED_GET(loc32);
+		imm8 = jump_target;
+		modified_operand = R_RISCV_CLEAR_JTYPE_IMM8(modified_operand);
+		modified_operand = R_RISCV_SET_JTYPE_IMM8(modified_operand, imm8);
+		UNALIGNED_PUT(modified_operand, loc32);
+		return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_U_PLUS_I_TYPE,
+					     reloc_type);
+	case R_RISCV_CALL:
+	case R_RISCV_CALL_PLT:
+	case R_RISCV_PCREL_HI20:
+		modified_operand = UNALIGNED_GET(loc32);
+		jump_target = sym_base_addr + rel->r_addend - loc; /* S + A - P */
+		imm8 = jump_target;
+		/* bit 12 of the immediate goes to I-type instruction and might
+		 * change the sign of the number
+		 */
+		/* in order to avoid that, we add 1 to the upper immediate if bit 12 is one */
+		/* see RISC-V la pseudo instruction */
+		imm8 += imm8 & 0x800;
+
+		original_imm8 = imm8;
+
+		modified_operand = R_RISCV_CLEAR_UTYPE_IMM8(modified_operand);
+		modified_operand = R_RISCV_SET_UTYPE_IMM8(modified_operand, imm8);
+		UNALIGNED_PUT(modified_operand, loc32);
+
+		if (reloc_type != R_RISCV_PCREL_HI20) {
+			/* PCREL_HI20 is only U-type, not truly U+I-type */
+			/* for the others, need to also modify following I-type */
+			loc32++;
+
+			imm8 = jump_target;
+
+			modified_operand = UNALIGNED_GET(loc32);
+			modified_operand = R_RISCV_CLEAR_ITYPE_IMM8(modified_operand);
+			modified_operand = R_RISCV_SET_ITYPE_IMM8(modified_operand, imm8);
+			UNALIGNED_PUT(modified_operand, loc32);
+		}
+
+		last_u_type_jump_target = jump_target;
+
+		return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_U_PLUS_I_TYPE,
+					     reloc_type);
+	case R_RISCV_PCREL_LO12_I:
+		/* need the same jump target as preceding U-type relocation */
+		if (last_u_type_jump_target == 0) {
+			LOG_ERR("R_RISCV_PCREL_LO12_I relocation without preceding U-type "
+				"relocation!");
+			return -ENOEXEC;
+		}
+		modified_operand = UNALIGNED_GET(loc32);
+		jump_target = last_u_type_jump_target; /* S - P */
+		last_u_type_jump_target = 0;
+		imm8 = jump_target;
+		modified_operand = R_RISCV_CLEAR_ITYPE_IMM8(modified_operand);
+		modified_operand = R_RISCV_SET_ITYPE_IMM8(modified_operand, imm8);
+		UNALIGNED_PUT(modified_operand, loc32);
+		return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_U_PLUS_I_TYPE,
+					     reloc_type);
+		break;
+	case R_RISCV_PCREL_LO12_S:
+		/* need the same jump target as preceding U-type relocation */
+		if (last_u_type_jump_target == 0) {
+			LOG_ERR("R_RISCV_PCREL_LO12_I relocation without preceding U-type "
+				"relocation!");
+			return -ENOEXEC;
+		}
+		modified_operand = UNALIGNED_GET(loc32);
+		jump_target = last_u_type_jump_target; /* S - P */
+		last_u_type_jump_target = 0;
+		imm8 = jump_target;
+		modified_operand = R_RISCV_CLEAR_STYPE_IMM8(modified_operand);
+		modified_operand = R_RISCV_SET_STYPE_IMM8(modified_operand, imm8);
+		UNALIGNED_PUT(modified_operand, loc32);
+		return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_U_PLUS_I_TYPE,
+					     reloc_type);
+	case R_RISCV_HI20:
+		jump_target = sym_base_addr + rel->r_addend; /* S + A */
+		modified_operand = UNALIGNED_GET(loc32);
+		imm8 = jump_target;
+		/* bit 12 of the immediate goes to I-type instruction and might
+		 * change the sign of the number
+		 */
+		/* in order to avoid that, we add 1 to the upper immediate if bit 12 is one*/
+		/* see RISC-V la pseudo instruction */
+		original_imm8 = imm8;
+		imm8 += imm8 & 0x800;
+		modified_operand = R_RISCV_CLEAR_UTYPE_IMM8(modified_operand);
+		modified_operand = R_RISCV_SET_UTYPE_IMM8(modified_operand, imm8);
+		UNALIGNED_PUT(modified_operand, loc32);
+		return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_U_PLUS_I_TYPE,
+					     reloc_type);
+	case R_RISCV_LO12_I:
+		modified_operand = UNALIGNED_GET(loc32);
+		jump_target = sym_base_addr + rel->r_addend; /* S + A */
+		imm8 = jump_target;
+		/* this is always used with R_RISCV_HI20 */
+		modified_operand = R_RISCV_CLEAR_ITYPE_IMM8(modified_operand);
+		modified_operand = R_RISCV_SET_ITYPE_IMM8(modified_operand, imm8);
+		UNALIGNED_PUT(modified_operand, loc32);
+		return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_U_PLUS_I_TYPE,
+					     reloc_type);
+	case R_RISCV_LO12_S:
+		modified_operand = UNALIGNED_GET(loc32);
+		imm8 = sym_base_addr + rel->r_addend; /* S + A */
+		/*
+		 * S-type is used for stores/loads etc.
+		 * size check is done at compile time, as it depends on the size of
+		 * the structure we are trying to load/store
+		 */
+		modified_operand = R_RISCV_CLEAR_STYPE_IMM8(modified_operand);
+		modified_operand = R_RISCV_SET_STYPE_IMM8(modified_operand, imm8);
+		UNALIGNED_PUT(modified_operand, loc32);
+		break;
+	/* for add/sub/set, compiler needs to ensure that the ELF sections are close enough */
+	case R_RISCV_ADD8:
+		tmp8 = UNALIGNED_GET(loc8);
+		tmp8 += sym_base_addr + rel->r_addend; /* V + S + A */
+		UNALIGNED_PUT(tmp8, loc8);
+		break;
+	case R_RISCV_ADD16:
+		tmp16 = UNALIGNED_GET(loc16);
+		tmp16 += sym_base_addr + rel->r_addend; /* V + S + A */
+		UNALIGNED_PUT(tmp16, loc16);
+		break;
+	case R_RISCV_ADD32:
+		tmp32 = UNALIGNED_GET(loc32);
+		tmp32 += sym_base_addr + rel->r_addend; /* V + S + A */
+		UNALIGNED_PUT(tmp32, loc32);
+		break;
+	case R_RISCV_ADD64:
+		tmp64 = UNALIGNED_GET(loc64);
+		tmp64 += sym_base_addr + rel->r_addend; /* V + S + A */
+		UNALIGNED_PUT(tmp64, loc64);
+		break;
+	case R_RISCV_SUB8:
+		tmp8 = UNALIGNED_GET(loc8);
+		tmp8 -= sym_base_addr + rel->r_addend; /* V - S - A */
+		UNALIGNED_PUT(tmp8, loc8);
+		break;
+	case R_RISCV_SUB16:
+		tmp16 = UNALIGNED_GET(loc16);
+		tmp16 -= sym_base_addr + rel->r_addend; /* V - S - A */
+		UNALIGNED_PUT(tmp16, loc16);
+		break;
+	case R_RISCV_SUB32:
+		tmp32 = UNALIGNED_GET(loc32);
+		tmp32 -= sym_base_addr + rel->r_addend; /* V - S - A */
+		UNALIGNED_PUT(tmp32, loc32);
+		break;
+	case R_RISCV_SUB64:
+		tmp64 = UNALIGNED_GET(loc64);
+		tmp64 -= sym_base_addr + rel->r_addend; /* V - S - A */
+		UNALIGNED_PUT(tmp64, loc64);
+		break;
+	case R_RISCV_SUB6:
+		tmp8 = UNALIGNED_GET(loc8) & (0x1F);
+		UNALIGNED_PUT(tmp8, loc8);
+		tmp8 = tmp8 - sym_base_addr - rel->r_addend; /* V - S - A */
+		tmp8 = tmp8 & (0x1F);
+		tmp8 = tmp8 | UNALIGNED_GET(loc8);
+		UNALIGNED_PUT(tmp8, loc8);
+		break;
+	case R_RISCV_SET6:
+		tmp8 = UNALIGNED_GET(loc8) & (0x1F);
+		UNALIGNED_PUT(tmp8, loc8);
+		tmp8 = sym_base_addr + rel->r_addend; /* S + A */
+		tmp8 = tmp8 | UNALIGNED_GET(loc8);
+		UNALIGNED_PUT(tmp8, loc8);
+		break;
+	case R_RISCV_SET8:
+		tmp8 = sym_base_addr + rel->r_addend; /* S + A */
+		UNALIGNED_PUT(tmp8, loc8);
+		break;
+	case R_RISCV_SET16:
+		tmp16 = sym_base_addr + rel->r_addend; /* S + A */
+		UNALIGNED_PUT(tmp16, loc16);
+		break;
+	case R_RISCV_SET32:
+		tmp32 = sym_base_addr + rel->r_addend; /* S + A */
+		UNALIGNED_PUT(tmp32, loc32);
+		break;
+	case R_RISCV_32_PCREL:
+		jump_target = sym_base_addr + rel->r_addend - loc; /* S + A - P */
+		tmp32 = jump_target;
+		UNALIGNED_PUT(tmp32, loc32);
+		return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_U_PLUS_I_TYPE,
+					     reloc_type);
+	case R_RISCV_PLT32:
+		jump_target = sym_base_addr + rel->r_addend - loc; /* S + A - P */
+		tmp32 = jump_target;
+		UNALIGNED_PUT(tmp32, loc32);
+		return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_U_PLUS_I_TYPE,
+					     reloc_type);
+	case R_RISCV_RVC_BRANCH:
+		jump_target = sym_base_addr + rel->r_addend - loc; /* S + A - P */
+		modified_compressed_operand = UNALIGNED_GET(loc16);
+		compressed_imm8 = jump_target;
+		modified_compressed_operand =
+			R_RISCV_CLEAR_CBTYPE_IMM8(modified_compressed_operand);
+		modified_compressed_operand =
+			R_RISCV_SET_CBTYPE_IMM8(modified_compressed_operand, compressed_imm8);
+		UNALIGNED_PUT(modified_compressed_operand, loc16);
+		return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_CB_TYPE,
+					     reloc_type);
+	case R_RISCV_RVC_JUMP:
+		jump_target = sym_base_addr + rel->r_addend - loc; /* S + A - P */
+		modified_compressed_operand = UNALIGNED_GET(loc16);
+		compressed_imm8 = jump_target;
+		modified_compressed_operand =
+			R_RISCV_CLEAR_CJTYPE_IMM8(modified_compressed_operand);
+		modified_compressed_operand =
+			R_RISCV_SET_CJTYPE_IMM8(modified_compressed_operand, compressed_imm8);
+		UNALIGNED_PUT(modified_compressed_operand, loc16);
+		return riscv_relocation_fits(jump_target, RISCV_MAX_JUMP_DISTANCE_CJ_TYPE,
+					     reloc_type);
+	case R_RISCV_ALIGN:
+		/* we are supposed to move the symbol such that it is aligned to the next power of
+		 * two >= addend
+		 */
+		/* this involves moving the symbol */
+		while (target_alignment < rel->r_addend) {
+			target_alignment *= 2;
+		}
+		LOG_ERR("Symbol %s with location %p requires alignment to %" PRIu64 " bytes!",
+			sym_name, (void *)loc, (uint64_t)target_alignment);
+		LOG_ERR("Alignment relocation is currently not supported!");
+		return -ENOEXEC;
+	/* ignored, this is primarily intended for removing instructions during link-time
+	 * optimization
+	 */
+	case R_RISCV_RELAX:
+		break;
+	default:
+		LOG_ERR("Unsupported relocation type: %" PRIu64 " for symbol: %s",
+			(uint64_t)reloc_type, sym_name);
+		return -ENOEXEC;
+	}
+
+	return 0;
+}
diff --git a/arch/riscv/core/fatal.c b/arch/riscv/core/fatal.c
index d5cbd2f4dc1..879ffab9a80 100644
--- a/arch/riscv/core/fatal.c
+++ b/arch/riscv/core/fatal.c
@@ -172,11 +172,21 @@ static bool bad_stack_pointer(struct arch_esf *esf)
 	}
 #endif /* CONFIG_USERSPACE */
 
+#if CONFIG_MULTITHREADING
 	if (sp >= _current->stack_info.start - K_KERNEL_STACK_RESERVED &&
 	    sp <  _current->stack_info.start - K_KERNEL_STACK_RESERVED
 		  + Z_RISCV_STACK_GUARD_SIZE) {
 		return true;
 	}
+#else
+	uintptr_t isr_stack = (uintptr_t)z_interrupt_stacks;
+	uintptr_t main_stack = (uintptr_t)z_main_stack;
+
+	if ((sp >= isr_stack && sp < isr_stack + Z_RISCV_STACK_GUARD_SIZE) ||
+	    (sp >= main_stack && sp < main_stack + Z_RISCV_STACK_GUARD_SIZE)) {
+		return true;
+	}
+#endif /* CONFIG_MULTITHREADING */
 #endif /* CONFIG_PMP_STACK_GUARD */
 
 #ifdef CONFIG_USERSPACE
diff --git a/arch/riscv/core/ipi.c b/arch/riscv/core/ipi.c
new file mode 100644
index 00000000000..c2683b61701
--- /dev/null
+++ b/arch/riscv/core/ipi.c
@@ -0,0 +1,14 @@
+/*
+ * Copyright (c) 2021 Intel Corporation
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include 
+
+#include 
+
+void arch_sched_broadcast_ipi(void)
+{
+	arch_sched_directed_ipi(IPI_ALL_CPUS_MASK);
+}
diff --git a/arch/riscv/core/ipi_clint.c b/arch/riscv/core/ipi_clint.c
new file mode 100644
index 00000000000..e5f12566653
--- /dev/null
+++ b/arch/riscv/core/ipi_clint.c
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2021 Intel Corporation
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include 
+#include 
+
+#include 
+
+#define CLINT_NODE DT_NODELABEL(clint)
+#if !DT_NODE_EXISTS(CLINT_NODE)
+#error "Label 'clint' is not defined in the devicetree."
+#endif
+#define MSIP_BASE DT_REG_ADDR_RAW(CLINT_NODE)
+#define MSIP(hartid) ((volatile uint32_t *)MSIP_BASE)[hartid]
+
+static atomic_val_t cpu_pending_ipi[CONFIG_MP_MAX_NUM_CPUS];
+#define IPI_SCHED     0
+#define IPI_FPU_FLUSH 1
+
+void arch_sched_directed_ipi(uint32_t cpu_bitmap)
+{
+	unsigned int key = arch_irq_lock();
+	unsigned int id = _current_cpu->id;
+	unsigned int num_cpus = arch_num_cpus();
+
+	for (unsigned int i = 0; i < num_cpus; i++) {
+		if ((i != id) && _kernel.cpus[i].arch.online && ((cpu_bitmap & BIT(i)) != 0)) {
+			atomic_set_bit(&cpu_pending_ipi[i], IPI_SCHED);
+			MSIP(_kernel.cpus[i].arch.hartid) = 1;
+		}
+	}
+
+	arch_irq_unlock(key);
+}
+
+#ifdef CONFIG_FPU_SHARING
+void arch_flush_fpu_ipi(unsigned int cpu)
+{
+	atomic_set_bit(&cpu_pending_ipi[cpu], IPI_FPU_FLUSH);
+	MSIP(_kernel.cpus[cpu].arch.hartid) = 1;
+}
+#endif /* CONFIG_FPU_SHARING */
+
+static void sched_ipi_handler(const void *unused)
+{
+	ARG_UNUSED(unused);
+
+	MSIP(csr_read(mhartid)) = 0;
+
+	atomic_val_t pending_ipi = atomic_clear(&cpu_pending_ipi[_current_cpu->id]);
+
+	if (pending_ipi & ATOMIC_MASK(IPI_SCHED)) {
+		z_sched_ipi();
+	}
+#ifdef CONFIG_FPU_SHARING
+	if (pending_ipi & ATOMIC_MASK(IPI_FPU_FLUSH)) {
+		/* disable IRQs */
+		csr_clear(mstatus, MSTATUS_IEN);
+		/* perform the flush */
+		arch_flush_local_fpu();
+		/*
+		 * No need to re-enable IRQs here as long as
+		 * this remains the last case.
+		 */
+	}
+#endif /* CONFIG_FPU_SHARING */
+}
+
+#ifdef CONFIG_FPU_SHARING
+/*
+ * Make sure there is no pending FPU flush request for this CPU while
+ * waiting for a contended spinlock to become available. This prevents
+ * a deadlock when the lock we need is already taken by another CPU
+ * that also wants its FPU content to be reinstated while such content
+ * is still live in this CPU's FPU.
+ */
+void arch_spin_relax(void)
+{
+	atomic_val_t *pending_ipi = &cpu_pending_ipi[_current_cpu->id];
+
+	if (atomic_test_and_clear_bit(pending_ipi, IPI_FPU_FLUSH)) {
+		/*
+		 * We may not be in IRQ context here hence cannot use
+		 * arch_flush_local_fpu() directly.
+		 */
+		arch_float_disable(_current_cpu->arch.fpu_owner);
+	}
+}
+#endif /* CONFIG_FPU_SHARING */
+
+int arch_smp_init(void)
+{
+
+	IRQ_CONNECT(RISCV_IRQ_MSOFT, 0, sched_ipi_handler, NULL, 0);
+	irq_enable(RISCV_IRQ_MSOFT);
+
+	return 0;
+}
diff --git a/arch/riscv/core/isr.S b/arch/riscv/core/isr.S
index 7e885da93a4..11787d3b324 100644
--- a/arch/riscv/core/isr.S
+++ b/arch/riscv/core/isr.S
@@ -163,6 +163,16 @@ SECTION_FUNC(exception.entry, _isr_wrapper)
 	lr t0, ___cpu_t_current_OFFSET(s0)
 	lr tp, _thread_offset_to_tls(t0)
 
+	/* Make sure global pointer is sane */
+#ifdef CONFIG_RISCV_GP
+	.option push
+	.option norelax
+	la gp, __global_pointer$
+	.option pop
+#elif defined(CONFIG_RISCV_CURRENT_VIA_GP)
+	lr gp, ___cpu_t_current_OFFSET(s0)
+#endif /* CONFIG_RISCV_GP / CONFIG_RISCV_CURRENT_VIA_GP */
+
 	/* Clear our per-thread usermode flag */
 	lui t0, %tprel_hi(is_user_mode)
 	add t0, t0, tp, %tprel_add(is_user_mode)
@@ -348,7 +358,7 @@ no_fp:	/* increment _current->arch.exception_depth */
 	li t1, RISCV_EXC_ECALLU
 	beq t0, t1, is_user_syscall
 
-#ifdef CONFIG_PMP_STACK_GUARD
+#if defined(CONFIG_PMP_STACK_GUARD) && defined(CONFIG_MULTITHREADING)
 	/*
 	 * Determine if we come from user space. If so, reconfigure the PMP for
 	 * kernel mode stack guard.
@@ -389,7 +399,7 @@ is_kernel_syscall:
 	addi t0, t0, 4
 	sr t0, __struct_arch_esf_mepc_OFFSET(sp)
 
-#ifdef CONFIG_PMP_STACK_GUARD
+#if defined(CONFIG_PMP_STACK_GUARD) && defined(CONFIG_MULTITHREADING)
 	/* Re-activate PMP for m-mode */
 	li t1, MSTATUS_MPP
 	csrc mstatus, t1
@@ -443,6 +453,12 @@ do_fault:
 1:	mv a1, sp
 
 #ifdef CONFIG_EXCEPTION_DEBUG
+	/*
+	 * Restore the s0 we saved early in ISR entry
+	 * so it shows up properly in the CSF.
+	 */
+	lr s0, __struct_arch_esf_s0_OFFSET(sp)
+
 	/* Allocate space for caller-saved registers on current thread stack */
 	addi sp, sp, -__callee_saved_t_SIZEOF
 
@@ -494,7 +510,7 @@ do_irq_offload:
 #ifdef CONFIG_USERSPACE
 is_user_syscall:
 
-#ifdef CONFIG_PMP_STACK_GUARD
+#if defined(CONFIG_PMP_STACK_GUARD) && defined(CONFIG_MULTITHREADING)
 	/*
 	 * We came from userspace and need to reconfigure the
 	 * PMP for kernel mode stack guard.
@@ -564,7 +580,7 @@ valid_syscall_id:
 
 is_interrupt:
 
-#ifdef CONFIG_PMP_STACK_GUARD
+#if defined(CONFIG_PMP_STACK_GUARD) && defined(CONFIG_MULTITHREADING)
 #ifdef CONFIG_USERSPACE
 	/*
 	 * If we came from userspace then we need to reconfigure the
@@ -734,7 +750,7 @@ fp_trap_exit:
 	and t0, t2, t1
 	bnez t0, 1f
 
-#ifdef CONFIG_PMP_STACK_GUARD
+#if defined(CONFIG_PMP_STACK_GUARD) && defined(CONFIG_MULTITHREADING)
 	/* Remove kernel stack guard and Reconfigure PMP for user mode */
 	lr a0, ___cpu_t_current_OFFSET(s0)
 	call z_riscv_pmp_usermode_enable
diff --git a/arch/riscv/core/pmp.c b/arch/riscv/core/pmp.c
index e41eb8d4bb0..e29c8abd76d 100644
--- a/arch/riscv/core/pmp.c
+++ b/arch/riscv/core/pmp.c
@@ -348,8 +348,8 @@ static unsigned int global_pmp_end_index;
  */
 void z_riscv_pmp_init(void)
 {
-	unsigned long pmp_addr[5];
-	unsigned long pmp_cfg[2];
+	unsigned long pmp_addr[CONFIG_PMP_SLOTS];
+	unsigned long pmp_cfg[CONFIG_PMP_SLOTS / PMPCFG_STRIDE];
 	unsigned int index = 0;
 
 	/* The read-only area is always there for every mode */
@@ -370,6 +370,7 @@ void z_riscv_pmp_init(void)
 #endif
 
 #ifdef CONFIG_PMP_STACK_GUARD
+#ifdef CONFIG_MULTITHREADING
 	/*
 	 * Set the stack guard for this CPU's IRQ stack by making the bottom
 	 * addresses inaccessible. This will never change so we do it here
@@ -396,6 +397,21 @@ void z_riscv_pmp_init(void)
 
 	/* And forget about that last entry as we won't need it later */
 	index--;
+#else
+	/* Without multithreading setup stack guards for IRQ and main stacks */
+	set_pmp_entry(&index, PMP_NONE | PMP_L,
+		      (uintptr_t)z_interrupt_stacks,
+		      Z_RISCV_STACK_GUARD_SIZE,
+		      pmp_addr, pmp_cfg, ARRAY_SIZE(pmp_addr));
+
+	set_pmp_entry(&index, PMP_NONE | PMP_L,
+		      (uintptr_t)z_main_stack,
+		      Z_RISCV_STACK_GUARD_SIZE,
+		      pmp_addr, pmp_cfg, ARRAY_SIZE(pmp_addr));
+
+	/* Write those entries to PMP regs. */
+	write_pmp_entries(0, index, true, pmp_addr, pmp_cfg, ARRAY_SIZE(pmp_addr));
+#endif /* CONFIG_MULTITHREADING */
 #else
 	 /* Write those entries to PMP regs. */
 	write_pmp_entries(0, index, true, pmp_addr, pmp_cfg, ARRAY_SIZE(pmp_addr));
@@ -419,7 +435,6 @@ void z_riscv_pmp_init(void)
 	}
 #endif
 
-	__ASSERT(index <= PMPCFG_STRIDE, "provision for one global word only");
 	global_pmp_cfg[0] = pmp_cfg[0];
 	global_pmp_last_addr = pmp_addr[index - 1];
 	global_pmp_end_index = index;
@@ -454,6 +469,7 @@ static inline unsigned int z_riscv_pmp_thread_init(unsigned long *pmp_addr,
 
 #ifdef CONFIG_PMP_STACK_GUARD
 
+#ifdef CONFIG_MULTITHREADING
 /**
  * @brief Prepare the PMP stackguard content for given thread.
  *
@@ -511,6 +527,8 @@ void z_riscv_pmp_stackguard_enable(struct k_thread *thread)
 	csr_set(mstatus, MSTATUS_MPRV);
 }
 
+#endif /* CONFIG_MULTITHREADING */
+
 /**
  * @brief Remove PMP stackguard content to actual PMP registers
  */
diff --git a/arch/riscv/core/smp.c b/arch/riscv/core/smp.c
index 4ef287c4a7a..8607215cab3 100644
--- a/arch/riscv/core/smp.c
+++ b/arch/riscv/core/smp.c
@@ -7,11 +7,11 @@
 #include 
 #include 
 #include 
-#include 
 #include 
 #include 
 #include 
 #include 
+#include 
 
 volatile struct {
 	arch_cpustart_t fn;
@@ -74,102 +74,13 @@ void arch_secondary_cpu_init(int hartid)
 #endif
 #ifdef CONFIG_SMP
 	irq_enable(RISCV_IRQ_MSOFT);
-#endif
+#endif /* CONFIG_SMP */
+#ifdef CONFIG_PLIC_IRQ_AFFINITY
+	/* Enable on secondary cores so that they can respond to PLIC */
+	irq_enable(RISCV_IRQ_MEXT);
+#endif /* CONFIG_PLIC_IRQ_AFFINITY */
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+	soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
 	riscv_cpu_init[cpu_num].fn(riscv_cpu_init[cpu_num].arg);
 }
-
-#ifdef CONFIG_SMP
-
-#define MSIP_BASE 0x2000000UL
-#define MSIP(hartid) ((volatile uint32_t *)MSIP_BASE)[hartid]
-
-static atomic_val_t cpu_pending_ipi[CONFIG_MP_MAX_NUM_CPUS];
-#define IPI_SCHED	0
-#define IPI_FPU_FLUSH	1
-
-void arch_sched_directed_ipi(uint32_t cpu_bitmap)
-{
-	unsigned int key = arch_irq_lock();
-	unsigned int id = _current_cpu->id;
-	unsigned int num_cpus = arch_num_cpus();
-
-	for (unsigned int i = 0; i < num_cpus; i++) {
-		if ((i != id) && _kernel.cpus[i].arch.online &&
-		    ((cpu_bitmap & BIT(i)) != 0)) {
-			atomic_set_bit(&cpu_pending_ipi[i], IPI_SCHED);
-			MSIP(_kernel.cpus[i].arch.hartid) = 1;
-		}
-	}
-
-	arch_irq_unlock(key);
-}
-
-void arch_sched_broadcast_ipi(void)
-{
-	arch_sched_directed_ipi(IPI_ALL_CPUS_MASK);
-}
-
-#ifdef CONFIG_FPU_SHARING
-void arch_flush_fpu_ipi(unsigned int cpu)
-{
-	atomic_set_bit(&cpu_pending_ipi[cpu], IPI_FPU_FLUSH);
-	MSIP(_kernel.cpus[cpu].arch.hartid) = 1;
-}
-#endif
-
-static void sched_ipi_handler(const void *unused)
-{
-	ARG_UNUSED(unused);
-
-	MSIP(csr_read(mhartid)) = 0;
-
-	atomic_val_t pending_ipi = atomic_clear(&cpu_pending_ipi[_current_cpu->id]);
-
-	if (pending_ipi & ATOMIC_MASK(IPI_SCHED)) {
-		z_sched_ipi();
-	}
-#ifdef CONFIG_FPU_SHARING
-	if (pending_ipi & ATOMIC_MASK(IPI_FPU_FLUSH)) {
-		/* disable IRQs */
-		csr_clear(mstatus, MSTATUS_IEN);
-		/* perform the flush */
-		arch_flush_local_fpu();
-		/*
-		 * No need to re-enable IRQs here as long as
-		 * this remains the last case.
-		 */
-	}
-#endif
-}
-
-#ifdef CONFIG_FPU_SHARING
-/*
- * Make sure there is no pending FPU flush request for this CPU while
- * waiting for a contended spinlock to become available. This prevents
- * a deadlock when the lock we need is already taken by another CPU
- * that also wants its FPU content to be reinstated while such content
- * is still live in this CPU's FPU.
- */
-void arch_spin_relax(void)
-{
-	atomic_val_t *pending_ipi = &cpu_pending_ipi[_current_cpu->id];
-
-	if (atomic_test_and_clear_bit(pending_ipi, IPI_FPU_FLUSH)) {
-		/*
-		 * We may not be in IRQ context here hence cannot use
-		 * arch_flush_local_fpu() directly.
-		 */
-		arch_float_disable(_current_cpu->arch.fpu_owner);
-	}
-}
-#endif
-
-int arch_smp_init(void)
-{
-
-	IRQ_CONNECT(RISCV_IRQ_MSOFT, 0, sched_ipi_handler, NULL, 0);
-	irq_enable(RISCV_IRQ_MSOFT);
-
-	return 0;
-}
-#endif /* CONFIG_SMP */
diff --git a/arch/riscv/core/thread.c b/arch/riscv/core/thread.c
index 2fecc68a077..896f8e5199d 100644
--- a/arch/riscv/core/thread.c
+++ b/arch/riscv/core/thread.c
@@ -15,7 +15,7 @@
 /*
  * Per-thread (TLS) variable indicating whether execution is in user mode.
  */
-__thread uint8_t is_user_mode;
+Z_THREAD_LOCAL uint8_t is_user_mode;
 #endif
 
 void arch_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
diff --git a/arch/riscv/include/kernel_arch_func.h b/arch/riscv/include/kernel_arch_func.h
index c5ed6ff3f7f..a8fc863c75d 100644
--- a/arch/riscv/include/kernel_arch_func.h
+++ b/arch/riscv/include/kernel_arch_func.h
@@ -18,6 +18,8 @@
 #include 
 #include 
 
+#include 
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -53,6 +55,9 @@ static ALWAYS_INLINE void arch_kernel_init(void)
 #ifdef CONFIG_RISCV_PMP
 	z_riscv_pmp_init();
 #endif
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+	soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
 }
 
 static ALWAYS_INLINE void
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig
index a3746f147f9..1a17bf1eddd 100644
--- a/arch/sparc/Kconfig
+++ b/arch/sparc/Kconfig
@@ -26,6 +26,12 @@ config NUM_IRQS
 	int
 	default 32
 
+config SPARC_SVT
+	bool "Single-vector trapping"
+	help
+	  Use Single-vector trapping (SVT). Defined by SPARC-V8 Embedded (V8E)
+	  Architecture Specification and available in some LEON processors.
+
 config SPARC_CASA
 	bool "CASA instructions"
 	help
diff --git a/arch/sparc/core/CMakeLists.txt b/arch/sparc/core/CMakeLists.txt
index 82ff7906638..cc458404ed8 100644
--- a/arch/sparc/core/CMakeLists.txt
+++ b/arch/sparc/core/CMakeLists.txt
@@ -13,8 +13,9 @@ zephyr_library_sources(
   thread.c
   window_trap.S
   sw_trap_set_pil.S
-  trap_table_mvt.S
 )
 
+zephyr_library_sources_ifdef(CONFIG_SPARC_SVT trap_table_svt.S)
+zephyr_library_sources_ifndef(CONFIG_SPARC_SVT trap_table_mvt.S)
 zephyr_library_sources_ifdef(CONFIG_IRQ_OFFLOAD irq_offload.c)
 zephyr_library_sources_ifdef(CONFIG_THREAD_LOCAL_STORAGE tls.c)
diff --git a/arch/sparc/core/reset_trap.S b/arch/sparc/core/reset_trap.S
index dd4046c47bc..6f1f6c037e3 100644
--- a/arch/sparc/core/reset_trap.S
+++ b/arch/sparc/core/reset_trap.S
@@ -12,6 +12,18 @@
 
 GTEXT(__sparc_trap_reset)
 SECTION_FUNC(TEXT, __sparc_trap_reset)
+#ifdef CONFIG_SPARC_SVT
+#ifdef CONFIG_SOC_SPARC_LEON
+	/* On LEON, enable single vector trapping by setting ASR17.SV. */
+	rd	%asr17, %g1
+	set	(1<<13), %g2
+	or	%g1, %g2, %g1
+	wr	%g1, %asr17
+#else
+#error "Don't know how to enable SVT on this SOC"
+#endif
+#endif
+
 	set	__sparc_trap_table, %g1
 	wr	%g1, %tbr
 	wr	2, %wim
diff --git a/arch/sparc/core/trap_table_svt.S b/arch/sparc/core/trap_table_svt.S
new file mode 100644
index 00000000000..461cc5a51df
--- /dev/null
+++ b/arch/sparc/core/trap_table_svt.S
@@ -0,0 +1,138 @@
+/*
+ * Copyright (c) 2023 Frontgrade Gaisler AB
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * This file contains the trap entry for SPARC operating with
+ * single-vector trap model, defined in SPARC V8E. The processor
+ * redirects execution to a single entry on any trap event. From
+ * there, two levels of look-up tables are used to find the trap
+ * handler.
+ *
+ * - Execution time is constant.
+ * - Condition flags are not modified.
+ * - Provides handler with PSR in l0, TBR in l6
+ * - This SVT implementation is less than 400 bytes long. (An MVT
+ *   table is always 4096 bytes long.)
+ *
+ * See trap_table_mvt.S for information about SPARC trap types.
+ */
+
+#include 
+#include 
+#include 
+
+#ifdef CONFIG_IRQ_OFFLOAD
+ #define IRQ_OFFLOAD_HANDLER    __sparc_trap_irq_offload
+#else
+ #define IRQ_OFFLOAD_HANDLER    __sparc_trap_fault
+#endif
+
+GTEXT(__sparc_trap_table)
+GTEXT(__start)
+
+SECTION_SUBSEC_FUNC(TEXT, traptable, __sparc_trap_table)
+__start:
+	rd	%psr, %l0
+	mov	%tbr, %l6
+
+	and	%l6, 0xf00, %l7
+	srl	%l7, 6, %l7
+	set	__sparc_trap_table_svt_level0, %l4
+	ld	[%l4 + %l7], %l4
+
+	and	%l6, 0x0f0, %l7
+	srl	%l7, 2, %l7
+	ld	[%l4 + %l7], %l4
+
+	srl	%l6, 4, %l3
+	jmp	%l4
+	 and	%l3, 0xf, %l3 /* Interrupt level */
+
+__sparc_trap_svt_in_trap:
+	ta	0x00
+	nop
+
+SECTION_VAR(RODATA, __sparc_trap_table_svt_tables)
+	.align	4
+__sparc_trap_table_svt_level0:
+	.word	__sparc_trap_table_svt_00
+	.word	__sparc_trap_table_svt_10
+	.word	__sparc_trap_table_svt_allbad
+	.word	__sparc_trap_table_svt_allbad
+	.word	__sparc_trap_table_svt_allbad
+	.word	__sparc_trap_table_svt_allbad
+	.word	__sparc_trap_table_svt_allbad
+	.word	__sparc_trap_table_svt_allbad
+	.word	__sparc_trap_table_svt_80
+	.word	__sparc_trap_table_svt_allbad
+	.word	__sparc_trap_table_svt_allbad
+	.word	__sparc_trap_table_svt_allbad
+	.word	__sparc_trap_table_svt_allbad
+	.word	__sparc_trap_table_svt_allbad
+	.word	__sparc_trap_table_svt_allbad
+	.word	__sparc_trap_table_svt_allbad
+
+__sparc_trap_table_svt_00:
+	.word	__sparc_trap_reset
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_window_overflow
+	.word	__sparc_trap_window_underflow
+__sparc_trap_table_svt_allbad:
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+
+__sparc_trap_table_svt_10:
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_interrupt
+	.word	__sparc_trap_interrupt
+	.word	__sparc_trap_interrupt
+	.word	__sparc_trap_interrupt
+	.word	__sparc_trap_interrupt
+	.word	__sparc_trap_interrupt
+	.word	__sparc_trap_interrupt
+	.word	__sparc_trap_interrupt
+	.word	__sparc_trap_interrupt
+	.word	__sparc_trap_interrupt
+	.word	__sparc_trap_interrupt
+	.word	__sparc_trap_interrupt
+	.word	__sparc_trap_interrupt
+	.word	__sparc_trap_interrupt
+	.word	__sparc_trap_interrupt
+
+__sparc_trap_table_svt_80:
+	.word	__sparc_trap_svt_in_trap
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_flush_windows
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_sw_set_pil
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_fault
+	.word	IRQ_OFFLOAD_HANDLER
+	.word	__sparc_trap_fault
+	.word	__sparc_trap_except_reason
diff --git a/arch/sparc/include/kernel_arch_func.h b/arch/sparc/include/kernel_arch_func.h
index 8b79b130ad6..fc59fdf7aa6 100644
--- a/arch/sparc/include/kernel_arch_func.h
+++ b/arch/sparc/include/kernel_arch_func.h
@@ -17,6 +17,8 @@
 
 #include 
 
+#include 
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -24,6 +26,9 @@ extern "C" {
 #ifndef _ASMLANGUAGE
 static ALWAYS_INLINE void arch_kernel_init(void)
 {
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+	soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
 }
 
 void z_sparc_context_switch(struct k_thread *newt, struct k_thread *oldt);
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 52ef70a0d13..46f32f92728 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -417,15 +417,6 @@ config X86_DISABLE_SSBD
 	  Even if enabled, will have no effect on CPUs that do not
 	  require this feature.
 
-config DISABLE_SSBD
-	bool "Disable Speculative Store Bypass [DEPRECATED]"
-	depends on USERSPACE
-	default y if !X86_NO_SPECTRE_V4
-	select X86_DISABLE_SSBD
-	select DEPRECATED
-	help
-	  Deprecated. Use CONFIG_X86_DISABLE_SSBD instead.
-
 config X86_ENABLE_EXTENDED_IBRS
 	bool "Extended IBRS"
 	depends on USERSPACE
@@ -435,15 +426,6 @@ config X86_ENABLE_EXTENDED_IBRS
 	  Speculation 'always on' feature. This mitigates Indirect Branch
 	  Control vulnerabilities (aka Spectre V2).
 
-config ENABLE_EXTENDED_IBRS
-	bool "Extended IBRS [DEPRECATED]"
-	depends on USERSPACE
-	default y if !X86_NO_SPECTRE_V2
-	select X86_ENABLE_EXTENDED_IBRS
-	select DEPRECATED
-	help
-	  Deprecated. Use CONFIG_X86_ENABLE_EXTENDED_IBRS instead.
-
 config X86_BOUNDS_CHECK_BYPASS_MITIGATION
 	bool
 	depends on USERSPACE
diff --git a/arch/x86/core/ia32/coredump.c b/arch/x86/core/ia32/coredump.c
index fb7d0fcfd8c..c443dc4091b 100644
--- a/arch/x86/core/ia32/coredump.c
+++ b/arch/x86/core/ia32/coredump.c
@@ -5,6 +5,7 @@
  */
 
 #include 
+#include 
 #include 
 
 #define ARCH_HDR_VER			1
@@ -80,3 +81,22 @@ uint16_t arch_coredump_tgt_code_get(void)
 {
 	return COREDUMP_TGT_X86;
 }
+
+#if defined(CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK)
+void arch_coredump_priv_stack_dump(struct k_thread *thread)
+{
+	struct z_x86_thread_stack_header *hdr_stack_obj;
+	uintptr_t start_addr, end_addr;
+
+#if defined(CONFIG_THREAD_STACK_MEM_MAPPED)
+	hdr_stack_obj = (struct z_x86_thread_stack_header *)thread->stack_info.mapped.addr;
+#else
+	hdr_stack_obj = (struct z_x86_thread_stack_header *)thread->stack_obj;
+#endif /* CONFIG_THREAD_STACK_MEM_MAPPED) */
+
+	start_addr = (uintptr_t)&hdr_stack_obj->privilege_stack[0];
+	end_addr = start_addr + sizeof(hdr_stack_obj->privilege_stack);
+
+	coredump_memory_dump(start_addr, end_addr);
+}
+#endif /* CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK */
diff --git a/arch/x86/core/intel64/coredump.c b/arch/x86/core/intel64/coredump.c
index 65a9306ca07..68aa04888ee 100644
--- a/arch/x86/core/intel64/coredump.c
+++ b/arch/x86/core/intel64/coredump.c
@@ -5,6 +5,7 @@
  */
 
 #include 
+#include 
 #include 
 
 #define ARCH_HDR_VER			1
@@ -106,3 +107,22 @@ uint16_t arch_coredump_tgt_code_get(void)
 {
 	return COREDUMP_TGT_X86_64;
 }
+
+#if defined(CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK)
+void arch_coredump_priv_stack_dump(struct k_thread *thread)
+{
+	struct z_x86_thread_stack_header *hdr_stack_obj;
+	uintptr_t start_addr, end_addr;
+
+#if defined(CONFIG_THREAD_STACK_MEM_MAPPED)
+	hdr_stack_obj = (struct z_x86_thread_stack_header *)thread->stack_info.mapped.addr;
+#else
+	hdr_stack_obj = (struct z_x86_thread_stack_header *)thread->stack_obj;
+#endif /* CONFIG_THREAD_STACK_MEM_MAPPED) */
+
+	start_addr = (uintptr_t)&hdr_stack_obj->privilege_stack[0];
+	end_addr = start_addr + sizeof(hdr_stack_obj->privilege_stack);
+
+	coredump_memory_dump(start_addr, end_addr);
+}
+#endif /* CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK */
diff --git a/arch/x86/core/intel64/irq_offload.c b/arch/x86/core/intel64/irq_offload.c
index 03ae8a9439b..b38dab33ceb 100644
--- a/arch/x86/core/intel64/irq_offload.c
+++ b/arch/x86/core/intel64/irq_offload.c
@@ -18,8 +18,8 @@
 extern void (*x86_irq_funcs[NR_IRQ_VECTORS])(const void *arg);
 extern const void *x86_irq_args[NR_IRQ_VECTORS];
 
-static void (*irq_offload_funcs[CONFIG_MP_NUM_CPUS])(const void *arg);
-static const void *irq_offload_args[CONFIG_MP_NUM_CPUS];
+static void (*irq_offload_funcs[CONFIG_MP_MAX_NUM_CPUS])(const void *arg);
+static const void *irq_offload_args[CONFIG_MP_MAX_NUM_CPUS];
 
 static void dispatcher(const void *arg)
 {
diff --git a/arch/x86/core/x86_mmu.c b/arch/x86/core/x86_mmu.c
index 566dd2cdfd4..e4188b8670f 100644
--- a/arch/x86/core/x86_mmu.c
+++ b/arch/x86/core/x86_mmu.c
@@ -1281,6 +1281,12 @@ static pentry_t flags_to_entry(uint32_t flags)
 		entry_flags |= ENTRY_XD;
 	}
 
+	if (IS_ENABLED(CONFIG_DEMAND_MAPPING) && (flags & K_MEM_MAP_UNPAGED) != 0U) {
+		/* same state as in arch_mem_page_out() */
+		entry_flags &= ~MMU_P;
+		entry_flags |= MMU_A;
+	}
+
 	return entry_flags;
 }
 
diff --git a/arch/x86/include/ia32/kernel_arch_func.h b/arch/x86/include/ia32/kernel_arch_func.h
index a0521fca3da..686bc18989b 100644
--- a/arch/x86/include/ia32/kernel_arch_func.h
+++ b/arch/x86/include/ia32/kernel_arch_func.h
@@ -14,13 +14,17 @@
 
 #include  /* For size_t */
 
+#include 
+
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 static inline void arch_kernel_init(void)
 {
-	/* No-op on this arch */
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+	soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
 }
 
 static ALWAYS_INLINE void
@@ -33,6 +37,8 @@ arch_thread_return_value_set(struct k_thread *thread, unsigned int value)
 
 extern void arch_cpu_atomic_idle(unsigned int key);
 
+int arch_swap(unsigned int key);
+
 /* ASM code to fiddle with registers to enable the MMU with PAE paging */
 void z_x86_enable_paging(void);
 
diff --git a/arch/x86/include/intel64/kernel_arch_func.h b/arch/x86/include/intel64/kernel_arch_func.h
index abf022fe5fd..da553fd08ac 100644
--- a/arch/x86/include/intel64/kernel_arch_func.h
+++ b/arch/x86/include/intel64/kernel_arch_func.h
@@ -8,6 +8,8 @@
 
 #include 
 
+#include 
+
 #ifndef _ASMLANGUAGE
 
 extern void z_x86_switch(void *switch_to, void **switched_from);
@@ -27,7 +29,9 @@ extern void z_x86_ipi_setup(void);
 
 static inline void arch_kernel_init(void)
 {
-	/* nothing */;
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+	soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
 }
 
 FUNC_NORETURN void z_x86_cpu_init(struct x86_cpuboot *cpuboot);
diff --git a/arch/x86/intel64.cmake b/arch/x86/intel64.cmake
index fcc075addc2..04e9a256f36 100644
--- a/arch/x86/intel64.cmake
+++ b/arch/x86/intel64.cmake
@@ -2,6 +2,7 @@
 # SPDX-License-Identifier: Apache-2.0
 
 zephyr_cc_option(-m64)
+zephyr_cc_option(-mno-red-zone)
 
 set_property(GLOBAL PROPERTY PROPERTY_OUTPUT_ARCH "i386:x86-64")
 set_property(GLOBAL PROPERTY PROPERTY_OUTPUT_FORMAT "elf64-x86-64")
diff --git a/arch/xtensa/CMakeLists.txt b/arch/xtensa/CMakeLists.txt
index 21de223d4ec..75885573405 100644
--- a/arch/xtensa/CMakeLists.txt
+++ b/arch/xtensa/CMakeLists.txt
@@ -7,5 +7,5 @@ add_subdirectory(core)
 if (CONFIG_XTENSA_INSECURE_USERSPACE)
   message(WARNING "
   This userspace implementation uses the window ABI this means that the kernel
-  will spill registers in behave of the userpsace. Use it carefully.")
+  will spill registers on behalf of the userspace. Use it carefully.")
 endif()
diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig
index 8722c879e8b..b69d8bcf02b 100644
--- a/arch/xtensa/Kconfig
+++ b/arch/xtensa/Kconfig
@@ -283,7 +283,7 @@ config XTENSA_SYSCALL_USE_HELPER
 	default y if "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "xt-clang"
 	depends on (XTENSA_MMU || XTENSA_MPU) && USERSPACE
 	help
-	  Use syscall helpers for passing more then 3 arguments.
+	  Use syscall helpers for passing more than 3 arguments.
 	  This is a workaround for toolchains where they have
 	  issue modeling register usage.
 
diff --git a/arch/xtensa/core/CMakeLists.txt b/arch/xtensa/core/CMakeLists.txt
index d03e3641b42..7d7e260ca0b 100644
--- a/arch/xtensa/core/CMakeLists.txt
+++ b/arch/xtensa/core/CMakeLists.txt
@@ -53,7 +53,7 @@ set(CORE_ISA_DM ${CMAKE_BINARY_DIR}/zephyr/include/generated/zephyr/core-isa-dM.
 set(CORE_ISA_IN ${CMAKE_BINARY_DIR}/zephyr/include/generated/core-isa-dM.c)
 file(WRITE ${CORE_ISA_IN} "#include \n")
 add_custom_command(OUTPUT ${CORE_ISA_DM}
-  COMMAND ${CMAKE_C_COMPILER} -E -dM -U__XCC__
+  COMMAND ${CMAKE_C_COMPILER} -E -dM -U__XCC__ ${XTENSA_CORE_LOCAL_C_FLAG}
           -I${ZEPHYR_XTENSA_MODULE_DIR}/zephyr/soc/${CONFIG_SOC}
           -I${SOC_FULL_DIR}
           ${CORE_ISA_IN} -o ${CORE_ISA_DM})
diff --git a/arch/xtensa/core/coredump.c b/arch/xtensa/core/coredump.c
index 0ee1f8992a6..8e4b08ee2fa 100644
--- a/arch/xtensa/core/coredump.c
+++ b/arch/xtensa/core/coredump.c
@@ -5,6 +5,7 @@
  */
 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -189,3 +190,18 @@ uint16_t arch_coredump_tgt_code_get(void)
 {
 	return COREDUMP_TGT_XTENSA;
 }
+
+#if defined(CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK)
+void arch_coredump_priv_stack_dump(struct k_thread *thread)
+{
+	struct xtensa_thread_stack_header *hdr_stack_obj;
+	uintptr_t start_addr, end_addr;
+
+	hdr_stack_obj = (struct xtensa_thread_stack_header *)thread->stack_obj;
+
+	start_addr = (uintptr_t)&hdr_stack_obj->privilege_stack[0];
+	end_addr = start_addr + sizeof(hdr_stack_obj->privilege_stack);
+
+	coredump_memory_dump(start_addr, end_addr);
+}
+#endif /* CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK */
diff --git a/arch/xtensa/core/elf.c b/arch/xtensa/core/elf.c
index e85fab84c69..17337f4a7bc 100644
--- a/arch/xtensa/core/elf.c
+++ b/arch/xtensa/core/elf.c
@@ -6,11 +6,22 @@
 
 #include 
 #include 
+#include 
 #include 
 #include 
 
-LOG_MODULE_DECLARE(llext);
+LOG_MODULE_DECLARE(llext, CONFIG_LLEXT_LOG_LEVEL);
 
+/*
+ * ELF relocation tables on Xtensa contain relocations of different types. They
+ * specify how the relocation should be performed. Which relocations are used
+ * depends on the type of the ELF object (e.g. shared or partially linked
+ * object), structure of the object (single or multiple source files), compiler
+ * flags used (e.g. -fPIC), etc. Also not all relocation table entries should be
+ * acted upon. Some of them describe relocations that have already been
+ * resolved by the linker. We have to distinguish them from actionable
+ * relocations and only need to handle the latter ones.
+ */
 #define R_XTENSA_NONE           0
 #define R_XTENSA_32             1
 #define R_XTENSA_RTLD           2
@@ -18,43 +29,139 @@ LOG_MODULE_DECLARE(llext);
 #define R_XTENSA_JMP_SLOT       4
 #define R_XTENSA_RELATIVE       5
 #define R_XTENSA_PLT            6
+#define R_XTENSA_ASM_EXPAND	11
+#define R_XTENSA_SLOT0_OP	20
+
+static void xtensa_elf_relocate(struct llext_loader *ldr, struct llext *ext,
+				const elf_rela_t *rel, uintptr_t addr,
+				uint8_t *loc, int type, uint32_t stb)
+{
+	elf_word *got_entry = (elf_word *)loc;
+
+	switch (type) {
+	case R_XTENSA_RELATIVE:
+		;
+		/* Relocate a local symbol: Xtensa specific. Seems to only be used with PIC */
+		unsigned int sh_ndx;
+
+		for (sh_ndx = 0; sh_ndx < ext->sect_cnt; sh_ndx++) {
+			if (ext->sect_hdrs[sh_ndx].sh_addr <= *got_entry &&
+			    *got_entry <
+			    ext->sect_hdrs[sh_ndx].sh_addr + ext->sect_hdrs[sh_ndx].sh_size)
+				break;
+		}
+
+		if (sh_ndx == ext->sect_cnt) {
+			LOG_ERR("%#x not found in any of the sections", *got_entry);
+			return;
+		}
+
+		*got_entry += (uintptr_t)llext_loaded_sect_ptr(ldr, ext, sh_ndx) -
+			ext->sect_hdrs[sh_ndx].sh_addr;
+		break;
+	case R_XTENSA_GLOB_DAT:
+	case R_XTENSA_JMP_SLOT:
+		if (stb == STB_GLOBAL) {
+			*got_entry = addr;
+		}
+		break;
+	case R_XTENSA_32:
+		/* Used for both LOCAL and GLOBAL bindings */
+		*got_entry += addr;
+		break;
+	case R_XTENSA_SLOT0_OP:
+		/* Apparently only actionable with LOCAL bindings */
+		;
+		elf_sym_t rsym;
+		int ret = llext_seek(ldr, ldr->sects[LLEXT_MEM_SYMTAB].sh_offset +
+				     ELF_R_SYM(rel->r_info) * sizeof(elf_sym_t));
+
+		if (!ret) {
+			ret = llext_read(ldr, &rsym, sizeof(elf_sym_t));
+		}
+		if (ret) {
+			LOG_ERR("Failed to read a symbol table entry, LLEXT linking might fail.");
+			return;
+		}
+
+		/*
+		 * So far in all observed use-cases
+		 * llext_loaded_sect_ptr(ldr, ext, rsym.st_shndx) was already
+		 * available as the "addr" argument of this function, supplied
+		 * by arch_elf_relocate_local() from its non-STT_SECTION branch.
+		 */
+		uintptr_t link_addr = (uintptr_t)llext_loaded_sect_ptr(ldr, ext, rsym.st_shndx) +
+			rsym.st_value + rel->r_addend;
+		ssize_t value = (link_addr - (((uintptr_t)got_entry + 3) & ~3)) >> 2;
+
+		/* Check the opcode */
+		if ((loc[0] & 0xf) == 1 && !loc[1] && !loc[2]) {
+			/* L32R: low nibble is 1 */
+			loc[1] = value & 0xff;
+			loc[2] = (value >> 8) & 0xff;
+		} else if ((loc[0] & 0xf) == 5 && !(loc[0] & 0xc0) && !loc[1] && !loc[2]) {
+			/* CALLn: low nibble is 5 */
+			loc[0] = (loc[0] & 0x3f) | ((value << 6) & 0xc0);
+			loc[1] = (value >> 2) & 0xff;
+			loc[2] = (value >> 10) & 0xff;
+		} else {
+			LOG_DBG("%p: unhandled OPC or no relocation %02x%02x%02x inf %#x offs %#x",
+				(void *)loc, loc[2], loc[1], loc[0],
+				rel->r_info, rel->r_offset);
+			break;
+		}
+
+		break;
+	case R_XTENSA_ASM_EXPAND:
+		/* Nothing to do */
+		break;
+	default:
+		LOG_DBG("Unsupported relocation type %u", type);
+
+		return;
+	}
+
+	LOG_DBG("Applied relocation to %#x type %u at %p",
+		*(uint32_t *)((uintptr_t)got_entry & ~3), type, (void *)got_entry);
+}
 
 /**
- * @brief Architecture specific function for relocating shared elf
- *
- * Elf files contain a series of relocations described in multiple sections.
- * These relocation instructions are architecture specific and each architecture
- * supporting modules must implement this.
+ * @brief Architecture specific function for STB_LOCAL ELF relocations
  */
-void arch_elf_relocate_local(struct llext_loader *ldr, struct llext *ext,
-			     const elf_rela_t *rel, const elf_sym_t *sym, size_t got_offset)
+void arch_elf_relocate_local(struct llext_loader *ldr, struct llext *ext, const elf_rela_t *rel,
+			     const elf_sym_t *sym, uint8_t *rel_addr,
+			     const struct llext_load_param *ldr_parm)
 {
-	uint8_t *text = ext->mem[LLEXT_MEM_TEXT];
 	int type = ELF32_R_TYPE(rel->r_info);
-	elf_word *got_entry = (elf_word *)(text + got_offset);
 	uintptr_t sh_addr;
 
 	if (ELF_ST_TYPE(sym->st_info) == STT_SECTION) {
-		elf_shdr_t *shdr = llext_peek(ldr, ldr->hdr.e_shoff +
-					      sym->st_shndx * ldr->hdr.e_shentsize);
-		sh_addr = shdr->sh_addr ? : (uintptr_t)llext_peek(ldr, shdr->sh_offset);
+		elf_shdr_t *shdr = ext->sect_hdrs + sym->st_shndx;
+
+		/* shdr->sh_addr is NULL when not built for a specific address */
+		sh_addr = shdr->sh_addr &&
+			(!ldr_parm->section_detached || !ldr_parm->section_detached(shdr)) ?
+			shdr->sh_addr : (uintptr_t)llext_loaded_sect_ptr(ldr, ext, sym->st_shndx);
 	} else {
 		sh_addr = ldr->sects[LLEXT_MEM_TEXT].sh_addr;
 	}
 
-	switch (type) {
-	case R_XTENSA_RELATIVE:
-		/* Relocate a local symbol: Xtensa specific */
-		*got_entry += (uintptr_t)text - sh_addr;
-		break;
-	case R_XTENSA_32:
-		*got_entry += sh_addr;
-		break;
-	default:
-		LOG_DBG("unsupported relocation type %u", type);
+	xtensa_elf_relocate(ldr, ext, rel, sh_addr, rel_addr, type, ELF_ST_BIND(sym->st_info));
+}
 
-		return;
+/**
+ * @brief Architecture specific function for STB_GLOBAL ELF relocations
+ */
+void arch_elf_relocate_global(struct llext_loader *ldr, struct llext *ext, const elf_rela_t *rel,
+			      const elf_sym_t *sym, uint8_t *rel_addr, const void *link_addr)
+{
+	int type = ELF32_R_TYPE(rel->r_info);
+
+	/* For global relocations we expect the initial value for R_XTENSA_RELATIVE to be zero */
+	if (type == R_XTENSA_RELATIVE && *(elf_word *)rel_addr) {
+		LOG_WRN("global: non-zero relative value %#x", *(elf_word *)rel_addr);
 	}
 
-	LOG_DBG("relocation to %#x type %u at %p", *got_entry, type, (void *)got_entry);
+	xtensa_elf_relocate(ldr, ext, rel, (uintptr_t)link_addr, rel_addr, type,
+			    ELF_ST_BIND(sym->st_info));
 }
diff --git a/arch/xtensa/core/prep_c.c b/arch/xtensa/core/prep_c.c
index 990915c5a46..6dbab69f50f 100644
--- a/arch/xtensa/core/prep_c.c
+++ b/arch/xtensa/core/prep_c.c
@@ -13,6 +13,13 @@ extern FUNC_NORETURN void z_cstart(void);
 /* defined by the SoC in case of CONFIG_SOC_HAS_RUNTIME_NUM_CPUS=y */
 extern void soc_num_cpus_init(void);
 
+/* Make sure the platform configuration matches what the toolchain
+ * thinks the hardware is doing.
+ */
+#ifdef CONFIG_DCACHE_LINE_SIZE
+BUILD_ASSERT(CONFIG_DCACHE_LINE_SIZE == XCHAL_DCACHE_LINESIZE);
+#endif
+
 /**
  *
  * @brief Prepare to and run C code
diff --git a/arch/xtensa/core/startup/reset_vector.S b/arch/xtensa/core/startup/reset_vector.S
index 31877614ccd..21f4b25e77e 100644
--- a/arch/xtensa/core/startup/reset_vector.S
+++ b/arch/xtensa/core/startup/reset_vector.S
@@ -104,7 +104,7 @@ _ResetHandler:
 	/* Read PWRSTAT */
 	movi	a2, XDM_MISC_PWRSTAT
 	/* Save area address - retained for later */
-	movi	a3, _xtos_pso_savearea
+	movi	a3, xthal_pso_savearea
 	/* Signature for compare - retained for later */
 	movi	a5, CORE_STATE_SIGNATURE
 	 /* PWRSTAT value - retained for later */
@@ -229,7 +229,7 @@ _ResetHandler:
 	 * MEMCTL register was already restored earlier, and as a side
 	 * effect, registers a3, a5, a7 are now preloaded with values
 	 * that we will use here.
-	 * a3 - pointer to save area base address (_xtos_pso_savearea)
+	 * a3 - pointer to save area base address (xthal_pso_savearea)
 	 * a5 - saved state signature (CORE_STATE_SIGNATURE)
 	 * a7 - contents of PWRSTAT register
 	 */
@@ -343,11 +343,11 @@ _ResetHandler:
 
 	/* make shutoff routine return zero */
 	movi	a2, 0
-	movi	a3, _xtos_pso_savearea
+	movi	a3, xthal_pso_savearea
 	/* Here, as below for _start, call0 is used as an unlimited-range
 	 * jump.
 	 */
-	call0	_xtos_core_restore_nw
+	call0	xthal_core_restore_nw
 	/*  (does not return) */
 .Lcoldstart:
 #endif
diff --git a/arch/xtensa/core/syscall_helper.c b/arch/xtensa/core/syscall_helper.c
index 24feda91c80..f9673e67814 100644
--- a/arch/xtensa/core/syscall_helper.c
+++ b/arch/xtensa/core/syscall_helper.c
@@ -12,10 +12,10 @@
 #include 
 
 #ifdef CONFIG_XTENSA_SYSCALL_USE_HELPER
-uintptr_t xtensa_syscall_helper(uintptr_t arg1, uintptr_t arg2,
-				uintptr_t arg3, uintptr_t arg4,
-				uintptr_t arg5, uintptr_t arg6,
-				uintptr_t call_id)
+uintptr_t xtensa_syscall_helper_args_6(uintptr_t arg1, uintptr_t arg2,
+				       uintptr_t arg3, uintptr_t arg4,
+				       uintptr_t arg5, uintptr_t arg6,
+				       uintptr_t call_id)
 {
 	register uintptr_t a2 __asm__("%a2") = call_id;
 	register uintptr_t a6 __asm__("%a6") = arg1;
@@ -33,6 +33,101 @@ uintptr_t xtensa_syscall_helper(uintptr_t arg1, uintptr_t arg2,
 
 	return a2;
 }
+
+uintptr_t xtensa_syscall_helper_args_5(uintptr_t arg1, uintptr_t arg2,
+				       uintptr_t arg3, uintptr_t arg4,
+				       uintptr_t arg5, uintptr_t call_id)
+{
+	register uintptr_t a2 __asm__("%a2") = call_id;
+	register uintptr_t a6 __asm__("%a6") = arg1;
+	register uintptr_t a3 __asm__("%a3") = arg2;
+	register uintptr_t a4 __asm__("%a4") = arg3;
+	register uintptr_t a5 __asm__("%a5") = arg4;
+	register uintptr_t a8 __asm__("%a8") = arg5;
+
+	__asm__ volatile("syscall\n\t"
+			 : "=r" (a2)
+			 : "r" (a2), "r" (a6), "r" (a3), "r" (a4),
+			   "r" (a5), "r" (a8)
+			 : "memory");
+
+	return a2;
+}
+
+uintptr_t xtensa_syscall_helper_args_4(uintptr_t arg1, uintptr_t arg2,
+				       uintptr_t arg3, uintptr_t arg4,
+				       uintptr_t call_id)
+{
+	register uintptr_t a2 __asm__("%a2") = call_id;
+	register uintptr_t a6 __asm__("%a6") = arg1;
+	register uintptr_t a3 __asm__("%a3") = arg2;
+	register uintptr_t a4 __asm__("%a4") = arg3;
+	register uintptr_t a5 __asm__("%a5") = arg4;
+
+	__asm__ volatile("syscall\n\t"
+			 : "=r" (a2)
+			 : "r" (a2), "r" (a6), "r" (a3), "r" (a4),
+			   "r" (a5)
+			 : "memory");
+
+	return a2;
+}
+
+uintptr_t xtensa_syscall_helper_args_3(uintptr_t arg1, uintptr_t arg2,
+				       uintptr_t arg3, uintptr_t call_id)
+{
+	register uintptr_t a2 __asm__("%a2") = call_id;
+	register uintptr_t a6 __asm__("%a6") = arg1;
+	register uintptr_t a3 __asm__("%a3") = arg2;
+	register uintptr_t a4 __asm__("%a4") = arg3;
+
+	__asm__ volatile("syscall\n\t"
+			 : "=r" (a2)
+			 : "r" (a2), "r" (a6), "r" (a3), "r" (a4)
+			 : "memory");
+
+	return a2;
+}
+
+uintptr_t xtensa_syscall_helper_args_2(uintptr_t arg1, uintptr_t arg2,
+				       uintptr_t call_id)
+{
+	register uintptr_t a2 __asm__("%a2") = call_id;
+	register uintptr_t a6 __asm__("%a6") = arg1;
+	register uintptr_t a3 __asm__("%a3") = arg2;
+
+	__asm__ volatile("syscall\n\t"
+			 : "=r" (a2)
+			 : "r" (a2), "r" (a6), "r" (a3)
+			 : "memory");
+
+	return a2;
+}
+
+uintptr_t xtensa_syscall_helper_args_1(uintptr_t arg1, uintptr_t call_id)
+{
+	register uintptr_t a2 __asm__("%a2") = call_id;
+	register uintptr_t a6 __asm__("%a6") = arg1;
+
+	__asm__ volatile("syscall\n\t"
+			 : "=r" (a2)
+			 : "r" (a2), "r" (a6)
+			 : "memory");
+
+	return a2;
+}
+
+uintptr_t xtensa_syscall_helper_args_0(uintptr_t call_id)
+{
+	register uintptr_t a2 __asm__("%a2") = call_id;
+
+	__asm__ volatile("syscall\n\t"
+			 : "=r" (a2)
+			 : "r" (a2)
+			 : "memory");
+
+	return a2;
+}
 #endif /* CONFIG_XTENSA_SYSCALL_USE_HELPER */
 
 #if XCHAL_HAVE_THREADPTR == 0
diff --git a/arch/xtensa/core/thread.c b/arch/xtensa/core/thread.c
index f59c8274994..f9b8179173d 100644
--- a/arch/xtensa/core/thread.c
+++ b/arch/xtensa/core/thread.c
@@ -22,7 +22,7 @@ LOG_MODULE_DECLARE(os, CONFIG_KERNEL_LOG_LEVEL);
 /*
  * Per-thread (TLS) variable indicating whether execution is in user mode.
  */
-__thread uint32_t is_user_mode;
+Z_THREAD_LOCAL uint32_t is_user_mode;
 #endif
 
 #endif /* CONFIG_USERSPACE */
diff --git a/arch/xtensa/include/kernel_arch_func.h b/arch/xtensa/include/kernel_arch_func.h
index 4b5bac74ead..5e735dedfff 100644
--- a/arch/xtensa/include/kernel_arch_func.h
+++ b/arch/xtensa/include/kernel_arch_func.h
@@ -14,6 +14,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 
 #ifdef __cplusplus
@@ -25,14 +26,16 @@ K_KERNEL_STACK_ARRAY_DECLARE(z_interrupt_stacks, CONFIG_MP_MAX_NUM_CPUS,
 
 static ALWAYS_INLINE void arch_kernel_init(void)
 {
-
+#ifdef CONFIG_SOC_PER_CORE_INIT_HOOK
+	soc_per_core_init_hook();
+#endif /* CONFIG_SOC_PER_CORE_INIT_HOOK */
 }
 
 void xtensa_switch(void *switch_to, void **switched_from);
 
 static ALWAYS_INLINE void arch_switch(void *switch_to, void **switched_from)
 {
-	return xtensa_switch(switch_to, switched_from);
+	xtensa_switch(switch_to, switched_from);
 }
 
 #ifdef CONFIG_KERNEL_COHERENCE
diff --git a/boards/01space/esp32c3_042_oled/Kconfig b/boards/01space/esp32c3_042_oled/Kconfig
new file mode 100644
index 00000000000..c6a99b1032d
--- /dev/null
+++ b/boards/01space/esp32c3_042_oled/Kconfig
@@ -0,0 +1,6 @@
+# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd.
+# SPDX-License-Identifier: Apache-2.0
+
+config HEAP_MEM_POOL_ADD_SIZE_BOARD
+	int
+	default 4096
diff --git a/boards/01space/esp32c3_042_oled/Kconfig.defconfig b/boards/01space/esp32c3_042_oled/Kconfig.defconfig
deleted file mode 100644
index 4171bb04bc2..00000000000
--- a/boards/01space/esp32c3_042_oled/Kconfig.defconfig
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright 2022 Google LLC
-# SPDX-License-Identifier: Apache-2.0
-
-config HEAP_MEM_POOL_ADD_SIZE_BOARD
-	int
-	default 65535 if WIFI && BT
-	default 51200 if WIFI
-	default 40960 if BT
-	default 4096
diff --git a/boards/01space/esp32c3_042_oled/Kconfig.esp32c3_042_oled b/boards/01space/esp32c3_042_oled/Kconfig.esp32c3_042_oled
index 8b0fbf42eab..ca56668cfee 100644
--- a/boards/01space/esp32c3_042_oled/Kconfig.esp32c3_042_oled
+++ b/boards/01space/esp32c3_042_oled/Kconfig.esp32c3_042_oled
@@ -2,4 +2,4 @@
 # SPDX-License-Identifier: Apache-2.0
 
 config BOARD_ESP32C3_042_OLED
-	select SOC_ESP32C3_FX4
+	select SOC_ESP32C3_FH4
diff --git a/boards/01space/esp32c3_042_oled/doc/index.rst b/boards/01space/esp32c3_042_oled/doc/index.rst
index b8f3cbe7bc9..29fcfc78615 100644
--- a/boards/01space/esp32c3_042_oled/doc/index.rst
+++ b/boards/01space/esp32c3_042_oled/doc/index.rst
@@ -1,7 +1,4 @@
-.. _01space_esp32c3_042_oled:
-
-ESP32C3 0.42 OLED
-#################
+.. zephyr:board:: esp32c3_042_oled
 
 Overview
 ********
@@ -11,12 +8,6 @@ RISC-V WiFi/Bluetooth dual-mode chip.
 
 For more details see the `01space ESP32C3 0.42 OLED`_ Github repo.
 
-.. figure:: img/esp32c3_042_oled.webp
-   :align: center
-   :alt: 01space ESP32C3 0.42 OLED
-
-   01space ESP32C3 0.42 OLED
-
 Hardware
 ********
 
diff --git a/boards/01space/esp32c3_042_oled/esp32c3_042_oled.dts b/boards/01space/esp32c3_042_oled/esp32c3_042_oled.dts
index c7680c0b152..70f83f398e7 100644
--- a/boards/01space/esp32c3_042_oled/esp32c3_042_oled.dts
+++ b/boards/01space/esp32c3_042_oled/esp32c3_042_oled.dts
@@ -9,12 +9,13 @@
 
 #include 
 #include "esp32c3_042_oled-pinctrl.dtsi"
+#include 
 
 / {
 	model = "01space ESP32C3 0.42 OLED";
 
 	chosen {
-		zephyr,sram = &sram0;
+		zephyr,sram = &sram1;
 		zephyr,console = &usb_serial;
 		zephyr,shell-uart = &usb_serial;
 		zephyr,flash = &flash0;
@@ -104,37 +105,3 @@
 &esp32_bt_hci {
 	status = "okay";
 };
-
-&flash0 {
-	partitions {
-		compatible = "fixed-partitions";
-		#address-cells = <1>;
-		#size-cells = <1>;
-
-		boot_partition: partition@0 {
-			label = "mcuboot";
-			reg = <0x00000000 0x0000F000>;
-			read-only;
-		};
-
-		slot0_partition: partition@10000 {
-			label = "image-0";
-			reg = <0x00010000 0x00100000>;
-		};
-
-		slot1_partition: partition@110000 {
-			label = "image-1";
-			reg = <0x00110000 0x00100000>;
-		};
-
-		scratch_partition: partition@210000 {
-			label = "image-scratch";
-			reg = <0x00210000 0x00040000>;
-		};
-
-		storage_partition: partition@250000 {
-			label = "storage";
-			reg = <0x00250000 0x00006000>;
-		};
-	};
-};
diff --git a/boards/01space/esp32c3_042_oled/esp32c3_042_oled.yaml b/boards/01space/esp32c3_042_oled/esp32c3_042_oled.yaml
index 4f9e9c93778..579094df443 100644
--- a/boards/01space/esp32c3_042_oled/esp32c3_042_oled.yaml
+++ b/boards/01space/esp32c3_042_oled/esp32c3_042_oled.yaml
@@ -11,8 +11,4 @@ supported:
   - spi
   - uart
   - watchdog
-testing:
-  ignore_tags:
-    - net
-    - bluetooth
 vendor: 01space
diff --git a/boards/96boards/aerocore2/96b_aerocore2.dts b/boards/96boards/aerocore2/96b_aerocore2.dts
index dd5f8d8a895..028887cef16 100644
--- a/boards/96boards/aerocore2/96b_aerocore2.dts
+++ b/boards/96boards/aerocore2/96b_aerocore2.dts
@@ -179,7 +179,7 @@ zephyr_udc0: &usbotg_fs {
 	pinctrl-0 = <&adc1_in10_pc0 &adc1_in11_pc1
 		     &adc1_in12_pc2 &adc1_in13_pc3>;
 	pinctrl-names = "default";
-	st,adc-clock-source = ;
+	st,adc-clock-source = "SYNC";
 	st,adc-prescaler = <2>;
 	status = "okay";
 };
diff --git a/boards/96boards/argonkey/96b_argonkey.dts b/boards/96boards/argonkey/96b_argonkey.dts
index a7c02dcb881..e19b022c26a 100644
--- a/boards/96boards/argonkey/96b_argonkey.dts
+++ b/boards/96boards/argonkey/96b_argonkey.dts
@@ -71,7 +71,9 @@
 	div-m = <8>;
 	mul-n = <192>;
 	div-r = <3>;
-	status = "okay";
+	div-q = <4>;
+	clocks = <&clk_hse>;
+	status = "okay"; /* 48MHz on PLLI2SQ */
 };
 
 &rcc {
diff --git a/boards/96boards/avenger96/96b_avenger96.yaml b/boards/96boards/avenger96/96b_avenger96.yaml
index 5d50bcd6943..ef14d1b879d 100644
--- a/boards/96boards/avenger96/96b_avenger96.yaml
+++ b/boards/96boards/avenger96/96b_avenger96.yaml
@@ -14,7 +14,6 @@ testing:
     - cmsis_rtos_v2
     - net
     - mpu
-    - tinycrypt
     - crypto
     - aes
     - cmm
diff --git a/boards/96boards/carbon/Kconfig.defconfig b/boards/96boards/carbon/Kconfig.defconfig
index 2cf1bbdc6fc..a680c5e19f8 100644
--- a/boards/96boards/carbon/Kconfig.defconfig
+++ b/boards/96boards/carbon/Kconfig.defconfig
@@ -9,21 +9,8 @@ config SPI_STM32_INTERRUPT
 	default y
 	depends on SPI
 
-if BT
-
-config SPI
-	default y
-
-config BT_SPI
-	default y
-
-endif # BT
-
 endif # BOARD_96B_CARBON_STM32F401XE
 
 if BOARD_96B_CARBON_NRF51822
 
-config BT_CTLR
-	default BT
-
 endif # BOARD_96B_CARBON_NRF51822
diff --git a/boards/96boards/meerkat96/96b_meerkat96_mcimx7d_m4_defconfig b/boards/96boards/meerkat96/96b_meerkat96_mcimx7d_m4_defconfig
index 90dfb85138a..d421425ca19 100644
--- a/boards/96boards/meerkat96/96b_meerkat96_mcimx7d_m4_defconfig
+++ b/boards/96boards/meerkat96/96b_meerkat96_mcimx7d_m4_defconfig
@@ -12,7 +12,4 @@ CONFIG_UART_INTERRUPT_DRIVEN=y
 CONFIG_CONSOLE=y
 CONFIG_UART_CONSOLE=y
 
-# pinctrl
-CONFIG_PINCTRL=y
-
 CONFIG_XIP=y
diff --git a/boards/96boards/neonkey/doc/index.rst b/boards/96boards/neonkey/doc/index.rst
index df9fb1619c1..b69b94a4712 100644
--- a/boards/96boards/neonkey/doc/index.rst
+++ b/boards/96boards/neonkey/doc/index.rst
@@ -216,6 +216,8 @@ GDB instance. To reattach, just follow the same steps above, till
 References
 **********
 
+.. target-notes::
+
 .. _96Boards website:
    https://www.96boards.org/product/neonkey/
 
diff --git a/boards/96boards/nitrogen/Kconfig.defconfig b/boards/96boards/nitrogen/Kconfig.defconfig
index c1686a82539..19571eb4ef4 100644
--- a/boards/96boards/nitrogen/Kconfig.defconfig
+++ b/boards/96boards/nitrogen/Kconfig.defconfig
@@ -5,7 +5,4 @@
 
 if BOARD_96B_NITROGEN
 
-config BT_CTLR
-	default BT
-
 endif # BOARD_96B_NITROGEN
diff --git a/boards/96boards/stm32_sensor_mez/96b_stm32_sensor_mez.dts b/boards/96boards/stm32_sensor_mez/96b_stm32_sensor_mez.dts
index 80281ae098d..f20a91c6aca 100644
--- a/boards/96boards/stm32_sensor_mez/96b_stm32_sensor_mez.dts
+++ b/boards/96boards/stm32_sensor_mez/96b_stm32_sensor_mez.dts
@@ -75,7 +75,9 @@
 	div-m = <8>;
 	mul-n = <192>;
 	div-r = <3>;
-	status = "okay";
+	div-q = <4>;
+	clocks = <&clk_hse>;
+	status = "okay"; /* 48MHz on PLLI2SQ */
 };
 
 &rcc {
diff --git a/boards/96boards/wistrio/doc/96b_wistrio.rst b/boards/96boards/wistrio/doc/96b_wistrio.rst
index 8db31fcf6cb..9fe756efe6b 100644
--- a/boards/96boards/wistrio/doc/96b_wistrio.rst
+++ b/boards/96boards/wistrio/doc/96b_wistrio.rst
@@ -189,6 +189,8 @@ GDB instance. To reattach, just follow the same steps above, till
 References
 **********
 
+.. target-notes::
+
 .. _AN2606:
    https://www.st.com/resource/en/application_note/cd00167594.pdf
 
diff --git a/boards/Kconfig b/boards/Kconfig
index 8f186b32caf..40e8e5006e1 100644
--- a/boards/Kconfig
+++ b/boards/Kconfig
@@ -128,6 +128,20 @@ config QEMU_EXTRA_FLAGS
 	  to setup devices, for example to allocate interface for Zephyr
 	  GDBstub over serial with `-serial tcp:127.0.0.1:5678,server`
 
+config BOARD_REQUIRES_SERIAL_BACKEND_CDC_ACM
+	bool
+	help
+	  Indicates that a board has no other capabilities than to use the CDC
+	  ACM UART as a backend for logging or shell.
+
+config BOARD_SERIAL_BACKEND_CDC_ACM
+	bool "Board uses USB CDC ACM UART as serial backend"
+	depends on BOARD_REQUIRES_SERIAL_BACKEND_CDC_ACM
+	default y
+	help
+	  USB stack and CDC ACM UART are configured and initialized at boot
+	  time to be used as a backend for logging or shell.
+
 # There might not be any board options, hence the optional source
 osource "$(KCONFIG_BOARD_DIR)/Kconfig"
 endmenu
diff --git a/boards/aconno/acn52832/Kconfig.defconfig b/boards/aconno/acn52832/Kconfig.defconfig
index 10c5ce95ed8..57fd066809c 100644
--- a/boards/aconno/acn52832/Kconfig.defconfig
+++ b/boards/aconno/acn52832/Kconfig.defconfig
@@ -5,7 +5,4 @@
 
 if BOARD_ACN52832
 
-config BT_CTLR
-	default BT
-
 endif # BOARD_ACN52832
diff --git a/boards/aconno/acn52832/doc/index.rst b/boards/aconno/acn52832/doc/index.rst
index ff0c98cd91a..3e773c91a2a 100644
--- a/boards/aconno/acn52832/doc/index.rst
+++ b/boards/aconno/acn52832/doc/index.rst
@@ -1,7 +1,4 @@
-.. _acn52832:
-
-acn52832
-########
+.. zephyr:board:: acn52832
 
 Overview
 ********
diff --git a/boards/acrn/acrn/acrn.dts b/boards/acrn/acrn/acrn.dts
index dbd30373e34..8d7376daf70 100644
--- a/boards/acrn/acrn/acrn.dts
+++ b/boards/acrn/acrn/acrn.dts
@@ -46,3 +46,7 @@
 	status = "okay";
 	current-speed = <115200>;
 };
+
+&cpu {
+	compatible = "intel,x86_64";
+};
diff --git a/boards/acrn/acrn/acrn_defconfig b/boards/acrn/acrn/acrn_defconfig
index 0ec5c2b2564..9a3ce5de7c7 100644
--- a/boards/acrn/acrn/acrn_defconfig
+++ b/boards/acrn/acrn/acrn_defconfig
@@ -13,4 +13,3 @@ CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=25000000
 CONFIG_BUILD_OUTPUT_BIN=y
 CONFIG_SHELL_BACKEND_SERIAL_INTERRUPT_DRIVEN=n
 CONFIG_KERNEL_VM_SIZE=0x1000000
-CONFIG_BUILD_NO_GAP_FILL=y
diff --git a/boards/acrn/acrn/acrn_ehl_crb_defconfig b/boards/acrn/acrn/acrn_ehl_crb_defconfig
index f7b256d2c84..9f81e9975a4 100644
--- a/boards/acrn/acrn/acrn_ehl_crb_defconfig
+++ b/boards/acrn/acrn/acrn_ehl_crb_defconfig
@@ -13,7 +13,6 @@ CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=1900000000
 CONFIG_BUILD_OUTPUT_BIN=y
 CONFIG_SHELL_BACKEND_SERIAL_INTERRUPT_DRIVEN=n
 CONFIG_KERNEL_VM_SIZE=0x1000000
-CONFIG_BUILD_NO_GAP_FILL=y
 CONFIG_APIC_TSC_DEADLINE_TIMER=y
 CONFIG_APIC_TIMER_IRQ_PRIORITY=1
 CONFIG_SMP=y
diff --git a/boards/actinius/icarus/doc/index.rst b/boards/actinius/icarus/doc/index.rst
index 8092c53c8c9..4ac623efe2f 100644
--- a/boards/actinius/icarus/doc/index.rst
+++ b/boards/actinius/icarus/doc/index.rst
@@ -1,17 +1,8 @@
-.. _actinius_icarus:
-
-Actinius Icarus
-###############
+.. zephyr:board:: actinius_icarus
 
 Overview
 ********
 
-.. figure:: img/Icarus_front.jpg
-     :align: center
-     :alt: Icarus IoT Dev Board
-
-     Icarus IoT Dev Board (nRF9160 Feather)
-
 The Icarus is a cost-effective cellular IoT board in Adafruit's Feather/FeatherWing
 form factor. It is built around Nordic Semi's nRF9160 modem and combines
 LTE-M, NB-IoT, GPS, accelerometer, USB, LiPo charger as well as
diff --git a/boards/actinius/icarus_bee/doc/index.rst b/boards/actinius/icarus_bee/doc/index.rst
index 630d0aa07c7..32378c92d45 100644
--- a/boards/actinius/icarus_bee/doc/index.rst
+++ b/boards/actinius/icarus_bee/doc/index.rst
@@ -1,17 +1,8 @@
-.. _actinius_icarus_bee:
-
-Actinius Icarus Bee
-###################
+.. zephyr:board:: actinius_icarus_bee
 
 Overview
 ********
 
-.. figure:: img/icarus-bee.jpg
-     :align: center
-     :alt: Icarus Bee
-
-     Icarus Bee (nRF9160 Bee)
-
 The Icarus Bee is a cellular IoT board in Bee/xBee form factor.
 It is built around Nordic Semi's nRF9160 modem and combines
 LTE-M, NB-IoT, GPS, accelerometer, SPI Flash, RGB LED, Button,
diff --git a/boards/actinius/icarus_som/doc/index.rst b/boards/actinius/icarus_som/doc/index.rst
index f3206e63fe3..ea4f47a4cf3 100644
--- a/boards/actinius/icarus_som/doc/index.rst
+++ b/boards/actinius/icarus_som/doc/index.rst
@@ -1,17 +1,8 @@
-.. _actinius_icarus_som:
-
-Actinius Icarus SoM
-###################
+.. zephyr:board:: actinius_icarus_som
 
 Overview
 ********
 
-.. figure:: img/icarus-som.jpg
-     :align: center
-     :alt: Icarus SoM
-
-     Icarus SoM (nRF9160)
-
 The Icarus SoM is a coin-sized, easy-to-solder cellular IoT Module
 built around Nordic Semi's nRF9160 modem and combines
 LTE-M, NB-IoT, GPS, accelerometer as well as an eSIM and option for
diff --git a/boards/actinius/icarus_som_dk/doc/img/icarus-som-dk.jpg b/boards/actinius/icarus_som_dk/doc/img/icarus_som_dk.jpg
similarity index 100%
rename from boards/actinius/icarus_som_dk/doc/img/icarus-som-dk.jpg
rename to boards/actinius/icarus_som_dk/doc/img/icarus_som_dk.jpg
diff --git a/boards/actinius/icarus_som_dk/doc/img/icarus-som-dk-block-diagram.jpg b/boards/actinius/icarus_som_dk/doc/img/icarus_som_dk_block_diagram.jpg
similarity index 100%
rename from boards/actinius/icarus_som_dk/doc/img/icarus-som-dk-block-diagram.jpg
rename to boards/actinius/icarus_som_dk/doc/img/icarus_som_dk_block_diagram.jpg
diff --git a/boards/actinius/icarus_som_dk/doc/index.rst b/boards/actinius/icarus_som_dk/doc/index.rst
index c0d0a940339..bca73ddbde7 100644
--- a/boards/actinius/icarus_som_dk/doc/index.rst
+++ b/boards/actinius/icarus_som_dk/doc/index.rst
@@ -1,18 +1,8 @@
-.. _actinius_icarus_som_dk:
-
-Actinius Icarus SoM DK
-######################
+.. zephyr:board:: actinius_icarus_som_dk
 
 Overview
 ********
 
-.. figure:: img/icarus-som-dk.jpg
-     :width: 450px
-     :align: center
-     :alt: Icarus SoM DK
-
-     Icarus SoM Development Kit (nRF9160)
-
 The Icarus SoM DK is a single board development kit for
 evaluation and development on the Icarus SoM (`Icarus SoM Docs`_).
 The Icarus SoM features the nRF9160 SiP from Nordic Semiconductor,
@@ -42,7 +32,7 @@ following devices (provided directly by Nordic):
 * :abbr:`WDT (Watchdog Timer)`
 * :abbr:`IDAU (Implementation Defined Attribution Unit)`
 
-.. figure:: img/icarus-som-dk-block-diagram.jpg
+.. figure:: img/icarus_som_dk_block_diagram.jpg
      :width: 450px
      :align: center
      :alt: Icarus SoM DK Block Diagram
diff --git a/boards/adafruit/feather_m0_basic_proto/doc/index.rst b/boards/adafruit/feather_m0_basic_proto/doc/index.rst
index a01fe241d59..20d1cd4750a 100644
--- a/boards/adafruit/feather_m0_basic_proto/doc/index.rst
+++ b/boards/adafruit/feather_m0_basic_proto/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adafruit_feather_m0_basic_proto:
-
-Adafruit Feather M0 Basic Proto
-###############################
+.. zephyr:board:: adafruit_feather_m0_basic_proto
 
 Overview
 ********
@@ -11,10 +8,6 @@ board with an onboard battery connector and charger for 3.7 V lithium
 polymer batteries, charging status indicator and user LEDs, native USB
 connector, 20 I/O pins, and a small prototyping area.
 
-.. image:: img/adafruit_feather_m0_basic_proto.jpg
-     :align: center
-     :alt: Adafruit Feather M0 Basic Proto
-
 Hardware
 ********
 
diff --git a/boards/adafruit/feather_m0_lora/doc/index.rst b/boards/adafruit/feather_m0_lora/doc/index.rst
index 92d63b36ce3..7a3e9fc78bf 100644
--- a/boards/adafruit/feather_m0_lora/doc/index.rst
+++ b/boards/adafruit/feather_m0_lora/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adafruit_feather_m0_lora:
-
-Adafruit Feather M0 LoRa
-########################
+.. zephyr:board:: adafruit_feather_m0_lora
 
 Overview
 ********
@@ -11,10 +8,6 @@ boards with an onboard battery connector and charger for 3.7 V lithium
 polymer batteries, charging status indicator and user LEDs, native USB
 connector, 20 I/O pins, and a LoRa radio module from Semtech.
 
-.. image:: img/adafruit_feather_m0_lora.jpg
-     :align: center
-     :alt: Adafruit Feather M0 LoRa
-
 Hardware
 ********
 
diff --git a/boards/adafruit/feather_m4_express/Kconfig.adafruit_feather_m4_express b/boards/adafruit/feather_m4_express/Kconfig.adafruit_feather_m4_express
new file mode 100644
index 00000000000..747fade8f4a
--- /dev/null
+++ b/boards/adafruit/feather_m4_express/Kconfig.adafruit_feather_m4_express
@@ -0,0 +1,5 @@
+# Copyright (c) 2024 Daikin Comfort Technologies North America, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+config BOARD_ADAFRUIT_FEATHER_M4_EXPRESS
+	select SOC_SAMD51J19A
diff --git a/boards/adafruit/feather_m4_express/adafruit_feather_m4_express-pinctrl.dtsi b/boards/adafruit/feather_m4_express/adafruit_feather_m4_express-pinctrl.dtsi
new file mode 100644
index 00000000000..a96cf644f40
--- /dev/null
+++ b/boards/adafruit/feather_m4_express/adafruit_feather_m4_express-pinctrl.dtsi
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2022, Gerson Fernando Budke 
+ * Copyright (c) 2024 Daikin Comfort Technologies North America, Inc.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include 
+
+&pinctrl {
+	sercom1_spi_default: sercom1_spi_default {
+		group1 {
+			pinmux = ,
+				 ,
+				 ;
+		};
+	};
+
+	sercom2_i2c_default: sercom3_i2c_default {
+		group1 {
+			pinmux = ,
+				 ;
+		};
+	};
+
+	sercom5_uart_default: sercom5_uart_default {
+		group1 {
+			pinmux = ,
+				 ;
+		};
+	};
+
+	pwm0_default: pwm0_default {
+		group1 {
+			pinmux = ;
+		};
+	};
+
+	tc0_default: tc0_default {
+		group1 {
+			pinmux = ;
+		};
+	};
+
+	usb_dc_default: usb_dc_default {
+		group1 {
+			pinmux = ,
+				 ;
+		};
+	};
+};
diff --git a/boards/adafruit/feather_m4_express/adafruit_feather_m4_express.dts b/boards/adafruit/feather_m4_express/adafruit_feather_m4_express.dts
new file mode 100644
index 00000000000..a77a3d2b7ae
--- /dev/null
+++ b/boards/adafruit/feather_m4_express/adafruit_feather_m4_express.dts
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2020 Google LLC.
+ * Copyright (c) 2024 Daikin Comfort Technologies North America, Inc.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/dts-v1/;
+#include 
+#include "adafruit_feather_m4_express-pinctrl.dtsi"
+
+/ {
+	model = "Adafruit Feather M4 Express";
+	compatible = "adafruit,feather-m4-express";
+
+	chosen {
+		zephyr,console = &sercom5;
+		zephyr,shell-uart = &sercom5;
+		zephyr,sram = &sram0;
+		zephyr,flash = &flash0;
+		zephyr,code-partition = &code_partition;
+	};
+
+	/* These aliases are provided for compatibility with samples */
+	aliases {
+		led0 = &led0;
+		pwm-0 = &tcc0;
+		pwm-1 = &tc0;
+	};
+
+	leds {
+		compatible = "gpio-leds";
+		led0: led_0 {
+			gpios = <&porta 23 0>;
+			label = "LED";
+		};
+	};
+};
+
+&cpu0 {
+	clock-frequency = <120000000>;
+};
+
+&sercom5 {
+	status = "okay";
+	compatible = "atmel,sam0-uart";
+	current-speed = <115200>;
+	rxpo = <1>;
+	txpo = <0>;
+	pinctrl-0 = <&sercom5_uart_default>;
+	pinctrl-names = "default";
+};
+
+&sercom1 {
+	status = "okay";
+	compatible = "atmel,sam0-spi";
+	dipo = <3>;
+	dopo = <0>;
+	#address-cells = <1>;
+	#size-cells = <0>;
+	pinctrl-0 = <&sercom1_spi_default>;
+	pinctrl-names = "default";
+};
+
+&tcc0 {
+	status = "okay";
+	compatible = "atmel,sam0-tcc-pwm";
+	prescaler = <8>;
+	#pwm-cells = <2>;
+	pinctrl-0 = <&pwm0_default>;
+	pinctrl-names = "default";
+};
+
+&tc0 {
+	status = "okay";
+	compatible = "atmel,sam0-tc-pwm";
+	prescaler = <1024>;
+	#pwm-cells = <2>;
+	channels = <2>;
+	counter-size = <16>;
+	pinctrl-0 = <&tc0_default>;
+	pinctrl-names = "default";
+};
+
+zephyr_udc0: &usb0 {
+	status = "okay";
+	pinctrl-0 = <&usb_dc_default>;
+	pinctrl-names = "default";
+};
+
+&dmac {
+	status = "okay";
+};
+
+&flash0 {
+	partitions {
+		compatible = "fixed-partitions";
+		#address-cells = <1>;
+		#size-cells = <1>;
+
+		boot_partition: partition@0 {
+			label = "uf2";
+			reg = <0x00000000 DT_SIZE_K(16)>;
+			read-only;
+		};
+
+		code_partition: partition@4000 {
+			label = "code";
+			reg = <0x4000 DT_SIZE_K(512-16-16)>;
+			read-only;
+		};
+
+		/*
+		 * The final 16 KiB is reserved for the application.
+		 * Storage partition will be used by FCB/LittleFS/NVS
+		 * if enabled.
+		 */
+		storage_partition: partition@7c000 {
+			label = "storage";
+			reg = <0x7c000 DT_SIZE_K(16)>;
+		};
+	};
+};
diff --git a/boards/adafruit/feather_m4_express/adafruit_feather_m4_express.yaml b/boards/adafruit/feather_m4_express/adafruit_feather_m4_express.yaml
new file mode 100644
index 00000000000..a8d50925d9f
--- /dev/null
+++ b/boards/adafruit/feather_m4_express/adafruit_feather_m4_express.yaml
@@ -0,0 +1,20 @@
+identifier: adafruit_feather_m4_express
+name: Adafruit Feather M4 Express
+type: mcu
+arch: arm
+ram: 192
+flash: 512
+toolchain:
+  - zephyr
+  - gnuarmemb
+  - xtools
+supported:
+  - dma
+  - gpio
+  - hwinfo
+  - pwm
+  - spi
+  - uart
+  - usb_device
+  - watchdog
+vendor: adafruit
diff --git a/boards/adafruit/feather_m4_express/adafruit_feather_m4_express_defconfig b/boards/adafruit/feather_m4_express/adafruit_feather_m4_express_defconfig
new file mode 100644
index 00000000000..5cb651c5bb6
--- /dev/null
+++ b/boards/adafruit/feather_m4_express/adafruit_feather_m4_express_defconfig
@@ -0,0 +1,17 @@
+# Copyright (c) 2024 Daikin Comfort Technologies North America, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+CONFIG_SOC_ATMEL_SAMD5X_OSCULP32K_AS_MAIN=y
+
+CONFIG_BOOTLOADER_BOSSA=y
+CONFIG_BOOTLOADER_BOSSA_ADAFRUIT_UF2=y
+CONFIG_BUILD_OUTPUT_HEX=y
+CONFIG_BUILD_OUTPUT_UF2=y
+
+CONFIG_ARM_MPU=y
+CONFIG_HW_STACK_PROTECTION=y
+
+CONFIG_CONSOLE=y
+CONFIG_SERIAL=y
+CONFIG_UART_CONSOLE=y
+CONFIG_UART_INTERRUPT_DRIVEN=y
diff --git a/boards/adafruit/feather_m4_express/board.cmake b/boards/adafruit/feather_m4_express/board.cmake
new file mode 100644
index 00000000000..e240a42f36a
--- /dev/null
+++ b/boards/adafruit/feather_m4_express/board.cmake
@@ -0,0 +1,5 @@
+# Copyright (c) 2020 Google LLC.
+# SPDX-License-Identifier: Apache-2.0
+
+include(${ZEPHYR_BASE}/boards/common/bossac.board.cmake)
+include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)
diff --git a/boards/adafruit/feather_m4_express/board.yml b/boards/adafruit/feather_m4_express/board.yml
new file mode 100644
index 00000000000..5b9961e1f9e
--- /dev/null
+++ b/boards/adafruit/feather_m4_express/board.yml
@@ -0,0 +1,6 @@
+board:
+  name: adafruit_feather_m4_express
+  full_name: Feather M4 Express
+  vendor: adafruit
+  socs:
+    - name: samd51j19a
diff --git a/boards/adafruit/feather_m4_express/doc/img/adafruit_feather_m4_express.webp b/boards/adafruit/feather_m4_express/doc/img/adafruit_feather_m4_express.webp
new file mode 100644
index 00000000000..62ad405f9de
Binary files /dev/null and b/boards/adafruit/feather_m4_express/doc/img/adafruit_feather_m4_express.webp differ
diff --git a/boards/adafruit/feather_m4_express/doc/index.rst b/boards/adafruit/feather_m4_express/doc/index.rst
new file mode 100644
index 00000000000..a4178626eee
--- /dev/null
+++ b/boards/adafruit/feather_m4_express/doc/index.rst
@@ -0,0 +1,201 @@
+.. zephyr:board:: adafruit_feather_m4_express
+
+Overview
+********
+
+The Adafruit Feather M4 Express is a compact, lightweight
+ARM development board with an onboard mini NeoPixel, 2 MiB
+of SPI flash, charging status indicator and user LEDs, USB
+connector, 21 GPIO pins and a small prototyping area.
+
+Hardware
+********
+
+- ATSAMD51J19A ARM Cortex-M4 processor at 120 MHz
+- 512 KiB of flash memory and 192 KiB of RAM
+- 2 MiB of SPI flash
+- Internal trimmed 8 MHz oscillator
+- A user LED
+- An RGB NeoPixel LED
+- Native USB port
+- One reset button
+
+Supported Features
+==================
+
+The ``adafruit_feather_m4_express`` board target supports the following
+hardware features:
+
++-----------+------------+------------------------------------------+
+| Interface | Controller | Driver/Component                         |
++===========+============+==========================================+
+| SYSTICK   | on-chip    | systick                                  |
++-----------+------------+------------------------------------------+
+| WDT       | on-chip    | Watchdog                                 |
++-----------+------------+------------------------------------------+
+| GPIO      | on-chip    | I/O ports                                |
++-----------+------------+------------------------------------------+
+| USART     | on-chip    | Serial ports                             |
++-----------+------------+------------------------------------------+
+| SPI       | on-chip    | Serial Peripheral Interface ports        |
++-----------+------------+------------------------------------------+
+| TRNG      | on-chip    | True Random Number Generator             |
++-----------+------------+------------------------------------------+
+| HWINFO    | on-chip    | Unique 128 bit serial number             |
++-----------+------------+------------------------------------------+
+| RTC       | on-chip    | Real-Time Counter                        |
++-----------+------------+------------------------------------------+
+| USB       | on-chip    | USB device                               |
++-----------+------------+------------------------------------------+
+| WDT       | on-chip    | Watchdog Timer                           |
++-----------+------------+------------------------------------------+
+| PWM       | on-chip    | PWM                                      |
++-----------+------------+------------------------------------------+
+
+Other hardware features are not currently supported by Zephyr.
+
+The default configuration can be found in the Kconfig file
+:zephyr_file:`boards/adafruit/feather_m4_express/adafruit_feather_m4_express_defconfig`.
+
+Zephyr can use the default Cortex-M SYSTICK timer or the SAM0 specific RTC.
+To use the RTC, set :code:`CONFIG_CORTEX_M_SYSTICK=n` and set
+:code:`CONFIG_SYS_CLOCK_TICKS_PER_SEC` to no more than 32 kHZ divided by 7,
+i.e. no more than 4500.
+
+Connections and IOs
+===================
+
+The `Adafruit Learning System`_ has detailed information about
+the board including `pinouts`_ and the `schematic`_.
+
+System Clock
+============
+
+The SAMD51 MCU is configured to use the 32 kHz internal oscillator
+with the on-chip PLL generating the 120 MHz system clock.
+
+Serial Port
+===========
+
+The SAMD51 MCU has 6 SERCOM based USARTs.  On the Feather, SERCOM5 is
+the Zephyr console and is available on pins 0 (RX) and 1 (TX).
+
+SPI Port
+========
+
+The SAMD51 MCU has 6 SERCOM based SPIs. On the Feather, SERCOM1 can be put
+into SPI mode and used to connect to devices over the SCK (SCLK), MO (MOSI), and
+MI (MISO) pins.
+
+PWM
+===
+
+The SAMD51 has three PWM generators with up to six channels each.  :code:`TCC_0`
+has a resolution of 24 bits and all other generators are 16 bit.  :code:`TCC_1`
+pin 2 is mapped to PA18 (D7) and pin 3 is mapped to PA19 (D9).
+
+USB Device Port
+===============
+
+The SAMD51 MCU has a USB device port that can be used to communicate
+with a host PC.  See the :ref:`usb` sample applications for
+more, such as the :zephyr:code-sample:`usb-cdc-acm` sample which sets up a virtual
+serial port that echos characters back to the host PC.
+
+Programming and Debugging
+*************************
+
+The Feather ships with a the BOSSA compatible UF2 bootloader.  The
+bootloader can be entered by quickly tapping the reset button twice.
+
+Additionally, if :kconfig:option:`CONFIG_USB_CDC_ACM` is enabled then the
+bootloader will be entered automatically when you run :code:`west flash`.
+
+Flashing
+========
+
+#. Build the Zephyr kernel and the :zephyr:code-sample:`hello_world` sample application:
+
+   .. zephyr-app-commands::
+      :zephyr-app: samples/hello_world
+      :board: adafruit_feather_m4_express
+      :goals: build
+      :compact:
+
+#. Connect the feather to your host computer using USB
+
+#. Connect a 3.3 V USB to serial adapter to the board and to the
+   host.  See the `Serial Port`_ section above for the board's pin
+   connections.
+
+#. Run your favorite terminal program to listen for output. Under Linux the
+   terminal should be :code:`/dev/ttyUSB0`. For example:
+
+   .. code-block:: console
+
+      $ minicom -D /dev/ttyUSB0 -o
+
+   The -o option tells minicom not to send the modem initialization
+   string. Connection should be configured as follows:
+
+   - Speed: 115200
+   - Data: 8 bits
+   - Parity: None
+   - Stop bits: 1
+
+#. Tap the reset button twice quickly to enter bootloader mode
+
+#. Flash the image:
+
+   .. zephyr-app-commands::
+      :zephyr-app: samples/hello_world
+      :board: adafruit_feather_m4_express
+      :goals: flash
+      :compact:
+
+   You should see "Hello World! adafruit_feather_m4_express" in your terminal.
+
+Debugging
+=========
+
+In addition to the built-in bootloader, the Feather can be flashed and
+debugged using a SWD probe such as the Segger J-Link.
+
+#. Connect the board to the probe by connecting the :code:`SWCLK`,
+   :code:`SWDIO`, :code:`RESET`, :code:`GND`, and :code:`3V3` pins on the
+   Feather to the :code:`SWCLK`, :code:`SWDIO`, :code:`RESET`, :code:`GND`,
+   and :code:`VTref` pins on the `J-Link`_.
+
+#. Flash the image:
+
+   .. zephyr-app-commands::
+      :zephyr-app: samples/hello_world
+      :board: adafruit_feather_m4_express
+      :goals: flash
+      :flash-args: -r openocd
+      :compact:
+
+#. Start debugging:
+
+   .. zephyr-app-commands::
+      :zephyr-app: samples/hello_world
+      :board: adafruit_feather_m4_express
+      :goals: debug
+      :compact:
+
+References
+**********
+
+.. target-notes::
+
+.. _Adafruit Learning System:
+    https://learn.adafruit.com/adafruit-feather-m4-express-atsamd51
+
+.. _pinouts:
+    https://learn.adafruit.com/adafruit-feather-m4-express-atsamd51/pinouts
+
+.. _schematic:
+    https://learn.adafruit.com/adafruit-feather-m4-express-atsamd51/downloads
+
+.. _J-Link:
+    https://www.segger.com/products/debug-probes/j-link/technology/interface-description/
diff --git a/boards/adafruit/feather_m4_express/pre_dt_board.cmake b/boards/adafruit/feather_m4_express/pre_dt_board.cmake
new file mode 100644
index 00000000000..9be9a0b9771
--- /dev/null
+++ b/boards/adafruit/feather_m4_express/pre_dt_board.cmake
@@ -0,0 +1,7 @@
+# Copyright (c) 2021 Linaro Limited
+# SPDX-License-Identifier: Apache-2.0
+
+# Suppress "unique_unit_address_if_enabled" to handle the following overlaps:
+# - /soc/pinmux@41004400 & /soc/gpio@41004400
+# - /soc/pinmux@41004480 & /soc/gpio@41004480
+list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled")
diff --git a/boards/adafruit/feather_m4_express/support/openocd.cfg b/boards/adafruit/feather_m4_express/support/openocd.cfg
new file mode 100644
index 00000000000..9990cf9036a
--- /dev/null
+++ b/boards/adafruit/feather_m4_express/support/openocd.cfg
@@ -0,0 +1,21 @@
+source [find interface/jlink.cfg]
+
+transport select swd
+
+set CHIPNAME atsamd51j19a
+source [find target/atsame5x.cfg]
+
+# TODO(http://openocd.zylin.com/#/c/5706/): lower the clock speed to workaround
+# an erase timeout.
+adapter speed 500
+reset_config srst_only
+
+$_TARGETNAME configure -event gdb-attach {
+        echo "Debugger attaching: halting execution"
+        reset halt
+}
+
+$_TARGETNAME configure -event gdb-detach {
+        echo "Debugger detaching: resuming execution"
+        resume
+}
diff --git a/boards/adafruit/feather_nrf52840/Kconfig.defconfig b/boards/adafruit/feather_nrf52840/Kconfig.defconfig
index 5e42fcfb8aa..f6351510d2f 100644
--- a/boards/adafruit/feather_nrf52840/Kconfig.defconfig
+++ b/boards/adafruit/feather_nrf52840/Kconfig.defconfig
@@ -6,7 +6,10 @@
 
 if BOARD_ADAFRUIT_FEATHER_NRF52840
 
-config BT_CTLR
-	default BT
+if BOARD_ADAFRUIT_FEATHER_NRF52840_NRF52840_UF2 || BOARD_ADAFRUIT_FEATHER_NRF52840_NRF52840_SENSE_UF2
+
+source "boards/common/usb/Kconfig.cdc_acm_serial.defconfig"
+
+endif
 
 endif # BOARD_ADAFRUIT_FEATHER_NRF52840
diff --git a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_flash_uf2.dtsi b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_flash_uf2.dtsi
deleted file mode 100644
index 805b853ce31..00000000000
--- a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_flash_uf2.dtsi
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2024 Jacob Winther
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Default flash layout for nrf52840 using UF2
- */
-
-/ {
-	chosen {
-		zephyr,sram = &sram0;
-		zephyr,flash = &flash0;
-		zephyr,code-partition = &code_partition;
-	};
-};
-
-&flash0 {
-	partitions {
-		compatible = "fixed-partitions";
-		#address-cells = <1>;
-		#size-cells = <1>;
-
-		/* To enable flashing with UF2 bootloader, we
-		 * must reserve a partition for SoftDevice.
-		 * See https://learn.adafruit.com/
-		 *     introducing-the-adafruit-nrf52840-feather?view=all#hathach-memory-map
-		 */
-		reserved_partition_0: partition@0 {
-			label = "SoftDevice";
-			read-only;
-			reg = <0x000000000 DT_SIZE_K(152)>;
-		};
-		code_partition: partition@26000 {
-			label = "Application";
-			reg = <0x00026000 DT_SIZE_K(796)>;
-		};
-
-		/*
-		 * The flash starting at 0x000ed000 and ending at
-		 * 0x000f4000 is reserved for use by the application.
-		 */
-		storage_partition: partition@ed000 {
-			label = "storage";
-			reg = <0x0000ed000 DT_SIZE_K(28)>;
-		};
-
-		boot_partition: partition@f4000 {
-			label = "UF2";
-			read-only;
-			reg = <0x000f4000 DT_SIZE_K(48)>;
-		};
-	};
-};
diff --git a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense.yaml b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense.yaml
index 276870f44d3..e4a94b6bb36 100644
--- a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense.yaml
+++ b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense.yaml
@@ -9,7 +9,6 @@ toolchain:
 supported:
   - adc
   - usb_device
-  - usb_cdc
   - ble
   - watchdog
   - counter
diff --git a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2.dts b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2.dts
index 0ad7ee1e960..faafb8381fe 100644
--- a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2.dts
+++ b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2.dts
@@ -7,20 +7,13 @@
 
 /dts-v1/;
 #include "adafruit_feather_nrf52840_common.dtsi"
-#include "adafruit_feather_nrf52840_flash_uf2.dtsi"
+#include 
+#include <../boards/common/usb/cdc_acm_serial.dtsi>
 
 / {
 	model = "Adafruit Feather nRF52840 Sense";
 	compatible = "adafruit,feather-nrf52840-sense-uf2";
 
-	chosen {
-		zephyr,console = &cdc_acm_uart0;
-		zephyr,shell-uart = &cdc_acm_uart0;
-		zephyr,uart-mcumgr = &cdc_acm_uart0;
-		zephyr,bt-mon-uart = &cdc_acm_uart0;
-		zephyr,bt-c2h-uart = &cdc_acm_uart0;
-	};
-
 	leds {
 		led0: led_0 {
 			gpios = <&gpio1 9 0>;
@@ -34,9 +27,3 @@
 		reg = <0x44>;
 	};
 };
-
-zephyr_udc0: &usbd {
-	cdc_acm_uart0: cdc_acm_uart0 {
-		compatible = "zephyr,cdc-acm-uart";
-	};
-};
diff --git a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2.yaml b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2.yaml
index 08eb1eaa7f1..a5f095b336b 100644
--- a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2.yaml
+++ b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2.yaml
@@ -9,7 +9,6 @@ toolchain:
 supported:
   - adc
   - usb_device
-  - usb_cdc
   - ble
   - watchdog
   - counter
diff --git a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2_defconfig b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2_defconfig
index 18c22c337d0..42f7298af55 100644
--- a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2_defconfig
+++ b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_sense_uf2_defconfig
@@ -17,11 +17,5 @@ CONFIG_UART_CONSOLE=y
 CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y
 CONFIG_CLOCK_CONTROL_NRF_K32SRC_500PPM=y
 
-# Logger cannot use itself to log
-CONFIG_USB_CDC_ACM_LOG_LEVEL_OFF=y
-
-# Enable USB
-CONFIG_USB_DEVICE_STACK=y
-
 # Build UF2 by default, supported by the Adafruit nRF52 Bootloader
 CONFIG_BUILD_OUTPUT_UF2=y
diff --git a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_uf2.dts b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_uf2.dts
index 33f2d3e598c..f4c30d6aec0 100644
--- a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_uf2.dts
+++ b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_uf2.dts
@@ -6,29 +6,16 @@
 
 /dts-v1/;
 #include "adafruit_feather_nrf52840_common.dtsi"
-#include "adafruit_feather_nrf52840_flash_uf2.dtsi"
+#include 
+#include <../boards/common/usb/cdc_acm_serial.dtsi>
 
 / {
 	model = "Adafruit Feather nRF52840 Express";
 	compatible = "adafruit,feather-nrf52840-uf2";
 
-	chosen {
-		zephyr,console = &cdc_acm_uart0;
-		zephyr,shell-uart = &cdc_acm_uart0;
-		zephyr,uart-mcumgr = &cdc_acm_uart0;
-		zephyr,bt-mon-uart = &cdc_acm_uart0;
-		zephyr,bt-c2h-uart = &cdc_acm_uart0;
-	};
-
 	leds {
 		led0: led_0 {
 			gpios = <&gpio1 15 0>;
 		};
 	};
 };
-
-zephyr_udc0: &usbd {
-	cdc_acm_uart0: cdc_acm_uart0 {
-		compatible = "zephyr,cdc-acm-uart";
-	};
-};
diff --git a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_uf2_defconfig b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_uf2_defconfig
index f6ec2097646..a40094157e3 100644
--- a/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_uf2_defconfig
+++ b/boards/adafruit/feather_nrf52840/adafruit_feather_nrf52840_nrf52840_uf2_defconfig
@@ -13,11 +13,5 @@ CONFIG_SERIAL=y
 CONFIG_CONSOLE=y
 CONFIG_UART_CONSOLE=y
 
-# Logger cannot use itself to log
-CONFIG_USB_CDC_ACM_LOG_LEVEL_OFF=y
-
-# Enable USB
-CONFIG_USB_DEVICE_STACK=y
-
 # Build UF2 by default, supported by the Adafruit nRF52 Bootloader
 CONFIG_BUILD_OUTPUT_UF2=y
diff --git a/boards/adafruit/feather_nrf52840/doc/index.rst b/boards/adafruit/feather_nrf52840/doc/index.rst
index 7ab630978d4..6f2477e673f 100644
--- a/boards/adafruit/feather_nrf52840/doc/index.rst
+++ b/boards/adafruit/feather_nrf52840/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adafruit_feather_nrf52840:
-
-Adafruit Feather nRF52840 (Express, Sense)
-##########################################
+.. zephyr:board:: adafruit_feather_nrf52840
 
 Overview
 ********
diff --git a/boards/adafruit/feather_stm32f405/adafruit_feather_stm32f405.yaml b/boards/adafruit/feather_stm32f405/adafruit_feather_stm32f405.yaml
index f71d8d7cab3..858b4fcf6db 100644
--- a/boards/adafruit/feather_stm32f405/adafruit_feather_stm32f405.yaml
+++ b/boards/adafruit/feather_stm32f405/adafruit_feather_stm32f405.yaml
@@ -11,7 +11,6 @@ flash: 1024
 supported:
   - i2c
   - spi
-  - usb
   - feather_serial
   - feather_i2c
   - feather_spi
diff --git a/boards/adafruit/feather_stm32f405/doc/index.rst b/boards/adafruit/feather_stm32f405/doc/index.rst
index 47d70537e69..0cc6c327760 100644
--- a/boards/adafruit/feather_stm32f405/doc/index.rst
+++ b/boards/adafruit/feather_stm32f405/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adafruit_feather_stm32f405:
-
-Adafruit Feather STM32F405 Express
-##################################
+.. zephyr:board:: adafruit_feather_stm32f405
 
 Overview
 ********
@@ -12,10 +9,6 @@ devices labeled as Feathers or FeatherWings. The board is equipped
 with a lithium ion battery charger, native USB C connector, 2MB of
 external flash memory, and SD card socket.
 
-.. image:: img/adafruit_feather_stm32f405.jpg
-     :align: center
-     :alt: Adafruit Feather STM32F405 Express
-
 Hardware
 ********
 
diff --git a/boards/adafruit/grand_central_m4_express/adafruit_grand_central_m4_express.dts b/boards/adafruit/grand_central_m4_express/adafruit_grand_central_m4_express.dts
index 5cc038332b1..24ffdf89acf 100644
--- a/boards/adafruit/grand_central_m4_express/adafruit_grand_central_m4_express.dts
+++ b/boards/adafruit/grand_central_m4_express/adafruit_grand_central_m4_express.dts
@@ -72,6 +72,7 @@
 		mmc {
 			status = "okay";
 			compatible = "zephyr,sdmmc-disk";
+			disk-name = "SD";
 		};
 	};
 };
diff --git a/boards/adafruit/grand_central_m4_express/doc/index.rst b/boards/adafruit/grand_central_m4_express/doc/index.rst
index 0244fa73f87..4bab8889967 100644
--- a/boards/adafruit/grand_central_m4_express/doc/index.rst
+++ b/boards/adafruit/grand_central_m4_express/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adafruit_grand_central_m4_express:
-
-Adafruit Grand Central M4 Express
-#################################
+.. zephyr:board:: adafruit_grand_central_m4_express
 
 Overview
 ********
@@ -10,13 +7,6 @@ The Adafruit Grand Central M4 Express is an ARM development board with the
 form factor of an Arduino Mega.
 It features 70 GPIO pins, a microSDHC slot and 8MiB of QSPI Flash.
 
-.. figure:: img/adafruit_grand_central_m4_express.webp
-   :width: 800px
-   :align: center
-   :alt: Adafruit Grand Central M4 Express
-
-   Adafruit Grand Central M4 Express (Credit: Kattni Rembor / Adafruit)
-
 Hardware
 ********
 
diff --git a/boards/adafruit/itsybitsy/Kconfig b/boards/adafruit/itsybitsy/Kconfig
deleted file mode 100644
index 8aa3368ffd6..00000000000
--- a/boards/adafruit/itsybitsy/Kconfig
+++ /dev/null
@@ -1,9 +0,0 @@
-# Adafruit ItsyBitsy nRF52840 Express board configuration
-
-# Copyright (c) 2022 Embla Flatlandsmo 
-# SPDX-License-Identifier: Apache-2.0
-
-config BOARD_SERIAL_BACKEND_CDC_ACM
-	bool "USB CDC"
-	default y
-	depends on BOARD_ADAFRUIT_ITSYBITSY
diff --git a/boards/adafruit/itsybitsy/Kconfig.defconfig b/boards/adafruit/itsybitsy/Kconfig.defconfig
index b637497e148..02cbfc35fe2 100644
--- a/boards/adafruit/itsybitsy/Kconfig.defconfig
+++ b/boards/adafruit/itsybitsy/Kconfig.defconfig
@@ -5,49 +5,6 @@
 
 if BOARD_ADAFRUIT_ITSYBITSY
 
-config BT_CTLR
-	default BT
-
-if BOARD_SERIAL_BACKEND_CDC_ACM
-
-config USB_DEVICE_STACK
-	default y
-
-config USB_CDC_ACM
-	default SERIAL
-
-config UART_CONSOLE
-	default CONSOLE
-
-config USB_DEVICE_INITIALIZE_AT_BOOT
-	default y if CONSOLE
-
-config SHELL_BACKEND_SERIAL_CHECK_DTR
-	default SHELL
-	depends on UART_LINE_CTRL
-
-config UART_LINE_CTRL
-	default SHELL
-
-config USB_DEVICE_REMOTE_WAKEUP
-	default n
-
-if LOG
-
-# Logger cannot use itself to log
-config USB_CDC_ACM_LOG_LEVEL
-	default 0
-
-# Set USB log level to error only
-config USB_DEVICE_LOG_LEVEL
-	default 1
-
-# Wait 1500ms at startup for logging
-config LOG_PROCESS_THREAD_STARTUP_DELAY_MS
-	default 1500
-
-endif # LOG
-
-endif # BOARD_SERIAL_BACKEND_CDC_ACM
+source "boards/common/usb/Kconfig.cdc_acm_serial.defconfig"
 
 endif # BOARD_ADAFRUIT_ITSYBITSY
diff --git a/boards/adafruit/itsybitsy/adafruit_itsybitsy_nrf52840.dts b/boards/adafruit/itsybitsy/adafruit_itsybitsy_nrf52840.dts
index 087ddc17307..a4ff029e93b 100644
--- a/boards/adafruit/itsybitsy/adafruit_itsybitsy_nrf52840.dts
+++ b/boards/adafruit/itsybitsy/adafruit_itsybitsy_nrf52840.dts
@@ -6,6 +6,7 @@
 
 /dts-v1/;
 #include 
+#include 
 #include "adafruit_itsybitsy_nrf52840-pinctrl.dtsi"
 #include 
 #include 
@@ -15,14 +16,6 @@
 	compatible = "adafruit,itsybitsy-nrf52840";
 
 	chosen {
-		zephyr,console = &cdc_acm_uart0;
-		zephyr,shell-uart = &cdc_acm_uart0;
-		zephyr,uart-mcumgr = &cdc_acm_uart0;
-		zephyr,bt-mon-uart = &cdc_acm_uart0;
-		zephyr,bt-c2h-uart = &cdc_acm_uart0;
-		zephyr,sram = &sram0;
-		zephyr,flash = &flash0;
-		zephyr,code-partition = &code_partition;
 		zephyr,ieee802154 = &ieee802154;
 	};
 
@@ -142,41 +135,6 @@
 	status = "okay";
 };
 
-&flash0 {
-	partitions {
-		compatible = "fixed-partitions";
-		#address-cells = <1>;
-		#size-cells = <1>;
-
-		/* To enable flashing with UF2 bootloader, we
-		 * must reserve a partition for SoftDevice.
-		 * See https://learn.adafruit.com/introducing-the-adafruit-nrf52840-feather?view=all#hathach-memory-map
-		 */
-		reserved_partition_0: partition@0 {
-			label = "SoftDevice";
-			reg = <0x000000000 DT_SIZE_K(152)>;
-		};
-		code_partition: partition@26000 {
-			label = "Application";
-			reg = <0x00026000 DT_SIZE_K(796)>;
-		};
-
-		/*
-		 * The flash starting at 0x000ed000 and ending at
-		 * 0x000f4000 is reserved for use by the application.
-		 */
-		storage_partition: partition@ed000 {
-			label = "storage";
-			reg = <0x0000ed000 DT_SIZE_K(28)>;
-		};
-
-		boot_partition: partition@f4000 {
-			label = "UF2";
-			reg = <0x000f4000 DT_SIZE_K(48)>;
-		};
-	};
-};
-
 &gd25q16 {
 	partitions {
 		compatible = "fixed-partitions";
@@ -192,8 +150,6 @@
 zephyr_udc0: &usbd {
 	compatible = "nordic,nrf-usbd";
 	status = "okay";
-
-	cdc_acm_uart0: cdc_acm_uart0 {
-		compatible = "zephyr,cdc-acm-uart";
-	};
 };
+
+#include <../boards/common/usb/cdc_acm_serial.dtsi>
diff --git a/boards/adafruit/itsybitsy/doc/index.rst b/boards/adafruit/itsybitsy/doc/index.rst
index c2e4330c04d..3fbcb918adb 100644
--- a/boards/adafruit/itsybitsy/doc/index.rst
+++ b/boards/adafruit/itsybitsy/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adafruit_itsybitsy_nrf52840:
-
-Adafruit ItsyBitsy nRF52840
-###########################
+.. zephyr:board:: adafruit_itsybitsy
 
 Overview
 ********
@@ -29,10 +26,6 @@ This development kit has the following features:
 * :abbr:`USB (Universal Serial Bus)`
 * :abbr:`WDT (Watchdog Timer)`
 
-.. image:: img/adafruit_itsybitsy_nrf52840.jpeg
-     :align: center
-     :alt: Adafruit ItsyBitsy nRF52840 Express
-
 Hardware
 ********
 - nRF52840 ARM Cortex-M4F CPU at 64MHz
diff --git a/boards/adafruit/itsybitsy_m4_express/doc/index.rst b/boards/adafruit/itsybitsy_m4_express/doc/index.rst
index 2ab1f7a5853..31e19cb8a99 100644
--- a/boards/adafruit/itsybitsy_m4_express/doc/index.rst
+++ b/boards/adafruit/itsybitsy_m4_express/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adafruit_itsybitsy_m4_express:
-
-Adafruit ItsyBitsy M4 Express
-#############################
+.. zephyr:board:: adafruit_itsybitsy_m4_express
 
 Overview
 ********
@@ -10,10 +7,6 @@ The Adafruit ItsyBitsy M4 express is a small (36 mm x 18 mm) ARM development
 board with an onboard RGB LED, USB port, 2 MiB of SPI flash, and range of I/O
 broken out onto 23 GPIO pins.
 
-.. image:: img/adafruit_itsybitsy_m4_express.jpg
-     :align: center
-     :alt: Adafruit ItsyBitsy M4 Express
-
 Hardware
 ********
 
diff --git a/boards/adafruit/kb2040/Kconfig b/boards/adafruit/kb2040/Kconfig
new file mode 100644
index 00000000000..b17df8fa389
--- /dev/null
+++ b/boards/adafruit/kb2040/Kconfig
@@ -0,0 +1,5 @@
+# Copyright (c) 2022 Peter Johanson
+# SPDX-License-Identifier: Apache-2.0
+
+config BOARD_ADAFRUIT_KB2040
+	select RP2_FLASH_W25Q080
diff --git a/boards/adafruit/kb2040/Kconfig.defconfig b/boards/adafruit/kb2040/Kconfig.defconfig
index e17682abac0..7cf4aec08f0 100644
--- a/boards/adafruit/kb2040/Kconfig.defconfig
+++ b/boards/adafruit/kb2040/Kconfig.defconfig
@@ -3,9 +3,6 @@
 
 if BOARD_ADAFRUIT_KB2040
 
-config RP2_FLASH_W25Q080
-	default y
-
 if I2C_DW
 
 config I2C_DW_CLOCK_SPEED
diff --git a/boards/adafruit/kb2040/adafruit_kb2040-pinctrl.dtsi b/boards/adafruit/kb2040/adafruit_kb2040-pinctrl.dtsi
index cf1289acedc..79681bb8ad3 100644
--- a/boards/adafruit/kb2040/adafruit_kb2040-pinctrl.dtsi
+++ b/boards/adafruit/kb2040/adafruit_kb2040-pinctrl.dtsi
@@ -48,9 +48,6 @@
 		};
 	};
 
-	clocks_default: clocks_default {
-	};
-
 	ws2812_pio0_default: ws2812_pio0_default {
 		ws2812 {
 			pinmux = ;
diff --git a/boards/adafruit/kb2040/adafruit_kb2040.dts b/boards/adafruit/kb2040/adafruit_kb2040.dts
index 45ff45595d2..d7de09cddac 100644
--- a/boards/adafruit/kb2040/adafruit_kb2040.dts
+++ b/boards/adafruit/kb2040/adafruit_kb2040.dts
@@ -7,7 +7,7 @@
 
 /dts-v1/;
 
-#include 
+#include 
 #include "adafruit_kb2040-pinctrl.dtsi"
 #include "sparkfun_pro_micro_connector.dtsi"
 #include 
@@ -56,11 +56,6 @@
 	};
 };
 
-&clocks {
-	pinctrl-0 = <&clocks_default>;
-	pinctrl-names = "default";
-};
-
 &uart0 {
 	current-speed = <115200>;
 	status = "okay";
@@ -127,3 +122,7 @@ zephyr_udc0: &usbd {
 	regulator-always-on;
 	regulator-allowed-modes = ;
 };
+
+&xosc {
+	startup-delay-multiplier = <64>;
+};
diff --git a/boards/adafruit/kb2040/doc/index.rst b/boards/adafruit/kb2040/doc/index.rst
index 58b53aec815..f1b5d998dc8 100644
--- a/boards/adafruit/kb2040/doc/index.rst
+++ b/boards/adafruit/kb2040/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adafruit_kb2040:
-
-Adafruit KB2040
-###############
+.. zephyr:board:: adafruit_kb2040
 
 Overview
 ********
@@ -27,13 +24,6 @@ Hardware
 - On-board RGB LED
 - 1 Watchdog timer peripheral
 
-
-.. figure:: img/kb2040.jpg
-     :align: center
-     :alt: Adafruit KB2040
-
-     Adafruit KB2040 (Image courtesy of Adafruit)
-
 Supported Features
 ==================
 
diff --git a/boards/adafruit/nrf52_adafruit_feather/Kconfig.defconfig b/boards/adafruit/nrf52_adafruit_feather/Kconfig.defconfig
index 48cb9d7332d..b1259e40915 100644
--- a/boards/adafruit/nrf52_adafruit_feather/Kconfig.defconfig
+++ b/boards/adafruit/nrf52_adafruit_feather/Kconfig.defconfig
@@ -5,7 +5,4 @@
 
 if BOARD_NRF52_ADAFRUIT_FEATHER
 
-config BT_CTLR
-	default BT
-
 endif # BOARD_NRF52_ADAFRUIT_FEATHER
diff --git a/boards/adafruit/nrf52_adafruit_feather/doc/index.rst b/boards/adafruit/nrf52_adafruit_feather/doc/index.rst
index 1fff89aaeab..c84bc73f62b 100644
--- a/boards/adafruit/nrf52_adafruit_feather/doc/index.rst
+++ b/boards/adafruit/nrf52_adafruit_feather/doc/index.rst
@@ -1,7 +1,4 @@
-.. _nrf52_adafruit_feather:
-
-nRF52 Adafruit Feather
-######################
+.. zephyr:board:: nrf52_adafruit_feather
 
 Overview
 ********
@@ -18,12 +15,6 @@ the following devices:
 * RADIO (Bluetooth Low Energy)
 * Segger RTT (RTT Console)
 
-.. figure:: img/nrf52_adafruit_feather.jpg
-     :align: center
-     :alt: nRF52 Adafruit Feather Board
-
-     nRF52 Adafruit Feather Board (Credit: Adafruit)
-
 More information about the board and its features can be found at the
 `Adafruit Feather nRF52 Bluefruit Learning Guide`_. The `Nordic Semiconductor Infocenter`_
 contains the processor's information and the datasheet.
diff --git a/boards/adafruit/qt_py_esp32s3/Kconfig b/boards/adafruit/qt_py_esp32s3/Kconfig
new file mode 100644
index 00000000000..eff63767823
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/Kconfig
@@ -0,0 +1,6 @@
+# Copyright (c) 2024 Ian Wakely
+
+config HEAP_MEM_POOL_ADD_SIZE_BOARD
+	int
+	default 4096 if BOARD_ADAFRUIT_QT_PY_ESP32S3_ESP32S3_PROCPU
+	default 256 if BOARD_ADAFRUIT_QT_PY_ESP32S3_ESP32S3_APPCPU
diff --git a/boards/adafruit/qt_py_esp32s3/Kconfig.adafruit_qt_py_esp32s3 b/boards/adafruit/qt_py_esp32s3/Kconfig.adafruit_qt_py_esp32s3
new file mode 100644
index 00000000000..9d5e991b572
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/Kconfig.adafruit_qt_py_esp32s3
@@ -0,0 +1,9 @@
+# Adafruit ESP32S3 board configuration
+
+# Copyright (c) 2024 Ian Wakely
+
+config BOARD_ADAFRUIT_QT_PY_ESP32S3
+	select SOC_ESP32S3_WROOM_N8 if "$(BOARD_REVISION)" = ""
+	select SOC_ESP32S3_WROOM_N4R2 if "$(BOARD_REVISION)" = "psram"
+	select SOC_ESP32S3_PROCPU if BOARD_ADAFRUIT_QT_PY_ESP32S3_ESP32S3_PROCPU
+	select SOC_ESP32S3_APPCPU if BOARD_ADAFRUIT_QT_PY_ESP32S3_ESP32S3_APPCPU
diff --git a/boards/adafruit/qt_py_esp32s3/Kconfig.sysbuild b/boards/adafruit/qt_py_esp32s3/Kconfig.sysbuild
new file mode 100644
index 00000000000..3a2d17ac5cf
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/Kconfig.sysbuild
@@ -0,0 +1,10 @@
+# Copyright (c) 2023 Espressif Systems (Shanghai) Co., Ltd.
+# SPDX-License-Identifier: Apache-2.0
+
+choice BOOTLOADER
+	default BOOTLOADER_MCUBOOT
+endchoice
+
+choice BOOT_SIGNATURE_TYPE
+	default BOOT_SIGNATURE_TYPE_NONE
+endchoice
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3-pinctrl.dtsi b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3-pinctrl.dtsi
new file mode 100644
index 00000000000..8c59416d21b
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3-pinctrl.dtsi
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2022 Google LLC
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include 
+#include 
+#include 
+
+&pinctrl {
+	uart0_default: uart0_default {
+		group1 {
+			pinmux = ;
+			output-high;
+		};
+		group2 {
+			pinmux = ;
+			bias-pull-up;
+		};
+	};
+
+	spim2_default: spim2_default {
+		group1 {
+			pinmux = ,
+				 ;
+		};
+		group2 {
+			pinmux = ;
+			output-low;
+		};
+	};
+
+	spim3_ws2812_led: spim3_ws2812_led {
+		group1 {
+			pinmux = ;
+			output-low;
+		};
+	};
+
+	i2c0_default: i2c0_default {
+		group1 {
+			pinmux = ,
+				 ;
+			bias-pull-up;
+			drive-open-drain;
+			output-high;
+		};
+	};
+
+	i2c1_default: i2c1_default {
+		group1 {
+			pinmux = ,
+				 ;
+			bias-pull-up;
+			drive-open-drain;
+			output-high;
+		};
+	};
+
+	twai_default: twai_default {
+		group1 {
+			pinmux = ,
+				;
+		};
+	};
+};
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu.dts b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu.dts
new file mode 100644
index 00000000000..876a6d78fc6
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu.dts
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2024 Ian Wakely
+ */
+
+/dts-v1/;
+
+#include 
+#include "adafruit_qt_py_esp32s3-pinctrl.dtsi"
+#include 
+
+/ {
+	model = "Adafruit QT Py ESP32S3 APPCPU";
+	compatible = "espressif,esp32s3";
+
+	chosen {
+		zephyr,sram = &sram1;
+		zephyr,ipc_shm = &shm0;
+		zephyr,ipc = &ipm0;
+		zephyr,flash = &flash0;
+		zephyr,code-partition = &slot0_appcpu_partition;
+	};
+};
+
+&trng0 {
+	status = "okay";
+};
+
+&ipm0 {
+	status = "okay";
+};
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu.yaml b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu.yaml
new file mode 100644
index 00000000000..70b5253574c
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu.yaml
@@ -0,0 +1,27 @@
+identifier: adafruit_qt_py_esp32s3/esp32s3/appcpu
+name: Adafruit QT Py ESP32S3 APPCPU
+type: mcu
+arch: xtensa
+toolchain:
+  - zephyr
+supported:
+  - uart
+testing:
+  ignore_tags:
+    - net
+    - bluetooth
+    - flash
+    - cpp
+    - posix
+    - watchdog
+    - logging
+    - kernel
+    - pm
+    - gpio
+    - crypto
+    - eeprom
+    - heap
+    - cmsis_rtos
+    - jwt
+    - zdsp
+vendor: adafruit
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu_defconfig b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu_defconfig
new file mode 100644
index 00000000000..9abf2ff0430
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu_defconfig
@@ -0,0 +1,4 @@
+# SPDX-License-Identifier: Apache-2.0
+
+CONFIG_MAIN_STACK_SIZE=2048
+CONFIG_CLOCK_CONTROL=y
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu_psram.overlay b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu_psram.overlay
new file mode 100644
index 00000000000..ac1ec4af1b1
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu_psram.overlay
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2024 Ian Wakely
+ */
+
+/delete-node/ &flash0;
+
+/ {
+	model = "Adafruit QT Py ESP32S3 PSRAM APPCPU";
+
+	soc {
+		flash: flash-controller@60002000 {
+			compatible = "espressif,esp32-flash-controller";
+			reg = <0x60002000 0x1000>;
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			/* 4MB flash */
+			flash0: flash@0 {
+				compatible = "soc-nv-flash";
+				erase-block-size = <4096>;
+				write-block-size = <4>;
+				reg = <0x0 DT_SIZE_M(4)>;
+			};
+		};
+	};
+};
+
+/* 2MB psram */
+&psram0 {
+	reg = <0x3c000000 DT_SIZE_M(2)>;
+	status = "okay";
+};
+
+#include 
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu_psram.yaml b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu_psram.yaml
new file mode 100644
index 00000000000..4d3dba70d68
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_appcpu_psram.yaml
@@ -0,0 +1,27 @@
+identifier: adafruit_qt_py_esp32s3@psram/esp32s3/appcpu
+name: Adafruit QT Py ESP32S3 PSRAM APPCPU
+type: mcu
+arch: xtensa
+toolchain:
+  - zephyr
+supported:
+  - uart
+testing:
+  ignore_tags:
+    - net
+    - bluetooth
+    - flash
+    - cpp
+    - posix
+    - watchdog
+    - logging
+    - kernel
+    - pm
+    - gpio
+    - crypto
+    - eeprom
+    - heap
+    - cmsis_rtos
+    - jwt
+    - zdsp
+vendor: adafruit
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu.dts b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu.dts
new file mode 100644
index 00000000000..ac757645e5b
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu.dts
@@ -0,0 +1,149 @@
+/*
+ * Copyright (c) 2023 Seeed Studio inc.
+ * Copyright (c) 2024 Ian Wakely
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/dts-v1/;
+
+#include 
+#include 
+#include 
+#include "adafruit_qt_py_esp32s3-pinctrl.dtsi"
+#include "seeed_xiao_connector.dtsi"
+#include 
+
+/ {
+	model = "Adafruit QT Py ESP32S3 PROCPU";
+	compatible = "seeed,xiao-esp32s3";
+
+	chosen {
+		zephyr,sram = &sram1;
+		zephyr,console = &usb_serial;
+		zephyr,shell-uart = &usb_serial;
+		zephyr,flash = &flash0;
+		zephyr,code-partition = &slot0_partition;
+		zephyr,bt-hci = &esp32_bt_hci;
+	};
+
+	aliases {
+		i2c-0 = &i2c0;
+		watchdog0 = &wdt0;
+		led-strip = &led_strip;
+		sw0 = &button0;
+	};
+
+	buttons {
+		compatible = "gpio-keys";
+		button0: button_0 {
+			gpios = <&gpio0 0 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
+			label = "User button";
+			zephyr,code = ;
+		};
+	};
+};
+
+&usb_serial {
+	status = "okay";
+};
+
+&uart0 {
+	status = "okay";
+	current-speed = <115200>;
+	pinctrl-0 = <&uart0_default>;
+	pinctrl-names = "default";
+};
+
+&i2c0 {
+	status = "okay";
+	clock-frequency = ;
+	pinctrl-0 = <&i2c0_default>;
+	pinctrl-names = "default";
+};
+
+&i2c1 {
+	status = "okay";
+	clock-frequency = ;
+	pinctrl-0 = <&i2c1_default>;
+	pinctrl-names = "default";
+};
+
+&trng0 {
+	status = "okay";
+};
+
+&spi2 {
+	#address-cells = <1>;
+	#size-cells = <0>;
+	status = "okay";
+	pinctrl-0 = <&spim2_default>;
+	pinctrl-names = "default";
+};
+
+&spi3 {
+	#address-cells = <1>;
+	#size-cells = <0>;
+	status = "okay";
+	pinctrl-0 = <&spim3_ws2812_led>;
+	pinctrl-names = "default";
+
+	line-idle-low;
+
+	led_strip: ws2812@0 {
+		compatible = "worldsemi,ws2812-spi";
+
+		/* SPI */
+		reg = <0>; /* ignored, but necessary for SPI bindings */
+		spi-max-frequency = <6400000>;
+
+		/* WS2812 */
+		chain-length = <1>;
+		spi-cpha;
+		spi-one-frame = <0xf0>; /* 11110000: 625 ns high and 625 ns low */
+		spi-zero-frame = <0xc0>; /* 11000000: 312.5 ns high and 937.5 ns low */
+		color-mapping = ;
+	};
+};
+
+&gpio0 {
+	status = "okay";
+};
+
+&gpio1 {
+	status = "okay";
+
+	/*
+	 * Unlike some of the other Adafruit boards, the neopixel on this board has
+	 * its positive side hooked up to a GPIO pin rather than a positive voltage
+	 * rail to save on power. This will enable the LED on board initialization.
+	 */
+	neopixel-power-enable {
+		gpio-hog;
+		gpios = <6 GPIO_ACTIVE_HIGH>;
+		output-high;
+	};
+};
+
+&wdt0 {
+	status = "okay";
+};
+
+&twai {
+	pinctrl-0 = <&twai_default>;
+	pinctrl-names = "default";
+};
+
+&timer0 {
+	status = "okay";
+};
+
+&timer1 {
+	status = "okay";
+};
+
+&esp32_bt_hci {
+	status = "okay";
+};
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu.yaml b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu.yaml
new file mode 100644
index 00000000000..b3d1cd326eb
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu.yaml
@@ -0,0 +1,19 @@
+identifier: adafruit_qt_py_esp32s3/esp32s3/procpu
+name: Adafruit QT Py ESP32S3 PROCPU
+type: mcu
+arch: xtensa
+toolchain:
+  - zephyr
+supported:
+  - gpio
+  - uart
+  - i2c
+  - i2s
+  - spi
+  - can
+  - counter
+  - watchdog
+  - entropy
+  - pwm
+  - dma
+vendor: adafruit
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu_defconfig b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu_defconfig
new file mode 100644
index 00000000000..6539bd42e59
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu_defconfig
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+
+CONFIG_MAIN_STACK_SIZE=2048
+CONFIG_CONSOLE=y
+CONFIG_SERIAL=y
+CONFIG_UART_CONSOLE=y
+CONFIG_GPIO=y
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu_psram.overlay b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu_psram.overlay
new file mode 100644
index 00000000000..5ab0be63c3f
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu_psram.overlay
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2024 Ian Wakely
+ */
+
+/delete-node/ &flash0;
+
+/ {
+	model = "Adafruit QT Py ESP32S3 PSRAM PROCPU";
+
+	soc {
+		flash: flash-controller@60002000 {
+			compatible = "espressif,esp32-flash-controller";
+			reg = <0x60002000 0x1000>;
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			/* 4MB flash */
+			flash0: flash@0 {
+				compatible = "soc-nv-flash";
+				erase-block-size = <4096>;
+				write-block-size = <4>;
+				reg = <0x0 DT_SIZE_M(4)>;
+			};
+		};
+	};
+};
+
+/* 2MB psram */
+&psram0 {
+	reg = <0x3c000000 DT_SIZE_M(2)>;
+	status = "okay";
+};
+
+#include 
diff --git a/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu_psram.yaml b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu_psram.yaml
new file mode 100644
index 00000000000..37e6a7f15d6
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/adafruit_qt_py_esp32s3_procpu_psram.yaml
@@ -0,0 +1,19 @@
+identifier: adafruit_qt_py_esp32s3@psram/esp32s3/procpu
+name: Adafruit QT Py ESP32S3 PSRAM PROCPU
+type: mcu
+arch: xtensa
+toolchain:
+  - zephyr
+supported:
+  - gpio
+  - uart
+  - i2c
+  - i2s
+  - spi
+  - can
+  - counter
+  - watchdog
+  - entropy
+  - pwm
+  - dma
+vendor: adafruit
diff --git a/boards/adafruit/qt_py_esp32s3/board.cmake b/boards/adafruit/qt_py_esp32s3/board.cmake
new file mode 100644
index 00000000000..2f04d1fe886
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/board.cmake
@@ -0,0 +1,9 @@
+# SPDX-License-Identifier: Apache-2.0
+
+if(NOT "${OPENOCD}" MATCHES "^${ESPRESSIF_TOOLCHAIN_PATH}/.*")
+  set(OPENOCD OPENOCD-NOTFOUND)
+endif()
+find_program(OPENOCD openocd PATHS ${ESPRESSIF_TOOLCHAIN_PATH}/openocd-esp32/bin NO_DEFAULT_PATH)
+
+include(${ZEPHYR_BASE}/boards/common/esp32.board.cmake)
+include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)
diff --git a/boards/adafruit/qt_py_esp32s3/board.yml b/boards/adafruit/qt_py_esp32s3/board.yml
new file mode 100644
index 00000000000..c9b26924f8c
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/board.yml
@@ -0,0 +1,12 @@
+board:
+  name: adafruit_qt_py_esp32s3
+  full_name: QT Py ESP32-S3
+  vendor: adafruit
+  socs:
+  - name: esp32s3
+  revision:
+    format: "custom"
+    default: ""
+    revisions:
+    - name: ""
+    - name: "psram"
diff --git a/boards/adafruit/qt_py_esp32s3/doc/img/adafruit_qt_py_esp32s3.webp b/boards/adafruit/qt_py_esp32s3/doc/img/adafruit_qt_py_esp32s3.webp
new file mode 100644
index 00000000000..43637d31a6f
Binary files /dev/null and b/boards/adafruit/qt_py_esp32s3/doc/img/adafruit_qt_py_esp32s3.webp differ
diff --git a/boards/adafruit/qt_py_esp32s3/doc/index.rst b/boards/adafruit/qt_py_esp32s3/doc/index.rst
new file mode 100644
index 00000000000..1c1f6e04eee
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/doc/index.rst
@@ -0,0 +1,291 @@
+.. zephyr:board:: adafruit_qt_py_esp32s3
+
+Overview
+********
+
+An Adafruit based Xiao compatible board based on the ESP32-S3, which is great
+for IoT projects and prototyping with new sensors.
+
+For more details see the `Adafruit QT Py ESP32S3`_ product page.
+
+Hardware
+********
+
+This board comes in 2 variants, both based on the ESP32-S3 with WiFi and BLE
+support. The default variant supporting 8MB of flash with no PSRAM, while the
+``psram`` variant supporting 4MB of flash with 2MB of PSRAM. Both boards have a
+USB-C port for programming and debugging and is based on a standard XIAO 14
+pin pinout.
+
+In addition to the Xiao compatible pinout, it also has a RGB NeoPixel for
+status and debugging, a reset button, and a button for entering the ROM
+bootloader or user input. Like many other Adafruit boards, it has a
+`SparkFun Qwiic`_-compatible `STEMMA QT`_ connector for the I2C bus so you
+don't even need to solder.
+
+ESP32-S3 is a low-power MCU-based system on a chip (SoC) with integrated
+2.4 GHz Wi-Fi and Bluetooth® Low Energy (Bluetooth LE). It consists of
+high-performance dual-core microprocessor (Xtensa® 32-bit LX7), a low power
+coprocessor, a Wi-Fi baseband, a Bluetooth LE baseband, RF module, and
+numerous peripherals.
+
+Supported Features
+==================
+
+Current Zephyr's Adafruit QT Py ESP32-S3 board supports the following features:
+
++------------+------------+-------------------------------------+
+| Interface  | Controller | Driver/Component                    |
++============+============+=====================================+
+| UART       | on-chip    | serial port                         |
++------------+------------+-------------------------------------+
+| GPIO       | on-chip    | gpio                                |
++------------+------------+-------------------------------------+
+| PINMUX     | on-chip    | pinmux                              |
++------------+------------+-------------------------------------+
+| USB-JTAG   | on-chip    | hardware interface                  |
++------------+------------+-------------------------------------+
+| SPI Master | on-chip    | spi                                 |
++------------+------------+-------------------------------------+
+| I2C        | on-chip    | i2c                                 |
++------------+------------+-------------------------------------+
+| I2S        | on-chip    | i2s                                 |
++------------+------------+-------------------------------------+
+| TWAI/CAN   | on-chip    | can                                 |
++------------+------------+-------------------------------------+
+| ADC        | on-chip    | adc                                 |
++------------+------------+-------------------------------------+
+| Timers     | on-chip    | counter                             |
++------------+------------+-------------------------------------+
+| Watchdog   | on-chip    | watchdog                            |
++------------+------------+-------------------------------------+
+| TRNG       | on-chip    | entropy                             |
++------------+------------+-------------------------------------+
+| LEDC       | on-chip    | pwm                                 |
++------------+------------+-------------------------------------+
+| MCPWM      | on-chip    | pwm                                 |
++------------+------------+-------------------------------------+
+| PCNT       | on-chip    | qdec                                |
++------------+------------+-------------------------------------+
+| GDMA       | on-chip    | dma                                 |
++------------+------------+-------------------------------------+
+| Wi-Fi      | on-chip    |                                     |
++------------+------------+-------------------------------------+
+| Bluetooth  | on-chip    |                                     |
++------------+------------+-------------------------------------+
+
+Prerequisites
+-------------
+
+Espressif HAL requires WiFi and Bluetooth binary blobs in order work. Run the
+command below to retrieve those files.
+
+.. code-block:: console
+
+   west blobs fetch hal_espressif
+
+.. note::
+
+   It is recommended running the command above after :file:`west update`.
+
+Building & Flashing
+*******************
+
+Simple boot
+===========
+
+The board could be loaded using the single binary image, without 2nd stage
+bootloader. It is the default option when building the application without
+additional configuration.
+
+.. note::
+
+   Simple boot does not provide any security features nor OTA updates.
+
+MCUboot bootloader
+==================
+
+User may choose to use MCUboot bootloader instead. In that case the bootloader
+must be built (and flashed) at least once.
+
+There are two options to be used when building an application:
+
+1. Sysbuild
+2. Manual build
+
+.. note::
+
+   User can select the MCUboot bootloader by adding the following line
+   to the board default configuration file.
+
+   .. code:: cfg
+
+      CONFIG_BOOTLOADER_MCUBOOT=y
+
+Sysbuild
+========
+
+The sysbuild makes possible to build and flash all necessary images needed to
+bootstrap the board with the ESP32 SoC.
+
+To build the sample application using sysbuild use the command:
+
+.. zephyr-app-commands::
+   :tool: west
+   :zephyr-app: samples/hello_world
+   :board: adafruit_qt_py_esp32s3
+   :goals: build
+   :west-args: --sysbuild
+   :compact:
+
+By default, the ESP32 sysbuild creates bootloader (MCUboot) and application
+images. But it can be configured to create other kind of images.
+
+Build directory structure created by sysbuild is different from traditional
+Zephyr build. Output is structured by the domain subdirectories:
+
+.. code-block::
+
+  build/
+  ├── hello_world
+  │   └── zephyr
+  │       ├── zephyr.elf
+  │       └── zephyr.bin
+  ├── mcuboot
+  │    └── zephyr
+  │       ├── zephyr.elf
+  │       └── zephyr.bin
+  └── domains.yaml
+
+.. note::
+
+   With ``--sysbuild`` option the bootloader will be re-build and re-flash
+   every time the pristine build is used.
+
+For more information about the system build please read the :ref:`sysbuild` documentation.
+
+Manual build
+============
+
+During the development cycle, it is intended to build & flash as quickly possible.
+For that reason, images can be built one at a time using traditional build.
+
+The instructions following are relevant for both manual build and sysbuild.
+The only difference is the structure of the build directory.
+
+.. note::
+
+   Remember that bootloader (MCUboot) needs to be flash at least once.
+
+Build and flash applications as usual (see :ref:`build_an_application` and
+:ref:`application_run` for more details).
+
+.. tabs::
+
+   .. group-tab:: QT Py ESP32S3
+
+      .. zephyr-app-commands::
+         :zephyr-app: samples/hello_world
+         :board: adafruit_qt_py_esp32s3/esp32s3/procpu
+         :goals: build
+
+   .. group-tab:: QT Py ESP32S3 with PSRAM
+
+      .. zephyr-app-commands::
+         :zephyr-app: samples/hello_world
+         :board: adafruit_qt_py_esp32s3@psram/esp32s3/procpu
+         :goals: build
+
+The usual ``flash`` target will work with the ``adafruit_qt_py_esp32s3`` board
+configuration. Here is an example for the :zephyr:code-sample:`hello_world`
+application.
+
+.. tabs::
+
+   .. group-tab:: QT Py ESP32S3
+
+      .. zephyr-app-commands::
+         :zephyr-app: samples/hello_world
+         :board: adafruit_qt_py_esp32s3/esp32s3/procpu
+         :goals: flash
+
+   .. group-tab:: QT Py ESP32S3 with PSRAM
+
+      .. zephyr-app-commands::
+         :zephyr-app: samples/hello_world
+         :board: adafruit_qt_py_esp32s3@psram/esp32s3/procpu
+         :goals: flash
+
+Open the serial monitor using the following command:
+
+.. code-block:: shell
+
+   west espressif monitor
+
+After the board has automatically reset and booted, you should see the following
+message in the monitor:
+
+.. code-block:: console
+
+   ***** Booting Zephyr OS vx.x.x-xxx-gxxxxxxxxxxxx *****
+   Hello World! adafruit_qt_py_esp32s3/esp32s3/procpu
+
+Debugging
+*********
+
+ESP32-S3 support on OpenOCD is available at `OpenOCD ESP32`_.
+
+ESP32-S3 has a built-in JTAG circuitry and can be debugged without any
+additional chip. Only an USB cable connected to the D+/D- pins is necessary.
+
+Further documentation can be obtained from the SoC vendor
+in `JTAG debugging for ESP32-S3`_.
+
+Here is an example for building the :zephyr:code-sample:`hello_world` application.
+
+.. tabs::
+
+   .. group-tab:: QT Py ESP32S3
+
+      .. zephyr-app-commands::
+         :zephyr-app: samples/hello_world
+         :board: adafruit_qt_py_esp32s3/esp32s3/procpu
+         :goals: debug
+
+   .. group-tab:: QT Py ESP32S3 with PSRAM
+
+      .. zephyr-app-commands::
+         :zephyr-app: samples/hello_world
+         :board: adafruit_qt_py_esp32s3@psram/esp32s3/procpu
+         :goals: debug
+
+You can debug an application in the usual way. Here is an example for
+the :zephyr:code-sample:`hello_world` application.
+
+.. tabs::
+
+   .. group-tab:: QT Py ESP32S3
+
+      .. zephyr-app-commands::
+         :zephyr-app: samples/hello_world
+         :board: adafruit_qt_py_esp32s3/esp32s3/procpu
+         :goals: debug
+
+   .. group-tab:: QT Py ESP32S3 with PSRAM
+
+      .. zephyr-app-commands::
+         :zephyr-app: samples/hello_world
+         :board: adafruit_qt_py_esp32s3@psram/esp32s3/procpu
+         :goals: debug
+
+References
+**********
+
+.. target-notes::
+
+.. _`Adafruit QT Py ESP32S3`: https://www.adafruit.com/product/5426
+.. _`Adafruit QT Py ESP32S3 - PSRAM`: https://www.adafruit.com/product/5700
+.. _`JTAG debugging for ESP32-S3`: https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-guides/jtag-debugging/
+.. _`OpenOCD ESP32`: https://github.com/espressif/openocd-esp32/releases
+.. _`SparkFun Qwiic`: https://www.sparkfun.com/qwiic
+.. _`STEMMA QT`: https://learn.adafruit.com/introducing-adafruit-stemma-qt
diff --git a/boards/adafruit/qt_py_esp32s3/revision.cmake b/boards/adafruit/qt_py_esp32s3/revision.cmake
new file mode 100644
index 00000000000..26aeb65f775
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/revision.cmake
@@ -0,0 +1,3 @@
+if(DEFINED BOARD_REVISION AND NOT BOARD_REVISION STREQUAL "psram")
+  message(FATAL_ERROR "Invalid board revision, ${BOARD_REVISION}, valid revisions are:  (for non-PSRAM version), psram")
+endif()
diff --git a/boards/adafruit/qt_py_esp32s3/seeed_xiao_connector.dtsi b/boards/adafruit/qt_py_esp32s3/seeed_xiao_connector.dtsi
new file mode 100644
index 00000000000..39880f7c942
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/seeed_xiao_connector.dtsi
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2024 Ian Wakely
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/ {
+	xiao_d: connector {
+		compatible = "seeed,xiao-gpio";
+		#gpio-cells = <2>;
+		gpio-map-mask = <0xffffffff 0xffffffc0>;
+		gpio-map-pass-thru = <0 0x3f>;
+		gpio-map = <0 0 &gpio0 18 0>,	/* D0 */
+				   <1 0 &gpio0 17 0>,	/* D1 */
+				   <2 0 &gpio0 9 0>,	/* D2 */
+				   <3 0 &gpio0 8 0>,	/* D3 */
+				   <4 0 &gpio0 7 0>,	/* D4 */
+				   <5 0 &gpio0 6 0>,	/* D5 */
+				   <6 0 &gpio0 5 0>,	/* D6 */
+				   <7 0 &gpio0 16 0>,	/* D7 */
+				   <8 0 &gpio1 4 0>,	/* D8 */
+				   <9 0 &gpio1 5 0>,	/* D9 */
+				   <10 0 &gpio1 3 0>;	/* D10 */
+	};
+};
+
+xiao_spi: &spi2 {};
+xiao_i2c: &i2c0 {};
+xiao_serial: &uart0 {};
+xiao_adc: &adc0 {};
diff --git a/boards/adafruit/qt_py_esp32s3/support/openocd.cfg b/boards/adafruit/qt_py_esp32s3/support/openocd.cfg
new file mode 100644
index 00000000000..2f740b4a36a
--- /dev/null
+++ b/boards/adafruit/qt_py_esp32s3/support/openocd.cfg
@@ -0,0 +1,7 @@
+set ESP_RTOS none
+set ESP32_ONLYCPU 1
+
+# Source the JTAG interface configuration file
+source [find interface/esp_usb_jtag.cfg]
+# Source the ESP32-S3 configuration file
+source [find target/esp32s3.cfg]
diff --git a/boards/adafruit/qt_py_rp2040/Kconfig b/boards/adafruit/qt_py_rp2040/Kconfig
new file mode 100644
index 00000000000..88483e605c8
--- /dev/null
+++ b/boards/adafruit/qt_py_rp2040/Kconfig
@@ -0,0 +1,5 @@
+# Copyright (c) 2022 Peter Johanson
+# SPDX-License-Identifier: Apache-2.0
+
+config BOARD_ADAFRUIT_QT_PY_RP2040
+	select RP2_FLASH_W25Q080
diff --git a/boards/adafruit/qt_py_rp2040/Kconfig.defconfig b/boards/adafruit/qt_py_rp2040/Kconfig.defconfig
index 22d40318634..09706fc65fd 100644
--- a/boards/adafruit/qt_py_rp2040/Kconfig.defconfig
+++ b/boards/adafruit/qt_py_rp2040/Kconfig.defconfig
@@ -3,9 +3,6 @@
 
 if BOARD_ADAFRUIT_QT_PY_RP2040
 
-config RP2_FLASH_W25Q080
-	default y
-
 if I2C_DW
 
 config I2C_DW_CLOCK_SPEED
diff --git a/boards/adafruit/qt_py_rp2040/adafruit_qt_py_rp2040-pinctrl.dtsi b/boards/adafruit/qt_py_rp2040/adafruit_qt_py_rp2040-pinctrl.dtsi
index d2e84ae41f8..561db005e65 100644
--- a/boards/adafruit/qt_py_rp2040/adafruit_qt_py_rp2040-pinctrl.dtsi
+++ b/boards/adafruit/qt_py_rp2040/adafruit_qt_py_rp2040-pinctrl.dtsi
@@ -59,9 +59,6 @@
 		};
 	};
 
-	clocks_default: clocks_default {
-	};
-
 	ws2812_pio1_default: ws2812_pio1_default {
 		ws2812 {
 			pinmux = ;
diff --git a/boards/adafruit/qt_py_rp2040/adafruit_qt_py_rp2040.dts b/boards/adafruit/qt_py_rp2040/adafruit_qt_py_rp2040.dts
index 0209c1b86cd..3f87e4188b2 100644
--- a/boards/adafruit/qt_py_rp2040/adafruit_qt_py_rp2040.dts
+++ b/boards/adafruit/qt_py_rp2040/adafruit_qt_py_rp2040.dts
@@ -7,7 +7,7 @@
 
 /dts-v1/;
 
-#include 
+#include 
 #include "adafruit_qt_py_rp2040-pinctrl.dtsi"
 #include "seeed_xiao_connector.dtsi"
 #include 
@@ -56,11 +56,6 @@
 	};
 };
 
-&clocks {
-	pinctrl-0 = <&clocks_default>;
-	pinctrl-names = "default";
-};
-
 &uart1 {
 	current-speed = <115200>;
 	status = "okay";
@@ -157,3 +152,7 @@ zephyr_udc0: &usbd {
 	regulator-always-on;
 	regulator-allowed-modes = ;
 };
+
+&xosc {
+	startup-delay-multiplier = <64>;
+};
diff --git a/boards/adafruit/qt_py_rp2040/doc/index.rst b/boards/adafruit/qt_py_rp2040/doc/index.rst
index bf081c029b7..0db8b4e4034 100644
--- a/boards/adafruit/qt_py_rp2040/doc/index.rst
+++ b/boards/adafruit/qt_py_rp2040/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adafruit_qt_py_rp2040:
-
-Adafruit QT Py RP2040
-#####################
+.. zephyr:board:: adafruit_qt_py_rp2040
 
 Overview
 ********
@@ -27,13 +24,6 @@ Hardware
 - On-board RGB LED
 - 1 Watchdog timer peripheral
 
-
-.. figure:: img/qtpy_rp2040.jpg
-     :align: center
-     :alt: Adafruit QT Py RP2040
-
-     Adafruit QT Py RP2040 (Image courtesy of Adafruit)
-
 Supported Features
 ==================
 
diff --git a/boards/adafruit/trinket_m0/doc/index.rst b/boards/adafruit/trinket_m0/doc/index.rst
index 4714f9d1aff..224f9aa4c6d 100644
--- a/boards/adafruit/trinket_m0/doc/index.rst
+++ b/boards/adafruit/trinket_m0/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adafruit_trinket_m0:
-
-Adafruit Trinket M0
-###################
+.. zephyr:board:: adafruit_trinket_m0
 
 Overview
 ********
@@ -10,10 +7,6 @@ The Adafruit Trinket M0 is a tiny (27 mm x 15 mm) ARM development
 board with an onboard RGB LED, USB port, and range of I/O broken out
 onto 5 pins.
 
-.. image:: img/adafruit_trinket_m0.jpg
-     :align: center
-     :alt: Adafruit Trinket M0
-
 Hardware
 ********
 
diff --git a/boards/adi/apard32690/apard32690_max32690_m4.dts b/boards/adi/apard32690/apard32690_max32690_m4.dts
index 793a717442b..4de11b92848 100644
--- a/boards/adi/apard32690/apard32690_max32690_m4.dts
+++ b/boards/adi/apard32690/apard32690_max32690_m4.dts
@@ -53,6 +53,35 @@
 		led2 = &green_led;
 		sw0 = &usr_btn;
 	};
+
+	arduino_header: connector {
+		compatible = "arduino-header-r3";
+		#gpio-cells = <2>;
+		gpio-map-mask = <0xffffffff 0xffffffc0>;
+		gpio-map-pass-thru = <0 0x3f>;
+		gpio-map = <0 0 &gpio3 0 0>,	/* A0 */
+			   <1 0 &gpio3 1 0>,	/* A1 */
+			   <2 0 &gpio3 2 0>,	/* A2 */
+			   <3 0 &gpio3 3 0>,	/* A3 */
+			   <4 0 &gpio3 4 0>,	/* A4 */
+			   <5 0 &gpio3 5 0>,	/* A5 */
+			   <6 0 &gpio2 14 0>,	/* D0 */
+			   <7 0 &gpio2 16 0>,	/* D1 */
+			   <8 0 &gpio2 13 0>,	/* D2 */
+			   <9 0 &gpio2 15 0>,	/* D3 */
+			   <10 0 &gpio0 8 0>,	/* D4 */
+			   <11 0 &gpio0 7 0>,	/* D5 */
+			   <12 0 &gpio1 24 0>,	/* D6 */
+			   <13 0 &gpio1 25 0>,	/* D7 */
+			   <14 0 &gpio1 31 0>,	/* D8 */
+			   <15 0 &gpio1 30 0>,	/* D9 */
+			   <16 0 &gpio1 23 0>,	/* D10 */
+			   <17 0 &gpio1 29 0>,	/* D11 */
+			   <18 0 &gpio1 28 0>,	/* D12 */
+			   <19 0 &gpio1 26 0>,	/* D13 */
+			   <20 0 &gpio2 17 0>,	/* D14 */
+			   <21 0 &gpio2 18 0>;	/* D15 */
+	};
 };
 
 &clk_ipo {
@@ -104,6 +133,22 @@ arduino_serial: &uart1 {
 	current-speed = <115200>;
 };
 
+&spi1a_miso_p1_28 {
+	power-source = ;
+};
+
+&spi1a_mosi_p1_29 {
+	power-source = ;
+};
+
+&spi1a_sck_p1_26 {
+	power-source = ;
+};
+
+&spi1a_ss0_p1_23 {
+	power-source = ;
+};
+
 arduino_spi: &spi1 {
 	pinctrl-0 = <&spi1a_miso_p1_28 &spi1a_mosi_p1_29 &spi1a_sck_p1_26
 		     &spi1a_ss0_p1_23>;
@@ -177,3 +222,8 @@ pmod_spi: &spi4 {
 		};
 	};
 };
+
+&w1 {
+	pinctrl-0 = <&owm_io_p0_8 &owm_pe_p0_7>;
+	pinctrl-names = "default";
+};
diff --git a/boards/adi/apard32690/apard32690_max32690_m4.yaml b/boards/adi/apard32690/apard32690_max32690_m4.yaml
index f3f842b66b2..bc040f86855 100644
--- a/boards/adi/apard32690/apard32690_max32690_m4.yaml
+++ b/boards/adi/apard32690/apard32690_max32690_m4.yaml
@@ -8,6 +8,7 @@ toolchain:
   - gnuarmemb
   - xtools
 supported:
+  - arduino_gpio
   - arduino_serial
   - arduino_spi
   - pmod_spi
@@ -16,5 +17,6 @@ supported:
   - spi
   - trng
   - counter
+  - w1
 ram: 1024
 flash: 3072
diff --git a/boards/adi/apard32690/doc/index.rst b/boards/adi/apard32690/doc/index.rst
index 192f0bba814..8223f2b88e9 100644
--- a/boards/adi/apard32690/doc/index.rst
+++ b/boards/adi/apard32690/doc/index.rst
@@ -1,7 +1,4 @@
-.. _ad_apard32690_sl:
-
-AD-APARD32690-SL
-################
+.. zephyr:board:: apard32690
 
 Overview
 ********
@@ -19,10 +16,6 @@ the required power circuitry.
 
 The Zephyr port is running on the MAX32690 MCU.
 
-.. image:: img/apard32690_img.webp
-   :align: center
-   :alt: AD-APARD32690-SL Front
-
 Hardware
 ********
 
@@ -117,6 +110,8 @@ Below interfaces are supported by Zephyr on APARD32690.
 +-----------+------------+------------------------------------+
 | Timer     | on-chip    | counter                            |
 +-----------+------------+------------------------------------+
+| W1        | on-chip    | one wire master                    |
++-----------+------------+------------------------------------+
 
 
 Connections and IOs
diff --git a/boards/adi/eval_adin1110ebz/doc/index.rst b/boards/adi/eval_adin1110ebz/doc/index.rst
index f39a04b7362..4f38e78faf0 100644
--- a/boards/adi/eval_adin1110ebz/doc/index.rst
+++ b/boards/adi/eval_adin1110ebz/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adi_eval_adin1110ebz:
-
-ADI EVAL-ADIN1110EVB Evaluation board
-#####################################
+.. zephyr:board:: adi_eval_adin1110ebz
 
 Overview
 ********
@@ -23,12 +20,6 @@ The SPI interface provides configuration and data access to the ADIN1110.
 A small prototyping area and test points are provided for experimentation with alternative cable
 connection topologies including isolation transformers and/or power coupling inductors.
 
-.. figure:: img/adi_eval_adin1110ebz.webp
-   :align: center
-   :alt: ADI EVAL-ADIN1110EBZ
-
-   ADI EVAL-ADIN1110EBZ (Credit: Analog Devices, Inc.)
-
 .. important::
 
    S201 DIP switches are shipped in Open Alliance SPI mode. The current Zephyr
diff --git a/boards/adi/eval_adin2111ebz/doc/index.rst b/boards/adi/eval_adin2111ebz/doc/index.rst
index ea0ce92be2a..7579c85b0cd 100644
--- a/boards/adi/eval_adin2111ebz/doc/index.rst
+++ b/boards/adi/eval_adin2111ebz/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adi_eval_adin2111ebz:
-
-ADI EVAL-ADIN2111EVB Evaluation board
-#####################################
+.. zephyr:board:: adi_eval_adin2111ebz
 
 Overview
 ********
@@ -38,12 +35,6 @@ the 2 PHYs configuration and data exchange between SPI host and ports.
    so the S1 DIP switches must be set as ``SPI_CFG0 OFF and SPI_CFG1 OFF``.
    An inconsistent S1 DIP switches configuration will halt the boot.
 
-.. figure:: img/adi_eval_adin2111ebz.webp
-   :align: center
-   :alt: ADI EVAL-ADIN2111EBZ
-
-   ADI EVAL-ADIN2111EBZ (Credit: Analog Devices, Inc.)
-
 Hardware
 ********
 
diff --git a/boards/adi/max32655evkit/doc/index.rst b/boards/adi/max32655evkit/doc/index.rst
index d052dba938a..649df3bde37 100644
--- a/boards/adi/max32655evkit/doc/index.rst
+++ b/boards/adi/max32655evkit/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32655_evkit:
-
-MAX32655EVKIT
-#############
+.. zephyr:board:: max32655evkit
 
 Overview
 ********
@@ -101,6 +98,12 @@ Below are the interfaces supported by Zephyr on MAX32655EVKIT.
 +-----------+------------+-------------------------------------+
 | Timer     | on-chip    | counter                             |
 +-----------+------------+-------------------------------------+
+| PWM       | on-chip    | pwm                                 |
++-----------+------------+-------------------------------------+
+| W1        | on-chip    | one wire master                     |
++-----------+------------+-------------------------------------+
+| Flash     | on-chip    | flash                               |
++-----------+------------+-------------------------------------+
 
 Connections and IOs
 ===================
diff --git a/boards/adi/max32655evkit/max32655evkit_max32655_m4.dts b/boards/adi/max32655evkit/max32655evkit_max32655_m4.dts
index eea6c9e6ab4..a14953606ea 100644
--- a/boards/adi/max32655evkit/max32655evkit_max32655_m4.dts
+++ b/boards/adi/max32655evkit/max32655evkit_max32655_m4.dts
@@ -78,6 +78,13 @@
 	status = "okay";
 };
 
+/*
+ * ERTCO is required for counter RTC
+ */
+&clk_ertco {
+	status = "okay";
+};
+
 &gpio0 {
 	status = "okay";
 };
@@ -117,3 +124,12 @@
 	pinctrl-0 = <&spi0_mosi_p0_5 &spi0_miso_p0_6 &spi0_sck_p0_7 &spi0_ss0_p0_4>;
 	pinctrl-names = "default";
 };
+
+&w1 {
+	pinctrl-0 = <&owm_io_p0_6 &owm_pe_p0_7>;
+	pinctrl-names = "default";
+};
+
+&rtc_counter {
+	status = "okay";
+};
diff --git a/boards/adi/max32655evkit/max32655evkit_max32655_m4.yaml b/boards/adi/max32655evkit/max32655evkit_max32655_m4.yaml
index 0a870489a22..f3a7fac43ba 100644
--- a/boards/adi/max32655evkit/max32655evkit_max32655_m4.yaml
+++ b/boards/adi/max32655evkit/max32655evkit_max32655_m4.yaml
@@ -17,5 +17,9 @@ supported:
   - spi
   - adc
   - counter
+  - rtc_counter
+  - pwm
+  - w1
+  - flash
 ram: 128
 flash: 512
diff --git a/boards/adi/max32655fthr/doc/index.rst b/boards/adi/max32655fthr/doc/index.rst
index 3c9efcfb675..839365066cc 100644
--- a/boards/adi/max32655fthr/doc/index.rst
+++ b/boards/adi/max32655fthr/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32655_fthr:
-
-MAX32655FTHR
-############
+.. zephyr:board:: max32655fthr
 
 Overview
 ********
@@ -114,6 +111,10 @@ Below are the interfaces supported by Zephyr on MAX32655FTHR.
 +-----------+------------+-------------------------------------+
 | Timer     | on-chip    | counter                             |
 +-----------+------------+-------------------------------------+
+| PWM       | on-chip    | pwm                                 |
++-----------+------------+-------------------------------------+
+| Flash     | on-chip    | flash                               |
++-----------+------------+-------------------------------------+
 
 Push Buttons
 ************
diff --git a/boards/adi/max32655fthr/max32655fthr_max32655_m4.dts b/boards/adi/max32655fthr/max32655fthr_max32655_m4.dts
index f5df5e5260a..2f82dc09022 100644
--- a/boards/adi/max32655fthr/max32655fthr_max32655_m4.dts
+++ b/boards/adi/max32655fthr/max32655fthr_max32655_m4.dts
@@ -112,6 +112,13 @@
 	status = "okay";
 };
 
+/*
+ * ERTCO is required for counter RTC
+ */
+&clk_ertco {
+	status = "okay";
+};
+
 &gpio0 {
 	status = "okay";
 };
@@ -151,3 +158,7 @@
 	pinctrl-0 = <&spi1_mosi_p0_21 &spi1_miso_p0_22 &spi1_sck_p0_23 &spi1_ss0_p0_20>;
 	pinctrl-names = "default";
 };
+
+&rtc_counter {
+	status = "okay";
+};
diff --git a/boards/adi/max32655fthr/max32655fthr_max32655_m4.yaml b/boards/adi/max32655fthr/max32655fthr_max32655_m4.yaml
index e361e18e24f..37c8b01e02e 100644
--- a/boards/adi/max32655fthr/max32655fthr_max32655_m4.yaml
+++ b/boards/adi/max32655fthr/max32655fthr_max32655_m4.yaml
@@ -17,5 +17,8 @@ supported:
   - spi
   - adc
   - counter
+  - rtc_counter
+  - pwm
+  - flash
 ram: 128
 flash: 512
diff --git a/boards/adi/max32662evkit/Kconfig.defconfig b/boards/adi/max32662evkit/Kconfig.defconfig
new file mode 100644
index 00000000000..415360cc1eb
--- /dev/null
+++ b/boards/adi/max32662evkit/Kconfig.defconfig
@@ -0,0 +1,29 @@
+# MAX32662EVKIT boards configuration
+
+# Copyright (c) 2024 Analog Devices, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+if BOARD_MAX32662EVKIT
+
+if DISPLAY
+
+config MIPI_DBI_SPI_3WIRE
+	default y
+
+if LVGL
+
+config LV_Z_BITS_PER_PIXEL
+	default 16
+
+choice LV_COLOR_DEPTH
+	default LV_COLOR_DEPTH_16  # 16 bit per pixel
+endchoice
+
+configdefault LV_COLOR_16_SWAP
+	default y
+
+endif # LVGL
+
+endif # DISPLAY
+
+endif # BOARD_MAX32662EVKIT
diff --git a/boards/adi/max32662evkit/doc/index.rst b/boards/adi/max32662evkit/doc/index.rst
index 64718015706..b343fb6ed99 100644
--- a/boards/adi/max32662evkit/doc/index.rst
+++ b/boards/adi/max32662evkit/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32662_evkit:
-
-MAX32662EVKIT
-#############
+.. zephyr:board:: max32662evkit
 
 Overview
 ********
@@ -12,10 +9,6 @@ for battery-powered edge devices.
 
 The Zephyr port is running on the MAX32662 MCU.
 
-.. image:: img/max32662evkit.webp
-   :align: center
-   :alt: MAX32662EVKIT
-
 Hardware
 ********
 
@@ -111,6 +104,10 @@ Below interfaces are supported by Zephyr on MAX32662EVKIT.
 +-----------+------------+-------------------------------------+
 | Timer     | on-chip    | counter                             |
 +-----------+------------+-------------------------------------+
+| PWM       | on-chip    | pwm                                 |
++-----------+------------+-------------------------------------+
+| Flash     | on-chip    | flash                               |
++-----------+------------+-------------------------------------+
 
 Connections and IOs
 ===================
diff --git a/boards/adi/max32662evkit/max32662evkit.dts b/boards/adi/max32662evkit/max32662evkit.dts
index e458a8d6904..5f204b91bef 100644
--- a/boards/adi/max32662evkit/max32662evkit.dts
+++ b/boards/adi/max32662evkit/max32662evkit.dts
@@ -11,6 +11,7 @@
 #include 
 #include 
 #include 
+#include 
 
 / {
 	model = "Analog Devices MAX32662EVKIT";
@@ -21,6 +22,7 @@
 		zephyr,shell-uart = &uart0;
 		zephyr,sram = &sram2;
 		zephyr,flash = &flash0;
+		zephyr,display = &st7735;
 	};
 
 	leds {
@@ -47,6 +49,40 @@
 		sw0 = &pb1;
 		watchdog0 = &wdt0;
 	};
+
+	mipi_dbi {
+		compatible = "zephyr,mipi-dbi-spi";
+		spi-dev = <&spi1>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		status = "okay";
+
+		st7735: st7735@0 {
+			compatible = "sitronix,st7735r";
+			mipi-max-frequency = ;
+			mipi-mode = "MIPI_DBI_MODE_SPI_3WIRE";
+
+			reg = <0>;
+			width = <130>;
+			height = <132>;
+			x-offset = <0>;
+			y-offset = <0>;
+			madctl = <0xc0>;
+			colmod = <0x05>;
+			vmctr1 = <0x51>;
+			pwctr1 = [02 02];
+			pwctr2 = [c5];
+			pwctr3 = [0d 00];
+			pwctr4 = [8d 1a];
+			pwctr5 = [8d ee];
+			frmctr1 = [02 35 36];
+			frmctr2 = [02 35 36];
+			frmctr3 = [02 35 36 02 35 36];
+			gamctrp1 = [0a 1c 0c 14 33 2b 24 28 27 25 2c 39 00 05 03 0d];
+			gamctrn1 = [0a 1c 0c 14 33 2b 24 28 27 25 2d 3a 00 05 03 0d];
+		};
+	};
 };
 
 &uart0 {
@@ -66,6 +102,13 @@
 	status = "okay";
 };
 
+/*
+ * ERTCO is required for counter RTC
+ */
+&clk_ertco {
+	status = "okay";
+};
+
 &gpio0 {
 	status = "okay";
 };
@@ -84,8 +127,27 @@
 	status = "okay";
 };
 
+&rtc_counter {
+	status = "okay";
+};
+
 &spi0 {
 	status = "okay";
 	pinctrl-0 = <&spi0a_copi_p0_3 &spi0a_cito_p0_2 &spi0a_sck_p0_4 &spi0a_ts0_p0_5>;
 	pinctrl-names = "default";
 };
+
+&spi1a_mosi_p0_8 {
+	power-source=;
+};
+
+&spi1a_sck_p0_17 {
+	power-source=;
+};
+
+&spi1 {
+	status = "okay";
+	pinctrl-0 = <&spi1a_mosi_p0_8 &spi1a_sck_p0_17>;
+	pinctrl-names = "default";
+	cs-gpios = <&gpio0 18 (GPIO_ACTIVE_LOW | MAX32_VSEL_VDDIOH)>;
+};
diff --git a/boards/adi/max32662evkit/max32662evkit.yaml b/boards/adi/max32662evkit/max32662evkit.yaml
index f4577c7bcab..eebab96b676 100644
--- a/boards/adi/max32662evkit/max32662evkit.yaml
+++ b/boards/adi/max32662evkit/max32662evkit.yaml
@@ -17,5 +17,8 @@ supported:
   - spi
   - adc
   - counter
+  - rtc_counter
+  - pwm
+  - flash
 ram: 80
 flash: 256
diff --git a/boards/adi/max32666evkit/doc/index.rst b/boards/adi/max32666evkit/doc/index.rst
index 528a8026ca1..f71b1a69bb6 100644
--- a/boards/adi/max32666evkit/doc/index.rst
+++ b/boards/adi/max32666evkit/doc/index.rst
@@ -1,21 +1,12 @@
-.. _max32666evkit:
-
-MAX32666EVKIT
-#############
+.. zephyr:board:: max32666evkit
 
 Overview
 ********
 The MAX32666EVKIT provides a platform for evaluating the capabilities of the MAX32665 and MAX32666
 high-efficiency Arm® microcontrollers and audio DSP for wearable and hearable device applications.
 
-
 The Zephyr port is running on the MAX32666 MCU.
 
-.. image:: img/max32666evkit.webp
-   :align: center
-   :alt: MAX32666EVKIT Front
-
-
 Hardware
 ********
 
@@ -122,6 +113,12 @@ Below interfaces are supported by Zephyr on MAX32666EVKIT.
 +-----------+------------+-------------------------------------+
 | Timer     | on-chip    | counter                             |
 +-----------+------------+-------------------------------------+
+| PWM       | on-chip    | pwm                                 |
++-----------+------------+-------------------------------------+
+| W1        | on-chip    | one wire master                     |
++-----------+------------+-------------------------------------+
+| Flash     | on-chip    | flash                               |
++-----------+------------+-------------------------------------+
 
 
 Connections and IOs
diff --git a/boards/adi/max32666evkit/max32666evkit_max32666_cpu0.dts b/boards/adi/max32666evkit/max32666evkit_max32666_cpu0.dts
index a87658da4e8..a04fcd6a4e8 100644
--- a/boards/adi/max32666evkit/max32666evkit_max32666_cpu0.dts
+++ b/boards/adi/max32666evkit/max32666evkit_max32666_cpu0.dts
@@ -105,3 +105,12 @@
 &wdt0 {
 	status = "okay";
 };
+
+&w1 {
+	pinctrl-0 = <&owm_io_p0_4 &owm_pe_p0_5>;
+	pinctrl-names = "default";
+};
+
+&rtc_counter {
+	status = "okay";
+};
diff --git a/boards/adi/max32666evkit/max32666evkit_max32666_cpu0.yaml b/boards/adi/max32666evkit/max32666evkit_max32666_cpu0.yaml
index 45320dd7307..7d5f8699970 100644
--- a/boards/adi/max32666evkit/max32666evkit_max32666_cpu0.yaml
+++ b/boards/adi/max32666evkit/max32666evkit_max32666_cpu0.yaml
@@ -16,5 +16,9 @@ supported:
   - watchdog
   - adc
   - counter
+  - rtc_counter
+  - pwm
+  - w1
+  - flash
 ram: 560
 flash: 1024
diff --git a/boards/adi/max32666fthr/doc/index.rst b/boards/adi/max32666fthr/doc/index.rst
index df762d373f5..1cd8a999de1 100644
--- a/boards/adi/max32666fthr/doc/index.rst
+++ b/boards/adi/max32666fthr/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32666_fthr:
-
-MAX32666FTHR
-############
+.. zephyr:board:: max32666fthr
 
 Overview
 ********
@@ -21,7 +18,7 @@ The Zephyr port is running on the MAX32666 MCU.
    :align: center
    :alt: MAX32666FTHR Front
 
-.. image:: img/max32666fthr_img1.jpg
+.. image:: img/max32666fthr_img2.jpg
    :align: center
    :alt: MAX32666FTHR Back
 
@@ -123,6 +120,12 @@ Below interfaces are supported by Zephyr on MAX32666FTHR.
 +-----------+------------+-------------------------------------+
 | Timer     | on-chip    | counter                             |
 +-----------+------------+-------------------------------------+
+| PWM       | on-chip    | pwm                                 |
++-----------+------------+-------------------------------------+
+| W1        | on-chip    | one wire master                     |
++-----------+------------+-------------------------------------+
+| Flash     | on-chip    | flash                               |
++-----------+------------+-------------------------------------+
 
 Connections and IOs
 ===================
diff --git a/boards/adi/max32666fthr/max32666fthr_max32666_cpu0.dts b/boards/adi/max32666fthr/max32666fthr_max32666_cpu0.dts
index 95597c47266..02b45bda3db 100644
--- a/boards/adi/max32666fthr/max32666fthr_max32666_cpu0.dts
+++ b/boards/adi/max32666fthr/max32666fthr_max32666_cpu0.dts
@@ -120,8 +120,17 @@
 	status = "okay";
 };
 
+&rtc_counter {
+	status = "okay";
+};
+
 &spi1 {
 	status = "okay";
 	pinctrl-0 = <&spi1_mosi_p0_17 &spi1_miso_p0_18 &spi1_sck_p0_19 &spi1_ss0_p0_16>;
 	pinctrl-names = "default";
 };
+
+&w1 {
+	pinctrl-0 = <&owm_io_p0_12>;
+	pinctrl-names = "default";
+};
diff --git a/boards/adi/max32666fthr/max32666fthr_max32666_cpu0.yaml b/boards/adi/max32666fthr/max32666fthr_max32666_cpu0.yaml
index f70a32e68cf..c40294e0ae3 100644
--- a/boards/adi/max32666fthr/max32666fthr_max32666_cpu0.yaml
+++ b/boards/adi/max32666fthr/max32666fthr_max32666_cpu0.yaml
@@ -17,5 +17,9 @@ supported:
   - spi
   - adc
   - counter
+  - rtc_counter
+  - pwm
+  - w1
+  - flash
 ram: 560
 flash: 1024
diff --git a/boards/adi/max32670evkit/doc/index.rst b/boards/adi/max32670evkit/doc/index.rst
index 3a03283975e..a5b10ef8d9e 100644
--- a/boards/adi/max32670evkit/doc/index.rst
+++ b/boards/adi/max32670evkit/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32670_evkit:
-
-MAX32670EVKIT
-#############
+.. zephyr:board:: max32670evkit
 
 Overview
 ********
@@ -15,10 +12,6 @@ from 8-bit or 16-bit microcontrollers.
 
 The Zephyr port is running on the MAX32670 MCU.
 
-.. image:: img/max32670evkit.webp
-   :align: center
-   :alt: MAX32670 EVKIT
-
 Hardware
 ********
 
@@ -118,6 +111,10 @@ Below interfaces are supported by Zephyr on MAX32670EVKIT.
 +-----------+------------+-------------------------------------+
 | Timer     | on-chip    | counter                             |
 +-----------+------------+-------------------------------------+
+| PWM       | on-chip    | pwm                                 |
++-----------+------------+-------------------------------------+
+| Flash     | on-chip    | flash                               |
++-----------+------------+-------------------------------------+
 
 Connections and IOs
 ===================
diff --git a/boards/adi/max32670evkit/max32670evkit.dts b/boards/adi/max32670evkit/max32670evkit.dts
index 98c6076374b..ed8a3f47601 100644
--- a/boards/adi/max32670evkit/max32670evkit.dts
+++ b/boards/adi/max32670evkit/max32670evkit.dts
@@ -65,6 +65,13 @@
 	status = "okay";
 };
 
+/*
+ * ERTCO is required for counter RTC
+ */
+&clk_ertco {
+	status = "okay";
+};
+
 &gpio0 {
 	status = "okay";
 };
@@ -96,3 +103,7 @@
 	pinctrl-0 = <&spi0_mosi_p0_3 &spi0_miso_p0_2 &spi0_sck_p0_4 &spi0_ss0_p0_5>;
 	pinctrl-names = "default";
 };
+
+&rtc_counter {
+	status = "okay";
+};
diff --git a/boards/adi/max32670evkit/max32670evkit.yaml b/boards/adi/max32670evkit/max32670evkit.yaml
index f4550186628..d040a09de49 100644
--- a/boards/adi/max32670evkit/max32670evkit.yaml
+++ b/boards/adi/max32670evkit/max32670evkit.yaml
@@ -16,5 +16,8 @@ supported:
   - watchdog
   - spi
   - counter
+  - rtc_counter
+  - pwm
+  - flash
 ram: 160
 flash: 384
diff --git a/boards/adi/max32672evkit/Kconfig.defconfig b/boards/adi/max32672evkit/Kconfig.defconfig
index cb74c0282e7..28ba2e3b964 100644
--- a/boards/adi/max32672evkit/Kconfig.defconfig
+++ b/boards/adi/max32672evkit/Kconfig.defconfig
@@ -19,7 +19,7 @@ choice LV_COLOR_DEPTH
 	default LV_COLOR_DEPTH_16  # 16 bit per pixel
 endchoice
 
-config LV_COLOR_16_SWAP
+configdefault LV_COLOR_16_SWAP
 	default y
 
 endif # LVGL
diff --git a/boards/adi/max32672evkit/doc/index.rst b/boards/adi/max32672evkit/doc/index.rst
index 2ad07382fc4..c706898a353 100644
--- a/boards/adi/max32672evkit/doc/index.rst
+++ b/boards/adi/max32672evkit/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32672_evkit:
-
-MAX32672EVKIT
-#############
+.. zephyr:board:: max32672evkit
 
 Overview
 ********
@@ -13,10 +10,6 @@ designs an easy, cost-optimal upgrade path from 8-bit or 16-bit microcontrollers
 
 The Zephyr port is running on the MAX32672 MCU.
 
-.. image:: img/max32672evkit.webp
-   :align: center
-   :alt: MAX32672EVKIT
-
 Hardware
 ********
 
@@ -113,6 +106,10 @@ Below interfaces are supported by Zephyr on MAX32672EVKIT.
 +-----------+------------+-------------------------------------+
 | Timer     | on-chip    | counter                             |
 +-----------+------------+-------------------------------------+
+| PWM       | on-chip    | pwm                                 |
++-----------+------------+-------------------------------------+
+| Flash     | on-chip    | flash                               |
++-----------+------------+-------------------------------------+
 
 
 Connections and IOs
diff --git a/boards/adi/max32672evkit/max32672evkit.dts b/boards/adi/max32672evkit/max32672evkit.dts
index d1d97f78af2..581a9723c1d 100644
--- a/boards/adi/max32672evkit/max32672evkit.dts
+++ b/boards/adi/max32672evkit/max32672evkit.dts
@@ -66,7 +66,7 @@
 		st7735: st7735@0 {
 			compatible = "sitronix,st7735r";
 			mipi-max-frequency = ;
-			mipi-mode = ;
+			mipi-mode = "MIPI_DBI_MODE_SPI_3WIRE";
 
 			reg = <0>;
 			width = <130>;
@@ -103,6 +103,13 @@
 	status = "okay";
 };
 
+/*
+ * ERTCO is required for counter RTC
+ */
+&clk_ertco {
+	status = "okay";
+};
+
 &gpio0 {
 	status = "okay";
 };
@@ -149,3 +156,7 @@
 	pinctrl-names = "default";
 	cs-gpios = <&gpio0 5 (GPIO_ACTIVE_LOW | MAX32_VSEL_VDDIOH)>;
 };
+
+&rtc_counter {
+	status = "okay";
+};
diff --git a/boards/adi/max32672evkit/max32672evkit.yaml b/boards/adi/max32672evkit/max32672evkit.yaml
index 276acbe28f8..e6dae70435c 100644
--- a/boards/adi/max32672evkit/max32672evkit.yaml
+++ b/boards/adi/max32672evkit/max32672evkit.yaml
@@ -17,5 +17,8 @@ supported:
   - spi
   - adc
   - counter
+  - rtc_counter
+  - pwm
+  - flash
 ram: 200
 flash: 1024
diff --git a/boards/adi/max32672fthr/doc/index.rst b/boards/adi/max32672fthr/doc/index.rst
index d773c4ceb95..76033bf97ec 100644
--- a/boards/adi/max32672fthr/doc/index.rst
+++ b/boards/adi/max32672fthr/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32672_fthr:
-
-MAX32672FTHR
-############
+.. zephyr:board:: max32672fthr
 
 Overview
 ********
@@ -115,6 +112,10 @@ Below interfaces are supported by Zephyr on MAX32672FTHR.
 +-----------+------------+-------------------------------------+
 | Timer     | on-chip    | counter                             |
 +-----------+------------+-------------------------------------+
+| PWM       | on-chip    | pwm                                 |
++-----------+------------+-------------------------------------+
+| Flash     | on-chip    | flash                               |
++-----------+------------+-------------------------------------+
 
 
 Connections and IOs
diff --git a/boards/adi/max32672fthr/max32672fthr.dts b/boards/adi/max32672fthr/max32672fthr.dts
index b2287cf7708..7690d03424a 100644
--- a/boards/adi/max32672fthr/max32672fthr.dts
+++ b/boards/adi/max32672fthr/max32672fthr.dts
@@ -100,6 +100,13 @@
 	status = "okay";
 };
 
+/*
+ * ERTCO is required for counter RTC
+ */
+&clk_ertco {
+	status = "okay";
+};
+
 &gpio0 {
 	status = "okay";
 };
@@ -148,3 +155,7 @@
 	pinctrl-0 = <&spi1a_mosi_p0_15 &spi1a_miso_p0_14 &spi1a_sck_p0_16 &spi1a_ss0_p0_17>;
 	pinctrl-names = "default";
 };
+
+&rtc_counter {
+	status = "okay";
+};
diff --git a/boards/adi/max32672fthr/max32672fthr.yaml b/boards/adi/max32672fthr/max32672fthr.yaml
index 68ba3c8b8a6..f98839246c8 100644
--- a/boards/adi/max32672fthr/max32672fthr.yaml
+++ b/boards/adi/max32672fthr/max32672fthr.yaml
@@ -17,5 +17,8 @@ supported:
   - spi
   - adc
   - counter
+  - rtc_counter
+  - pwm
+  - flash
 ram: 200
 flash: 1024
diff --git a/boards/adi/max32675evkit/doc/index.rst b/boards/adi/max32675evkit/doc/index.rst
index c4cb514d591..a9de574eb21 100644
--- a/boards/adi/max32675evkit/doc/index.rst
+++ b/boards/adi/max32675evkit/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32675_evkit:
-
-MAX32675EVKIT
-#############
+.. zephyr:board:: max32675evkit
 
 Overview
 ********
@@ -13,10 +10,6 @@ industrial sensors for configuration and diagnostics.
 
 The Zephyr port is running on the MAX32675 MCU.
 
-.. image:: img/max32675evkit.webp
-   :align: center
-   :alt: MAX32675EVKIT
-
 Hardware
 ********
 
@@ -98,6 +91,10 @@ Below interfaces are supported by Zephyr on MAX32675EVKIT.
 +-----------+------------+-------------------------------------+
 | I2C       | on-chip    | i2c                                 |
 +-----------+------------+-------------------------------------+
+| PWM       | on-chip    | pwm                                 |
++-----------+------------+-------------------------------------+
+| Flash     | on-chip    | flash                               |
++-----------+------------+-------------------------------------+
 
 Connections and IOs
 ===================
diff --git a/boards/adi/max32675evkit/max32675evkit.yaml b/boards/adi/max32675evkit/max32675evkit.yaml
index b16eefcba45..023a35465f3 100644
--- a/boards/adi/max32675evkit/max32675evkit.yaml
+++ b/boards/adi/max32675evkit/max32675evkit.yaml
@@ -14,5 +14,7 @@ supported:
   - serial
   - trng
   - spi
+  - pwm
+  - flash
 ram: 160
 flash: 384
diff --git a/boards/adi/max32680evkit/Kconfig.defconfig b/boards/adi/max32680evkit/Kconfig.defconfig
index 99702938eae..33ba842e291 100644
--- a/boards/adi/max32680evkit/Kconfig.defconfig
+++ b/boards/adi/max32680evkit/Kconfig.defconfig
@@ -19,7 +19,7 @@ choice LV_COLOR_DEPTH
 	default LV_COLOR_DEPTH_16  # 16 bit per pixel
 endchoice
 
-config LV_COLOR_16_SWAP
+configdefault LV_COLOR_16_SWAP
 	default y
 
 endif # LVGL
diff --git a/boards/adi/max32680evkit/doc/index.rst b/boards/adi/max32680evkit/doc/index.rst
index 4663894d58a..13c6d7d06b6 100644
--- a/boards/adi/max32680evkit/doc/index.rst
+++ b/boards/adi/max32680evkit/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32680_evkit:
-
-MAX32680EVKIT
-#############
+.. zephyr:board:: max32680evkit
 
 Overview
 ********
@@ -17,11 +14,6 @@ the latest generation Bluetooth® 5.2 Low Energy
 
 The Zephyr port is running on the MAX32680 MCU.
 
-.. image:: img/max32680evkit_img1.jpg
-   :align: center
-   :alt: MAX32680 EVKIT
-
-
 Hardware
 ********
 
@@ -124,6 +116,10 @@ Below interfaces are supported by Zephyr on MAX32680EVKIT.
 +-----------+------------+-------------------------------------+
 | Timer     | on-chip    | counter                             |
 +-----------+------------+-------------------------------------+
+| W1        | on-chip    | one wire master                     |
++-----------+------------+-------------------------------------+
+| Flash     | on-chip    | flash                               |
++-----------+------------+-------------------------------------+
 
 Connections and IOs
 ===================
diff --git a/boards/adi/max32680evkit/max32680evkit_max32680_m4.dts b/boards/adi/max32680evkit/max32680evkit_max32680_m4.dts
index 3e426960b0c..4547da3459d 100644
--- a/boards/adi/max32680evkit/max32680evkit_max32680_m4.dts
+++ b/boards/adi/max32680evkit/max32680evkit_max32680_m4.dts
@@ -72,7 +72,7 @@
 		st7735: st7735@0 {
 			compatible = "sitronix,st7735r";
 			mipi-max-frequency = ;
-			mipi-mode = ;
+			mipi-mode = "MIPI_DBI_MODE_SPI_3WIRE";
 
 			reg = <0>;
 			width = <130>;
@@ -165,3 +165,8 @@
 	pinctrl-names = "default";
 	cs-gpios = <&gpio0 4 (GPIO_ACTIVE_LOW | MAX32_VSEL_VDDIOH)>;
 };
+
+&w1 {
+	pinctrl-0 = <&owm_io_p0_6 &owm_pe_p0_7>;
+	pinctrl-names = "default";
+};
diff --git a/boards/adi/max32680evkit/max32680evkit_max32680_m4.yaml b/boards/adi/max32680evkit/max32680evkit_max32680_m4.yaml
index 604d3935222..1fc90758f49 100644
--- a/boards/adi/max32680evkit/max32680evkit_max32680_m4.yaml
+++ b/boards/adi/max32680evkit/max32680evkit_max32680_m4.yaml
@@ -17,5 +17,7 @@ supported:
   - spi
   - adc
   - counter
+  - w1
+  - flash
 ram: 128
 flash: 512
diff --git a/boards/adi/max32690evkit/Kconfig.defconfig b/boards/adi/max32690evkit/Kconfig.defconfig
index 342cc0ca513..2e5d60419c8 100644
--- a/boards/adi/max32690evkit/Kconfig.defconfig
+++ b/boards/adi/max32690evkit/Kconfig.defconfig
@@ -19,7 +19,7 @@ choice LV_COLOR_DEPTH
 	default LV_COLOR_DEPTH_16  # 16 bit per pixel
 endchoice
 
-config LV_COLOR_16_SWAP
+configdefault LV_COLOR_16_SWAP
 	default y
 
 endif # LVGL
diff --git a/boards/adi/max32690evkit/doc/img/max32690evkit_img1.jpg b/boards/adi/max32690evkit/doc/img/max32690evkit.jpg
similarity index 100%
rename from boards/adi/max32690evkit/doc/img/max32690evkit_img1.jpg
rename to boards/adi/max32690evkit/doc/img/max32690evkit.jpg
diff --git a/boards/adi/max32690evkit/doc/index.rst b/boards/adi/max32690evkit/doc/index.rst
index 5f4fe41e158..d976048dcb6 100644
--- a/boards/adi/max32690evkit/doc/index.rst
+++ b/boards/adi/max32690evkit/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32690_evkit:
-
-MAX32690EVKIT
-#############
+.. zephyr:board:: max32690evkit
 
 Overview
 ********
@@ -14,7 +11,7 @@ industrial sensors/networks, internet of things (IoT), and asset tracking.
 
 The Zephyr port is running on the MAX32690 MCU.
 
-.. image:: img/max32690evkit_img1.jpg
+.. image:: img/max32690evkit.jpg
    :align: center
    :alt: MAX32690 EVKIT Front
 
@@ -110,7 +107,7 @@ Below interfaces are supported by Zephyr on MAX32690EVKIT.
 | UART      | on-chip    | serial                              |
 +-----------+------------+-------------------------------------+
 | SPI       | on-chip    | spi                                 |
-+--------------------------------------------------------------+
++-----------+------------+-------------------------------------+
 | I2C       | on-chip    | i2c                                 |
 +-----------+------------+-------------------------------------+
 | TRNG      | on-chip    | entropy                             |
@@ -123,6 +120,12 @@ Below interfaces are supported by Zephyr on MAX32690EVKIT.
 +-----------+------------+-------------------------------------+
 | Timer     | on-chip    | counter                             |
 +-----------+------------+-------------------------------------+
+| PWM       | on-chip    | pwm                                 |
++-----------+------------+-------------------------------------+
+| W1        | on-chip    | one wire master                     |
++-----------+------------+-------------------------------------+
+| Flash     | on-chip    | flash                               |
++-----------+------------+-------------------------------------+
 
 
 Connections and IOs
diff --git a/boards/adi/max32690evkit/max32690evkit_max32690_m4.dts b/boards/adi/max32690evkit/max32690evkit_max32690_m4.dts
index 85b9d251e07..d04a91852cd 100644
--- a/boards/adi/max32690evkit/max32690evkit_max32690_m4.dts
+++ b/boards/adi/max32690evkit/max32690evkit_max32690_m4.dts
@@ -63,7 +63,7 @@
 		st7735: st7735@0 {
 			compatible = "sitronix,st7735r";
 			mipi-max-frequency = ;
-			mipi-mode = ;
+			mipi-mode = "MIPI_DBI_MODE_SPI_3WIRE";
 
 			reg = <0>;
 			width = <130>;
@@ -158,3 +158,12 @@
 	pinctrl-0 = <&spi0b_mosi_p2_28 &spi0b_miso_p2_27 &spi0b_sck_p2_29 &spi0b_ss1_p2_26>;
 	pinctrl-names = "default";
 };
+
+&w1 {
+	pinctrl-0 = <&owm_io_p0_8 &owm_pe_p0_7>;
+	pinctrl-names = "default";
+};
+
+&rtc_counter {
+	status = "okay";
+};
diff --git a/boards/adi/max32690evkit/max32690evkit_max32690_m4.yaml b/boards/adi/max32690evkit/max32690evkit_max32690_m4.yaml
index bd7e017dd30..b6a5a9a5d7a 100644
--- a/boards/adi/max32690evkit/max32690evkit_max32690_m4.yaml
+++ b/boards/adi/max32690evkit/max32690evkit_max32690_m4.yaml
@@ -17,5 +17,9 @@ supported:
   - watchdog
   - adc
   - counter
+  - rtc_counter
+  - pwm
+  - w1
+  - flash
 ram: 1024
 flash: 3072
diff --git a/boards/adi/max32690fthr/doc/index.rst b/boards/adi/max32690fthr/doc/index.rst
index edb480f3898..fdce08e32e8 100644
--- a/boards/adi/max32690fthr/doc/index.rst
+++ b/boards/adi/max32690fthr/doc/index.rst
@@ -1,7 +1,4 @@
-.. _max32690_fthr:
-
-MAX32690FTHR
-############
+.. zephyr:board:: max32690fthr
 
 Overview
 ********
@@ -84,7 +81,9 @@ Below interfaces are supported by Zephyr on MAX32690FTHR.
 | I2C       | on-chip    | i2c                                 |
 +-----------+------------+-------------------------------------+
 | SPI       | on-chip    | spi                                 |
-+--------------------------------------------------------------+
++-----------+------------+-------------------------------------+
+| Flash     | on-chip    | flash                               |
++-----------+------------+-------------------------------------+
 
 Programming and Debugging
 *************************
diff --git a/boards/adi/max32690fthr/max32690fthr_max32690_m4.yaml b/boards/adi/max32690fthr/max32690fthr_max32690_m4.yaml
index bbf1af6853f..d81738ee742 100644
--- a/boards/adi/max32690fthr/max32690fthr_max32690_m4.yaml
+++ b/boards/adi/max32690fthr/max32690fthr_max32690_m4.yaml
@@ -15,5 +15,6 @@ supported:
   - feather_serial
   - feather_i2c
   - feather_spi
+  - flash
 ram: 1024
 flash: 3072
diff --git a/boards/adi/max78002evkit/Kconfig.max78002evkit b/boards/adi/max78002evkit/Kconfig.max78002evkit
new file mode 100644
index 00000000000..a18aa6b97d9
--- /dev/null
+++ b/boards/adi/max78002evkit/Kconfig.max78002evkit
@@ -0,0 +1,7 @@
+# MAX78002EVKIT board configuration
+
+# Copyright (c) 2024 Analog Devices, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+config BOARD_MAX78002EVKIT
+	select SOC_MAX78002_M4 if BOARD_MAX78002EVKIT_MAX78002_M4
diff --git a/boards/adi/max78002evkit/board.cmake b/boards/adi/max78002evkit/board.cmake
new file mode 100644
index 00000000000..b7d321b2f84
--- /dev/null
+++ b/boards/adi/max78002evkit/board.cmake
@@ -0,0 +1,7 @@
+# Copyright (c) 2024 Analog Devices, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+board_runner_args(openocd --cmd-pre-init "source [find interface/cmsis-dap.cfg]")
+board_runner_args(openocd --cmd-pre-init "source [find target/max78002.cfg]")
+
+include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)
diff --git a/boards/adi/max78002evkit/board.yml b/boards/adi/max78002evkit/board.yml
new file mode 100644
index 00000000000..f995c7199f0
--- /dev/null
+++ b/boards/adi/max78002evkit/board.yml
@@ -0,0 +1,9 @@
+# Copyright (c) 2024 Analog Devices, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+board:
+  name: max78002evkit
+  full_name: MAX78002EVKIT
+  vendor: adi
+  socs:
+    - name: max78002
diff --git a/boards/adi/max78002evkit/doc/img/max78002evkit.webp b/boards/adi/max78002evkit/doc/img/max78002evkit.webp
new file mode 100644
index 00000000000..f3452168a63
Binary files /dev/null and b/boards/adi/max78002evkit/doc/img/max78002evkit.webp differ
diff --git a/boards/adi/max78002evkit/doc/img/max78002evkit_back.webp b/boards/adi/max78002evkit/doc/img/max78002evkit_back.webp
new file mode 100644
index 00000000000..ae0c1b99ed6
Binary files /dev/null and b/boards/adi/max78002evkit/doc/img/max78002evkit_back.webp differ
diff --git a/boards/adi/max78002evkit/doc/index.rst b/boards/adi/max78002evkit/doc/index.rst
new file mode 100644
index 00000000000..a5bd4acf09b
--- /dev/null
+++ b/boards/adi/max78002evkit/doc/index.rst
@@ -0,0 +1,295 @@
+.. zephyr:board:: max78002evkit
+
+Overview
+********
+The MAX78002 evaluation kit (EV kit) provides a platform and tools for leveraging device capabilities to build new
+generations of artificial intelligence (AI) products.
+
+The kit provides optimal versatility with a modular peripheral architecture, allowing a variety of input and output
+devices to be remotely located. DVP and CSI cameras, I2S audio peripherals, digital microphones, and analog sensors
+are supported, while a pair of industry-standard QWIIC connectors supports a large and growing array of aftermarket
+development boards. An onboard stereo audio codec offers line-level audio input and output, and tactile input is
+provided by a touch-enabled 2.4in TFT display. The MAX78002 energy consumption is tracked by a power accumulator,
+with four channels of formatted results presented on a secondary TFT display. All device GPIOs are accessible on
+0.1in pin headers. A standard coaxial power jack serves as power input, using the included 5V, 3A wall-mount
+adapter. Two USB connectors provide serial access to the MAX78002, one directly and the other through a USB to UART
+bridge. A third USB connector allows access to the MAX78002 energy consumption data. Rounding out the features, a
+microSD connector provides the capability for inexpensive highdensity portable data storage.
+
+The Zephyr port is running on the MAX78002 MCU.
+
+.. image:: img/max78002evkit.webp
+   :align: center
+   :alt: MAX78002 EVKIT Front
+
+.. image:: img/max78002evkit_back.webp
+   :align: center
+   :alt: MAX78002 EVKIT Back
+
+Hardware
+********
+
+- MAX78002 MCU:
+
+  - Dual-Core, Low-Power Microcontroller
+
+    - Arm Cortex-M4 Processor with FPU up to 120MHz
+    - 2.5MB Flash, 64KB ROM, and 384KB SRAM
+    - Optimized Performance with 16KB Instruction Cache
+    - Optional Error Correction Code (ECC SEC-DED) for SRAM
+    - 32-Bit RISC-V Coprocessor up to 60MHz
+    - Up to 60 General-Purpose I/O Pins
+    - MIPI Camera Serial Interface 2 (MIPI CSI-2) Controller V2.1
+    - Support for Two Data Lanes
+    - 12-Bit Parallel Camera Interface
+    - I 2S Controller/Target for Digital Audio Interface
+    - Secure Digital Interface Supports SD 3.0/SDIO 3.0/eMMC 4.51
+
+  - Convolutional Neural Network (CNN) Accelerator
+
+    - Highly Optimized for Deep CNNs
+    - 2 Million 8-Bit Weight Capacity with 1-, 2-, 4-, and 8-bit Weights
+    - 1.3MB CNN Data Memory
+    - Programmable Input Image Size up to 2048 x 2048 Pixels
+    - Programmable Network Depth up to 128 Layers
+    - Programmable per Layer Network Channel Widths up to 1024 Channels
+    - 1- and 2-Dimensional Convolution Processing
+    - Capable of Processing VGA Images at 30fps
+
+  - Power Management for Extending Battery Life
+
+    - Integrated Single-Inductor Multiple-Output (SIMO) Switch-Mode Power Supply (SMPS)
+    - 2.85V to 3.6V Supply Voltage Range
+    - Support of Optional External Auxiliary CNN Power Supply
+    - Dynamic Voltage Scaling Minimizes Active Core Power Consumption
+    - 23.9μA/MHz While Loop Execution at 3.3V from Cache (CM4 only)
+    - Selectable SRAM Retention in Low-Power Modes with Real-Time Clock (RTC) Enabled
+
+  - Security and Integrity
+
+    - Available Secure Boot
+    - AES 128/192/256 Hardware Acceleration Engine
+    - True Random Number Generator (TRNG) Seed Generator
+
+  - Ultra-Low-Power Wireless Microcontroller
+
+    - Internal 100MHz Oscillator
+    - Flexible Low-Power Modes with 7.3728MHz System Clock Option
+    - 512KB Flash and 128KB SRAM (Optional ECC on One 32KB SRAM Bank)
+    - 16KB Instruction Cache
+
+  - Bluetooth 5.2 LE Radio
+
+    - Dedicated, Ultra-Low-Power, 32-Bit RISC-V Coprocessor to Offload Timing-Critical Bluetooth Processing
+    - Fully Open-Source Bluetooth 5.2 Stack Available
+    - Supports AoA, AoD, LE Audio, and Mesh
+    - High-Throughput (2Mbps) Mode
+    - Long-Range (125kbps and 500kbps) Modes
+    - Rx Sensitivity: -97.5dBm; Tx Power: +4.5dBm
+    - Single-Ended Antenna Connection (50Ω)
+
+  - Power Management Maximizes Battery Life
+
+    - 2.0V to 3.6V Supply Voltage Range
+    - Integrated SIMO Power Regulator
+    - Dynamic Voltage Scaling (DVS)
+    - 23.8μA/MHz Active Current at 3.0V
+    - 4.4μA at 3.0V Retention Current for 32KB
+    - Selectable SRAM Retention + RTC in Low-Power Modes
+
+  - Multiple Peripherals for System Control
+
+    - Up to Two High-Speed SPI Master/Slave
+    - Up to Three High-Speed I2C Master/Slave (3.4Mbps)
+    - Up to Four UART, One I2S Master/Slave
+    - Up to 8-Input, 10-Bit Sigma-Delta ADC 7.8ksps
+    - Up to Four Micro-Power Comparators
+    - Timers: Up to Two Four 32-Bit, Two LP, TwoWatchdog Timers
+    - 1-Wire® Master
+    - Up to Four Pulse Train (PWM) Engines
+    - RTC with Wake-Up Timer
+    - Up to 52 GPIOs
+
+  - Security and Integrity
+
+    - Available Secure Boot
+    - TRNG Seed Generator
+    - AES 128/192/256 Hardware Acceleration Engine
+
+- External devices connected to the MAX78002 EVKIT:
+
+  - Color TFT Display
+  - Audio Stereo Codec Interface
+  - Digital Microphone
+  - A 8Mb QSPI ram
+
+Supported Features
+==================
+
+The ``max78002evkit/max78002/m4`` board target supports the following interfaces:
+
++-----------+------------+-------------------------------------+
+| Interface | Controller | Driver/Component                    |
++===========+============+=====================================+
+| NVIC      | on-chip    | nested vector interrupt controller  |
++-----------+------------+-------------------------------------+
+| SYSTICK   | on-chip    | systick                             |
++-----------+------------+-------------------------------------+
+| CLOCK     | on-chip    | clock and reset control             |
++-----------+------------+-------------------------------------+
+| GPIO      | on-chip    | gpio                                |
++-----------+------------+-------------------------------------+
+| UART      | on-chip    | serial                              |
++-----------+------------+-------------------------------------+
+| TRNG      | on-chip    | entropy                             |
++-----------+------------+-------------------------------------+
+| I2C       | on-chip    | i2c                                 |
++-----------+------------+-------------------------------------+
+| DMA       | on-chip    | dma controller                      |
++-----------+------------+-------------------------------------+
+| Watchdog  | on-chip    | watchdog                            |
++-----------+------------+-------------------------------------+
+| SPI       | on-chip    | spi                                 |
++-----------+------------+-------------------------------------+
+| ADC       | on-chip    | adc                                 |
++-----------+------------+-------------------------------------+
+| Timer     | on-chip    | counter                             |
++-----------+------------+-------------------------------------+
+| PWM       | on-chip    | pwm                                 |
++-----------+------------+-------------------------------------+
+| W1        | on-chip    | one wire master                     |
++-----------+------------+-------------------------------------+
+| Flash     | on-chip    | flash                               |
++-----------+------------+-------------------------------------+
+
+Connections and IOs
+===================
+
++-----------+-------------------+----------------------------------------------------------------------------------+
+| Name      | Signal            | Usage                                                                            |
++===========+===================+==================================================================================+
+| JP1       | 3V3 MON           | Normal operation in conjunction with JP3 jumpered 1-2                            |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP2       | 3V3 SW PM BYPASS  | Power monitor shunts for main 3.3 V system power are bypassed                    |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP3       | CNN MON           | Normal operation in conjunction with JP6 jumpered 1-2                            |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP4       | VCOREA PM BYPASS  | Power monitor shunts for U4's share of VCOREA + CNN loads are bypassed           |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP5       | VCOREB PM BYPASS  | Power monitor shunts for VCOREB are bypassed                                     |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP6       | VREGO_A PM BYPASS | Power monitor shunts for VREGO_A are bypassed                                    |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP7       | VBAT              | Enable/Disable 3V3 VBAT power                                                    |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP8       | VREGI             | Enable/Disable 3V3 VREGI power                                                   |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP9       | VREGI/VBAT        | Onboard 3V3_PM / external source at TP10 supplies VREGI/VBAT                     |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP10      | VDDIOH            | Onboard 3V3_PM/3V3_SW supplies VDDIOH                                            |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP11      | VDDA              | VREGO_A_PM powers VDDA                                                           |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP12      | VDDIO             | VREGO_A_PM powers VDDIO                                                          |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP13      | VCOREB            | VREGO_B powers VCOREB                                                            |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP14      | VCOREA            | VREGO_C ties to net VCOREA                                                       |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP15      | VREF              | DUT ADC VREF is supplied by precision external reference                         |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP16      | I2C1 SDA          | I2C1 DATA pull-up                                                                |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP17      | I2C1 SCL          | I2C1 CLOCK pull-up                                                               |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP18      | TRIG1             | PWR accumulator trigger signal 1 ties to port 1.6                                |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP19      | TRIG2             | PWR accumulator trigger signal 2 ties to port 1.7                                |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP20      | UART0 EN          | Connect/Disconnect USB-UART bridge to UART0                                      |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP21      | I2C0_SDA          | I2C0 DATA pull-up                                                                |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP22      | I2C0_SCL          | I2C0 CLOCK pull-up                                                               |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP23      | UART1 EN          | Connect/Disconnect USB-UART bridge to UART1                                      |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP24      | EXT I2C0 EN       | Enable/Disable QWIIC interface for I2C0                                          |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP25      | PB1 PU            | Enable/Disable 100kΩ pull-up for pushbutton mode, port 2.6                       |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP26      | PB2 PU            | Enable/Disable 100kΩ pull-up for pushbutton mode, port 2.7                       |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP27      | I2C2 SDA          | I2C2 DATA pull-up                                                                |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP28      | I2C2 SCL          | I2C2 CLOCK pull-up                                                               |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP29      | VDDB              | USB XCVR VDDB powered from VBUS / powered full time by system 3V3_PM             |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP30      | EXT I2C2 EN       | Enable/Disable QWIIC interface for I2C2                                          |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP31      | L/R SEL           | Select MIC ON R/L CH, I2S microphone data stream                                 |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP32      | MIC-I2S I/O       | External I2S/MIC data from I2S I/O / MIC header connected to I2S SDI             |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP33      | MIC-I2S/CODEC     | Onboard CODEC data / external I2S data from header connects to I2S SDI           |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP34      | I2S VDD           | Select 1.8V/3.3V for external MIC and DATA I2S interface                         |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP35      | I2C1 SDA          | I2C1 DATA pull-up                                                                |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP36      | I2C1 SCL          | I2C1 CLOCK pull-up                                                               |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP37      | I2S CK SEL        | Select SMA connector J6 / onboard crystal oscillator for I2S master clock source |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP38      | DVP CAM PWR       | Enable/Disable OVM7692 for DVP camera PWDN input                                 |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP39      | SW CAM PWUP       | Camera reset and power up under port pin control                                 |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP40      | HW PWUP / SW PWUP | Camera will reset and power up as soon as 3.3V reaches a valid level             |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP41      | CSI CAM I2C EN    | Connect/Disconnect I2C1 to CSI camera Digilent P5C I2C                           |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP42      | TFT DC            | TFT data/command select connects to port 2.2                                     |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP43      | TFT CS            | Select port 0.3 / port 1.7 to drive TFT CS                                       |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP44      | LED1 EN           | Enable/Disable LED1                                                              |
++-----------+-------------------+----------------------------------------------------------------------------------+
+| JP45      | LED2 EN           | Enable/Disable LED2                                                              |
++-----------+-------------------+----------------------------------------------------------------------------------+
+
+Programming and Debugging
+*************************
+
+Flashing
+========
+
+The MAX78002 MCU can be flashed by connecting an external debug probe to the
+SWD port. SWD debug can be accessed through the Cortex 10-pin connector, JH8.
+Logic levels are fixed to VDDIO (1.8V).
+
+Once the debug probe is connected to your host computer, then you can simply run the
+``west flash`` command to write a firmware image into flash.
+
+.. note::
+
+   This board uses OpenOCD as the default debug interface. You can also use
+   a Segger J-Link with Segger's native tooling by overriding the runner,
+   appending ``--runner jlink`` to your ``west`` command(s). The J-Link should
+   be connected to the standard 2*5 pin debug connector (JH8) using an
+   appropriate adapter board and cable.
+
+Debugging
+=========
+
+Please refer to the `Flashing`_ section and run the ``west debug`` command
+instead of ``west flash``.
+
+References
+**********
+
+- `MAX78002EVKIT web page`_
+
+.. _MAX78002EVKIT web page:
+   https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max78002evkit.html
diff --git a/boards/adi/max78002evkit/max78002evkit_max78002_m4.dts b/boards/adi/max78002evkit/max78002evkit_max78002_m4.dts
new file mode 100644
index 00000000000..8b6df6c28c1
--- /dev/null
+++ b/boards/adi/max78002evkit/max78002evkit_max78002_m4.dts
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2024 Analog Devices, Inc.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/dts-v1/;
+
+#include 
+#include 
+#include 
+#include 
+
+/ {
+	 model = "Analog Devices MAX78002EVKIT";
+	 compatible = "adi,max78002evkit";
+
+	 chosen {
+		 zephyr,console = &uart0;
+		 zephyr,shell-uart = &uart0;
+		 zephyr,sram = &sram2;
+		 zephyr,flash = &flash0;
+	 };
+
+	 leds {
+		 compatible = "gpio-leds";
+		 led1: led_1 {
+			 gpios = <&gpio2 4 GPIO_ACTIVE_HIGH>;
+			 label = "Green LED";
+		 };
+		 led2: led_2 {
+			 gpios = <&gpio2 5 GPIO_ACTIVE_HIGH>;
+			 label = "Red LED";
+		 };
+	 };
+
+	 buttons {
+		 compatible = "gpio-keys";
+		 pb1: pb1 {
+			 gpios = <&gpio2 6 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
+			 label = "SW2";
+			 zephyr,code = ;
+		 };
+		 pb2: pb2 {
+			 gpios = <&gpio2 7 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
+			 label = "SW3";
+			 zephyr,code = ;
+		 };
+		 pb_wakeup: pb_wakeup {
+			gpios = <&gpio3 1 (GPIO_PULL_UP | GPIO_ACTIVE_LOW
+				| MAX32_GPIO_VSEL_VDDIOH)>;
+			label = "Wakeup";
+			zephyr,code = ;
+		};
+	 };
+
+	 /* These aliases are provided for compatibility with samples */
+	 aliases {
+		led0 = &led1;
+		led1 = &led2;
+		sw0 = &pb1;
+		sw1 = &pb2;
+		watchdog0 = &wdt0;
+	 };
+};
+
+&uart0 {
+	pinctrl-0 = <&uart0a_tx_p0_1 &uart0a_rx_p0_0>;
+	pinctrl-names = "default";
+	current-speed = <115200>;
+	data-bits = <8>;
+	parity = "none";
+	status = "okay";
+};
+
+&clk_ipo {
+	status = "okay";
+};
+
+&clk_ibro {
+	status = "okay";
+};
+
+&gpio0 {
+	status = "okay";
+};
+
+&gpio1 {
+	status = "okay";
+};
+
+&gpio2 {
+	status = "okay";
+};
+
+&gpio3 {
+	status = "okay";
+};
+
+&trng {
+	status = "okay";
+};
+
+&i2c0 {
+	status = "okay";
+	pinctrl-0 = <&i2c0_scl_p0_10 &i2c0_sda_p0_11>;
+	pinctrl-names = "default";
+};
+
+&dma0 {
+	status = "okay";
+};
+
+&wdt0 {
+	status = "okay";
+};
+
+&spi0 {
+	status = "okay";
+	pinctrl-0 = <&spi0_mosi_p0_5 &spi0_miso_p0_6 &spi0_sck_p0_7 &spi0_ss0_p0_4>;
+	pinctrl-names = "default";
+};
+
+&w1 {
+	pinctrl-0 = <&owm_io_p0_6 &owm_pe_p0_7>;
+	pinctrl-names = "default";
+};
diff --git a/boards/adi/max78002evkit/max78002evkit_max78002_m4.yaml b/boards/adi/max78002evkit/max78002evkit_max78002_m4.yaml
new file mode 100644
index 00000000000..4631e4e276b
--- /dev/null
+++ b/boards/adi/max78002evkit/max78002evkit_max78002_m4.yaml
@@ -0,0 +1,24 @@
+identifier: max78002evkit/max78002/m4
+name: max78002evkit m4
+vendor: adi
+type: mcu
+arch: arm
+toolchain:
+  - zephyr
+  - gnuarmemb
+  - xtools
+supported:
+  - gpio
+  - serial
+  - trng
+  - i2c
+  - dma
+  - watchdog
+  - spi
+  - adc
+  - counter
+  - pwm
+  - w1
+  - flash
+ram: 384
+flash: 2560
diff --git a/boards/adi/max78002evkit/max78002evkit_max78002_m4_defconfig b/boards/adi/max78002evkit/max78002evkit_max78002_m4_defconfig
new file mode 100644
index 00000000000..a048ab2608f
--- /dev/null
+++ b/boards/adi/max78002evkit/max78002evkit_max78002_m4_defconfig
@@ -0,0 +1,13 @@
+# Copyright (c) 2024 Analog Devices, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+# Enable GPIO
+CONFIG_GPIO=y
+
+# Console
+CONFIG_CONSOLE=y
+CONFIG_UART_CONSOLE=y
+
+# Enable UART
+CONFIG_SERIAL=y
+CONFIG_UART_INTERRUPT_DRIVEN=y
diff --git a/boards/adi/sdp_k1/doc/index.rst b/boards/adi/sdp_k1/doc/index.rst
index 0b23797da6b..680852f53dd 100644
--- a/boards/adi/sdp_k1/doc/index.rst
+++ b/boards/adi/sdp_k1/doc/index.rst
@@ -1,7 +1,4 @@
-.. _adi_sdp_k1:
-
-ADI SDP-K1
-##########
+.. zephyr:board:: adi_sdp_k1
 
 Overview
 ********
@@ -24,12 +21,6 @@ ADI components.
 - 16MB SDRAM
 - Arduino UNO and 120-pin SDP connectors
 
-.. figure:: img/adi_sdp_k1.webp
-   :align: center
-   :alt: ADI SDP-K1
-
-   ADI SDP-K1 (Credit: Analog Devices, Inc.)
-
 More information about the board can be found on the `ADI SDP-K1 website`_.
 
 Hardware
diff --git a/boards/alientek/pandora_stm32l475/doc/index.rst b/boards/alientek/pandora_stm32l475/doc/index.rst
index 082c814914a..d976ee7740f 100644
--- a/boards/alientek/pandora_stm32l475/doc/index.rst
+++ b/boards/alientek/pandora_stm32l475/doc/index.rst
@@ -1,7 +1,4 @@
-.. _pandora_stm32l475_board:
-
-Alientek STM32L475 Pandora
-##########################
+.. zephyr:board:: pandora_stm32l475
 
 Overview
 ********
@@ -28,15 +25,12 @@ some highlights of the STM32L475 Pandora board:
 - MCU current ammeter with 4 ranges and auto-calibration
 - Connector for external board or RF-EEPROM
 - Four power supply options:
+
     - ST-LINK/V2-1
     - USB FS connector
     - External 5 V
     - CR2032 battery (not provided)
 
-.. image:: img/pandora_stm32l475.jpg
-     :align: center
-     :alt: STM32L475 Pandora
-
 More information about the board can be found at the `STM32L475 Pandora website`_.
 
 Hardware
diff --git a/boards/alientek/pandora_stm32l475/pandora_stm32l475.dts b/boards/alientek/pandora_stm32l475/pandora_stm32l475.dts
index 567e88a0152..7661de67198 100644
--- a/boards/alientek/pandora_stm32l475/pandora_stm32l475.dts
+++ b/boards/alientek/pandora_stm32l475/pandora_stm32l475.dts
@@ -83,6 +83,7 @@
 			qspi-max-frequency = <80000000>;
 			jedec-id = [ef 40 18];
 			spi-bus-width = <4>;
+			writeoc = "PP_1_1_4";
 			status = "okay";
 	};
 };
diff --git a/boards/altr/max10/doc/index.rst b/boards/altr/max10/doc/index.rst
index 0ff861b4f83..0c16aa329e8 100644
--- a/boards/altr/max10/doc/index.rst
+++ b/boards/altr/max10/doc/index.rst
@@ -1,21 +1,11 @@
-.. _altera_max10:
-
-Altera MAX10
-############
+.. zephyr:board:: altera_max10
 
 Overview
 ********
 
-
 The Zephyr kernel is supported on the Altera MAX10 Rev C development kit, using
 the Nios II Gen 2 soft CPU.
 
-.. figure:: img/altera_max10.jpg
-   :align: center
-   :alt: Altera's MAX* 10
-
-   Altera's MAX* 10  (Credit: Altera)
-
 Hardware
 ********
 
diff --git a/boards/ambiq/apollo3_evb/Kconfig.defconfig b/boards/ambiq/apollo3_evb/Kconfig.defconfig
new file mode 100644
index 00000000000..bd2a5f91add
--- /dev/null
+++ b/boards/ambiq/apollo3_evb/Kconfig.defconfig
@@ -0,0 +1,14 @@
+# SPDX-License-Identifier: Apache-2.0
+#
+# Copyright (c) 2024 Ambiq Micro Inc. 
+
+if BOARD_APOLLO3_EVB
+
+config SYS_CLOCK_HW_CYCLES_PER_SEC
+	default 32768 if AMBIQ_STIMER_TIMER
+
+config LOG_BACKEND_SWO_FREQ_HZ
+	default 1000000
+	depends on LOG_BACKEND_SWO
+
+endif # BOARD_APOLLO3_EVB
diff --git a/boards/ambiq/apollo3_evb/apollo3_evb-pinctrl.dtsi b/boards/ambiq/apollo3_evb/apollo3_evb-pinctrl.dtsi
index 7fbd368813b..26cf5e58063 100644
--- a/boards/ambiq/apollo3_evb/apollo3_evb-pinctrl.dtsi
+++ b/boards/ambiq/apollo3_evb/apollo3_evb-pinctrl.dtsi
@@ -17,6 +17,11 @@
 			input-enable;
 		};
 	};
+	itm_default: itm_default {
+		group1 {
+			pinmux = ;
+		};
+	};
 	i2c0_default: i2c0_default {
 		group1 {
 			pinmux = , ;
@@ -65,7 +70,11 @@
 			bias-pull-up;
 		};
 	};
-
+	spid0_default: spid0_default {
+		group1 {
+			pinmux = , , , ;
+		};
+	};
 	spi0_default: spi0_default {
 		group1 {
 			pinmux = , , ;
diff --git a/boards/ambiq/apollo3_evb/apollo3_evb.dts b/boards/ambiq/apollo3_evb/apollo3_evb.dts
index a47b97f1696..30828d729c5 100644
--- a/boards/ambiq/apollo3_evb/apollo3_evb.dts
+++ b/boards/ambiq/apollo3_evb/apollo3_evb.dts
@@ -2,6 +2,7 @@
 #include 
 
 #include "apollo3_evb-pinctrl.dtsi"
+#include 
 
 / {
 	model = "Ambiq Apollo3 Blue evaluation board";
@@ -13,9 +14,11 @@
 		zephyr,flash = &flash0;
 		zephyr,console = &uart0;
 		zephyr,shell-uart = &uart0;
+		zephyr,uart-mcumgr = &uart0;
 		zephyr,uart-pipe = &uart0;
 		zephyr,flash-controller = &flash;
 		zephyr,bt_hci = &bt_hci_apollo;
+		zephyr,code-partition = &slot0_partition;
 	};
 
 	aliases {
@@ -25,6 +28,9 @@
 		led2 = &led2;
 		sw0 = &button0;
 		sw1 = &button1;
+		bootloader-led0 = &led0;
+		mcuboot-led0 = &led0;
+		rtc = &rtc0;
 	};
 
 	leds {
@@ -56,14 +62,17 @@
 		button0: button_0 {
 			gpios = <&gpio0_31 16 GPIO_ACTIVE_LOW>;
 			label = "BTN0";
+			zephyr,code = ;
 		};
 		button1: button_1 {
 			gpios = <&gpio0_31 18 GPIO_ACTIVE_LOW>;
 			label = "BTN1";
+			zephyr,code = ;
 		};
 		button2: button_2 {
 			gpios = <&gpio0_31 19 GPIO_ACTIVE_LOW>;
 			label = "BTN2";
+			zephyr,code = ;
 		};
 	};
 };
@@ -77,14 +86,36 @@
 		#address-cells = <1>;
 		#size-cells = <1>;
 
-		/* Set 16KB of storage at the end of the 976KB of flash */
-		storage_partition: partition@f0000 {
+		internal_boot_partition: partition@0 {
+			label = "internal_bootloader";
+			reg = <0x00000000 0xc000>;
+		};
+
+		boot_partition: partition@c000 {
+			label = "mcuboot";
+			reg = <0x0000c000 0xc000>;
+		};
+		slot0_partition: partition@18000 {
+			label = "image-0";
+			reg = <0x00018000 0x72000>;
+		};
+		slot1_partition: partition@8a000 {
+			label = "image-1";
+			reg = <0x0008a000 0x72000>;
+		};
+
+		/* Set 16KB of storage at the end of the 1024KB of flash */
+		storage_partition: partition@fc000 {
 			label = "storage";
-			reg = <0x000f0000 0x4000>;
+			reg = <0x000fc000 0x4000>;
 		};
 	};
 };
 
+&stimer0 {
+	clk-source = <3>;
+};
+
 &bleif {
 	pinctrl-0 = <&bleif_default>;
 	pinctrl-names = "default";
@@ -98,6 +129,12 @@
 	status = "okay";
 };
 
+&itm {
+	pinctrl-0 = <&itm_default>;
+	pinctrl-names = "default";
+	status = "okay";
+};
+
 &wdt0 {
 	status = "okay";
 };
@@ -116,6 +153,8 @@
 	pinctrl-0 = <&i2c3_default>;
 	pinctrl-names = "default";
 	clock-frequency = ;
+	scl-gpios = <&gpio32_63 10 (GPIO_OPEN_DRAIN | GPIO_PULL_UP)>;
+	sda-gpios = <&gpio32_63 11 (GPIO_OPEN_DRAIN | GPIO_PULL_UP)>;
 	status = "okay";
 };
 
@@ -151,6 +190,11 @@
 	status = "okay";
 };
 
+&rtc0 {
+	status = "okay";
+	clock = "XTAL";
+};
+
 &adc0 {
 	compatible = "ambiq,adc";
 	pinctrl-0 = <&adc0_default>;
diff --git a/boards/ambiq/apollo3_evb/doc/index.rst b/boards/ambiq/apollo3_evb/doc/index.rst
index 570e1d54d45..429d973d378 100644
--- a/boards/ambiq/apollo3_evb/doc/index.rst
+++ b/boards/ambiq/apollo3_evb/doc/index.rst
@@ -1,14 +1,7 @@
-.. _apollo3_evb:
-
-Ambiq Apollo3 Blue EVB
-######################
+.. zephyr:board:: apollo3_evb
 
 Apollo3 Blue EVB is a board by Ambiq featuring their ultra-low power Apollo3 Blue SoC.
 
-.. image:: ./apollo3-blue-soc-eval-board.jpg
-   :align: center
-   :alt: Apollo3 Blue EVB
-
 Hardware
 ********
 
diff --git a/boards/ambiq/apollo3p_evb/Kconfig.defconfig b/boards/ambiq/apollo3p_evb/Kconfig.defconfig
new file mode 100644
index 00000000000..5e677acf238
--- /dev/null
+++ b/boards/ambiq/apollo3p_evb/Kconfig.defconfig
@@ -0,0 +1,14 @@
+# SPDX-License-Identifier: Apache-2.0
+#
+# Copyright (c) 2024 Ambiq Micro Inc. 
+
+if BOARD_APOLLO3P_EVB
+
+config SYS_CLOCK_HW_CYCLES_PER_SEC
+	default 32768 if AMBIQ_STIMER_TIMER
+
+config LOG_BACKEND_SWO_FREQ_HZ
+	default 1000000
+	depends on LOG_BACKEND_SWO
+
+endif # BOARD_APOLLO3P_EVB
diff --git a/boards/ambiq/apollo3p_evb/apollo3p_evb-pinctrl.dtsi b/boards/ambiq/apollo3p_evb/apollo3p_evb-pinctrl.dtsi
index b026ba7722f..3eea582a372 100644
--- a/boards/ambiq/apollo3p_evb/apollo3p_evb-pinctrl.dtsi
+++ b/boards/ambiq/apollo3p_evb/apollo3p_evb-pinctrl.dtsi
@@ -17,6 +17,11 @@
 			input-enable;
 		};
 	};
+	itm_default: itm_default {
+		group1 {
+			pinmux = ;
+		};
+	};
 	i2c0_default: i2c0_default {
 		group1 {
 			pinmux = , ;
@@ -65,7 +70,11 @@
 			bias-pull-up;
 		};
 	};
-
+	spid0_default: spid0_default {
+		group1 {
+			pinmux = , , , ;
+		};
+	};
 	spi0_default: spi0_default {
 		group1 {
 			pinmux = , , ;
diff --git a/boards/ambiq/apollo3p_evb/apollo3p_evb.dts b/boards/ambiq/apollo3p_evb/apollo3p_evb.dts
index 75d61cbf2a3..88b3cefbb2f 100644
--- a/boards/ambiq/apollo3p_evb/apollo3p_evb.dts
+++ b/boards/ambiq/apollo3p_evb/apollo3p_evb.dts
@@ -2,6 +2,7 @@
 #include 
 
 #include "apollo3p_evb-pinctrl.dtsi"
+#include 
 
 / {
 	model = "Ambiq Apollo3 Blue Plus evaluation board";
@@ -25,6 +26,7 @@
 		led2 = &led2;
 		sw0 = &button0;
 		sw1 = &button1;
+		rtc = &rtc0;
 	};
 
 	leds {
@@ -56,14 +58,17 @@
 		button0: button_0 {
 			gpios = <&gpio0_31 16 GPIO_ACTIVE_LOW>;
 			label = "BTN0";
+			zephyr,code = ;
 		};
 		button1: button_1 {
 			gpios = <&gpio0_31 18 GPIO_ACTIVE_LOW>;
 			label = "BTN1";
+			zephyr,code = ;
 		};
 		button2: button_2 {
 			gpios = <&gpio0_31 19 GPIO_ACTIVE_LOW>;
 			label = "BTN2";
+			zephyr,code = ;
 		};
 	};
 };
@@ -85,6 +90,10 @@
 	};
 };
 
+&stimer0 {
+	clk-source = <3>;
+};
+
 &bleif {
 	pinctrl-0 = <&bleif_default>;
 	pinctrl-names = "default";
@@ -98,6 +107,12 @@
 	status = "okay";
 };
 
+&itm {
+	pinctrl-0 = <&itm_default>;
+	pinctrl-names = "default";
+	status = "okay";
+};
+
 &wdt0 {
 	status = "okay";
 };
@@ -116,6 +131,8 @@
 	pinctrl-0 = <&i2c3_default>;
 	pinctrl-names = "default";
 	clock-frequency = ;
+	scl-gpios = <&gpio32_63 10 (GPIO_OPEN_DRAIN | GPIO_PULL_UP)>;
+	sda-gpios = <&gpio32_63 11 (GPIO_OPEN_DRAIN | GPIO_PULL_UP)>;
 	status = "okay";
 };
 
@@ -151,6 +168,11 @@
 	status = "okay";
 };
 
+&rtc0 {
+	status = "okay";
+	clock = "XTAL";
+};
+
 &adc0 {
 	compatible = "ambiq,adc";
 	pinctrl-0 = <&adc0_default>;
diff --git a/boards/ambiq/apollo3p_evb/doc/index.rst b/boards/ambiq/apollo3p_evb/doc/index.rst
index c06f3b1e168..a5f848c4f2c 100644
--- a/boards/ambiq/apollo3p_evb/doc/index.rst
+++ b/boards/ambiq/apollo3p_evb/doc/index.rst
@@ -1,14 +1,7 @@
-.. _apollo3p_evb:
-
-Ambiq Apollo3 Blue Plus EVB
-###########################
+.. zephyr:board:: apollo3p_evb
 
 Apollo3 Blue Plus EVB is a board by Ambiq featuring their ultra-low power Apollo3 Blue Plus SoC.
 
-.. image:: ./apollo3-blue-plus-soc-eval-board.jpg
-   :align: center
-   :alt: Apollo3 Blue Plus EVB
-
 Hardware
 ********
 
diff --git a/boards/ambiq/apollo4p_blue_kxr_evb/Kconfig.defconfig b/boards/ambiq/apollo4p_blue_kxr_evb/Kconfig.defconfig
index 5d16de3a1ca..63595ffddbd 100644
--- a/boards/ambiq/apollo4p_blue_kxr_evb/Kconfig.defconfig
+++ b/boards/ambiq/apollo4p_blue_kxr_evb/Kconfig.defconfig
@@ -4,6 +4,13 @@
 
 if BOARD_APOLLO4P_BLUE_KXR_EVB
 
+config SYS_CLOCK_HW_CYCLES_PER_SEC
+	default 32768 if AMBIQ_STIMER_TIMER
+
+config LOG_BACKEND_SWO_FREQ_HZ
+	default 1000000
+	depends on LOG_BACKEND_SWO
+
 if BT
 
 config MAIN_STACK_SIZE
diff --git a/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb-pinctrl.dtsi b/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb-pinctrl.dtsi
index 1d64b010f60..f8c20b0fad9 100644
--- a/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb-pinctrl.dtsi
+++ b/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb-pinctrl.dtsi
@@ -16,6 +16,11 @@
 			input-enable;
 		};
 	};
+	itm_default: itm_default {
+		group1 {
+			pinmux = ;
+		};
+	};
 	i2c0_default: i2c0_default {
 		group1 {
 			pinmux = , ;
diff --git a/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb.dts b/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb.dts
index 6a246a1f12e..cdcbcee689b 100644
--- a/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb.dts
+++ b/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb.dts
@@ -1,5 +1,6 @@
 /dts-v1/;
 #include 
+#include 
 
 #include "apollo4p_blue_kxr_evb-pinctrl.dtsi"
 
@@ -25,6 +26,7 @@
 		led2 = &led2;
 		sw0 = &button0;
 		sw1 = &button1;
+		rtc = &rtc0;
 	};
 
 	leds {
@@ -45,13 +47,18 @@
 
 	buttons {
 		compatible = "gpio-keys";
+		polling-mode;
 		button0: button_0 {
 			gpios = <&gpio0_31 17 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
 			label = "BTN0";
+			zephyr,code = ;
+			status = "okay";
 		};
 		button1: button_1 {
 			gpios = <&gpio0_31 19 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
 			label = "BTN1";
+			zephyr,code = ;
+			status = "okay";
 		};
 	};
 };
@@ -63,10 +70,21 @@
 	status = "okay";
 };
 
+&itm {
+	pinctrl-0 = <&itm_default>;
+	pinctrl-names = "default";
+	status = "okay";
+};
+
 &counter0 {
 	status = "okay";
 };
 
+&rtc0 {
+	status = "okay";
+	clock = "XTAL";
+};
+
 &wdt0 {
 	status = "okay";
 };
@@ -76,6 +94,8 @@
 	pinctrl-0 = <&i2c0_default>;
 	pinctrl-names = "default";
 	clock-frequency = ;
+	scl-gpios = <&gpio0_31 5 (GPIO_OPEN_DRAIN | GPIO_PULL_UP)>;
+	sda-gpios = <&gpio0_31 6 (GPIO_OPEN_DRAIN | GPIO_PULL_UP)>;
 	status = "okay";
 };
 
@@ -117,6 +137,10 @@
 	};
 };
 
+&stimer0 {
+	clk-source = <3>;
+};
+
 &xo32m {
 	pinctrl-0 = <&xo32m_default>;
 	pinctrl-names = "default";
@@ -129,6 +153,12 @@
 	status = "okay";
 };
 
+zephyr_udc0: &usb {
+	vddusb33-gpios = <&gpio0_31 13 (GPIO_PULL_UP)>;
+	vddusb0p9-gpios = <&gpio0_31 15 (GPIO_PULL_UP)>;
+	status = "okay";
+};
+
 &gpio0_31 {
 	status = "okay";
 };
diff --git a/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb.yaml b/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb.yaml
index d9e9f244d86..a1e0378d592 100644
--- a/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb.yaml
+++ b/boards/ambiq/apollo4p_blue_kxr_evb/apollo4p_blue_kxr_evb.yaml
@@ -16,6 +16,7 @@ supported:
   - i2c
   - clock_control
   - ble
+  - usbd
 testing:
   ignore_tags:
     - net
diff --git a/boards/ambiq/apollo4p_blue_kxr_evb/doc/index.rst b/boards/ambiq/apollo4p_blue_kxr_evb/doc/index.rst
index 3a1876297d2..81158fba6db 100644
--- a/boards/ambiq/apollo4p_blue_kxr_evb/doc/index.rst
+++ b/boards/ambiq/apollo4p_blue_kxr_evb/doc/index.rst
@@ -1,14 +1,7 @@
-.. _apollo4p_blue_kxr_evb:
-
-Ambiq Apollo4 Blue Plus KXR EVB
-###############################
+.. zephyr:board:: apollo4p_blue_kxr_evb
 
 Apollo4 Blue Plus KXR EVB is a board by Ambiq featuring their ultra-low power Apollo4 Blue Plus SoC.
 
-.. image:: ./apollo4-blue-plus-kxr-soc-eval-board.jpg
-   :align: center
-   :alt: Apollo4 Blue Plus KXR EVB
-
 Hardware
 ********
 
diff --git a/boards/ambiq/apollo4p_evb/Kconfig.defconfig b/boards/ambiq/apollo4p_evb/Kconfig.defconfig
new file mode 100644
index 00000000000..782fec1cfb6
--- /dev/null
+++ b/boards/ambiq/apollo4p_evb/Kconfig.defconfig
@@ -0,0 +1,14 @@
+# SPDX-License-Identifier: Apache-2.0
+#
+# Copyright (c) 2024 Ambiq Micro Inc. 
+
+if BOARD_APOLLO4P_EVB
+
+config SYS_CLOCK_HW_CYCLES_PER_SEC
+	default 32768 if AMBIQ_STIMER_TIMER
+
+config LOG_BACKEND_SWO_FREQ_HZ
+	default 1000000
+	depends on LOG_BACKEND_SWO
+
+endif # BOARD_APOLLO4P_EVB
diff --git a/boards/ambiq/apollo4p_evb/apollo4p_evb-pinctrl.dtsi b/boards/ambiq/apollo4p_evb/apollo4p_evb-pinctrl.dtsi
index 125e1a7d238..dbbb233485e 100644
--- a/boards/ambiq/apollo4p_evb/apollo4p_evb-pinctrl.dtsi
+++ b/boards/ambiq/apollo4p_evb/apollo4p_evb-pinctrl.dtsi
@@ -17,6 +17,11 @@
 			input-enable;
 		};
 	};
+	itm_default: itm_default {
+		group1 {
+			pinmux = ;
+		};
+	};
 	adc0_default: adc0_default{
 		group1 {
 			pinmux = , ;
diff --git a/boards/ambiq/apollo4p_evb/apollo4p_evb.dts b/boards/ambiq/apollo4p_evb/apollo4p_evb.dts
index c678604f358..71ccc5399fd 100644
--- a/boards/ambiq/apollo4p_evb/apollo4p_evb.dts
+++ b/boards/ambiq/apollo4p_evb/apollo4p_evb.dts
@@ -1,5 +1,6 @@
 /dts-v1/;
 #include 
+#include 
 
 #include "apollo4p_evb-pinctrl.dtsi"
 
@@ -45,13 +46,18 @@
 
 	buttons {
 		compatible = "gpio-keys";
+		polling-mode;
 		button0: button_0 {
 			gpios = <&gpio0_31 18 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
 			label = "BTN0";
+			zephyr,code =