Commit Graph

1128 Commits

Author SHA1 Message Date
Jakob Hasse
228c40c2ac Merge branch 'feature/freertos_task_private_create_psram' into 'master'
feat(freertos): Added private task creation functions allocating stack in PSRAM

See merge request espressif/esp-idf!25404
2023-10-26 10:27:00 +08:00
Omar Chebib
a8b1475fe7 feat(riscv): implement coprocessors save area and FPU support
This commit mainly targets the ESP32-P4. It adds supports for coprocessors on
RISC-V based targets. The coprocessor save area, describing the used coprocessors
is stored at the end of the stack of each task (highest address) whereas each
coprocessor save area is allocated at the beginning of the task (lowest address).
The context of each coprocessor is saved lazily, by the task that want to use it.
2023-10-23 11:10:28 +08:00
Darian Leung
94b46599c3 change(freertos/idf): Update FreeRTOS documentation build
This commit does the following:

- Update doxygen comments in FreeRTOS headers to remove unsupported doxygen
labels and internal functions
- Fixed existing doxygen warnings in FreeRTOS headers
2023-10-21 04:39:17 +08:00
Darian Leung
fdfdfc6d9e change(freertos/idf): Temporarily disable "Test suspend-resume CPU works with xTimer'"
The test is flakey with the v10.5.1 kernel.
2023-10-21 04:39:16 +08:00
Darian Leung
0d846ffe26 fix(freertos/idf): Add missing vPortSetStackWatchpoint() call
This commit restores a missing call to vPortSetStackWatchpoint() in the
V10.5.1 kernel.
2023-10-21 04:39:16 +08:00
Darian Leung
6c6a6ad44a fix(freertos/idf): Add workaround for same priority preemption in xTaskIncrementTick()
This commit temporarily disables a bugfixed introduced by FreeRTOS v10.5.1 that
ensures timed out tasks will only preempt if their priority is higher than the
currently running task.

This bugfix has been temporarily reversed due to some compatibility issues with
some IDF tests.
2023-10-21 04:39:16 +08:00
Darian Leung
4d14717e77 fix(freertos/idf): Add work around vTaskResumeAll() compiler optimization
This commit adds a workaround for a compiler optimization issue in FreeRTOS
v10.5.1 in xTaskResumeAll() where pxTCB is only read once, even if in a loop.

A follow up ticket has been added to properly resolve this issue.
2023-10-21 04:39:16 +08:00
Darian Leung
0c15815c2b fix(freertos/idf): vTaskStepTick assertions in SMP
Fixes vTaskStepTick() assertions in SMP, where SMP uses critical sections
instead of scheduler suspension when handling tickless idling.
2023-10-21 04:39:16 +08:00
Darian Leung
ec1ba78b7c fix(freertos/idf): Fix utility function performance
This commit optimizes the following utility functions to achieve higher
overall system performance:

xTaskGetCurrentTaskHandle():
- Made into stand alone function instead of wrapper call to "ForCore" variant
- Replaced critical sections with disabling interrupts. Lack of lock contention
improves performance.

xTaskGetCurrentTaskHandleForCore():
- Removed unecessary critical sections

xTaskGetSchedulerState():
- Replaced critical sections with disabling interrupts. Lack of lock contention
improves performance.
2023-10-21 04:39:16 +08:00
Darian Leung
b13b9c1163 fix(freertos/idf/linux): Fix configMAX_PRIORITIES for linux port
Previously the linux port of FreeRTOS set configMAX_PRIORITIES to 7. However,
multiple linux POSIX simulator examples will call API that create tasks with
priortiies >= 7.

This commit fixes the configMAX_PRIORITIES and unifies all ports to have 25
priorities.
2023-10-21 04:39:16 +08:00
Darian Leung
5c0449a63a change(freertos/idf): Update single-core macros to prevent unused variable error
Various convenience macros in tasks.c will simply leave macro arguments unused
when built for single-core. This leads to an 'unused variable' warning.

This commit updates those macrso so that the unused arguments have a
'(void)' statement.
2023-10-21 04:39:16 +08:00
Darian Leung
82ad04e3ba change(freertos/idf): Update version number, licenses, and sbom to v10.5.1
Following the upgrade to FreeRTOS kernel v10.5.1, this commit updates the
version numbers, licenses, and SBOM files of FreeRTOS files to reflect v10.5.1.

Note:

- Updated licenses as v10.5.1 now uses SPDX format
- Removed CVE-2021-43997 as it was fixed post v10.4.5
2023-10-21 04:39:16 +08:00
Darian Leung
16ccb31d33 change(freertos/idf): Make v10.5.1 the default kernel
This commit makes v10.5.1 the default FreeRTOS kernel in ESP-IDF by removing
the CONFIG_FREERTOS_USE_KERNEL_10_5_1 option and v10.4.3 specific code
blocks.
2023-10-21 04:39:16 +08:00
Darian Leung
2025a77dd6 change(freertos/idf): Move v10.5.1 kernel files
This commit moves the v10.5.1 kernel files to the 'FreeRTOS-Kernel' directory.
2023-10-21 04:39:16 +08:00
Darian Leung
fe5a577198 change(freertos/idf): Remove v10.4.3 kernel files
This commit removes the v10.4.3 kernel files in prepartion for upgrading to
v10.5.1.

- Portable files still remain
- Added as a separate commit to preserve commit history
2023-10-21 04:39:16 +08:00
Jakob Hasse
8aba6a53e4 feat(freertos): Added private PSRAM stack task creation functions
* Added prvTaskCreateDynamicAffinitySetWithCaps
  and prvTaskCreateDynamicPinnedToCoreWithCaps
  which allocate the task's stack in PSRAM instead of
  internal RAM. These functions are only available if
  PSRAM is enabled.
2023-10-18 20:06:42 +08:00
Sudeep Mohanty
225ecfb6e2 Merge branch 'bugfix/interrupt_context_for_p4' into 'master'
fix(freertos): Fixed xPortCanYield to correctly determine ISR context on esp32p4

See merge request espressif/esp-idf!26161
2023-10-17 17:16:57 +08:00
Sudeep Mohanty
cf55ab899a fix(freertos): Fixed xPortCanYield to correctly determine ISR context on esp32p4
This commit fixes an issue where xPortCanYield() function may not be
able to detect an ISR context when HW interrupt nesting is active on
a CLIC interrupt controller such as on esp32p4.
2023-10-09 09:12:15 +02:00
Darian Leung
65d3931fab change(freertos/debug): Add API to get current TCB
This commit adds `pvTaskGetCurrentTCBForCore()` to get a void pointer to the
current TCB of a particular core. This removes the need to `extern `pxCurrentTCB`
in esp_gdbstub.
2023-10-07 18:55:47 +08:00
Darian Leung
2b357071f1 refactor(freertos/task_snapshot): Deprecate task_snapshot.h
This commit deprecates the `#include "freertos/task_snapshot.h" include path:

- Adds compatibility header with compile time warning
- Removes hints related to `task_snapshot.h`
- Adds entry to migration guide
2023-10-07 18:55:47 +08:00
Darian Leung
9968a48c36 refactor(freertos/task_snapshot): Make task snapshot private
Task snapshot API were never intended to be called from user code. This commit
makes task snapshot a private API thus moves `#include "freertos/task_snapshot.h"`
to `#include "esp_private/freertos_debug.h"`.

Task snapshot related Kconfig options have also been hidden.

Note: Added 'freertos_common' mapping to ldgen mapping execptions lists due to
inlining of 'freertos_debug.h' functions.
2023-10-07 13:14:55 +08:00
KonstantinKondrashov
28b8a5d9b4 fix(esp_system): Fix mixing logs, remove early info logs for 2nd CPU
Fixes mixing logs when two cores use esp_rom_printf
2023-10-02 12:50:40 +00:00
Sudeep Mohanty
b8444c2234 Merge branch 'bugfix/fix_freertos_system_task_names' into 'master'
fix(freertos): Updated IDLE task names for each core to have the coreID as a suffix

Closes IDFGH-11021

See merge request espressif/esp-idf!25899
2023-09-21 18:33:24 +08:00
Zim Kalinowski
d9a9a4a17f Merge branch 'fix/test_app_trim_builds' into 'master'
fix(test_apps): Trim builds of component test apps

See merge request espressif/esp-idf!25789
2023-09-20 18:32:57 +08:00
Sudeep Mohanty
a76a1465b6 fix(freertos): Updated IDLE task names for each core to have the coreID as a suffix
This commit updates the IDLE task names for each core by concatenating
the respective coreIDs to the names.

Closes https://github.com/espressif/esp-idf/issues/12204
2023-09-20 10:31:08 +02:00
Darian Leung
b09462eae8 feat(freertos): Add beta support for FreeRTOS v10.5.1 kernel
This commit adds beta support for the FreeRTOS v10.5.1 kernel which can be
enabled by enabling the CONFIG_FREERTOS_USE_KERNEL_10_5_1 option.

The following changes have been made:

- Updated freertos/CMakeLists.txt to build v10.5.1 kernel with v10.4.3. ports
- Updated existing Xtensa and RISC-V ports to work with V10.5.1
- Modifications to other ESP-IDF components to work with v10.5.1
- Added some ESP-IDF specific tracing changes to v10.5.1 kernel
- Make CONFIG_FREERTOS_USE_KERNEL_10_5_1 a public option

Note: The beta release is missing some minor fixes, performance improvements,
and features. Using this beta release for production is not recommended.

Closes https://github.com/espressif/esp-idf/issues/7137
2023-09-18 21:32:14 +08:00
Darian Leung
49af70506a feat(freertos): Add SMP critical section changes to FreeRTOS v10.5.1
This commit adds the SMP critical section changes to the v10.5.1 kernel. These
changes are temporarily documented in the `idf_changes.md` document. This
commit...

- Adds granular spinlocks to each data group (e.g., kernel, queues, event_groups etc.)
- Updates critical section macros to use those spinlocks
- Add missing critical sections required in SMP
2023-09-18 18:32:55 +08:00
Darian Leung
db64e51e53 feat(freertos): Add SMP kernel changes to FreeRTOS v10.5.1
This commit adds the key kernel changes to the v10.5.1 kernel to support
dual-core SMP. These changes are temporarily documented in the `idf_changes.md`
document. This commit...

- Added changes to kernel data structures to support multiple cores
- Changes to scheduling algorithm support SMP scheduling.
- Changes to each FreeRTOS function to support multiple cores and SMP
scheduling algorithm.
2023-09-18 18:32:54 +08:00
Darian Leung
287bdc5e61 fix(test_apps): Trim builds of component test apps
Some component test apps do not use the "set(COMPONENTS main)" command in their
project level "CMakeLists.txt", thus leading to their builds pulling in all
ESP-IDF components.

This commit trims the build of multiple component test apps:

- Add "set(COMPONENTS main ...)" to project level "CMakeLists.txt"
- Add missing "PRIV_REQUIRES" in some "main" component "CMakeLists.txt"

Also removed repeated configuraiton options in legacy_i2c_driver/sdkconfig.ci.defaults
as they are already specified in legacy_i2c_driver/sdkconfig.defaults
2023-09-18 17:16:37 +08:00
Konstantin Kondrashov
cbdb799b6f feat(esp_timer): Support systimer for ESP32P4 2023-09-13 19:13:38 +08:00
Sudeep Mohanty
165955dec4 Merge branch 'feature/freertos_Kconfig_option_for_timer_task_name' into 'master'
feat(freertos): Added a Kconfig option for FreeRTOS Timer Service task name

See merge request espressif/esp-idf!25900
2023-09-12 16:41:48 +08:00
Konstantin Kondrashov
2557513fb5 Merge branch 'bugfix/esp32p4_usage_clic_int_thresh_reg' into 'master'
fix(freertos): Use INTERRUPT_CURRENT_CORE_INT_THRESH_REG for esp32p4

See merge request espressif/esp-idf!25840
2023-09-08 22:43:22 +08:00
Sudeep Mohanty
371ad531ee feat(freertos): Added a Kconfig option for FreeRTOS Timer Service task name
This commit adds a Kconfig option for setting a custom name for the
FreeRTOS Timer Service task.
2023-09-08 16:39:15 +02:00
Sudeep Mohanty
51846b497b Merge branch 'feature/freertos_add_sbom_file' into 'master'
feat(freertos): Added SBOM manifest file for SPDX file generation

Closes IDF-7979

See merge request espressif/esp-idf!25758
2023-09-08 18:21:46 +08:00
Zim Kalinowski
bee3ff952e fix(freertos): Added missing Linux port layer macros 2023-09-07 10:30:02 +02:00
KonstantinKondrashov
25c7a59e31 fix(freertos): Use INTERRUPT_CURRENT_CORE_INT_THRESH_REG for esp32p4 2023-09-07 15:25:35 +08:00
Sudeep Mohanty
2ddb47f533 feat(freertos): Added SBOM manifest file for SPDX file generation
This commit adds the SBOM manifest file for the FreeRTOS-Kernel to aid
SPDX file generation.
2023-09-05 18:30:30 +08:00
Darian Leung
035423eb37 refactor(freertos/idf): Move task creation "PinnedToCore" API to addition headers
This commit moves/merges the IDF FreeRTOS "PinnedToCore" task creation
functions from tasks.c/task.h to idf_additions.h/freertos_task_c_additions.h.

Also updated FreeRTOS Mock component to provide mocks for "idf_additions.h"
headers for our mock tests.
2023-09-05 16:20:59 +08:00
Darian Leung
e612db7d32 refactor(freertos/idf): Move weak xTimerCreateTimerTask() to IDF additions header
A weak xTimerCreateTimerTask() was added to tasks.c as a workaround in ESP-IDF
in order to prevent timers.c from being linked when unused.

This commit moves that workaround to `freertos_tasks_c_additions.h`
2023-09-05 16:20:59 +08:00
Darian Leung
a5f9a2505e refactor(freertos/idf): Remove application hook prototypes
The following application hook protoypes are defined in task.h from FreeRTOS
V10.4.0 onwwards and no longer need to be declared in tasks.c, thus have been
removed:

- vApplicationStackOverflowHook()
- vApplicationTickHook()
- vApplicationGetIdleTaskMemory()
2023-09-05 16:20:59 +08:00
Darian Leung
7b4dba4ffd refactor(freertos/idf): Move vTaskSetThreadLocalStoragePointerAndDelCallback()
This commit moves vTaskSetThreadLocalStoragePointerAndDelCallback() from
`tasks.c`/`task.h` to `freertos_tasks_c_additions.h`/`idf_additions.h`.
2023-09-05 16:20:59 +08:00
Darian Leung
5de6a9aff6 refactor(freertos/idf): Move compatibility functions
This function moves ulTaskNotifyTake()/xTaskNotifyWait() from IDF FreeRTOS
`tasks.c` to `freertos_compatibility.c`. These functions were kept for
pre-compiled library compatibilty. Move them reduces the kernel source code
difference when compared to upstream FreeRTOS.
2023-09-05 16:20:59 +08:00
Darian Leung
0db40f9e6c refactor(freertos/idf): Move IDF task utility functions to API addition headers
This commit combines various task utility API additions in IDF FreeRTOS and with
their Amazon SMP FreeRTOS addition counterparts. The folloiwng functions have
been moved to freertos_tasks_c_additions.h and idf_additions.h as these API
are considered public:

- xTaskGetCurrentTaskHandleForCPU()
- xTaskGetIdleTaskHandleForCPU()
- xTaskGetAffinity()
- pxTaskGetStackStart()

Also fixed in missing #if macros when vTaskCoreAffinityGet() is called in
Amazon SMP FreerTOS tests.
2023-09-05 16:20:59 +08:00
Darian Leung
db9d9658f9 refactor(freertos/idf): Move xTaskIncrementTickOtherCores() to IDF additition headers
This commit moves xTaskIncrementTickOtherCores() to freertos_tasks_c_additions.h
and freertos_idf_additions_priv.h (as API is private). This reduces the code
differences cmpared to upstream FreeRTOS.
2023-09-05 16:20:59 +08:00
Darian Leung
8825c8dda9 refactor(freertos/idf): Move critical section API to IDF addition headers
- The following IDF API additions are moved to freertos_tasks_c_additions.h
(implementation) and freertos_idf_additions_priv.h (declaration) as APIs are
private. This reduces the source code difference from upstream.
    - prvENTER_CRITICAL_OR_SUSPEND_ALL()
    - prvEXIT_CRITICAL_OR_RESUME_ALL()
    - prvENTER_CRITICAL_OR_MASK_ISR()
    - prvEXIT_CRITICAL_OR_UNMASK_ISR()
    - vTaskTakeKernelLock()
    - vTaskReleaseKernelLock()
- Rename vTask[Take/Release]KernelLock() to prv[Take/Release]KernelLock() to
indicate that the this API is private.
2023-09-05 16:20:59 +08:00
Darian Leung
6c66018d5b refactor(freertos/smp): Move vTaskStartSchedulerOtherCores() to API additions to headers
- Move vTaskStartSchedulerOtherCores()
    - implementation to freertos_tasks_c_additions.h
    - declaration to freertos_idf_additions_priv.h as API is private
- Rename vTaskStartSchedulerOtherCores() -> prvStartSchedulerOtherCores() to
indicate that the function is private.
2023-09-05 16:19:42 +08:00
Darian Leung
5227616e57 refactor(freertos/idf): Implicitly include idf_additions.h from FreeRTOS.h
This commit adds an implicit inclusion of `idf_additions.h` to `FreeRTOS.h` in
preparation for moving some IDf specific API to `idf_additions.h`.

This implict inclusion allows existing code to be continue using these
relocated APIs without any changes in header inclusions.

Also removed "#pragma once" directive from "freertos_tasks_c_additions.h" since
that header is included as a source file.
2023-09-05 16:19:42 +08:00
Darian
bd9d6b82ab Merge branch 'bugfix/freertos_private_critical_section_macro' into 'master'
fix(freertos): Fixed bug with prvENTER/EXIT_CRITICAL_OR_MASK_ISR() macro

See merge request espressif/esp-idf!25705
2023-09-04 14:18:11 +08:00
Sudeep Mohanty
62ee4135e0 Merge branch 'bugfix/freertos_incorrect_xPortCanYield' into 'master'
fix(freertos): Corrected xPortCanYield() for esp32p4

See merge request espressif/esp-idf!25679
2023-09-04 09:33:25 +08:00
Darian Leung
75a3c99581 fix(freertos): Fixed bug with prvENTER/EXIT_CRITICAL_OR_MASK_ISR() macro
Fixed an undiscovered bug with prvENTER_CRITICAL_OR_MASK_ISR() and
prvEXIT_CRITICAL_OR_MASK_ISR() where the `uxInterruptStatus` argument was not
used.

However, all calls of this macro provide a local `uxSavedInterruptStatus`
variable, leading to this bug being hidden.
2023-09-02 02:27:09 +08:00