mirror of
https://github.com/apache/nuttx.git
synced 2026-10-19 12:48:48 +00:00
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> |
||
|---|---|---|
| .. | ||
| arm | ||
| arm64 | ||
| avr | ||
| ceva | ||
| dummy | ||
| hc | ||
| mips | ||
| misoc | ||
| or1k | ||
| renesas | ||
| risc-v | ||
| sim | ||
| sparc | ||
| tricore | ||
| x86 | ||
| x86_64 | ||
| xtensa | ||
| z16 | ||
| z80 | ||
| CMakeLists.txt | ||
| Kconfig | ||