Commit graph

59488 commits

Author SHA1 Message Date
wangchengdong
71f53c6c74 sched/wdog: Inline wd_start() to improve performance
Move wd_start() to an inline function to reduce function call
    overhead and improve performance in time-critical watchdog operations.

Signed-off-by: Chengdong Wang <wangchengdong@lixiang.com>
2025-11-10 23:16:57 +08:00
raiden00pl
44a924ab42 boards/stm32h7: add Arduino Portenta H7
Add initial support for Arduino Portenta H7.
For now only CM7 core is supported.

Signed-off-by: raiden00pl <raiden00@railab.me>
2025-11-10 18:13:47 +08:00
chao an
8847389886 style/FAR: remove FAR qualifier
N/A, remove FAR qualifier from non-pointer types

Signed-off-by: chao an <anchao.archer@bytedance.com>
2025-11-10 10:56:29 +01:00
hujun5
6088f6216b uart_pl011: "pl011_irq_tx_ready" and "pl011_txready" is reversed.
The implementation logic of "pl011_irq_tx_ready"
and "pl011_txready" is reversed.

Signed-off-by: hujun5 <hujun5@xiaomi.com>
2025-11-10 14:15:19 +08:00
Matteo Golin
d4c904d949 docs/applications/examples/fb: Add documentation to fb example
Included documentation for the framebuffer example, fb. This includes a
description of how the program works, what features it supports and
images of what the rendered output should look like if everything is
correct.

Signed-off-by: Matteo Golin <matteo.golin@gmail.com>
2025-11-10 13:48:23 +08:00
wangchengdong
de0aead39f sched/wdog: Fix wd_start() boundary check for WDOG_MAX_DELAY
The current implementation allows the delay passed to wd_start() to be
   equal to WDOG_MAX_DELAY. However, since clock_delay2abstick() internally
   increments the delay by one tick, using a delay equal to WDOG_MAX_DELAY
   will cause an overflow and make the clock comparison invalid.

   This patch fixes the issue by disallowing the delay to be equal to
   WDOG_MAX_DELAY.

Signed-off-by: Chengdong Wang <wangchengdong@lixiang.com>
2025-11-10 10:45:15 +08:00
Matteo Golin
00e287bb70 docs/raspberrypi-4b: Include information about new graphics support
Add description of new graphics configuration, and indicate HDMI video
output support (with notes) in the supported peripherals table.

Signed-off-by: Matteo Golin <matteo.golin@gmail.com>
2025-11-09 16:48:14 -03:00
Matteo Golin
310a808d3d rpi4b/framebuffer: Introduce frame buffer support to the RPi4B
Introduces a very basic frame buffer driver implementation for the RPi4B
which is registered at startup and works with frame buffer graphics
examples (and LVGL). Graphics are displayed on the HDMI0 and HDMI1
output, depending which one is plugged into the display. I have not
tested using both at once, nor does the driver account for that. They
are both referred to as display 0, plane 0 since the RPi4B frame buffer
interface does not seem to have a way of distinguishing.

Signed-off-by: Matteo Golin <matteo.golin@gmail.com>
2025-11-09 16:48:14 -03:00
hujun5
aff64bb3dc arm64: add demo for gdbstub
Gdbstub demo::
   The Qemu version must be above 9.2 to support two serial ports.

   One window:
   ./tools/configure.sh qemu-armv8a:gdbstub; make -j25
   qemu-system-aarch64 -cpu cortex-a53 -nographic -machine virt,virtualization=on,gic-version=3 -net none -kernel ./nuttx -serial mon:stdio -serial pty
   char device redirected to /dev/pts/27 (label serial1)
   - Ready to Boot Primary CPU
   - Boot from EL2
   - Boot from EL1
   - Boot to C runtime for OS Initialize

   Another window:
   gdb-multiarch nuttx -ex "target remot /dev/pts/27"
   GNU gdb (Ubuntu 15.0.50.20240403-0ubuntu1) 15.0.50.20240403-git
   Copyright (C) 2024 Free Software Foundation, Inc.
   License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
   This is free software: you are free to change and redistribute it.
   There is NO WARRANTY, to the extent permitted by law.
   Type "show copying" and "show warranty" for details.
   This GDB was configured as "x86_64-linux-gnu".
   Type "show configuration" for configuration details.
   For bug reporting instructions, please see:
   <https://www.gnu.org/software/gdb/bugs/>.
   Find the GDB manual and other documentation resources online at:
   <http://www.gnu.org/software/gdb/documentation/>.

   For help, type "help".
   Type "apropos word" to search for commands related to "word"...
   Reading symbols from nuttx...
   Remote debugging using /dev/pts/26
   gdb_get_registers (state=0x403e1590) at gdbstub/lib_gdbstub.c:1020
   1020              reg = state->running_regs;
   (gdb) c

Signed-off-by: hujun5 <hujun5@xiaomi.com>
2025-11-09 22:45:26 +08:00
nuttxs
65e318421d netdb/lib_dnsdelserver.c: support delete the DNS server address
by index or address

 - dns_del_nameserver()
 - dns_del_nameserver_by_index()

Update the "DNS function" section in 11_network.rst, and create
the netlib API documentation in netlib/index.rst

Signed-off-by: nuttxs <zhaoqing.zhang@sony.com>
2025-11-08 16:17:40 -03:00
“duanqinshuo”
cc2cb394fa arch/arm: Solving the ghs compiler not recognizing 0b prefix representing binary
This patch solving the ghs compiler not recognizing 0b prefix representing binary

Signed-off-by: Qinshuo Duan duanqinshuo@lixiang.com
2025-11-09 00:12:14 +08:00
wangchengdong
f82f71d180 libs/libc: Fix Kconfig issue for memcpy and memset
Fix an issue on ARMv8-R where NEON is not supported.
    When NEON is disabled, the assembly-optimized implementations
    of memset and memcpy should not be used.

Signed-off-by: Chengdong Wang <wangchengdong@lixiang.com>
2025-11-07 13:04:20 +01:00
wangchengdong
190daef2bf sched/wdog: Use list_in_list() to detect active watchdogs
Use list_in_list() to determine whether a watchdog is active,
     eliminating the need to set the watchdog function pointer to NULL
     as an indicator of inactivity.

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-11-07 10:30:53 +08:00
nuttxs
22a9228479 boards/xtensa: fix some unused variable build warning
src/esp32s3_lan9250.c:190:7: warning: unused variable 'i' [-Wunused-variable]

Signed-off-by: nuttxs <zhaoqing.zhang@sony.com>
2025-11-06 12:13:04 +01:00
wangchengdong
1217fcf907 sched/wdog: Improve wdog Precision
Currently, wd_timer() obtains the current systick
    from the input parameter, and the wdog processes
    the list without updating the systick value.
    This is not incorrect, as the systick should continue
    to increase while the watchdog is processing callbacks.
    This patch addresses the issue by retrieving the updated
    systick value after each watchdog node loop.

Signed-off-by: Chengdong Wang <wangchengdong@lixiang.com>
2025-11-06 13:26:58 +08:00
Karel Kočí
aa3cf8cb3a nuttx/can: report error and not EOF at the empty FIFO
The empty FIFO can happen only in two cases. Either there is some
inconsistency that made rx_sem ready but buffer is empty (that might
happen if multiple reads are blocked in parallel, or just due to the bug
in the logic), or if close is used. Until now the 0 would be returned
and thus EOF. The error is not EOF and actually it is still possible to
read afterwards. Thus we for sure should not signal EOF for the first
cause. The second cause for close matches the behavior that is expressed
even on glibc for some file descriptors (the waiting read will commonly
get error EINVAL there). We can't decide on the real cause of this
situation and thus we always report EIO error and thus generic
input/output error.

Signed-off-by: Karel Kočí <kkoci@elektroline.cz>
2025-11-05 20:45:05 +08:00
Karel Kočí
be40a105eb drivers/can: correctly unblock only one read at the time
The previous version of the code was posting the semaphore every time
the value was less or equal to the zero. In case there is read already
waiting on the semaphore the value will be -1. The first frame will post
the value to 0 and thus unblocking the waiting read. The read will take
frames out of FIFO. During that time if next frame is received it will
be placed to the FIFO but because rx_sem has value 0 at that time it
will be posted to value 1. Once read finishes the execution it will
check if there is something still in the FIFO and posts semaphore back
(expecting that the value is 0) thus increasing value to 2. Thus we end
up with read being unblocked once more triggering 'RX FIFO sem posted
but FIFO is empty.' error branch and returning zero (signaling EOF?).

The intuitive fix is to check the value of the semaphore before posting
it in the read's tail. This could have race condition case when
interrupt is delivered between nxsem_get_value and nxsem_post and
can_receive is called.

This fix instead uses the same condition to detect if semaphore must be
posted as read does. Thus we check if previously the FIFO was empty. We
post the semaphore on in case FIFO was initially empty, otherwise we
expect semaphore to be fully managed by can_read.

Signed-off-by: Karel Kočí <cynerd@email.cz>
2025-11-05 20:45:05 +08:00
Karel Kočí
b571d2e5e4 drivers/can: fix sending of RTR frames with nonzero DLC
The message passed to the write can have `cm.hdr.ch_rtr` set and if
nonzero DLC is specified in the frame then invalid number of bytes is
removed from the buffer as RTR frames do not have any data even when DLC
is nonzero.

This was tested on SAMv7 (mcan). With this change a custom RTR can be
sent.

Signed-off-by: Karel Kočí <cynerd@email.cz>
2025-11-05 20:45:05 +08:00
Karel Kočí
a19971f1bc drivers/can: protect against write buffer overrun
The message size is being calculated from the message itself. If
application sets value cm_hdr.ch_dlc greater than buflen (that is
size_t) then calculation in while condition underflows and multiple
messages are attempted to be sent.

This check prevents that by verifying that the message size that was
encoded in the dlc is not greater than indicated size of the buffer.

Signed-off-by: Karel Kočí <cynerd@email.cz>
2025-11-05 20:45:05 +08:00
Filipe Cavalcanti
3577254d9f boards/arm: remove custom MCUBoot version from defconfigs
Removing the custom MCUBoot hash from 5 defconfigs.
This custom hash is blocking the MCUBoot update on nuttx-apps due to
changes in source files.

Signed-off-by: Filipe Cavalcanti <filipe.cavalcanti@espressif.com>
2025-11-05 17:25:26 +08:00
xiezhanpeng3
6238da1355 arch/tricore: remove magic number in tr3xx uart config
Replace magic number with macro for better code readability.

Signed-off-by: xiezhanpeng3 <xiezhanpeng3@lixiang.com>
2025-11-04 20:32:20 -05:00
wangchengdong
c342c0851f xtensa/esp32s2: Replace spinlock/sched_lock with spin_lock_irqsave_nopreempt
Replace the spinlock/sched_lock pair in xtensa/esp32s2 with
    spin_lock_irqsave_nopreempt() to improve code clarity and consistency.

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-11-04 22:46:15 +08:00
wangchengdong
97b24a1a0b xtensa/esp32: Replace spinlock/sched_lock with spin_lock_irqsave_nopreempt
Replace the spinlock/sched_lock pair in xtensa/esp32 with
    spin_lock_irqsave_nopreempt() to improve code clarity and consistency.

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-11-04 22:46:15 +08:00
wangchengdong
53dd00328d renesas/rx65n: Replace spinlock/sched_lock with spin_lock_irqsave_nopreempt
Replace the spinlock/sched_lock pair in renesas/rx65n with
    spin_lock_irqsave_nopreempt() to improve code clarity and consistency.

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-11-04 22:46:15 +08:00
wangchengdong
6c28a2b749 arm64/imx9: Replace spinlock/sched_lock with spin_lock_irqsave_nopreempt
Replace the spinlock/sched_lock pair in arm64/imx9 with
    spin_lock_irqsave_nopreempt() to improve code clarity and consistency.

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-11-04 22:46:15 +08:00
wangchengdong
5b4d2dda9d arm/stm32: Replace spinlock/sched_lock with spin_lock_irqsave_nopreempt
Replace the spinlock/sched_lock pair in arm/stm32 with
    spin_lock_irqsave_nopreempt() to improve code clarity and consistency.

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-11-04 22:46:15 +08:00
wangchengdong
028f4cd952 arm/sam34: Replace spinlock/sched_lock with spin_lock_irqsave_nopreempt
Replace the spinlock/sched_lock pair in arm/sam34 with
    spin_lock_irqsave_nopreempt() to improve code clarity and consistency.

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-11-04 22:46:15 +08:00
wangchengdong
3b77128e65 arm/s32k3xx: Replace spinlock/sched_lock with spin_lock_irqsave_nopreempt
Replace the spinlock/sched_lock pair in arm/s32k3xx with
    spin_lock_irqsave_nopreempt() to improve code clarity and consistency.

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-11-04 22:46:15 +08:00
wangchengdong
72fcae36c2 arm/s32k1xx: Replace spinlock/sched_lock with spin_lock_irqsave_nopreempt
Replace the spinlock/sched_lock pair in arm/s32k1xx with
    spin_lock_irqsave_nopreempt() to improve code clarity and consistency.

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-11-04 22:46:15 +08:00
wangchengdong
268e67ce3d arm/kinetis: Replace spinlock/sched_lock with spin_lock_irqsave_nopreempt
Replace the spinlock/sched_lock pair in arm/kinetis with
    spin_lock_irqsave_nopreempt() to improve code clarity and consistency.

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-11-04 22:46:15 +08:00
wangchengdong
8978be2939 arm/imx9: Replace spinlock/sched_lock with spin_lock_irqsave_nopreempt
Replace the spinlock/sched_lock pair in arm/imx9 with
    spin_lock_irqsave_nopreempt() to improve code clarity and consistency.

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-11-04 22:46:15 +08:00
wangchengdong
26af1fadc9 arch: Enable event module for pcduino-a10 and smartl-c906
Enable the event module on pcduino-a10 and smartl-c906 boards
   to allow event tests to be executed on both ARM and RISC-V
   architectures.

Signed-off-by: Chengdong Wang <wangchengdong@lixiang.com>
2025-11-04 21:43:59 +08:00
wangchengdong
522f32f7ef sched/event: Fix uninitialized need_switch flag issue in event_post()
The `need_switch` flag was not initialized in `event_post()`. Since it is
    a local variable, it could contain a random non-zero value, leading to
    incorrect behavior.
    In addition, this patch also fixes an issue where the event clearing
    operation in `event_post()` was not performed correctly.

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-11-04 21:43:59 +08:00
haitomatic
e7ad870f18 arch/risc-v/mpfs: Add MSS CAN driver.
Refactor to  become lower half driver.

Signed-off-by: Hai To <hai.to@tii.ae>
2025-11-03 17:14:53 -03:00
haitomatic
967238ba2c arch/risc-v/mpfs: Add MSS CAN driver.
The Nuttx MSS CAN driver has an exclusive interface to the integrated MSS CAN peripheral residing in Polarfire SoC FPGAs. There are two CAN block 0 and 1 that can be configured for use. In normal mode (non AMP), CAN0 and CAN1 block base register addresses are 0x2010C000UL and 0x2010D000UL.

Signed-off-by: Hai To <hai.to@tii.ae>
2025-11-03 17:14:53 -03:00
Jukka Laitinen
e45f91f350 sched/signal/sig_dispatch.c: Remove DEBUGASSERT(!sched_idletask())
The DEBUGASSERT is wrong in two cases;
1) In SIM, which does sim_timer_update from the idle task, and the sim timer runs on signals
2) If signal is dispatched from within an interrupt

In these cases, if there are not available items for pending signals, return
the nxsig_tcbdispatch with -EAGAIN instead of asserting.

Signed-off-by: Jukka Laitinen <jukka.laitinen@tii.ae>
2025-11-02 16:46:18 -03:00
Jukka Laitinen
5961b8bd1a binfmt: Add a configuration flag to store the module filename
This flag can be used to store the filename of a loaded module or
executable in binfmt. The filename is useful for example in debugging.
For example, gdb or a jtag debugger can be configured to automatically
fetch the symbols for the currently executing module.

Signed-off-by: Jukka Laitinen <jukka.laitinen@tii.ae>
2025-11-01 22:59:47 +08:00
chao an
62660a692d sched/task: move lock to mhead scope
1. rename mutex_lock to mhead_lock to declare purpose of lock
2. move lock to mhead scope

Signed-off-by: chao an <anchao.archer@bytedance.com>
2025-11-01 22:52:07 +08:00
wangchengdong
5a6242aac8 Documentation: Remove nxevent_tickwait_wait() description
Remove the nxevent_tickwait_wait() description from events.rst,
    since this API was removed during the event module refactoring.

Signed-off-by: Chengdong Wang <wangchengdong@lixiang.com>
2025-10-31 19:56:32 -03:00
wangchengdong
d8304979b4 tools/nxgdb: Add gdb and statenames for TSTATE_WAIT_EVENT
This patch add new taskstate entry in tools/pynuttx/nxgdb/thread.py
   and in sched_get_stateinfo.c/g_statenames for the new added task
   state: TSTATE_WAIT_EVENT

   test log is:
     nsh> ps
       PID  PPID GROUP PRI POLICY   TYPE    NPX STATE    EVENT     SIGMASK            STACK    USED FILLED COMMAND
         0     0     0   0 FIFO     Kthread   - Ready              0000000000000000 0001008 0000196  19.4%  Idle_Task
         1     0     0 192 FIFO     Kthread   - Waiting  Semaphore 0000000000000000 0001984 0000016   0.8%  hpwork 0x70000100 0x7000014c
         2     0     2 100 FIFO     Task      - Running            0000000000000000 0002008 0000740  36.8%  nsh_main
         4     0     0 100 FIFO     Kthread   - Waiting  Event     0000000000000000 0000984 0000012   1.2%  event_wait_task

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-10-31 19:56:32 -03:00
wangchengdong
de5973268b [!] sched/event: Remove wait object dependency from event implementation
The current event implementation relies on a dedicated wait object,
    which introduces several issues:
        1. Increases memory usage
        2. Complicates the event logic
        3. Makes the API design less clean, as it requires a separate
                nxevent_tickwait_wait() function

    This patch removes the event’s dependency on the wait object
    and eliminates the nxevent_tickwait_wait() API accordingly.

    BREAKING CHANGE: this commit removed the nxevent_tickwait_wait function
    so the related docs should be updated accordingly

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-10-31 19:56:32 -03:00
wangchengdong
94cfb1180b sched/event: Implement nxevent_timeout with nxevent_wait_irq
Implement nxevent_timeout with nxevent_wait_irq to remove
   code duplication

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-10-31 19:56:32 -03:00
wangchengdong
39f54c1524 sched/event: Add nxevent_wait_irq() to handle the task cancel
If the thread is blocked waiting on a event, then the
    thread must be unblocked from the evnet to handle
    the task cancellation.

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-10-31 19:56:32 -03:00
wangchengdong
735e489070 [!] sched/event: Replace semaphore with direct scheduler operations in event
The current event implementation uses semaphores for wait and post
    operations. Since semaphores are relatively heavy-weight and intended
    for resource-based synchronization, this is suboptimal.

    So this patch replaced the semaphore-based mechanism with direct
    scheduler operations to improve performance and reduce memory footprint.

    This patch also introduce a new task state TSTATE_WAIT_EVENT to indicate
    the task is waiting for a event.

    BREAKING CHANGE:  This commit introduced a new task state TSTATE_WAIT_EVENT
    so apps/nshlib/, procfs/ and tools/pynuttx/nxgdb/ are needed to be updated accordingly.

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-10-31 19:56:32 -03:00
wangchengdong
5fa8634ce7 sched/event: Restore critical section protection for event wait and post
Restore the use of critical sections to provide mutual exclusion
    between event wait and post operations. This allows replacing the
    heavier semaphore-based mechanism with direct scheduler operations
    for synchronization.

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-10-31 19:56:32 -03:00
wangchengdong
76dcec8f4b Documentation: Add description for early_syslog()
Add documentation describing the purpose and behavior of early_syslog(),
   which provides a minimal logging facility available during early system
   initialization or system down.

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-10-31 08:29:17 -03:00
wangchengdong
378a827a7a sched/syslog: Add early_syslog() for early boot or system down debugging
Introduce early_syslog() to enable basic logging during the very early
    boot or system down stages, when the full syslog subsystem is not yet
    available.

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-10-31 08:29:17 -03:00
wangchengdong
a04f257d4b sched/wqueue: Replace spinlock/sched_lock with spin_lock_irqsave_nopreempt
Replace the spinlock/sched_lock pair in the sched wqueue module with
    spin_lock_irqsave_nopreempt() to improve code clarity and consistency.

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-10-31 15:02:56 +08:00
wangchengdong
a49a5fd27f sched/clock: Replace spinlock/sched_lock with spin_lock_irqsave_nopreempt
Replace the spinlock/sched_lock pair in the sched clock module with
    spin_lock_irqsave_nopreempt() to improve code clarity and consistency.

Signed-off-by: Chengdong Wang wangchengdong@lixiang.com
2025-10-31 15:02:56 +08:00
Peter van der Perk
e6c982892b imxrt: make DTCM heap size configurable
By default, the full configured DTCM region is assigned to the heap for
dynamic allocation. In scenarios requiring deterministic memory regions
for static buffers or control structures, you can reduce the heap
allocation to reserve part of DTCM for manual/static use.
This kconfig symbol allows to limit the size.

Signed-off-by: Peter van der Perk <peter.vanderperk@nxp.com>
2025-10-30 10:07:08 -04:00