Commit graph

23362 commits

Author SHA1 Message Date
Kyle Wilson
7b3b24d9f6 Added missing UARTs and USARTs to STM32H56xx pinmap. Fixed UART IRQ definitions. Added missing rx and tx buffers. 2025-02-08 14:17:29 +08:00
Jukka Laitinen
ca6f5db6fc arch/risc-v/Kconfig: Select ARCH_RV_CPUID_MAP for all mpfs targets
The default mapping functions are needed for mpfs

Signed-off-by: Jukka Laitinen <jukkax@ssrc.tii.ae>
2025-02-07 23:46:40 +08:00
zouboan
22f2d39e21 arch/zynq-mpsoc improve the ethernet driver
1. Changes the phyadd to 0xC to speed up the training of phyadd.
2. Set RX DMA buffer size configureable.
3. Create netnsh configs as ethernet boot from QSPI FLASH.
4. Fix some typo in #15720 which is nonsynchronous with local code.
2025-02-07 20:21:18 +08:00
chao an
e06d8575c0 cmake/pic: sync pic related compiler flags from makefile
PIC(Position-Independent-Code) board could work on cmake:

cmake -B ap -DBOARD_CONFIG=mps3-an547:ap -GNinja

Signed-off-by: chao an <anchao.archer@bytedance.com>
2025-02-07 17:41:04 +08:00
Neo Xu
ca92c208c1 arch/arm64: generate error if context size is not aligned to 16bytes
Make sure the registers context size is aligned to 16bytes as required by armv8-a.
This issue has been reported earlier, thus make sense to make sure it won't happen in future.

Signed-off-by: Neo Xu <neo.xu1990@gmail.com>
2025-02-05 19:28:03 +08:00
zouboan
586b9c54ac arch/arm64 Fix the SP unalignment issues
zynq-mpsoc and zcu111 borad was broken by #15437, because #15437 changes
ARM64_CONTEXT_REGS from 36 to 37, resulting in the stack no longer being
16-byte aligned which appears to violate the ARMv8-A architecture's
requirement for 16-byte stack alignment. this commit changes ARM64_CONTEXT_REGS
to 38 to fix this issues.
2025-02-04 13:18:32 +08:00
zouboan
934c93be93 arch/arm64/zynq-mpsoc: add support for ethernet gem
Zynq MPSOC The processing system (PS) is equipped with four gigabit
Ethernet controllers.Each  controller can be configured independently.
Each controller uses a reduced gigabit media independent interface (RGMII)
v2.0. This commit add support for ethernet of ZYNQ MPSOC.
2025-02-02 14:17:45 +08:00
Huang Qi
e043658d1e arch/xtensa: Add --print-memory-usage to LDFLAGS in Toolchain.defs
Summary:
- Added `--print-memory-usage` to `LDFLAGS` in `Toolchain.defs` for both `lx6` and `lx7` architectures
- This flag enables memory usage reporting during the linking phase, providing better visibility into memory allocation

Impact:
- No functional changes - the flag only adds additional debug information during the build process
- Improves debugging and optimization capabilities by providing detailed memory usage statistics
- Maintains compatibility with existing build configurations and toolchains

Testing:
Test result on esp32s3:
```
Memory region         Used Size  Region Size  %age Used
             ROM:      556116 B   16777184 B      3.31%
     iram0_0_seg:       23296 B       304 KB      7.48%
     irom0_0_seg:      621652 B   16777184 B      3.71%
     dram0_0_seg:       85780 B       288 KB     29.09%
     drom0_0_seg:      157180 B   16777184 B      0.94%
    rtc_iram_seg:           0 B       8168 B      0.00%
    rtc_data_seg:           0 B       8168 B      0.00%
rtc_reserved_seg:           0 B         24 B      0.00%
    rtc_slow_seg:           0 B         8 KB      0.00%
```

Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
2025-02-01 13:20:12 -03:00
Xiang Xiao
dc2ae56098 arch: Remove the abuse of spinlock in smp boot
What's really need is a done signal sent from the secondary
cpu to the boot cpu, so let's simplify the logic by:
1.Change the spinlock to a bool flag
2.Set the flag to true in the secondary cpu
3.Wait the flag set in the boot cpu before continue booting

This also remove all bad usage of spinlock from the code base:
1.Lock spinlock in one thread, but unlock in a different thread
2.Lock spinlock twice in one thread, but unlock only once

Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
2025-01-31 23:19:44 +08:00
Jukka Laitinen
80e545aedd arch/risc-v/src/common/riscv_backtrace.c: Fix "error: pointer of type 'void *' used in arithmetic"
Signed-off-by: Jukka Laitinen <jukkax@ssrc.tii.ae>
2025-01-31 00:58:54 +08:00
Jukka Laitinen
ef875d7d9e arch/risc-v/src/mpfs/mpfs_ddr.c: Re-try DDR training on any error
Also errors which currently return other than -EAGAIN, are typically
recoverable with retraining. So just re-try trainining 20 times on any
error, resetting the controller in between.

Only reset if it is not recovered in this time.

Signed-off-by: Jukka Laitinen <jukkax@ssrc.tii.ae>
2025-01-30 13:55:27 +08:00
Jukka Laitinen
107b29ee67 arch/risc-v/src/mfs_start.c: After failed DDR training, reset with WDT
Resetting via WDT leaves more proper reset reason in SYSREG_RESET_SR
than resetting via soft reset.

Signed-off-by: Jukka Laitinen <jukkax@ssrc.tii.ae>
2025-01-30 13:55:27 +08:00
Jari Nippula
f3b0e68124 arch/risc-v/src/mpfs: Add hardware/mpfs_wdog.h 2025-01-30 13:55:27 +08:00
Michal Lenc
7af7655234 samv7/serial: allow TX/RX DMA for UART drivers
So far only USART drivers could use TX/RX DMA. This commit adds the
support for UART drivers as well (with the exception of serial console).

UART peripheral does not have timeout interrupt, so external polling
is required to flush the RX data from DMA buffers even if the buffer
is not yet full. The board layer can do this by calling
sam_serial_dma_poll function.

Signed-off-by: Michal Lenc <michallenc@seznam.cz>
2025-01-30 13:55:13 +08:00
Jukka Laitinen
f53afd174e arch/risc-v/src/mpfs/mpfs_cache.c: Move l2zerodevice to use cache ways starting from 0
If scratchpad is being used, the cache way 0, which is automatically
enabled at boot, needs to be re-configured as part of scratchpad memory
Otherwise there is a possibility of random memory corruption in the
scratchpad
area due to cache eviction from way 0.

Signed-off-by: Jukka Laitinen <jukkax@ssrc.tii.ae>
2025-01-30 13:48:15 +08:00
Huang Qi
a2e8bb83a4 sim: Align LLVM target info across CMake and Makefile
Summary:
- Unified the specification of LLVM architecture and ABI types across the CMake and Makefile configurations.
- Introduced `LLVM_ARCHTYPE` and `LLVM_CPUTYPE` variables in the CMake configuration to match the Makefile's approach.
- Standardized the ABI type (`LLVM_ABITYPE`) to `sysv` for both Linux and macOS host configurations.

Impact:
- Ensures consistent LLVM target definitions across build systems (CMake and Makefile).
- Simplifies future maintenance by avoiding divergence in LLVM-related configurations.
- No functional changes to the build output; only the internal representation of LLVM target information is aligned.

Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
2025-01-28 16:43:37 +08:00
Kyle Wilson
689aa55e01 Initial STM32H5 USB Commit
Progress in USB driver

Nothing is working yet. But just getting this in here so it is saved.

Minor changes with USB power enabled

Serial over USB is working now.

Removed stm32_usbdev.c, added stm32_usbfs.c. Still needs review before pull-request.

Rewrote VDDUSB valid check to use register definitions. Wait for USB33RDY before moving on. Also style updates.

Renamed stm32_usbdev files to stm32_usbfs. Renamed STM32H5 configuration options from STM32H5_USB to STM32H5_USBFS. Properly named REGDEBUG defines. Added STM32H5_USB_REGDEBUG to Kconfig and updated stm32_usbfs.c to use it. TRACE functionality still needs work.

Updated REGDEBUG for 32-bit register accesses.

More style updates.

Added usbnsh defconfig to nucleo-h563zi

Update to allow 16 buffers (max for 8 endpoints). Renamed lpinterrupt and lptransfer. Changed board.h to use SYNCSRC_USB only if USB is enabled.

Buffer size is still set to max packet size of 64 bytes, because we are using a full-speed peripheral. It is unclear to me whether having a buffer larger than the max packet size has any benefit. Double buffering is a way to increase throughput, though that still needs to be implemented.

Adapted USBFS Buffer table for 32-bit accesses.

Style updates

Build stm32_hsi48.c based on CONFIG_STM32H5_HAVE_HSI48.

Change LPMODE CNTR bit to SUSPRDY.
2025-01-28 16:43:07 +08:00
chao an
20f45f907f arm/armv7: update percpu task only for co-processor
fix smp crash on sabre-6quad/smp, regression from:

|commit 1e49cb4828
|Author: hujun5 <hujun5@xiaomi.com>
|Date:   Thu Dec 5 16:58:17 2024 +0800
|
|    armv7-a/armv7-r/armv8-r: percpu reg store this_task
|
|    This is continue work of https://github.com/apache/nuttx/pull/13726
|
|    We can utilize percpu storage to hold information about the
|    current running task. If we intend to implement this feature, we would
|    need to define two macros that help us manage this percpu information
|    effectively.
|
|    up_this_task: This macro is designed to read the contents of the percpu
|    register to retrieve information about the current
|    running task.This allows us to quickly access
|    task-specific data without having to disable interrupts,
|    access global variables and obtain the current cpu index.
|
|    up_update_task: This macro is responsible for updating the contents of
|    the percpu register.It is typically called during
|    initialization or when a context switch occurs to ensure
|    that the percpu register reflects the information of the
|    newly running task.
|
|    Signed-off-by: hujun5 <hujun5@xiaomi.com>

Signed-off-by: chao an <anchao.archer@bytedance.com>
2025-01-27 23:35:07 +08:00
zouboan
1452f32b14 zynq-mpsoc: add support for pll 2025-01-27 10:13:30 +08:00
Huang Qi
fe0949ad38 tools/x86_64: Add LLVM target definitions
Summary:
- Added LLVM target definitions (`LLVM_ARCH`, `LLVM_CPU`, `LLVM_ABI`) to `arch/x86_64/src/cmake/Toolchain.cmake` and `arch/x86_64/src/common/Toolchain.defs`
- These definitions are necessary for compatibility with LLVM-based toolchains and ensure proper target architecture, CPU, and ABI settings

Impact:
- Enables support for LLVM-based toolchains when building for x86_64 architecture
- No functional changes for existing GNU-based toolchains
- Improves maintainability by centralizing LLVM-specific configurations in the toolchain files

Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
2025-01-27 02:28:29 +08:00
Huang Qi
7ffea386e6 x86/Toolchain.defs: Add LLVM target definitions
Summary:
- Added LLVM target definitions (`LLVM_ARCHTYPE`, `LLVM_CPUTYPE`, `LLVM_ABITYPE`) to the x86 toolchain configuration file
- These definitions are necessary for compatibility with LLVM-based toolchains

Impact:
- Enables support for LLVM toolchains when building for x86 targets
- No functional changes for existing GCC-based toolchains
- Improves cross-compilation flexibility by supporting additional toolchain options

Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
2025-01-27 02:28:29 +08:00
wangzhi16
c8f8a61f89 Fix wrong variable name. lock -> eth_lock
Signed-off-by: wangzhi16 <wangzhi16@xiaomi.com>
2025-01-24 13:40:55 +08:00
wangzhi16
60125038fc Use small lock to protect resources related to ethernet.
Signed-off-by: wangzhi16 <wangzhi16@xiaomi.com>
2025-01-24 12:13:28 +08:00
wangzhi16
60df0cd6da Fix compile error.
CC: socket/listen.c chip/lpc17_40_i2c.c: In function 'lpc17_40_i2cbus_initialize': chip/lpc17_40_i2c.c:534:29: warning: 'priv' is used uninitialized [-Wuninitialized]
534 | flags = spin_lock_irqsave(&priv->spinlock);
| ^~~~~~~~~~~~~~~
chip/lpc17_40_i2c.c:529:29: note: 'priv' was declared here
529 | struct lpc17_40_i2cdev_s *priv;
| ^~~~

Signed-off-by: wangzhi16 <wangzhi16@xiaomi.com>
2025-01-24 11:29:58 +08:00
wangzhi16
c754019f5a Use small lock to protect resources related to irq in arch ARM.
Signed-off-by: wangzhi16 <wangzhi16@xiaomi.com>
2025-01-24 02:05:35 +08:00
wangzhi16
919ed2e3d4 Use small lock to protect resources related to i2c.
Signed-off-by: wangzhi16 <wangzhi16@xiaomi.com>
2025-01-24 01:38:16 +08:00
Michal Lenc
758b3baef0 samv7/adc: fix handling of ANIOC_TRIGGER ioctl
ADC peripheral can be configured also for PWM trigger, so the ifdef
should depend only on CONFIG_SAMV7_AFEC_SWTRIG. Also handle the
situation when ANIOC_TRIGGER is called and the peripheral is not
configured for SW trigger (but the other one may be, so config option
is set).

Trigger values saved to the private structure are also changed to
enums for better code clarity.

Signed-off-by: Michal Lenc <michallenc@seznam.cz>
2025-01-24 01:29:44 +08:00
wangzhi16
2c4fe28d4e Use small lock to protect resources related to i2c master and slave.
Signed-off-by: wangzhi16 <wangzhi16@xiaomi.com>
2025-01-24 01:29:27 +08:00
buxiasen
f8501fa3ea arch/x86_64: add ARCH_HAVE_ELF_EXECUTABLE
Able to support kernel build apps debug

Signed-off-by: buxiasen <buxiasen@xiaomi.com>
2025-01-23 23:29:51 +08:00
buxiasen
a0fdb7f63b arm/goldfish: add ARCH_HAVE_ELF_EXECUTABLE
Able to support kernel build apps debug

Signed-off-by: buxiasen <buxiasen@xiaomi.com>
2025-01-23 23:29:51 +08:00
hujun5
aa9f366eec x86_64: fix regression https://github.com/apache/nuttx/pull/15651
reason:
In x86_64, tcb->xcp.regs is always valid, and we obtain the location
where the context is saved through irq_xcp_regs every time an interrupt occurs.

Signed-off-by: hujun5 <hujun5@xiaomi.com>
2025-01-23 21:46:27 +08:00
wangzhi16
b0af946b7a Because sched_lock is now called in spin_lock_irqsave, there is no need to call it explicitly.
Signed-off-by: wangzhi16 <wangzhi16@xiaomi.com>
2025-01-23 20:43:51 +08:00
hujun5
914ae532e6 sched: remove csection and reduce the interrupt disabling time in sched_[un]lock
reason:
1 Accelerated the implementation of sched_lock, remove enter_critical_section in sched_lock and
only enter_critical_section when task scheduling is required.
2 we add sched_lock_wo_note/sched_unlock_wo_note and it does not perform instrumentation logic

Signed-off-by: hujun5 <hujun5@xiaomi.com>
2025-01-23 19:58:49 +08:00
chao an
801cd455ef sim/posix/uart: add host_printf() to debug some critical issue
Sometimes we need to bypass the system to debug some issue in critical sections

Signed-off-by: chao an <anchao.archer@bytedance.com>
2025-01-23 16:14:36 +08:00
chao an
cefb6cbd00 sim/rpmsg_uart: add sim rpmsg uart support
add sim_rpmsg_port_uart.c to verify the rpmsg port uart wrapper layer,

The physical transport layer could be:
1. SIM_RAM_UART(current)
2. SIM_UART(through "socat" virtual "/dev/pts/*", "socat" could monitor the bus data)

Signed-off-by: chao an <anchao.archer@bytedance.com>
2025-01-23 10:41:38 +08:00
chenxiaoyi
de55f64a7f xtensa: inline up_cpu_index
Signed-off-by: chenxiaoyi <chenxiaoyi@xiaomi.com>
2025-01-23 10:24:43 +08:00
hujun5
a095b1d6a6 arch: set (*running_task)->xcp.regs to NULL when exit from irq/exception
reason:
(*running_task)->xcp.regs is invalid when in threadcontext, we marke it as NULL to avoid misusage

Signed-off-by: hujun5 <hujun5@xiaomi.com>
2025-01-22 23:52:17 +08:00
Ville Juven
aefafc45e9 riscv/context_switch: Set tp when a context switch occurs
This removes the need to call nxsched_self upon exception return. Later
with a bit of added logic, it is possible to use tp in kernel to store and
read the current tcb.

Note: setting tp in riscv_restorecontext is too late for this, as
this_task() points to the (next) ready-to-run task, thus tp should be
updated when the rtr list is updated (via up_update_task, which does not
exist for risc-v yet)
2025-01-22 20:34:25 +08:00
wangzhi16
099801630d Use small lock to protect resources related to irq in arch risc-V and xtensa.
Signed-off-by: wangzhi16 <wangzhi16@xiaomi.com>
2025-01-22 20:30:20 +08:00
wangzhi16
0b542ff824 Use small lock to protect resources related to lpi2c.
Signed-off-by: wangzhi16 <wangzhi16@xiaomi.com>
2025-01-22 20:30:15 +08:00
Eero Nurkkala
9424abf3d6 risc-v/mpfs: ddr: lock segmentation registers
Set the LOCKED bit when the final ddr segmentatition is
in place. Otherwise the system is prone to potential
security issues if the config is altered later. Once the
LOCKED bit is set, the register may no longer be changed.

Signed-off-by: Eero Nurkkala <eero.nurkkala@offcode.fi>
2025-01-22 20:29:43 +08:00
Jukka Laitinen
20f15130aa arch/arm64/src/imx9/imx9_lpuart.c: Call uart_xmitchars when txint is enabled
Signed-off-by: Jukka Laitinen <jukkax@ssrc.tii.ae>
2025-01-22 16:53:45 +08:00
liwenxiang1
7eccf4493a arch/x86_64:Adapt coredump
Signed-off-by: liwenxiang1 <liwenxiang1@xiaomi.com>
2025-01-22 16:35:32 +08:00
Jukka Laitinen
c00b5862c7 arch/risc-v/src/mpfs/mpfs_ddr.c: Fix CA training verify step
Corrections to CA training verify step. The original copied from HSS didn't
make sense in all aspects:
- The check is not per lane, so it should be out of the "for (lane_sel" loop.
- The check wasn't proper. The expected outcome is just a vector of increasing numbers
  separated enough

Signed-off-by: Jukka Laitinen <jukkax@ssrc.tii.ae>
2025-01-22 16:32:06 +08:00
Jukka Laitinen
6ca6608dea arch/risc-v/src/mpfs/mpfs_ddr.c: Clean up the TXDLY verify step
Just verify that the delay for the selected clock != 0

Signed-off-by: Jukka Laitinen <jukkax@ssrc.tii.ae>
2025-01-22 16:32:06 +08:00
Jukka Laitinen
e8cc1d3c4f arch/risc-v/src/mpfs/mpfs_ddr.c: Add read dq/dqs eye centering test
After read training, check also that the eye is centered properly. Sometimes
after the training the width is long enough, but it is not centered.

Signed-off-by: Jukka Laitinen <jukkax@ssrc.tii.ae>
2025-01-22 16:32:06 +08:00
Jukka Laitinen
f695fc6884 arch/risc-v/src/mpfs: Disable external interrupts on all SMP harts
Interrupts on MPFS platform are currently served on the hart, on
which the up_enable_irq was called.

Call to up_disable_irq may execute on different hart than on which
the up_enable_irq was executed. In this case the interrupt is not
disabled currently.

While there is nothing fancy (irq affinity control or such), an
easy way to fix this is to simply disable the irq on all harts.

This also changes the prototypes of mpfs_plic_get_iebase and
mpfs_plic_get_claimbase to get the hart id as an argument, in
order to accomplish this.

Signed-off-by: Jukka Laitinen <jukkax@ssrc.tii.ae>
2025-01-22 15:30:32 +08:00
chao an
9db4d327fa sim/virtio: fix typo sim_rpmsg_vritio.c -> sim_rpmsg_virtio.c
Build Error:
CMake Error at arch/sim/src/sim/CMakeLists.txt:278 (target_sources):
  Cannot find source file:

    /home/archer/code/nuttx/n3/nuttx/arch/sim/src/sim/sim_rpmsg_vritio.c

Signed-off-by: chao an <anchao.archer@bytedance.com>
2025-01-22 15:28:13 +08:00
wangzhi16
bed3bd0852 Use small lock to protect resources related to irq in arch avr, hc, mips and or1k.
Signed-off-by: wangzhi16 <wangzhi16@xiaomi.com>
2025-01-22 15:27:30 +08:00
wangmingrong1
5918335b7f armv8m: Default open hardware stack check
Signed-off-by: wangmingrong1 <wangmingrong1@xiaomi.com>
2025-01-21 11:55:10 -03:00