-
Notifications
You must be signed in to change notification settings - Fork 3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Nuvoton: Support new target NUMAKER_IOT_M467 #15337
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1. Based on alpha version BSP (85564a2716548e7b6d6a79a490c6d94a24cf9bcf) 2. Continuing above, tweak BSP: (1) Add EPWM_ConfigOutputChannel2() to enable below 1Hz and below 1% duty cycle for PWM output (m460_epwm.h/c). (2) Add dummy RTC_WaitAccessEnable() for consistency with previous ports (m460_rtc.h). 3. Target NuMaker-M467HJ V0.1 board temporarily 4. Support Arduino UNO form factor for NUMAKER_IOT_M467 target 5. Enable export to Keil/IAR project - tools/arm_pack_manager/index.json - tools/export/iar/iar_definitions.json
HRESETRF is combined reset flag. Filter it out to avoid interference with reset reason check.
1. For GCC, support multi-block .data/.bss initialization 2. HyperRAM is mapped to two regions: 0x0A000000 and 0x80000000 According to default system address map, 0x0A000000 is located at 'Code' region and 0x80000000 at 'RAM' region. With MPU enabled on Mbed OS, 'Code' region is write-never and 'RAM' region execute-never. 0x80000000 is chosen because 'RAM' regioin is naturally for HyperRAM. 3. Configurable multi-function pins for HBI 4. To locate code/data at external HyperRAM: - Specify __attribute__((section(".text.nu.exthyperram"))) for RO/.text/readonly section type Invoke mbed_mpu_manager_lock_ram_execution()/mbed_mpu_manager_unlock_ram_execution() to run HyperRAM code - Specify __attribute__((section(".data.nu.exthyperram"))) for RW/.data/readwrite section type - Specify __attribute__((section(".bss.nu.exthyperram"))) for ZI/.bss/zeroinit section type 5. Add readme
1. Prepare crypto common code 2. Support list - SHA - ECC NOTE: AES/RSA are to support in other works NOTE: Compared to M487, M467's SHA supports context save & restore (DMA Cascade mode) and so no software fallback is needed. NOTE: M467's ECC, following M487, goes partial-module replacement and it can just improve primitives e.g. point addition/doubling by 2X, and cannot improve high level point multiplication because MbedTLS doesn’t open it. To improve performance best, full-module replacement is needed. NOTE: Continuing above, add support for Montgomery curve
Add crypto_xxx_wait2 helper routine to replace crypto_xxx_wait for Crypto H/W control
According to TRM, it is suggested PRNG be seeded by TRNG on every Crypto H/W reset.
1. Crypto RSA H/W supports 1024/2048/3072/4096 key bits. Fall back to software implementation for other key bits. 2. For decrypt, if MBEDTLS_RSA_NO_CRT isn't defined, go CRT, or normal. 3. For decrypt, when blinding (f_rng != NULL), enable SCAP mode. 4. Recover from Crypto RSA H/W failure: (1) Enable timed-out wait to escape from RSA H/W trap (2) On RSA H/W timeout, stop this RSA H/W operation (3) Fall back to S/W implementation on failure NOTE: RSA 4096 key bits can fail with default mbedtls configuration MBEDTLS_MPI_MAX_SIZE. Enlarge MBEDTLS_MPI_MAX_SIZE to 1024 or larger if this feature is required. NOTE: Fixed in BSP RSA driver, for non-CRT+SCAP mode, temporary buffer for MADDR6 requires to be key length plus 128 bits. NOTE: Fixed in BSP RSA driver, DMA buffer must be 4-word aligned, or RSA H/W will trap.
1. Replace ecp.c full-module, and other ec modules dependent on ecp.c (ecdh.c/ecdsa.c/ecjpake.c) will improve followingly. 2. Recover from Crypto ECC H/W failure: (1) Enable timed-out wait to escape from ECC H/W trap (2) On ECC H/W timeout, stop this ECC H/W operation (3) Fall back to S/W implementation on failure 3. Support Short Weierstrass curve 4. Support Montgomery curve Montgomery curve has the form: B y^2 = x^3 + A x^2 + x (1) In S/W impl, A is used as (A + 2) / 4. Figure out its original value for engine. https://github.com/ARMmbed/mbed-os/blob/2eb06e76208588afc6cb7580a8dd64c5429a10ce/connectivity/mbedtls/include/mbedtls/ecp.h#L219-L220 (2) In S/W impl, B is unused. Actually, B is 1 for Curve25519/Curve448 and needs to configure to engine. https://github.com/ARMmbed/mbed-os/blob/2eb06e76208588afc6cb7580a8dd64c5429a10ce/connectivity/mbedtls/include/mbedtls/ecp.h#L221-L222 (3) In S/W impl, y-coord is absent, but engine needs it. Deduce it from x-coord following: https://tools.ietf.org/id/draft-jivsov-ecc-compact-05.html https://www.rieselprime.de/ziki/Modular_square_root NOTE: Fix Curve448 has wrong order value Mbed-TLS/mbedtls#5811
This is to follow designer's resolution.
Guard from null argument passed to mbedtls_ecp_point_cmp() in ECC H/W port
Some M460 chips don't support AES/SHA/ECC/RSA H/W. Make them removable from mbedtls H/W port through '"target.macros_remove": ["MBEDTLS_CONFIG_HW_SUPPORT"]'.
Fix in i2c_do_trsn(), interrupt doesn't change back to enabled due to premature return.
UNO D8/D9/D10/D11/D12/D13 can wire to on-board SPI flash. Exclude these pins from FPGA CI Test Shield test.
Pinout comparison between NuMaker-M467HJ and NuMaker-IoT-M467 boards: 1. UNO are unchanged 2. LEDs are unchanged 3. Buttons are unchanged, except button names 4. NuMaker-M467HJ has HBI but NuMaker-IoT-M467 does 5. NuMaker-M467HJ doesn't have ESP8266 but NuMaker-IoT-M467 does 6. SDHC are unchanged
ciarmcom
added
the
release-type: patch
Indentifies a PR as containing just a patch
label
Oct 19, 2022
@ccli8, thank you for your changes. |
Hi @ccli8 , it's large PR as I can see. I'll do my best to review this later this week. |
0xc0170
approved these changes
Nov 2, 2022
CI started |
Jenkins CI Test : ✔️ SUCCESSBuild Number: 1 | 🔒 Jenkins CI Job | 🌐 Logs & ArtifactsCLICK for Detailed Summary
|
mbedmain
removed
release-type: patch
Indentifies a PR as containing just a patch
Release-pending
labels
Feb 28, 2023
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary of changes
This PR tries to add Nuvoton's new target NUMAKER_IOT_M467. It is CM4 based and has 1MiB flash and 256KiB SRAM.
Pull request type
Test results
Greentea test log (ARM)
Greentea test log (GCC_ARM)
FPGA CI Test Shield test log (ARM)
FPGA CI Test Shield test log (GCC_ARM)
Notes:
mbedls
ormbed detect
fails to list the board, it is caused by mbed-os-tools's USB subdevice limit.