Skip to content

arch/arm64/imx95-a55: add GPIO and eMMC (USDHC) support with partition table parsing#18501

Merged
xiaoxiang781216 merged 9 commits intoapache:masterfrom
jasonbu:imx95_emmc8bit
Mar 24, 2026
Merged

arch/arm64/imx95-a55: add GPIO and eMMC (USDHC) support with partition table parsing#18501
xiaoxiang781216 merged 9 commits intoapache:masterfrom
jasonbu:imx95_emmc8bit

Conversation

@jasonbu
Copy link
Contributor

@jasonbu jasonbu commented Mar 6, 2026

Summary

Add GPIO and eMMC (USDHC) support for the i.MX95 A55 EVK board, enabling 8-bit eMMC access with MBR/GPT partition table parsing.

Changes

1. imx9: add GPIO support for imx95

  • Add imx95 GPIO register definitions (same IP block as imx93)
  • Fill g_gpio_base[] array for imx95
  • Include imx95_gpio.h from the common header
  • Compile imx9_gpio.c / imx9_gpiobase.c for imx95 in cmake

2. imx95-a55-evk: add USDHC eMMC driver support

  • Create imx95_pinmux.h / imx95_ccm.h / imx95_pll.h hardware definitions for imx95
  • Add USDHC1 8-bit eMMC pin mux and clock macros to board.h
  • Create board-level imx9_usdhc.c glue code
  • Update imx9_bringup.c with DMA allocator and USDHC init
  • Add CONFIG_IMX9_CLK_OVER_SCMI compile-time guards in imx9_usdhc.c to isolate the IMX95 SCMI clock path from the existing IMX93 direct-CCM path — no functional change for IMX93

3. imx9: usdhc fix dmapreflight rejecting small unaligned buffers

  • imx9_dmapreflight() rejected unaligned buffers unconditionally, but dmarecvsetup() has a bounce path via priv->rxbuffer for small transfers
  • Add a buflen > sizeof(priv->rxbuffer) check so that small reads (e.g. ext_csd 512-byte stack buffer) can use the bounce buffer instead of failing with -EFAULT

4. imx95-a55-evk: add MBR/GPT partition table parsing on eMMC

  • Parse the partition table on /dev/mmcsd0 during board bringup and register each partition as /dev/mmcsd0pN
  • Add custom MBR handler for unnamed partition entries

Impact

  • IMX93 code paths are fully preserved behind #ifndef CONFIG_IMX9_CLK_OVER_SCMI guards — zero functional change for existing IMX93 boards
  • The dmapreflight fix is a generic improvement that benefits all imx9 USDHC users
  • If using i.mx95-FRDM EVK, able to mount the /boot partition same with uboot/linux, after patch.
  • mmcsd 8bit not support fixed , as previous we only hardcode 4bit width support.

Testing

compile by cmake

mkdir -p out/nuttx_imx95-a55-evk_emm
cd out/nuttx_imx95-a55-evk_emmc
cmake ../../nuttx -DBOARD_CONFIG=imx95-a55-evk/emmc -GNinja
ninja -j`nproc` 

Verified on i.MX95 FRDM EVK:

  • eMMC device recognized and initialized (8-bit mode)
  • Partition table parsed, partitions registered
  • mount -t vfat /dev/mmcsd0p0 /data works
nsh> mount -t vfat /dev/mmcsd0p0 /data
nsh> ls -l /data/nuttx.bin
 -rw-rw-rw-      515184 /data/nuttx.bin

ostest passed in i.MX95 FRDM EVK

[2026-03-06 17:57:11] user_main: Exiting
[2026-03-06 17:57:11] ostest_main: Exiting with status 0
[2026-03-06 17:57:11] nsh> 

@github-actions github-actions bot added Arch: arm Issues related to ARM (32-bit) architecture Arch: arm64 Issues related to ARM64 (64-bit) architecture Area: Drivers Drivers issues Size: XL The size of the change in this PR is very large. Consider breaking down the PR into smaller pieces. Board: arm64 labels Mar 6, 2026
@simbit18
Copy link
Contributor

simbit18 commented Mar 6, 2026

Hi @fdcavalcanti @tmedicci @eren-terzioglu We are receiving this error on all PRs. Can you check it?

Error: board/esp32_bringup.c:275:9: error: implicit declaration of function 'btn_lower_initialize'; did you mean 'nullmtd_initialize'? [-Wimplicit-function-declaration]
  275 |   ret = btn_lower_initialize("/dev/buttons");
      |         ^~~~~~~~~~~~~~~~~~~

Boards

  Cleaning...
HEAD detached at pull/18501/merge
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   boards/xtensa/esp32/esp32-devkitc/configs/bmp280/defconfig
	modified:   boards/xtensa/esp32/esp32-devkitc/configs/buttons/defconfig
	modified:   boards/xtensa/esp32/esp32-ethernet-kit/configs/buttons/defconfig
	modified:   boards/xtensa/esp32/esp32-lyrat/configs/buttons/defconfig
	modified:   boards/xtensa/esp32/esp32-wrover-kit/configs/buttons/defconfig
	modified:   boards/xtensa/esp32/esp32-wrover-kit/configs/lua/defconfig
====================================================================================
Configuration/Tool: esp32-ethernet-kit/buttons
2026-03-06 10:13:47
------------------------------------------------------------------------------------
  Cleaning...
  Configuring...
  Building NuttX...
board/esp32_bringup.c: In function 'esp32_bringup':
Error: board/esp32_bringup.c:275:9: error: implicit declaration of function 'btn_lower_initialize'; did you mean 'nullmtd_initialize'? [-Wimplicit-function-declaration]
  275 |   ret = btn_lower_initialize("/dev/buttons");
      |         ^~~~~~~~~~~~~~~~~~~~
      |         nullmtd_initialize
make[1]: *** [/github/workspace/sources/nuttx/boards/Board.mk:83: esp32_bringup.o] Error 1
make[1]: Target 'libboard.a' not remade because of errors.
make: *** [tools/LibTargets.mk:89: arch/xtensa/src/board/libboard.a] Error 2
make: Target 'all' not remade because of errors.
/github/workspace/sources/nuttx/tools/testbuild.sh: line 385: /github/workspace/sources/nuttx/../nuttx/nuttx.manifest: No such file or directory
  [1/1] Normalize esp32-ethernet-kit/buttons
18d17
< CONFIG_ARCH_IRQBUTTONS=y
34d32
< CONFIG_INPUT_BUTTONS_LOWER=y
Saving the new configuration file
HEAD detached at pull/18501/merge
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   boards/xtensa/esp32/esp32-ethernet-kit/configs/buttons/defconfig

no changes added to commit (use "git add" and/or "git commit -a")
====================================================================================

https://github.com/apache/nuttx/actions/runs/22758561387/job/66009383296#logs

@fdcavalcanti
Copy link
Contributor

Hi @fdcavalcanti @tmedicci @eren-terzioglu We are receiving this error on all PRs. Can you check it?

Error: board/esp32_bringup.c:275:9: error: implicit declaration of function 'btn_lower_initialize'; did you mean 'nullmtd_initialize'? [-Wimplicit-function-declaration]
  275 |   ret = btn_lower_initialize("/dev/buttons");
      |         ^~~~~~~~~~~~~~~~~~~

Boards

  Cleaning...
HEAD detached at pull/18501/merge
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   boards/xtensa/esp32/esp32-devkitc/configs/bmp280/defconfig
	modified:   boards/xtensa/esp32/esp32-devkitc/configs/buttons/defconfig
	modified:   boards/xtensa/esp32/esp32-ethernet-kit/configs/buttons/defconfig
	modified:   boards/xtensa/esp32/esp32-lyrat/configs/buttons/defconfig
	modified:   boards/xtensa/esp32/esp32-wrover-kit/configs/buttons/defconfig
	modified:   boards/xtensa/esp32/esp32-wrover-kit/configs/lua/defconfig
====================================================================================
Configuration/Tool: esp32-ethernet-kit/buttons
2026-03-06 10:13:47
------------------------------------------------------------------------------------
  Cleaning...
  Configuring...
  Building NuttX...
board/esp32_bringup.c: In function 'esp32_bringup':
Error: board/esp32_bringup.c:275:9: error: implicit declaration of function 'btn_lower_initialize'; did you mean 'nullmtd_initialize'? [-Wimplicit-function-declaration]
  275 |   ret = btn_lower_initialize("/dev/buttons");
      |         ^~~~~~~~~~~~~~~~~~~~
      |         nullmtd_initialize
make[1]: *** [/github/workspace/sources/nuttx/boards/Board.mk:83: esp32_bringup.o] Error 1
make[1]: Target 'libboard.a' not remade because of errors.
make: *** [tools/LibTargets.mk:89: arch/xtensa/src/board/libboard.a] Error 2
make: Target 'all' not remade because of errors.
/github/workspace/sources/nuttx/tools/testbuild.sh: line 385: /github/workspace/sources/nuttx/../nuttx/nuttx.manifest: No such file or directory
  [1/1] Normalize esp32-ethernet-kit/buttons
18d17
< CONFIG_ARCH_IRQBUTTONS=y
34d32
< CONFIG_INPUT_BUTTONS_LOWER=y
Saving the new configuration file
HEAD detached at pull/18501/merge
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   boards/xtensa/esp32/esp32-ethernet-kit/configs/buttons/defconfig

no changes added to commit (use "git add" and/or "git commit -a")
====================================================================================

https://github.com/apache/nuttx/actions/runs/22758561387/job/66009383296#logs

There's a fix coming very soon.

@cederom
Copy link
Contributor

cederom commented Mar 6, 2026

Very nice @jasonbu thank you.. lets just wait for the CI fix :-)

@mzanders you are user of this hw too can you please take a look? :-)

@jasonbu jasonbu marked this pull request as ready for review March 9, 2026 04:09
@jerpelea jerpelea changed the title imx95-a55: add GPIO and eMMC (USDHC) support with partition table parsing, verify use i.mx95-FRDM EVK arch/arm64/imx95-a55: add GPIO and eMMC (USDHC) support with partition table parsing Mar 9, 2026
jerpelea
jerpelea previously approved these changes Mar 9, 2026
cederom
cederom previously approved these changes Mar 9, 2026
Copy link
Contributor

@cederom cederom left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you @jasonbu :-)

Copy link
Contributor

@mzanders mzanders left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Manual review done, some smaller items noted. Except maybe for the inclusion of imx9_gpiobase.c by imx9_gpio.c which is rather ugly (but which was already present).

To check for regressions on the iMX93, I tried building and running the A55 part of IMX93-EVK on an IMX93-QSB board for the current master (43f65ce ("build(deps): bump docker/build-push-action from 6 to 7", 2026-03-09)) first. Unfortunately without succes. So it doesn't make a lot of sense to try and test this PR on target..

u-boot=> fatload mmc 0:1 0x80000000 nuttx_a55.bin                               
585728 bytes read in 400 ms (1.4 MiB/s)                                         
u-boot=> go 0x80000000                                                          
## Starting application at 0x80000000 ...                                       
- Ready to Boot Primary CPU                                                     
- Boot from EL2                                                                 
- Boot from EL1                                                                 
- Boot to C runtime for OS Initialize                                           
"Synchronous Abort" handler, esr 0x02000000                                     
elr: 0000000080202580 lr : 00000000012f3700 (reloc)                             
elr: 00000000fef10580 lr : 0000000080001700                                     
x0 : 000000008008ec10 x1 : 0000000080065d38                                     
x2 : 0000000096000021 x3 : 0000000000000000                                     
x4 : 00000000443c0180 x5 : 00000000800047d8                                     
x6 : 0000000000003fc4 x7 : 0000000000000006                                     
x8 : 0000000000000003 x9 : 0000000096000021                                     
x10: 0000000000000025 x11: 0000000000000000                                     
x12: 000000000000001c x13: 00000000fcf0dd86                                     
x14: 0000000000000008 x15: 00000000fcefef5d                                     
x16: 0000000080000000 x17: 0000000000000004                                     
x18: 00000000fcf0dd70 x19: 000000008008ec10                                     
x20: 0000000000000000 x21: 0000000000000002                                     
x22: 00000000fcf1b390 x23: 0000000080000068                                     
x24: 000000008008f000 x25: 0000000080000e38                                     
x26: 0000000000000000 x27: 0000000000000000                                     
x28: 00000000fcf33650 x29: 00000000fceff7f0                                     
                                                                                
Code: f9403e41 1400a056 801ffe10 00000000 (feff7040)                            
Resetting CPU ...                                                               
                                                                                
resetting ...    

@cederom
Copy link
Contributor

cederom commented Mar 9, 2026

Thank you @mzanders !! I got my FRDM-IMX93 but need to find some time to play maybe this week :-)

@jasonbu
Copy link
Contributor Author

jasonbu commented Mar 9, 2026

Manual review done, some smaller items noted. Except maybe for the inclusion of imx9_gpiobase.c by imx9_gpio.c which is rather ugly (but which was already present).

To check for regressions on the iMX93, I tried building and running the A55 part of IMX93-EVK on an IMX93-QSB board for the current master (43f65ce ("build(deps): bump docker/build-push-action from 6 to 7", 2026-03-09)) first. Unfortunately without succes. So it doesn't make a lot of sense to try and test this PR on target..

u-boot=> fatload mmc 0:1 0x80000000 nuttx_a55.bin                               
585728 bytes read in 400 ms (1.4 MiB/s)                                         
u-boot=> go 0x80000000                                                          
## Starting application at 0x80000000 ...                                       
- Ready to Boot Primary CPU                                                     
- Boot from EL2                                                                 
- Boot from EL1                                                                 
- Boot to C runtime for OS Initialize                                           
"Synchronous Abort" handler, esr 0x02000000                                     
elr: 0000000080202580 lr : 00000000012f3700 (reloc)                             
elr: 00000000fef10580 lr : 0000000080001700                                     
x0 : 000000008008ec10 x1 : 0000000080065d38                                     
x2 : 0000000096000021 x3 : 0000000000000000                                     
x4 : 00000000443c0180 x5 : 00000000800047d8                                     
x6 : 0000000000003fc4 x7 : 0000000000000006                                     
x8 : 0000000000000003 x9 : 0000000096000021                                     
x10: 0000000000000025 x11: 0000000000000000                                     
x12: 000000000000001c x13: 00000000fcf0dd86                                     
x14: 0000000000000008 x15: 00000000fcefef5d                                     
x16: 0000000080000000 x17: 0000000000000004                                     
x18: 00000000fcf0dd70 x19: 000000008008ec10                                     
x20: 0000000000000000 x21: 0000000000000002                                     
x22: 00000000fcf1b390 x23: 0000000080000068                                     
x24: 000000008008f000 x25: 0000000080000e38                                     
x26: 0000000000000000 x27: 0000000000000000                                     
x28: 00000000fcf33650 x29: 00000000fceff7f0                                     
                                                                                
Code: f9403e41 1400a056 801ffe10 00000000 (feff7040)                            
Resetting CPU ...                                                               
                                                                                
resetting ...    

guess crash with the CLOCK_SDIO_DISABLED place modify, but when I test with my board, the emmc break, and mount cause uboot erased, will do verify again after use uuu recover the image.

my private fork worked before #18403 , if you have a plan add support for i.mx 95, please continue, as I did not have environment to double check if i.mx 93 work as expected.

Copy link
Contributor

@acassis acassis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jasonbu nice work, kudos!!!

Please add a board config to exercise these peripherals and please update the board Documentation to include these configs and a Picture of the board: https://nuttx.apache.org/docs/latest/platforms/arm64/imx9/boards/imx95-a55-evk/index.html

@acassis
Copy link
Contributor

acassis commented Mar 9, 2026

@jasonbu is that board? https://www.nxp.com/part/IMX95LPD5EVK-19

wow, U$ 1,200.00, I think this company didn't learn anything from ST!

@jasonbu
Copy link
Contributor Author

jasonbu commented Mar 20, 2026

@acassis hi Alan, the board I'm currently used is not fully public, will add board description/image later.

add emmc/defconfig to help user more easy to use, actually I have two imx95 EVK, the emmc feature is compatible.

Also update tutorial rst to help user do flash with uboot only.

hi, @mzanders could you please help evaluate the imx93 already fixed in this version? CC @cederom

And shall we split it into more small patch, for example, cmake fix, include .c fix, etc. will take less influence.

@cederom
Copy link
Contributor

cederom commented Mar 20, 2026

I just lost contract, need to do some things first, will play with iMX a bit later, sorry, I am sure this update is good if it works for you, go ahead do not wait for me :-)

@jasonbu jasonbu requested a review from anchao March 20, 2026 07:13
anchao
anchao previously approved these changes Mar 20, 2026
@lupyuen
Copy link
Member

lupyuen commented Mar 20, 2026

Hi @jasonbu: I'm testing a new way to Build PRs in Our Own NuttX Repos, wonder if you would like to try out, and give your feedback to @simbit18 and me? Thank you so much :-)

  1. Demo Video in YouTube
    Demo Video in Google Drive
  2. Browse to github.com/NuttX/manual-nuttx-ci
  3. Click "Fork" to clone the repo
  4. Click "Actions > Enable GitHub Actions"
  5. Click "Manually Build NuttX > Run Workflow"
  6. Enter the following:
    • Repo for NuttX: jasonbu/nuttx
    • NuttX Branch: imx95_emmc8bit
    • Repo for NuttX Apps: apache/nuttx-apps
    • NuttX Apps Branch: master
    • Host Platform: all
  7. And the PR Build should start. Lemme know if it doesn't work thanks!
  8. Why are we doing this? Earlier this year, we saw very high usage of GitHub Runners. By building PRs in Our Own NuttX Repos, we will greatly reduce our usage of GitHub Runners, so that ASF Infrastructure Team won't revoke our access to GitHub CI. So we hope everyone can help out thanks :-)
Screenshot 2026-03-20 at 5 00 45 PM

@jasonbu
Copy link
Contributor Author

jasonbu commented Mar 23, 2026

Hi @jasonbu: I'm testing a new way to Build PRs in Our Own NuttX Repos, wonder if you would like to try out, and give your feedback to @simbit18 and me? Thank you so much :-)

  1. Demo Video in YouTube Demo Video in Google Drive

  2. Browse to github.com/NuttX/manual-nuttx-ci

  3. Click "Fork" to clone the repo

  4. Click "Actions > Enable GitHub Actions"

  5. Click "Manually Build NuttX > Run Workflow"

  6. Enter the following:

    • Repo for NuttX: jasonbu/nuttx
    • NuttX Branch: imx95_emmc8bit
    • Repo for NuttX Apps: apache/nuttx-apps
    • NuttX Apps Branch: master
    • Host Platform: all
  7. And the PR Build should start. Lemme know if it doesn't work thanks!

  8. Why are we doing this? Earlier this year, we saw very high usage of GitHub Runners. By building PRs in Our Own NuttX Repos, we will greatly reduce our usage of GitHub Runners, so that ASF Infrastructure Team won't revoke our access to GitHub CI. So we hope everyone can help out thanks :-)

Screenshot 2026-03-20 at 5 00 45 PM

Hi, @lupyuen , will try today, I found my ci error maybe defconfig refresh required. and if I just force push to this pr/branch. maybe trigger a new apache/nuttx CI, so guess I need to new a branch to avoid the github action auto retrigger. will give a feedback to you.

By the way. I see the action in your picture is try run whole action ci in personal fork. and when I fork the repo, it need to choose specific defconfig? Is it due to the personal ci job cost? it is a real problem.
but if only run single defconfig/ci job, the local docker container should more easy to use?
Also the personal fork will more difficult to do the ensure ready before trigger apache nuttx CI.

@lupyuen
Copy link
Member

lupyuen commented Mar 23, 2026

Thanks @jasonbu! Yes you are correct, if our PR involves One Single Defconfig, it's definitely easier to run Docker to test the PR.

The method that I suggested (manual-nuttx-ci) is more suitable for PRs that affect Multiple Architectures, so manual-nuttx-ci is simpler than running Multiple Docker Builds. Or maybe we have devs who are not familiar with Docker, then they can use manual-nuttx-ci too.

We have just implemented a new feature to build One Single Defconfig, it might be helpful too. Thanks :-)

Screenshot 2026-03-23 at 12 33 24 PM

jasonbu added 9 commits March 23, 2026 12:37
arm64_modifyreg8.c, arm64_modifyreg16.c, arm64_modifyreg32.c were
present in Make.defs but missing from CMakeLists.txt, causing link
errors when building with cmake.

Signed-off-by: buxiasen <buxiasen@xiaomi.com>
…upport

The MMC CMD6 bus width switch was gated on priv->buswidth which is
derived from the SD SCR register. For MMC cards this field is never
set (unless SDIO_CAPS_4BIT_ONLY), so the CMD6 was skipped while the
host PROCTL DTW was still changed - causing a bus width mismatch and
data transfer timeouts.

Fix by checking priv->caps instead of priv->buswidth for MMC cards.
Also select EXT_CSD_BUS_WIDTH_8 when host reports SDIO_CAPS_8BIT.

Signed-off-by: buxiasen <buxiasen@xiaomi.com>
Rename IMX9_IRQ_uSDHC{1,2,3} to IMX9_IRQ_USDHC{1,2,3} in both arm
and arm64 imx95_irq.h to follow the all-caps naming convention used
by imx93_irq.h and the rest of the NuttX codebase. Remove the now
unnecessary USDHC IRQ alias block from arm64 imx95_irq.h.

Signed-off-by: buxiasen <buxiasen@xiaomi.com>
Add imx95 GPIO register definitions (same IP block as imx93), fill
g_gpio_base[] array for imx95, include imx95_gpio.h from the common
header, and compile imx9_gpio.c/imx9_gpiobase.c for imx95 in cmake.

Signed-off-by: buxiasen <buxiasen@xiaomi.com>
Port USDHC1 (eMMC) driver to the i.MX95 FRDM EVK board:
- Create imx95_pinmux.h with SD1/USDHC1 pin definitions
- Add USDHC1 pin macros to board.h
- Create board-level imx9_usdhc.c glue code
- Update imx9_bringup.c with DMA allocator and USDHC init
- Add SCMI clock guards in imx9_usdhc.c (imx95 clock roots
  are owned by System Manager, direct CCM writes are no-ops)
- Fix CCM_CR_USDHC2 copy-paste bug to CCM_CR_USDHC1

Signed-off-by: buxiasen <buxiasen@xiaomi.com>
imx9_dmapreflight() rejected unaligned buffers unconditionally, but
dmarecvsetup() has a bounce path via priv->rxbuffer for small
transfers. Add a buflen > sizeof(priv->rxbuffer) check so that
small reads (e.g. ext_csd 512-byte stack buffer) can use the
bounce buffer instead of failing with -EFAULT.

Signed-off-by: buxiasen <buxiasen@xiaomi.com>
Parse the partition table on /dev/mmcsd0 during board bringup and
register each partition as /dev/mmcsd0pN. MBR partitions have no
name field so a custom handler is needed instead of the default
register_partition which skips unnamed entries.

Verify by i.mx95 FRDM
'mount -t vfat /dev/mmcsd0p0 /data'

Signed-off-by: buxiasen <buxiasen@xiaomi.com>
Add a dedicated emmc board configuration that enables USDHC1 8-bit
eMMC access with MBR/GPT partition table parsing, instead of polluting
the base nsh defconfig. This allows users to build and test eMMC
functionality with:

  cmake -DBOARD_CONFIG=imx95-a55-evk/emmc

Signed-off-by: buxiasen <buxiasen@xiaomi.com>
Add detailed steps for copying nuttx.bin to eMMC via u-boot USB Mass
Storage (ums) mode, which exposes the eMMC as a USB drive on the host
PC for easy file transfer.

Signed-off-by: buxiasen <buxiasen@xiaomi.com>
@jasonbu
Copy link
Contributor Author

jasonbu commented Mar 23, 2026

Thanks @jasonbu! Yes you are correct, if our PR involves One Single Defconfig, it's definitely easier to run Docker to test the PR.

The method that I suggested (manual-nuttx-ci) is more suitable for PRs that affect Multiple Architectures, so manual-nuttx-ci is simpler than running Multiple Docker Builds. Or maybe we have devs who are not familiar with Docker, then they can use manual-nuttx-ci too.

We have just implemented a new feature to build One Single Defconfig, it might be helpful too. Thanks :-)

Screenshot 2026-03-23 at 12 33 24 PM

https://github.com/jasonbu/manual-nuttx-ci/actions/runs/23424198384
Thanks for your effort, it worked for my fork. @lupyuen
image

Also it show the cmake is faster than Makefile.
CMake with 3m46s VS Make 5m12s.
These speed looks like the triggered ci job did not enable the -j parallel compile. Don't know if it's expected or limitation by github action performace.

@lupyuen
Copy link
Member

lupyuen commented Mar 23, 2026

Thank you so much @jasonbu! Hi @simbit18 anything you would like to add? :-)

@simbit18
Copy link
Contributor

simbit18 commented Mar 23, 2026

Hi @jasonbu, thanks for your feedback

I've updated the workflow by adding the parallel -j option for the Make build

The build times are now similar. Please note that the V=1 option is enabled for the Make build

@xiaoxiang781216 xiaoxiang781216 merged commit ced3cb1 into apache:master Mar 24, 2026
41 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Arch: arm Issues related to ARM (32-bit) architecture Arch: arm64 Issues related to ARM64 (64-bit) architecture Area: Drivers Drivers issues Board: arm64 Size: XL The size of the change in this PR is very large. Consider breaking down the PR into smaller pieces.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants