RTL8730E has dual Cortex-A32 cores (CA32) in the AP domain. Core1 is powered off by default and requires an explicit HSYS power-on sequence before ATF SP_MIN can service the PSCI CPU_ON call. Without it, SP_MIN writes the entry point to the mailbox and times out waiting for Core1 to poll it. Add rtl8730e_core1_power_on() that mirrors SDK smp.c:rtk_core1_power_on(): assert reset, assert isolation, two-stage power-on with up_udelay() for correct 50/50/500/50 us timing, then release isolation and reset. Call it from up_cpu_start() before psci_cpu_on(). Enable CONFIG_SMP / CONFIG_SMP_NCPUS=2 / CONFIG_ARM_PSCI in the nsh defconfig. Enabling SMP also exposed a latent WHC skb alignment bug: the Realtek WHC WiFi driver keeps the AP/NP DDR views coherent with by-VA DCache_Clean/Invalidate at SKB_CACHE_SZ (64 on RTL8730E) granularity, which requires every skb buffer to be cache-line aligned. The port had omitted CONFIG_MM_DEFAULT_ALIGNMENT (defaulting to 8; the 8721Dx parts set 32), so heap-allocated skb buffers were unaligned and the cache maintenance spilled onto the neighbouring skb struct, corrupting its immutable buf pointer (seen as skb->buf = 0x05 and a TX memcpy data abort on "renew wlan0"). This was harmless on single core -- the non-shareable DDR mapping made the stray maintenance a no-op -- but the SMP shareable mapping plus real dual-core concurrency turned it into a hard fault. Set CONFIG_MM_DEFAULT_ALIGNMENT=64 in the nsh defconfig. Hardware verified on RTL8730E (C-cut): /proc/cpuinfo shows both processor 0 and processor 1; getprime 2 completes two concurrent threads in ~573 ms (same as single-thread), confirming true parallel execution across both cores. "renew wlan0" now obtains a DHCP lease (192.168.1.101) without faulting. Assisted-by: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: dechao_gong <dechao_gong@realsil.com.cn> |
||
|---|---|---|
| .github | ||
| arch | ||
| audio | ||
| binfmt | ||
| boards | ||
| cmake | ||
| crypto | ||
| Documentation | ||
| drivers | ||
| dummy | ||
| fs | ||
| graphics | ||
| include | ||
| libs | ||
| mm | ||
| net | ||
| openamp | ||
| pass1 | ||
| sched | ||
| syscall | ||
| tools | ||
| video | ||
| wireless | ||
| .asf.yaml | ||
| .codespell-ignore-lines | ||
| .codespellrc | ||
| .editorconfig | ||
| .gitignore | ||
| .gitmessage | ||
| .pre-commit-config.yaml | ||
| .yamllint | ||
| AUTHORS | ||
| CMakeLists.txt | ||
| CONTRIBUTING.md | ||
| INVIOLABLES.md | ||
| Kconfig | ||
| LICENSE | ||
| Makefile | ||
| NOTICE | ||
| README.md | ||
| ReleaseNotes | ||
Apache NuttX is a real-time operating system (RTOS) with an emphasis on standards compliance and small footprint. Scalable from 8-bit to 64-bit microcontroller environments, the primary governing standards in NuttX are POSIX and ANSI standards. Additional standard APIs from Unix and other common RTOSs (such as VxWorks) are adopted for functionality not available under these standards, or for functionality that is not appropriate for deeply-embedded environments (such as fork()).
For brevity, many parts of the documentation will refer to Apache NuttX as simply NuttX.
Getting Started
First time on NuttX? Read the Getting Started guide! If you don't have a board available, NuttX has its own simulator that you can run on terminal.
Documentation
You can find the current NuttX documentation on the Documentation Page.
Alternatively, you can build the documentation yourself by following the Documentation Build Instructions.
The old NuttX documentation is still available in the Apache wiki.
Supported Boards
NuttX supports a wide variety of platforms. See the full list on the Supported Platforms page.
Contributing
If you wish to contribute to the NuttX project, read the Contributing guidelines for information on Git usage, coding standard, workflow and the NuttX principles.
License
The code in this repository is under either the Apache 2 license, or a license compatible with the Apache 2 license. See the License Page for more information.