From ddb5e460164d7f95cf96bd26e618c589cd218fc0 Mon Sep 17 00:00:00 2001 From: wyhong <30567533+wy-hh@users.noreply.github.com> Date: Tue, 26 Sep 2023 02:40:37 +0800 Subject: [PATCH] [Bouffalolab] Add factory data support on BL70x family (#29401) * [Bouffalolab] Add factory data support on BL70x famliy * fix lintcode * update targets for workflow * fix restyle * use static variables for tasks * change MACRO using method and remove unnecessary escapes --- .github/workflows/examples-bouffalolab.yaml | 15 +++++ .../lighting-app/bouffalolab/bl602/BUILD.gn | 4 +- .../lighting-app/bouffalolab/bl702/BUILD.gn | 8 +++ .../lighting-app/bouffalolab/bl702l/BUILD.gn | 9 +++ .../bouffalolab/bl602/ldscripts/flash_rom.ld | 29 +++++---- .../bl702/flash_config/partition_cfg_2M.toml | 16 ++--- .../bl702/ldscripts/psram_flash.ld | 43 +++++++------ .../bl702l/flash_config/partition_cfg_2M.toml | 23 +++++-- .../common/iot_sdk/platform_port.c | 16 ++++- .../bouffalolab/common/plat/platform.cpp | 11 ++-- scripts/build/builders/bouffalolab.py | 60 +++++++++---------- src/platform/bouffalolab/BL702/BUILD.gn | 1 - src/platform/bouffalolab/BL702L/BUILD.gn | 1 - .../common/CHIPDevicePlatformConfig.h | 8 +++ .../common/FactoryDataProvider.cpp | 23 ------- third_party/bouffalolab/bl602/bl_iot_sdk.gni | 19 +++++- third_party/bouffalolab/bl702/bl_iot_sdk.gni | 19 ++++++ third_party/bouffalolab/bl702l/bl_iot_sdk.gni | 29 +++++++++ 18 files changed, 214 insertions(+), 120 deletions(-) diff --git a/.github/workflows/examples-bouffalolab.yaml b/.github/workflows/examples-bouffalolab.yaml index 700f01e811e9ea..6fa03b295db295 100644 --- a/.github/workflows/examples-bouffalolab.yaml +++ b/.github/workflows/examples-bouffalolab.yaml @@ -56,6 +56,7 @@ jobs: ./scripts/run_in_build_env.sh \ "./scripts/build/build_examples.py \ --target bouffalolab-bl602-night-light-light \ + --target bouffalolab-bl602-night-light-light-mfd \ --target bouffalolab-bl602-iot-matter-v1-light-115200-rpc \ build \ --copy-artifacts-to out/artifacts \ @@ -66,6 +67,10 @@ jobs: bl602 bl602 lighting-app \ out/artifacts/bouffalolab-bl602-night-light-light/chip-bl602-lighting-example.out \ /tmp/bloat_reports/ + .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ + bl602 bl602+mfd lighting-app \ + out/artifacts/bouffalolab-bl602-night-light-light-mfd/chip-bl602-lighting-example.out \ + /tmp/bloat_reports/ .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ bl602 bl602+rpc lighting-app \ out/artifacts/bouffalolab-bl602-iot-matter-v1-light-115200-rpc/chip-bl602-lighting-example.out \ @@ -78,6 +83,7 @@ jobs: ./scripts/run_in_build_env.sh \ "./scripts/build/build_examples.py \ --target bouffalolab-bl706-night-light-light \ + --target bouffalolab-bl706-night-light-light-mfd \ --target bouffalolab-bl706dk-light-ethernet \ --target bouffalolab-bl706dk-light-wifi-fp \ --target bouffalolab-xt-zb6-devkit-light-115200-rpc \ @@ -90,6 +96,10 @@ jobs: bl702 bl702 lighting-app \ out/artifacts/bouffalolab-bl706-night-light-light/chip-bl702-lighting-example.out \ /tmp/bloat_reports/ + .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ + bl702 bl702+mfd lighting-app \ + out/artifacts/bouffalolab-bl706-night-light-light-mfd/chip-bl702-lighting-example.out \ + /tmp/bloat_reports/ .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ bl702 bl706-eth lighting-app \ out/artifacts/bouffalolab-bl706dk-light-ethernet/chip-bl702-lighting-example.out \ @@ -111,6 +121,7 @@ jobs: ./scripts/run_in_build_env.sh \ "./scripts/build/build_examples.py \ --target bouffalolab-bl704ldk-light \ + --target bouffalolab-bl704ldk-light-mfd \ build \ --copy-artifacts-to out/artifacts \ " @@ -120,6 +131,10 @@ jobs: bl702l bl702l lighting-app \ out/artifacts/bouffalolab-bl704ldk-light/chip-bl702l-lighting-example.out \ /tmp/bloat_reports/ + .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ + bl702l bl702l+mfd lighting-app \ + out/artifacts/bouffalolab-bl704ldk-light-mfd/chip-bl702l-lighting-example.out \ + /tmp/bloat_reports/ - name: Clean out build output run: rm -rf ./out diff --git a/examples/lighting-app/bouffalolab/bl602/BUILD.gn b/examples/lighting-app/bouffalolab/bl602/BUILD.gn index aba8c463ac7ade..0a25abda2a2ce0 100644 --- a/examples/lighting-app/bouffalolab/bl602/BUILD.gn +++ b/examples/lighting-app/bouffalolab/bl602/BUILD.gn @@ -115,11 +115,11 @@ bouffalolab_executable("lighting_app") { } if (chip_enable_factory_data) { - defines += [ "CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE" ] + defines += [ "CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE=1" ] } if (chip_enable_factory_data_test) { - defines += [ "CONFIG_BOUFFALOLAB_FACTORY_DATA_TEST" ] + defines += [ "CONFIG_BOUFFALOLAB_FACTORY_DATA_TEST=1" ] } bl_plat_name = "bl602" diff --git a/examples/lighting-app/bouffalolab/bl702/BUILD.gn b/examples/lighting-app/bouffalolab/bl702/BUILD.gn index 55fe6b1a65c252..0becfce3e9e117 100644 --- a/examples/lighting-app/bouffalolab/bl702/BUILD.gn +++ b/examples/lighting-app/bouffalolab/bl702/BUILD.gn @@ -149,6 +149,14 @@ bouffalolab_executable("lighting_app") { defines += [ "BOOT_PIN_RESET=31" ] } + if (chip_enable_factory_data) { + defines += [ "CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE=1" ] + } + + if (chip_enable_factory_data_test) { + defines += [ "CONFIG_BOUFFALOLAB_FACTORY_DATA_TEST=1" ] + } + if ("XT-ZB6-DevKit" == board) { defines += [ "XT_ZB6_DevKit" ] } else if ("BL706-NIGHT-LIGHT" == board) { diff --git a/examples/lighting-app/bouffalolab/bl702l/BUILD.gn b/examples/lighting-app/bouffalolab/bl702l/BUILD.gn index 86655fe708bb9d..6c081df89860cf 100644 --- a/examples/lighting-app/bouffalolab/bl702l/BUILD.gn +++ b/examples/lighting-app/bouffalolab/bl702l/BUILD.gn @@ -20,6 +20,7 @@ import("${bouffalolab_iot_sdk_build_root}/bl702l/bl_iot_sdk.gni") import("${bouffalolab_iot_sdk_build_root}/common/bouffalolab_executable.gni") import("${build_root}/config/defaults.gni") import("${chip_root}/examples/common/pigweed/pigweed_rpcs.gni") +import("${chip_root}/src/platform/bouffalolab/common/args.gni") import("${chip_root}/src/platform/device.gni") import("${chip_root}/src/app/chip_data_model.gni") @@ -126,6 +127,14 @@ bouffalolab_executable("lighting_app") { defines += [ "BOOT_PIN_RESET=16" ] } + if (chip_enable_factory_data) { + defines += [ "CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE=1" ] + } + + if (chip_enable_factory_data_test) { + defines += [ "CONFIG_BOUFFALOLAB_FACTORY_DATA_TEST=1" ] + } + if ("BL704LDK" == board) { defines += [ "XT_ZB6_DevKit" ] } diff --git a/examples/platform/bouffalolab/bl602/ldscripts/flash_rom.ld b/examples/platform/bouffalolab/bl602/ldscripts/flash_rom.ld index 37c93f2e58d4a5..98afa0e551f64c 100644 --- a/examples/platform/bouffalolab/bl602/ldscripts/flash_rom.ld +++ b/examples/platform/bouffalolab/bl602/ldscripts/flash_rom.ld @@ -14,9 +14,6 @@ __RAM_END = 0x4200C000 + 256K - __EM_SIZE; /* leave 8K left for BLE */ __RAM_TCM_LEN = (16K + 16K + 48K + 64K + 64K - 16K - 16K); __RAM_WIFI_LEN = (__RAM_END - __RAM_START - __RAM_TCM_LEN); -__OCRAM_START_ADDRESS = 0x42030000 + 0x8000; -__OCRAM_SIZE = 112K; - MEMORY { rom (rxai!w) : ORIGIN = 0x21015000, LENGTH = 44K @@ -201,13 +198,13 @@ SECTIONS .boot2 (NOLOAD) : { - PROVIDE ( __boot2_pt_addr_start = . ); - *(.bss.boot2_partition_table) - PROVIDE ( __boot2_pt_addr_end = . ); + PROVIDE ( __boot2_pt_addr_start = . ); + *(.bss.boot2_partition_table) + PROVIDE ( __boot2_pt_addr_end = . ); - PROVIDE ( __boot2_flashCfg_start = . ); - *(.bss.boot2_flashCfg) - PROVIDE ( __boot2_flashCfg_end = . ); + PROVIDE ( __boot2_flashCfg_start = . ); + *(.bss.boot2_flashCfg) + PROVIDE ( __boot2_flashCfg_end = . ); } > ram_tcm @@ -216,11 +213,16 @@ SECTIONS PROVIDE( __bss_start = ADDR(.bss) ); PROVIDE( __bss_end = ADDR(.bss) + SIZEOF(.bss) ); - *(.sbss*) + *(.sbss) + *(EXCLUDE_FILE(*libCHIP.a:BL602.PlatformManagerImpl.cpp.o) .sbss.*) *(.gnu.linkonce.sb.*) - *(.bss .bss.*) + *(.bss) + *(EXCLUDE_FILE(*libCHIP.a:BL602.PlatformManagerImpl.cpp.o) .bss.*) *(.gnu.linkonce.b.*) - *(COMMON) + *(EXCLUDE_FILE(*libCHIP.a:BL602.PlatformManagerImpl.cpp.o) COMMON) + + . = ALIGN(4); + *libCHIP.a:BL602.PlatformManagerImpl.cpp.o(.sbss.* .bss.* COMMON) } > ram_tcm .stack (NOLOAD) : @@ -258,9 +260,6 @@ SECTIONS PROVIDE( _ld_ram_size2 = LENGTH(ram_wifi) ); PROVIDE( _ld_ram_addr2 = ORIGIN(ram_wifi) ); - PROVIDE(__ocram_start_addr = __OCRAM_START_ADDRESS); - PROVIDE(__ocram_size = __OCRAM_SIZE); - /*BOOT2 sections*/ PROVIDE ( __boot2_pt_addr_src = BOOT2_PT_ADDR ); PROVIDE ( __boot2_flashCfg_src = BOOT2_FLASHCFG_ADDR ); diff --git a/examples/platform/bouffalolab/bl702/flash_config/partition_cfg_2M.toml b/examples/platform/bouffalolab/bl702/flash_config/partition_cfg_2M.toml index 71aacc8cf753b2..5184b6e53205d9 100644 --- a/examples/platform/bouffalolab/bl702/flash_config/partition_cfg_2M.toml +++ b/examples/platform/bouffalolab/bl702/flash_config/partition_cfg_2M.toml @@ -1,16 +1,16 @@ [pt_table] #partition table is 4K in size -address0 = 0x1000 -address1 = 0x2000 +address0 = 0xE000 +address1 = 0xF000 [[pt_entry]] type = 0 name = "FW" device = 0 -address0 = 0x3000 -size0 = 0x134000 -address1 = 0x137000 -size1 = 0xBB000 +address0 = 0x10000 +size0 = 0x12A000 +address1 = 0x13A000 +size1 = 0xB8000 # compressed image must set len,normal image can left it to 0 len = 0 activeindex = 0 @@ -20,8 +20,8 @@ age = 0 type = 1 name = "mfg" device = 0 -address0 = 0x137000 -size0 = 0xBB000 +address0 = 0x13A000 +size0 = 0xB8000 address1 = 0 size1 = 0 # compressed image must set len,normal image can left it to 0 diff --git a/examples/platform/bouffalolab/bl702/ldscripts/psram_flash.ld b/examples/platform/bouffalolab/bl702/ldscripts/psram_flash.ld index 04cff2d1b69c0f..9bf4d4390b9270 100644 --- a/examples/platform/bouffalolab/bl702/ldscripts/psram_flash.ld +++ b/examples/platform/bouffalolab/bl702/ldscripts/psram_flash.ld @@ -3,16 +3,16 @@ OUTPUT_ARCH( "riscv" ) ENTRY( bl702_start ) __EM_SIZE = DEFINED(ble_controller_init) ? 8K : 0K; -__SHA_LINK_CFG_SIZE = DEFINED(mbedtls_sha256_init) ? 72 : 0; +__OCRAM_BSS_REGION_SIZE = 12K; __CACHE_SIZE = DEFINED(__CACHE_SIZE) ? __CACHE_SIZE : 16K; __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; MEMORY { flash (rxai!w) : ORIGIN = 0x23000000, LENGTH = (2M) - tcm_ocram (wxa) : ORIGIN = 0x42010000 + __CACHE_SIZE, LENGTH = (64K - __CACHE_SIZE + 64K - __EM_SIZE - __stack_size - __SHA_LINK_CFG_SIZE) - sha_ocram (wxa) : ORIGIN = ORIGIN(tcm_ocram) + LENGTH(tcm_ocram), LENGTH = __SHA_LINK_CFG_SIZE - sys_stack (wxa) : ORIGIN = ORIGIN(tcm_ocram) + LENGTH(tcm_ocram) + __SHA_LINK_CFG_SIZE, LENGTH = __stack_size + tcm_ocram (wxa) : ORIGIN = 0x42010000 + __CACHE_SIZE, LENGTH = (64K - __CACHE_SIZE + 64K - __OCRAM_BSS_REGION_SIZE - __stack_size - __EM_SIZE) + ocram_bss (wxa) : ORIGIN = ORIGIN(tcm_ocram) + LENGTH(tcm_ocram), LENGTH = __OCRAM_BSS_REGION_SIZE + sys_stack (wxa) : ORIGIN = ORIGIN(tcm_ocram) + LENGTH(tcm_ocram) + __OCRAM_BSS_REGION_SIZE, LENGTH = __stack_size hbnram (wxa) : ORIGIN = 0x40010000, LENGTH = (4K) psram (wxa) : ORIGIN = 0x26000000, LENGTH = (2M) } @@ -207,6 +207,21 @@ SECTIONS PROVIDE ( __boot2_flashCfg_end = . ); } >tcm_ocram + .ocram_bss (NOLOAD) : + { + PROVIDE( __ocram_bss_start = ADDR(.ocram_bss) ); + PROVIDE( __ocram_bss_end = ADDR(.ocram_bss) + SIZEOF(.ocram_bss) ); + + *libCHIP.a:BL702.PlatformManagerImpl.cpp.o(.sbss.* .bss.* COMMON) + . = ALIGN(4); + *(.sha_ocram*) + + } > ocram_bss + + . = ALIGN(4); + PROVIDE( _heap2_start = .); + PROVIDE( _heap2_size = ADDR(.stack) - _heap2_start ); + .bss_psram (NOLOAD) : { PROVIDE( __bss_psram_start = ADDR(.bss_psram) ); @@ -290,26 +305,8 @@ SECTIONS . = ALIGN(8); PROVIDE( _heap_start = . ); - PROVIDE( _heap_size = ADDR(.stack) - _heap_start ); - - PROVIDE( _heap2_start = 0 ); - PROVIDE( _heap2_size = 0 ); - - .psram (NOLOAD) : - { - *(.wifi_ram*) - . = ALIGN(16); - } > psram + PROVIDE( _heap_size = ADDR(.ocram_bss) - _heap_start ); - . = ALIGN(8); - PROVIDE( _heap3_start = .); - PROVIDE( _heap3_size = ORIGIN(psram) + LENGTH(psram) - _heap3_start ); - - .sha_ocram (NOLOAD) : - { - *(.sha_ocram*) - } > sha_ocram - .stack (NOLOAD) : { PROVIDE ( _sp_base = . ); diff --git a/examples/platform/bouffalolab/bl702l/flash_config/partition_cfg_2M.toml b/examples/platform/bouffalolab/bl702l/flash_config/partition_cfg_2M.toml index f6a22deaf30a27..8964d3dc83da77 100644 --- a/examples/platform/bouffalolab/bl702l/flash_config/partition_cfg_2M.toml +++ b/examples/platform/bouffalolab/bl702l/flash_config/partition_cfg_2M.toml @@ -10,7 +10,7 @@ device = 0 address0 = 0x3000 size0 = 0x12b000 address1 = 0x12e000 -size1 = 0xC9000 +size1 = 0xC8000 # compressed image must set len,normal image can left it to 0 len = 0 activeindex = 0 @@ -21,7 +21,7 @@ type = 1 name = "mfg" device = 0 address0 = 0x12A000 -size0 = 0xC9000 +size0 = 0xC8000 address1 = 0 size1 = 0 # compressed image must set len,normal image can left it to 0 @@ -33,8 +33,8 @@ age = 0 type = 2 name = "PSM" device = 0 -address0 = 0x1F7000 -size0 = 0x4000 +address0 = 0x1F2000 +size0 = 0x8000 address1 = 0 size1 = 0 # compressed image must set len,normal image can left it to 0 @@ -46,7 +46,7 @@ age = 0 type = 3 name = "media" device = 0 -address0 = 0x1FB000 +address0 = 0x1FA000 size0 = 0x4000 address1 = 0 size1 = 0 @@ -57,6 +57,19 @@ age = 0 [[pt_entry]] type = 4 +name = "MFD" +device = 0 +address0 = 0x1FE000 +size0 = 0x1000 +address1 = 0 +size1 = 0 +# compressed image must set len,normal image can left it to 0 +len = 0 +activeindex = 0 +age = 0 + +[[pt_entry]] +type = 5 name = "factory" device = 0 address0 = 0x1FF000 diff --git a/examples/platform/bouffalolab/common/iot_sdk/platform_port.c b/examples/platform/bouffalolab/common/iot_sdk/platform_port.c index 9ffd48ec10811b..472615ac33cd8b 100644 --- a/examples/platform/bouffalolab/common/iot_sdk/platform_port.c +++ b/examples/platform/bouffalolab/common/iot_sdk/platform_port.c @@ -250,9 +250,12 @@ static const HeapRegion_t xHeapRegions[] = { { NULL, 0 } /* Terminates the array. */ }; #elif BL702_ENABLE +extern uint8_t _heap2_start; +extern uint8_t _heap2_size; // @suppress("Type cannot be resolved") static const HeapRegion_t xHeapRegions[] = { - { &_heap_start, (size_t) &_heap_size }, // set on runtime - { NULL, 0 } /* Terminates the array. */ + { &_heap_start, (size_t) &_heap_size }, // set on runtime + { &_heap2_start, (size_t) &_heap2_size }, // set on runtime + { NULL, 0 } /* Terminates the array. */ }; #elif BL702L_ENABLE static const HeapRegion_t xHeapRegions[] = { @@ -338,6 +341,14 @@ void setup_heap() memcpy((void *) &_rom_data_run, (void *) &_rom_data_load, (size_t) &_rom_data_size); #endif +#if BL702_ENABLE + extern uint8_t __ocram_bss_start[], __ocram_bss_end[]; + if (NULL != __ocram_bss_start && NULL != __ocram_bss_end && __ocram_bss_end > __ocram_bss_start) + { + memset(__ocram_bss_start, 0, __ocram_bss_end - __ocram_bss_start); + } +#endif + vPortDefineHeapRegions(xHeapRegions); #ifdef CFG_USE_PSRAM @@ -394,6 +405,7 @@ void platform_port_init(void) #if CONFIG_ENABLE_CHIP_SHELL || PW_RPC_ENABLED uartInit(); #endif + #ifdef SYS_AOS_LOOP_ENABLE aos_loop_start(); #else diff --git a/examples/platform/bouffalolab/common/plat/platform.cpp b/examples/platform/bouffalolab/common/plat/platform.cpp index 97e3a07621b093..a9dee08583cc56 100644 --- a/examples/platform/bouffalolab/common/plat/platform.cpp +++ b/examples/platform/bouffalolab/common/plat/platform.cpp @@ -42,7 +42,7 @@ #include #endif -#if CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE || defined(CONFIG_BOUFFALOLAB_FACTORY_DATA_TEST) +#if CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE || CONFIG_BOUFFALOLAB_FACTORY_DATA_TEST #include #endif @@ -87,7 +87,7 @@ chip::app::Clusters::NetworkCommissioning::Instance } #endif -#if CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE || defined(CONFIG_BOUFFALOLAB_FACTORY_DATA_TEST) +#if CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE || CONFIG_BOUFFALOLAB_FACTORY_DATA_TEST namespace { FactoryDataProvider sFactoryDataProvider; } @@ -168,6 +168,9 @@ void ChipEventHandler(const ChipDeviceEvent * event, intptr_t arg) CHIP_ERROR PlatformManagerImpl::PlatformInit(void) { chip::RendezvousInformationFlags rendezvousMode(chip::RendezvousInformationFlag::kOnNetwork); +#if CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE || CONFIG_BOUFFALOLAB_FACTORY_DATA_TEST + CHIP_ERROR retFactoryData = sFactoryDataProvider.Init(); +#endif #if PW_RPC_ENABLED PigweedLogger::pw_init(); @@ -206,8 +209,8 @@ CHIP_ERROR PlatformManagerImpl::PlatformInit(void) #endif // Initialize device attestation config -#if CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE || defined(CONFIG_BOUFFALOLAB_FACTORY_DATA_TEST) - if (CHIP_NO_ERROR == sFactoryDataProvider.Init()) +#if CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE || CONFIG_BOUFFALOLAB_FACTORY_DATA_TEST + if (CHIP_NO_ERROR == retFactoryData) { SetDeviceInstanceInfoProvider(&sFactoryDataProvider); SetDeviceAttestationCredentialsProvider(&sFactoryDataProvider); diff --git a/scripts/build/builders/bouffalolab.py b/scripts/build/builders/bouffalolab.py index 63777d1d9f227f..f6424e977b3d56 100644 --- a/scripts/build/builders/bouffalolab.py +++ b/scripts/build/builders/bouffalolab.py @@ -101,7 +101,7 @@ def __init__(self, elif "BL70" in module_type: bouffalo_chip = 'bl702' else: - raise Exception("module_type %s is not supported" % module_type) + raise Exception(f"module_type {module_type} is not supported") super(BouffalolabBuilder, self).__init__( root=os.path.join(root, 'examples', @@ -114,15 +114,15 @@ def __init__(self, self.enable_frame_ptr = enable_frame_ptr toolchain = os.path.join(root, os.path.split(os.path.realpath(__file__))[0], '../../../config/bouffalolab/toolchain') - toolchain = 'custom_toolchain="{}:riscv_gcc"'.format(toolchain) + toolchain = f'custom_toolchain="{toolchain}:riscv_gcc"' if toolchain: self.argsOpt.append(toolchain) self.app = app self.board = board - self.argsOpt.append('board=\"{}\"'.format(self.board.GnArgName())) - self.argsOpt.append('baudrate=\"{}\"'.format(baudrate)) + self.argsOpt.append(f'board="{self.board.GnArgName()}"') + self.argsOpt.append(f'baudrate="{baudrate}"') if not (enable_wifi or enable_thread or enable_ethernet): # decide default connectivity for each chip @@ -134,44 +134,44 @@ def __init__(self, enable_wifi, enable_thread, enable_ethernet = False, True, False if (enable_ethernet or enable_wifi) and enable_thread: - raise Exception('Currently, Thread cannot be enabled with Wi-Fi or Ethernet') + raise Exception('Currently, Thread can NOT be enabled with Wi-Fi or Ethernet') + + if enable_thread: + chip_mdns = "platform" + elif enable_ethernet or enable_wifi: + chip_mdns = "minimal" # hardware connectivity support check if bouffalo_chip == "bl602": if enable_ethernet or enable_thread: - raise Exception('SoC %s doesn\'t support connectivity Ethernet/Thread.' % bouffalo_chip) - + raise Exception(f"SoC {bouffalo_chip} does NOT support connectivity Ethernet/Thread.") elif bouffalo_chip == "bl702": - self.argsOpt.append('module_type=\"{}\"'.format(module_type)) + self.argsOpt.append(f'module_type="{module_type}"') if board != BouffalolabBoard.BL706DK: if enable_ethernet or enable_wifi: - raise Exception('Board %s doesn\'t support connectivity Ethernet/Wi-Fi.' % board) - + raise Exception(f"Board {self.board.GnArgName()} does NOT support connectivity Ethernet/Wi-Fi.") elif bouffalo_chip == "bl702l": if enable_ethernet or enable_wifi: - raise Exception('SoC %s doesn\'t support connectivity Ethernet/Wi-Fi currently.' % bouffalo_chip) + raise Exception(f"SoC {bouffalo_chip} does NOT support connectivity Ethernet/Wi-Fi currently.") - self.argsOpt.append('chip_enable_ethernet={}'.format(str(enable_ethernet).lower())) - self.argsOpt.append('chip_enable_wifi={}'.format(str(enable_wifi).lower())) - self.argsOpt.append('chip_enable_openthread={}'.format(str(enable_thread).lower())) + self.argsOpt.append(f'chip_enable_ethernet={str(enable_ethernet).lower()}') + self.argsOpt.append(f'chip_enable_wifi={str(enable_wifi).lower()}') + self.argsOpt.append(f'chip_enable_openthread={str(enable_thread).lower()}') # for enable_ethernet, do not need ble for commissioning - self.argsOpt.append('chip_config_network_layer_ble={}'.format(str(enable_wifi or enable_thread)).lower()) + self.argsOpt.append(f'chip_config_network_layer_ble={str(enable_wifi or enable_thread).lower()}') - if enable_ethernet or enable_wifi: - self.argsOpt.append('chip_mdns="minimal"') - self.argsOpt.append('chip_inet_config_enable_ipv4=true') + self.argsOpt.append(f'chip_mdns="{chip_mdns}"') + self.argsOpt.append(f'chip_inet_config_enable_ipv4={str(enable_ethernet or enable_wifi).lower()}') if enable_thread: - self.argsOpt.append('chip_mdns="platform"') - self.argsOpt.append('chip_inet_config_enable_ipv4=false') - self.argsOpt.append('openthread_project_core_config_file="{}-openthread-core-bl-config.h"'.format(bouffalo_chip)) + self.argsOpt.append(f'openthread_project_core_config_file="{bouffalo_chip}-openthread-core-bl-config.h"') if enable_cdc: if bouffalo_chip != "bl702": - raise Exception('Chip %s does NOT support USB CDC' % bouffalo_chip) + raise Exception(f'SoC {bouffalo_chip} does NOT support USB CDC') if enable_ethernet: - raise Exception('BL706 Ethernet does NOT support USB CDC') + raise Exception(f'SoC {bouffalo_chip} can NOT have both of USB CDC and Ethernet functions together.') self.argsOpt.append('enable_cdc_module=true') @@ -188,20 +188,13 @@ def __init__(self, self.argsOpt.append('chip_enable_rotating_device_id=true') if BouffalolabMfd.MFD_DISABLE != function_mfd: - if bouffalo_chip != "bl602": - raise Exception('Only BL602 support matter factory data feature currently.') - if BouffalolabMfd.MFD_RELEASE == function_mfd: self.argsOpt.append("chip_enable_factory_data=true") elif BouffalolabMfd.MFD_TEST == function_mfd: self.argsOpt.append("chip_enable_factory_data_test=true") - if enable_frame_ptr: - self.argsOpt.append("enable_debug_frame_ptr=true") - else: - self.argsOpt.append("enable_debug_frame_ptr=false") - - self.argsOpt.append("enable_heap_monitoring={}".format(str(enable_heap_monitoring).lower())) + self.argsOpt.append(f"enable_debug_frame_ptr={str(enable_frame_ptr).lower()}") + self.argsOpt.append(f"enable_heap_monitoring={str(enable_heap_monitoring).lower()}") try: self.argsOpt.append('bouffalolab_sdk_root="%s"' % os.environ['BOUFFALOLAB_SDK_ROOT']) @@ -221,7 +214,8 @@ def print_enviroment_error(self): def GnBuildArgs(self): if self.enable_frame_ptr: - return self.argsOpt + ["debug_output_file=\"{}\"".format(os.path.join(self.output_dir, '%s.out' % self.app.AppNamePrefix(self.chip_name)))] + debug_output_file = os.path.join(self.output_dir, '%s.out' % self.app.AppNamePrefix(self.chip_name)) + return self.argsOpt + [f'debug_output_file="{debug_output_file}"'] else: return self.argsOpt diff --git a/src/platform/bouffalolab/BL702/BUILD.gn b/src/platform/bouffalolab/BL702/BUILD.gn index ae27e225df6b01..e5e71e909afc35 100644 --- a/src/platform/bouffalolab/BL702/BUILD.gn +++ b/src/platform/bouffalolab/BL702/BUILD.gn @@ -20,7 +20,6 @@ import("${chip_root}/src/platform/device.gni") import("${chip_root}/src/platform/bouffalolab/common/args.gni") assert(chip_device_platform == "bl702") -assert(chip_enable_factory_data == false) if (chip_enable_openthread) { import("//build_overrides/openthread.gni") diff --git a/src/platform/bouffalolab/BL702L/BUILD.gn b/src/platform/bouffalolab/BL702L/BUILD.gn index ba0e55b4f65a4e..691c46b8d84069 100644 --- a/src/platform/bouffalolab/BL702L/BUILD.gn +++ b/src/platform/bouffalolab/BL702L/BUILD.gn @@ -20,7 +20,6 @@ import("${chip_root}/src/platform/device.gni") import("${chip_root}/src/platform/bouffalolab/common/args.gni") assert(chip_device_platform == "bl702l") -assert(chip_enable_factory_data == false) if (chip_enable_openthread) { import("//build_overrides/openthread.gni") diff --git a/src/platform/bouffalolab/common/CHIPDevicePlatformConfig.h b/src/platform/bouffalolab/common/CHIPDevicePlatformConfig.h index 267595b65e794c..77ccda53b57d16 100644 --- a/src/platform/bouffalolab/common/CHIPDevicePlatformConfig.h +++ b/src/platform/bouffalolab/common/CHIPDevicePlatformConfig.h @@ -47,3 +47,11 @@ #ifndef CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE #define CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE 0 #endif + +#if CHIP_DEVICE_LAYER_TARGET_BL602 +#define CHIP_CONFIG_FREERTOS_USE_STATIC_TASK 1 +#define CHIP_CONFIG_FREERTOS_USE_STATIC_SEMAPHORE 1 +#define CHIP_CONFIG_FREERTOS_USE_STATIC_QUEUE 1 +#elif CHIP_DEVICE_LAYER_TARGET_BL702 +#define CHIP_CONFIG_FREERTOS_USE_STATIC_TASK 1 +#endif diff --git a/src/platform/bouffalolab/common/FactoryDataProvider.cpp b/src/platform/bouffalolab/common/FactoryDataProvider.cpp index 857712fd1a5c27..128fd1676d83f8 100644 --- a/src/platform/bouffalolab/common/FactoryDataProvider.cpp +++ b/src/platform/bouffalolab/common/FactoryDataProvider.cpp @@ -682,28 +682,5 @@ CHIP_ERROR FactoryDataProvider::GetRotatingDeviceIdUniqueId(MutableByteSpan & un #endif } -extern "C" bool spake2pUtils_test(uint32_t aIt, uint8_t * aSalt, uint32_t aSaltLen, uint8_t * aSaltVerifier, - uint32_t * pSaltVerifierLen, uint32_t pincode) -{ - chip::Crypto::Spake2pVerifier verifier; - ByteSpan salt(aSalt, aSaltLen); - chip::MutableByteSpan serializedVerifierSpan(aSaltVerifier, *pSaltVerifierLen); - - VerifyOrReturnValue(aIt >= chip::Crypto::kSpake2p_Min_PBKDF_Iterations && aIt <= chip::Crypto::kSpake2p_Max_PBKDF_Iterations, - false); - VerifyOrReturnValue(aSalt && aSaltLen >= chip::Crypto::kSpake2p_Min_PBKDF_Salt_Length && - aSaltLen <= chip::Crypto::kSpake2p_Max_PBKDF_Salt_Length, - false); - VerifyOrReturnValue(aSaltVerifier && *pSaltVerifierLen >= chip::Crypto::kSpake2p_VerifierSerialized_Length, false); - - VerifyOrReturnValue(CHIP_NO_ERROR == verifier.Generate(aIt, salt, pincode), false); - - VerifyOrReturnValue(CHIP_NO_ERROR == verifier.Serialize(serializedVerifierSpan), false); - - *pSaltVerifierLen = serializedVerifierSpan.size(); - - return true; -} - } // namespace DeviceLayer } // namespace chip diff --git a/third_party/bouffalolab/bl602/bl_iot_sdk.gni b/third_party/bouffalolab/bl602/bl_iot_sdk.gni index 1a7cb6b5f9f13d..a66384086278ac 100644 --- a/third_party/bouffalolab/bl602/bl_iot_sdk.gni +++ b/third_party/bouffalolab/bl602/bl_iot_sdk.gni @@ -77,6 +77,11 @@ template("bl_iot_sdk") { "${bl_iot_sdk_root}/components/platform/soc/bl602/bl602/evb/src/strntoumax.c", ] cflags_c = [ "-Wno-format-truncation" ] + + configs += [ + ":${sdk_target_name}_config", + ":${sdk_target_name}_config_freertos", + ] } config("${sdk_target_name}_config_BSP_Driver") { @@ -274,6 +279,7 @@ template("bl_iot_sdk") { "-Wno-stringop-overflow", "-Wno-format-truncation", "-Wno-unused-variable", + "-Wno-array-bounds", ] configs += [ ":${sdk_target_name}_config_wifi", @@ -943,9 +949,16 @@ template("bl_iot_sdk") { } source_set("${sdk_target_name}_factory_data") { - libs = [ "${bl_iot_sdk_root}/components/network/matter/matter_factory_data/lib/libmatter_factory_data.a" ] - - configs += [ ":${sdk_target_name}_config" ] + sources = [ + "${bl_iot_sdk_root}/components/network/matter/matter_factory_data/efuse_slot.c", + "${bl_iot_sdk_root}/components/network/matter/matter_factory_data/matter_factory_data.c", + ] + configs += [ + ":${sdk_target_name}_config", + ":${sdk_target_name}_config_freertos", + ":${sdk_target_name}_config_BSP_Driver", + ":${sdk_target_name}_config_hosal", + ] public_configs = [ ":${sdk_target_name}_config_factory_data" ] } diff --git a/third_party/bouffalolab/bl702/bl_iot_sdk.gni b/third_party/bouffalolab/bl702/bl_iot_sdk.gni index 5775b982b81332..755179b3eb8e06 100644 --- a/third_party/bouffalolab/bl702/bl_iot_sdk.gni +++ b/third_party/bouffalolab/bl702/bl_iot_sdk.gni @@ -931,11 +931,30 @@ template("bl_iot_sdk") { ] } + config("${sdk_target_name}_config_factory_data") { + include_dirs = [ "${bl_iot_sdk_root}/components/network/matter/matter_factory_data/include" ] + } + + source_set("${sdk_target_name}_factory_data") { + sources = [ + "${bl_iot_sdk_root}/components/network/matter/matter_factory_data/efuse_slot.c", + "${bl_iot_sdk_root}/components/network/matter/matter_factory_data/matter_factory_data.c", + ] + configs += [ + ":${sdk_target_name}_config", + ":${sdk_target_name}_config_freertos", + ":${sdk_target_name}_config_BSP_Driver", + ":${sdk_target_name}_config_hosal", + ] + public_configs = [ ":${sdk_target_name}_config_factory_data" ] + } + group(sdk_target_name) { public_deps = [ ":${sdk_target_name}_BSP_Driver", ":${sdk_target_name}_bl702_freertos", ":${sdk_target_name}_ble", + ":${sdk_target_name}_factory_data", ":${sdk_target_name}_fs", ":${sdk_target_name}_hosal", ":${sdk_target_name}_libc", diff --git a/third_party/bouffalolab/bl702l/bl_iot_sdk.gni b/third_party/bouffalolab/bl702l/bl_iot_sdk.gni index 3ef1e51035e88a..f0742a0fb7c679 100644 --- a/third_party/bouffalolab/bl702l/bl_iot_sdk.gni +++ b/third_party/bouffalolab/bl702l/bl_iot_sdk.gni @@ -184,6 +184,7 @@ template("bl_iot_sdk") { "${bl_iot_sdk_root}/components/platform/hosal/sec_common", ] + defines = [ "BL702L_PT_ENTRY_MAX=6" ] cflags_cc = [ "-Wno-literal-suffix" ] } @@ -662,6 +663,7 @@ template("bl_iot_sdk") { "${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/ctr_drbg.c", "${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/ecdh.c", "${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/ecdsa.c", + "${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/ecjpake.c", "${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/ecp.c", "${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/ecp_curves.c", "${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/entropy.c", @@ -678,7 +680,15 @@ template("bl_iot_sdk") { "${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/platform_util.c", "${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/sha256.c", "${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/sha512.c", + "${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/ssl_ciphersuites.c", + "${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/ssl_cli.c", + "${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/ssl_cookie.c", + "${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/ssl_msg.c", + "${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/ssl_srv.c", + "${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/ssl_tls.c", + "${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/x509.c", "${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/x509_create.c", + "${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/x509_crt.c", "${bl_iot_sdk_root}/components/security/mbedtls_lts/mbedtls/library/x509write_csr.c", ] @@ -697,9 +707,28 @@ template("bl_iot_sdk") { ] } + config("${sdk_target_name}_config_factory_data") { + include_dirs = [ "${bl_iot_sdk_root}/components/network/matter/matter_factory_data/include" ] + } + + source_set("${sdk_target_name}_factory_data") { + sources = [ + "${bl_iot_sdk_root}/components/network/matter/matter_factory_data/efuse_slot.c", + "${bl_iot_sdk_root}/components/network/matter/matter_factory_data/matter_factory_data.c", + ] + configs += [ + ":${sdk_target_name}_config", + ":${sdk_target_name}_config_bl702l_rom_a0", + ":${sdk_target_name}_config_BSP_Driver", + ":${sdk_target_name}_config_hosal", + ] + public_configs = [ ":${sdk_target_name}_config_factory_data" ] + } + group(sdk_target_name) { public_deps = [ ":${sdk_target_name}_bl702l_rom_a0", + ":${sdk_target_name}_factory_data", ":${sdk_target_name}_fs", ":${sdk_target_name}_hosal", ":${sdk_target_name}_libc",